Skip to content
kandown
GitHubnpm

AI agents

View raw

Launching agents

Handing a task to Claude Code, Codex, Gemini CLI, Goose, Aider or OpenCode — and wiring your own tooling through the agent hook.

From the board

Select a task in the terminal UI and press a. Kandown assembles the task context and launches the agent you choose on it.

AgentBinaryLaunch mode
Claude Codeclaudeinteractive session
OpenAI Codexcodexinteractive session
Gemini CLIgemini-p initial prompt
Goosegooserun --text, non-interactive
Aideraider--message initial prompt
OpenCodeopencodeTUI, context written to /tmp

Each entry launches differently because each CLI expects a different shape of input — an interactive session where that is the natural mode, a one-shot prompt where it is not. Only agents whose binary is on your PATH are offered.

Your own tooling

Anything else — an IDE, a bot, an internal queue, a webhook into your own orchestrator — connects through the agent hook. Press g in the terminal UI (or use Send to Agent in the web board) and Kandown posts the task to your endpoint.

export KANDOWN_AGENT_HOOK_URL="https://example.internal/agents/kandown"
export KANDOWN_AGENT_HOOK_LABEL="Send to Orchestrator"
export KANDOWN_AGENT_HOOK_HEADERS='{"Authorization":"Bearer $TOKEN"}'
VariableEffect
KANDOWN_AGENT_HOOK_URLEndpoint that receives the task
KANDOWN_AGENT_HOOK_LABELCustom label for the button
KANDOWN_AGENT_HOOK_HEADERSJSON object of extra headers

Careful

The hook is the one part of Kandown that makes an outbound network request, and it does so only when you press the key. Point it somewhere you trust — the task body goes with it.

In a loop, without the UI

The board does not have to be involved at all. kandown work plus the task commands are enough to drive an agent from a script:

#!/usr/bin/env bash
set -euo pipefail

CONTEXT=$(kandown work)
NEXT=$(kandown list --json | jq -r '[.[] | select(.status=="Todo")][0].id // empty')

[ -z "$NEXT" ] && { echo "nothing actionable" >&2; exit 0; }

kandown move "$NEXT" "In progress"
claude -p "$CONTEXT

Work on task $NEXT. Update the task file as you go."

Two properties make this reliable: task commands never touch the network, and stdout is data-only, so the $( … ) captures above hold exactly what you expect. See the output contract.

Edit this page on GitHub →