| name | claude-code-dispatch |
| description | Dispatch development tasks to Claude Code with automatic callback on completion. Supports Agent Teams (multi-agent parallel dev with dedicated Testing Agent), cost controls (--max-budget-usd), model fallback, git worktree isolation, custom subagents via --agents JSON, and MCP server integration. Use when: (1) dispatching a coding task to Claude Code and wanting automatic Telegram notification on completion, (2) running Agent Teams for parallel dev+test workflows, (3) needing zero-polling task execution with Stop Hook callback, (4) the user says 'use Claude Code to build/develop/create X', (5) the user asks to dispatch or run a Claude Code task. THIS IS THE DEFAULT for any 'build/develop/create a project' request ā prefer this over claude-code-clawdbot for anything that takes >2 min or needs background execution.
|
Claude Code Dispatch Skill
Dispatch development tasks to Claude Code with automatic notification on
completion. Zero polling, zero token waste.
Architecture
dispatch.sh
ā write task-meta.json
ā launch Claude Code via claude_code_run.py (PTY wrapper)
ā [Agent Teams: --agents JSON defines Testing Agent + custom subagents]
ā Claude Code finishes ā Stop/TaskCompleted hook fires automatically
ā notify-agi.sh reads meta + output
ā writes latest.json
ā sends Telegram notification (group + callback)
ā writes pending-wake.json (heartbeat fallback)
Quick Reference
Basic dispatch
ā ļø Always use nohup + background (&) ā dispatch runs until done.
nohup bash scripts/dispatch.sh \
-p "Build a Python REST API with FastAPI" \
-n "my-api" \
-g "-5006066016" \
--permission-mode bypassPermissions \
--workdir /home/ubuntu/projects/my-api \
> /tmp/dispatch-my-api.log 2>&1 &
With Agent Teams
nohup bash scripts/dispatch.sh \
-p "Build a full-stack app with React + Express" \
-n "fullstack-app" \
--agent-teams \
--permission-mode bypassPermissions \
--workdir /home/ubuntu/projects/fullstack-app \
> /tmp/dispatch-fullstack.log 2>&1 &
When --agent-teams is passed without --agents-json, a default Testing Agent
is auto-defined via the --agents CLI flag (structured JSON, not prompt injection).
With cost controls
nohup bash scripts/dispatch.sh \
-p "Refactor the database layer" \
-n "db-refactor" \
--max-budget-usd 5.00 \
--max-turns 50 \
--fallback-model sonnet \
--permission-mode bypassPermissions \
--workdir /home/ubuntu/projects/my-app \
> /tmp/dispatch-refactor.log 2>&1 &
With custom subagents
nohup bash scripts/dispatch.sh \
-p "Build CLI tool" \
-n "cli-tool" \
--agent-teams \
--agents-json '{"security-reviewer":{"description":"Security expert","prompt":"Review for vulnerabilities","tools":["Read","Grep","Glob"],"model":"opus"}}' \
--permission-mode bypassPermissions \
--workdir /home/ubuntu/projects/cli-tool \
> /tmp/dispatch-cli.log 2>&1 &
With git worktree isolation
nohup bash scripts/dispatch.sh \
-p "Implement feature X" \
-n "feature-x" \
--worktree feature-x \
--permission-mode bypassPermissions \
--workdir /home/ubuntu/projects/my-app \
> /tmp/dispatch-feature.log 2>&1 &
All Parameters
| Param | Short | Description |
|---|
--prompt | -p | Task description (required*) |
--prompt-file | | Read prompt from file (required*) |
--name | -n | Task name for tracking |
--group | -g | Telegram group ID for notifications |
--workdir | -w | Working directory |
--agent-teams | | Enable Agent Teams mode |
--agents-json | | Custom subagent definitions (JSON) |
--teammate-mode | | Display: auto / in-process / tmux |
--permission-mode | | bypassPermissions / plan / acceptEdits / default |
--allowed-tools | | Tool allowlist |
--disallowed-tools | | Tool denylist |
--model | | Model override (sonnet/opus/haiku/full name) |
--fallback-model | | Auto-fallback when primary is overloaded |
--max-budget-usd | | Maximum dollar spend before stopping |
--max-turns | | Maximum agentic turns |
--worktree | | Git worktree name for isolation |
--no-session-persistence | | Don't save session to disk |
--append-system-prompt | | Append text to system prompt |
--append-system-prompt-file | | Append system prompt from file |
--mcp-config | | Load MCP servers from JSON file |
--verbose | | Enable verbose logging |
--callback-group | | Callback to dispatching agent's group |
--callback-dm | | DM callback user ID |
--callback-account | | DM callback bot account |
--session | -s | Callback session key |
* One of --prompt or --prompt-file is required.
Hook Setup
See references/hook-setup.md for full hook
configuration. The skill uses Stop, TaskCompleted, and SessionEnd hooks with
the notify-agi.sh script. HTTP hooks are also supported as an alternative.
Prompt Tips
See references/prompt-guide.md for examples
and best practices, including cost control, Agent Teams, worktree isolation,
custom subagents, and MCP integration.
Debugging
tail -f data/claude-code-results/hook.log
cat data/claude-code-results/latest.json | jq .
cat data/claude-code-results/task-meta.json | jq .
openclaw message send --channel telegram --target "-5006066016" --message "test"
tail -f /tmp/dispatch-*.log
Gotchas
- Must use PTY wrapper ā Direct
claude -p can hang in exec environments
- Hook fires twice ā Stop + SessionEnd both trigger;
.hook-lock deduplicates (30s window)
- Hook stdin is empty in PTY ā Output read from
task-output.txt, not stdin
- tee pipe race ā Hook sleeps 1s for pipe flush before reading output
- Meta freshness ā Hook validates meta age (<2h) and session ID
- Agent Teams cost ā Use
--max-budget-usd to cap spend on multi-agent tasks
- Rate limits ā Claude Code has daily rate limits resetting at 11:00 UTC; check hook.log for "limit" messages