Coordinate dev team agents through shared JSON task files + AGI dispatch. AGI is the command center — agents never talk to each other directly.
Two modes:
code → test → docs → monitorAll commands use: python3 <skill-dir>/scripts/task_manager.py <command> [args]
Where <skill-dir> is the directory containing this SKILL.md.
CommandModeUsageDescriptioninitbothinit <project> -g "goal" [-m linear|dag]Create projectadddagadd <project> <task-id> -a <agent> -d <deps>Add task with depsstatusbothstatus <project> [--json]Show progressassignbothassign <project> <task> "desc"Set task descriptionupdatebothupdate <project> <task> <status>Change statusnextlinearnext <project> [--json]Get next stagereadydagready <project> [--json]Get all dispatchable tasksgraphdaggraph <project>Show dependency treelogbothlog <project> <task> "msg"Add log entryresultbothresult <project> <task> "output"Save outputresetbothreset <project> [task] [--all]Reset to pendinglistbothlistList all projects
pending — waiting for dispatchin-progress — agent is workingdone — stage completedfailed — stage failed (pipeline blocks)skipped — intentionally skippedbash
python3 scripts/task_manager.py init my-project \
-g "Build a REST API with tests and docs" \
-p "code-agent,test-agent,docs-agent,monitor-bot"
Default pipeline order: code-agent → test-agent → docs-agent → monitor-bot
bash
python3 scripts/task_manager.py assign my-project code-agent "Implement REST API with Flask: GET/POST/DELETE /items"
python3 scripts/task_manager.py assign my-project test-agent "Write pytest tests for all endpoints, target 90%+ coverage"
python3 scripts/task_manager.py assign my-project docs-agent "Write README.md with API docs, setup guide, examples"
python3 scripts/task_manager.py assign my-project monitor-bot "Verify code quality, check for security issues, validate deployment readiness"
For each stage, AGI follows this loop:
text
1. Check next stage: task_manager.py next <project> --json
2. Mark in-progress: task_manager.py update <project> <agent> in-progress
3. Dispatch agent: sessions_send(sessionKey="agent:<agent>:telegram:group:<id>", message=<task>)
4. Wait for reply (sessions_send returns the agent's response)
5. Save result: task_manager.py result <project> <agent> "<summary>"
6. Mark done: task_manager.py update <project> <agent> done
7. Repeat from 1 (currentStage auto-advances)
If an agent fails:
bash
python3 scripts/task_manager.py update my-project code-agent failed
python3 scripts/task_manager.py log my-project code-agent "Failed: syntax error in main.py"
To retry:
bash
python3 scripts/task_manager.py reset my-project code-agent
python3 scripts/task_manager.py update my-project code-agent in-progress
# Re-dispatch...
bash
python3 scripts/task_manager.py status my-project
Output:
text
📋 Project: my-project
🎯 Goal: Build a REST API with tests and docs
📊 Status: active
▶️ Current: test-agent
✅ code-agent: done
Task: Implement REST API with Flask
Output: Created /home/ubuntu/projects/my-project/app.py
🔄 test-agent: in-progress
Task: Write pytest tests for all endpoints
⬜ docs-agent: pending
⬜ monitor-bot: pending
Progress: [██░░] 2/4
AgentSession Keycode-agentagent:code-agent:telegram:group:-5189558203test-agentagent:test-agent:telegram:group:-5218382533docs-agentagent:docs-agent:telegram:group:-5253138320monitor-botagent:monitor-bot:telegram:group:-5193935559
When dispatching to an agent, include:
Example dispatch message:
text
Project: my-project
Goal: Build a REST API with tests and docs
Your task: Write pytest tests for all endpoints in /home/ubuntu/projects/my-project/app.py
Target: 90%+ coverage, test GET/POST/DELETE /items
Working directory: /home/ubuntu/projects/my-project/
Previous stage (code-agent) output: Created app.py with Flask REST API, 3 endpoints
⚠️ If an agent's session was first created via sessions_send, its deliveryContext is webchat, not telegram. Agent replies won't appear in the Telegram group.
Workaround: After getting the agent's reply via sessions_send, use the message tool to relay key results to the group:
text
message(action="send", channel="telegram", target="-5189558203", message="✅ code-agent 完成: Created app.py")
bash
python3 scripts/task_manager.py init my-project -m dag -g "Build REST API with parallel workstreams"
bash
TM="python3 scripts/task_manager.py"
# Root tasks (no deps — can run in parallel)
$TM add my-project design -a docs-agent --desc "Write API spec"
$TM add my-project scaffold -a code-agent --desc "Create project skeleton"
# Tasks with dependencies (blocked until deps are done)
$TM add my-project implement -a code-agent -d "design,scaffold" --desc "Implement API"
$TM add my-project write-tests -a test-agent -d "design" --desc "Write test cases from spec"
# Fan-in: depends on multiple tasks
$TM add my-project run-tests -a test-agent -d "implement,write-tests" --desc "Run all tests"
$TM add my-project write-docs -a docs-agent -d "implement" --desc "Write final docs"
# Final gate
$TM add my-project review -a monitor-bot -d "run-tests,write-docs" --desc "Final review"
bash
$TM graph my-project
text
├─ ⬜ design [docs-agent]
│ ├─ ⬜ implement [code-agent]
│ │ ├─ ⬜ run-tests [test-agent]
│ │ │ └─ ⬜ review [monitor-bot]
│ │ └─ ⬜ write-docs [docs-agent]
│ └─ ⬜ write-tests [test-agent]
└─ ⬜ scaffold [code-agent]
└─ ⬜ implement (↑ see above)
bash
$TM ready my-project # Shows all tasks whose deps are met
For each ready task, AGI follows this loop:
text
1. Get ready tasks: task_manager.py ready <project> --json
2. For each ready task (can dispatch in parallel):
a. Mark in-progress: task_manager.py update <project> <task> in-progress
b. Dispatch agent: sessions_send(sessionKey=..., message=<task + dep outputs>)
3. When agent replies:
a. Save result: task_manager.py result <project> <task> "<summary>"
b. Mark done: task_manager.py update <project> <task> done
c. Check newly unblocked tasks (printed automatically)
4. Repeat until all done
ready returns ALL tasks whose deps are satisfied — dispatch them simultaneouslyready --json includes depOutputs — previous stage results to pass to agentsadd rejects tasks that would create circular dependenciesgraph shows tree view with status icons and dedup markersbash
# Code + test only
python3 scripts/task_manager.py init quick-fix -g "Hotfix" -p "code-agent,test-agent"
# Docs first, then code
python3 scripts/task_manager.py init spec-driven -g "Spec-driven dev" -p "docs-agent,code-agent,test-agent"
bash
# Diamond pattern: 2 parallel branches merge for review
$TM init diamond -m dag -g "Parallel dev"
$TM add diamond code -a code-agent --desc "Write code"
$TM add diamond test -a test-agent --desc "Write tests"
$TM add diamond integrate -a code-agent -d "code,test" --desc "Integration"
$TM add diamond review -a monitor-bot -d "integrate" --desc "Final review"
Mode A (linear)Mode B (dag)WhenSequential tasks, simple flowsParallel workstreams, complex depsDispatchOne at a time, auto-advanceMultiple simultaneous, dep-drivenSetupinit -p agents (one command)init -m dag + add per taskBest forBug fixes, simple featuresLarge features, spec-driven dev
Task files: /home/ubuntu/clawd/data/team-tasks/<project>.json
In linear mode, the stage ID is the agent name (e.g., code-agent), not a numeric index like 1, 2, 3.
bash
# ❌ WRONG — will error "stage '1' not found"
python3 scripts/task_manager.py assign my-project 1 "Build API"
python3 scripts/task_manager.py update my-project 1 done
# ✅ CORRECT — use agent name as stage ID
python3 scripts/task_manager.py assign my-project code-agent "Build API"
python3 scripts/task_manager.py update my-project code-agent done
python3 scripts/task_manager.py result my-project code-agent "Created main.py"
This applies to all stage-referencing commands: assign, update, result, log, reset.
The pipeline order is defined by -p at init time (e.g., -p "code-agent,test-agent,docs-agent"), and next automatically advances through them in order — but you always reference stages by agent name.
rest-api-v2, bug-fix-auth, refactor-db (not project1)result before update done; this is the inter-agent contextlog is cheap; helps debug failed pipelinesreset --all for clean reruns; reset <stage> for targeted retry