AGI Farm
Interactive setup wizard that creates a fully working multi-agent AI team on OpenClaw. One command bootstraps agents, SOUL.md personas, comms infrastructure...
Description
name: agi-farm description: > Interactive setup wizard that creates a fully working multi-agent AI team on OpenClaw. One command bootstraps agents, SOUL.md personas, comms infrastructure (inboxes/outboxes/broadcast), cron jobs, auto-dispatcher (HITL + rate-limit backoff + dependency checking), and a portable GitHub bundle — all customized to team name, size (3/5/11 agents), domain, and frameworks (autogen/crewai/langgraph). Includes a React + SSE live ops dashboard with file-watcher (~350ms push latency) and persistent macOS LaunchAgent. Model-selection guidance built in. Commands: setup | status | rebuild | export | dashboard | dispatch
agi-farm
Builds a complete multi-agent AI team on OpenClaw. One wizard, full team.
Commands
| Command | What it does |
|---|---|
/agi-farm setup |
Full wizard — agents, workspace, crons, bundle, GitHub |
/agi-farm status |
Team health: agents, tasks, cron status |
/agi-farm rebuild |
Regenerate workspace from existing bundle (preserves edits) |
/agi-farm export |
Push bundle to GitHub |
/agi-farm dashboard |
Launch live ops room — see references/dashboard.md |
/agi-farm dispatch |
Run auto-dispatcher — see scripts/auto-dispatch.py |
/agi-farm setup
Ask one question at a time. Do not proceed until confirmed.
Step 1 — Team name
"What should we call your team? (e.g. NovaCorp, TradingDesk — default: MyTeam)"
Store as TEAM_NAME.
Step 2 — Orchestrator name
"What's your orchestrator's name? (default: Cooper)"
Store as ORCHESTRATOR_NAME.
Step 3 — Team size
"How many agents? 3 — Minimal: Orchestrator + Researcher + Builder 5 — Standard: adds QA + Content 11 — Full stack: complete AGI system (recommended)"
Store as PRESET.
Step 3.5 — Domain
"What domain? software / trading / research / general (default) / custom"
If custom: ask for one-phrase description. Store as DOMAIN.
Step 3.6 — Custom agents (PRESET 3 or 5 only)
"Add a custom agent? (yes/no, default: no)"
If yes, collect per agent: id, name, emoji, role, goal. Max 3 custom agents.
Append to roster in Step 7 with "template": "generic".
Step 4 — Frameworks
"Collaboration frameworks? autogen / crewai / langgraph / all / none"
Store as FRAMEWORKS list. all → ["autogen", "crewai", "langgraph"].
Step 5 — GitHub
"Create a GitHub repo for the bundle? yes / no"
Store as CREATE_GITHUB.
Step 6 — Confirm
Show summary, ask "Shall I proceed? (yes/no)". If no → restart Step 1.
Step 7 — Write team.json
mkdir -p ~/.openclaw/workspace/agi-farm-bundle/
openclaw agents list --json # use output to assign appropriate models per role
Use the openclaw agents list output to assign each agent a model appropriate for
its role. Write resolved model strings directly into the "model" fields.
Model selection cheat sheet (based on openclaw agents list --json output):
| Role | Recommended tier | Why |
|---|---|---|
| Orchestrator | High-capability (e.g. sonnet, opus) |
Needs broad reasoning, delegation judgment |
| Solution Architect / Researcher | High-capability | Deep analysis + design |
| Implementation Engineer | Mid-tier (e.g. glm-5, sonnet) |
Fast code gen; cost-efficiency matters |
| Debugger | High-capability (e.g. opus) |
Root-cause analysis benefits from deep reasoning |
| Business Analyst / Knowledge | Mid-high (e.g. gemini-2.0-pro-exp) |
Long-context research tasks |
| QA Engineer | Fast/cheap (e.g. glm-4.7-flash) |
High volume, pattern-matching checks |
| Content / Multimodal | Multimodal-capable (e.g. gemini-2.0-pro-exp) |
Vision + rich generation |
| R&D / Process Improvement | High-capability | Creative + structured experimentation |
Tip: assign
opusorsonnetto roles that make decisions; useflash/glm-4.7-flashfor high-frequency reviewers to manage cost.
3-agent roster:
{"team_name":"<TEAM_NAME>","orchestrator_name":"<ORCHESTRATOR_NAME>","preset":"3",
"domain":"<DOMAIN>","frameworks":<FRAMEWORKS_JSON>,"created_at":"<ISO_TIMESTAMP>",
"agents":[
{"id":"main", "name":"<ORCHESTRATOR_NAME>","emoji":"🦅","role":"Orchestrator", "goal":"Orchestrate the team, delegate tasks, synthesize results", "model":"<MODEL>","workspace":"."},
{"id":"researcher", "name":"Sage", "emoji":"🔮","role":"Researcher", "goal":"Research deeply and surface the insights that matter most", "model":"<MODEL>","workspace":"researcher"},
{"id":"builder", "name":"Forge", "emoji":"⚒️","role":"Builder", "goal":"Implement solutions cleanly and efficiently", "model":"<MODEL>","workspace":"builder"}
]}
5-agent: add to 3-agent roster:
{"id":"qa", "name":"Vigil", "emoji":"🛡️","role":"QA Engineer", "goal":"Ensure every output meets quality standards","model":"<MODEL>","workspace":"qa"},
{"id":"content","name":"Anchor","emoji":"⚓", "role":"Content Specialist","goal":"Craft clear content that communicates complex ideas simply","model":"<MODEL>","workspace":"content"}
11-agent roster:
[
{"id":"main", "name":"<ORCHESTRATOR_NAME>","emoji":"🦅","role":"Orchestrator", "goal":"Orchestrate specialists, delegate tasks, synthesize results", "model":"<MODEL>","workspace":"."},
{"id":"sage", "name":"Sage", "emoji":"🔮","role":"Solution Architect", "goal":"Design robust, scalable architectures", "model":"<MODEL>","workspace":"solution-architect"},
{"id":"forge", "name":"Forge", "emoji":"⚒️","role":"Implementation Engineer", "goal":"Implement clean, well-tested code efficiently", "model":"<MODEL>","workspace":"implementation-engineer"},
{"id":"pixel", "name":"Pixel", "emoji":"🐛","role":"Debugger", "goal":"Find the true root cause of any bug or failure", "model":"<MODEL>","workspace":"debugger"},
{"id":"vista", "name":"Vista", "emoji":"🔭","role":"Business Analyst", "goal":"Research deeply and surface the insights that matter most", "model":"<MODEL>","workspace":"business-analyst"},
{"id":"cipher","name":"Cipher", "emoji":"🔊","role":"Knowledge Curator", "goal":"Curate and surface knowledge so the team never forgets", "model":"<MODEL>","workspace":"knowledge-curator"},
{"id":"vigil", "name":"Vigil", "emoji":"🛡️","role":"QA Engineer", "goal":"Ensure every output meets quality standards", "model":"<MODEL>","workspace":"quality-assurance"},
{"id":"anchor","name":"Anchor", "emoji":"⚓", "role":"Content Specialist", "goal":"Craft clear content that communicates complex ideas simply", "model":"<MODEL>","workspace":"content-specialist"},
{"id":"lens", "name":"Lens", "emoji":"📡","role":"Multimodal Specialist", "goal":"Extract meaning from images, documents, and multimodal inputs", "model":"<MODEL>","workspace":"multimodal-specialist"},
{"id":"evolve","name":"Evolve", "emoji":"🔄","role":"Process Improvement Lead","goal":"Make the team better systematically through continuous improvement", "model":"<MODEL>","workspace":"process-improvement"},
{"id":"nova", "name":"Nova", "emoji":"🧪","role":"R&D Lead", "goal":"Turn hypotheses into proven capabilities through structured experimentation", "model":"<MODEL>","workspace":"r-and-d"}
]
Step 8 — Generate workspace files
python3 ~/.openclaw/skills/agi-farm/generate.py \
--team-json ~/.openclaw/workspace/agi-farm-bundle/team.json \
--output ~/.openclaw/workspace/ \
--all-agents --shared --bundle
Step 9 — Create OpenClaw agents
For each agent except main (skip if already exists):
openclaw agents add \
--agent <id> --name "<name>" --emoji "<emoji>" \
--model "<model>" \
--workspace "~/.openclaw/workspace/agents-workspaces/<workspace>"
Use agent["model"] from team.json directly.
Step 10 — Register cron jobs
python3 ~/.openclaw/skills/agi-farm/scripts/register-crons.py \
--team-json ~/.openclaw/workspace/agi-farm-bundle/team.json
Timezone is read automatically from OpenClaw config. Skips any cron that already exists.
Step 11 — Install frameworks
For each framework in FRAMEWORKS:
if [ ! -d ~/.openclaw/skills/<fw>-collab ]; then
TMP=$(mktemp -d)
git clone --depth 1 --filter=blob:none --sparse \
https://github.com/oabdelmaksoud/openclaw-skills.git "$TMP"
cd "$TMP" && git sparse-checkout set <fw>-collab
cp -r <fw>-collab ~/.openclaw/skills/ && rm -rf "$TMP"
fi
python3 ~/.openclaw/skills/<fw>-collab/build_agents.py --force 2>/dev/null || true
Step 12 — GitHub (if chosen)
cd ~/.openclaw/workspace/agi-farm-bundle
git init -b main && git add . && git commit -m "feat: <TEAM_NAME> AGI farm"
gh repo create agi-farm-<TEAM_NAME_LOWER> --public --source . --remote origin --push
Step 13 — Commit workspace
cd ~/.openclaw/workspace
git add -A && git commit -m "feat: <TEAM_NAME> AGI team — agi-farm setup complete"
Step 14 — Initialize registries + health check
# Write TASKS.json and AGENT_STATUS.json
python3 - << 'EOF'
import json
from pathlib import Path
ws = Path.home() / ".openclaw/workspace"
team = json.loads((ws / "agi-farm-bundle/team.json").read_text())
(ws / "TASKS.json").write_text("[]")
(ws / "AGENT_STATUS.json").write_text(json.dumps(
{a["id"]: {"status": "available", "name": a["name"]} for a in team["agents"]}, indent=2))
print("✅ registries written")
EOF
# Health check
AGENTS=$(openclaw agents list --json 2>/dev/null | python3 -c "import json,sys; print(len(json.load(sys.stdin)))" || echo 0)
CRONS=$(openclaw cron list 2>/dev/null | grep -c "<TEAM_NAME_LOWER>" || echo 0)
[ -d ~/.openclaw/workspace/comms/inboxes ] && echo "✅ comms OK" || echo "❌ comms missing"
[ -f ~/.openclaw/workspace/TASKS.json ] && echo "✅ TASKS.json OK" || echo "❌ TASKS.json missing"
echo "✅ Agents: $AGENTS | Crons: $CRONS"
Step 15 — Done
✅ <TEAM_NAME> AGI team is live!
Agents : <PRESET> (<AGENT_NAMES_LIST>)
Workspace: ~/.openclaw/workspace/
Bundle : ~/.openclaw/workspace/agi-farm-bundle/
GitHub : <URL if created>
Next: talk to <ORCHESTRATOR_NAME> · /agi-farm status · /agi-farm dashboard
/agi-farm status
openclaw agents list --json | python3 -c "
import json,sys
for a in json.load(sys.stdin):
print(f' {a.get(\"identityEmoji\",\"🤖\")} {a.get(\"identityName\",a[\"id\"])}: {a.get(\"model\",\"?\")}')
"
python3 -c "
import json
from pathlib import Path
ws = Path.home() / '.openclaw/workspace'
tasks = json.loads((ws/'TASKS.json').read_text()) if (ws/'TASKS.json').exists() else []
t = [t for t in tasks if isinstance(t,dict)]
print(f' Tasks: {len(t)} total · {sum(1 for x in t if x.get(\"status\")==\"pending\")} pending · {sum(1 for x in t if x.get(\"status\")==\"needs_human_decision\")} HITL')
"
openclaw cron list 2>/dev/null | head -15
/agi-farm rebuild
python3 ~/.openclaw/skills/agi-farm/generate.py \
--team-json ~/.openclaw/workspace/agi-farm-bundle/team.json \
--output ~/.openclaw/workspace/ \
--all-agents --shared --no-overwrite
--no-overwrite skips files that already exist, preserving manual edits.
Add --force (remove --no-overwrite) to overwrite everything.
/agi-farm export
cd ~/.openclaw/workspace/agi-farm-bundle
git add -A
git commit -m "export: $(date +%Y-%m-%d)" 2>/dev/null || echo "Nothing to commit"
git push 2>/dev/null || echo "No remote — run /agi-farm setup first"
/agi-farm dashboard
React + SSE ops room. File-watcher pushes live data to the browser in ~350ms on any workspace .json or .md change. Runs as a persistent macOS LaunchAgent — always on, auto-restarts on crash.
Architecture
dashboard.py ← Python HTTP server (SSE + static)
├── WorkspaceWatcher watchdog file-watcher, 250ms debounce
├── SlowDataCache background thread — caches `openclaw agents list`
│ and `openclaw cron list` every 30s (each takes ~1-2s)
├── Broadcaster thread-safe SSE fan-out to all connected clients
└── /api/stream SSE endpoint — pushes full snapshot on every file change
dashboard-react/ ← Vite + React 18 + Recharts frontend
dist/ ← production build (served by dashboard.py)
src/
hooks/useDashboard.js SSE hook — auto-reconnects on disconnect
components/
Header.jsx live badge, stats, clock
Nav.jsx tab switcher
tabs/
Overview.jsx stats, budget bar, SLA alerts, agent grid, broadcast preview
Agents.jsx full agent cards — model, inbox, quality, credibility, cache age
Tasks.jsx filterable table, expandable rows, ticking deadlines, pagination
Velocity.jsx 7-day charts (Recharts), quality trend, task-type donut
Budget.jsx period bars, threshold markers, per-agent/model breakdown
OKRs.jsx objectives + KRs with progress bars
RD.jsx experiments, backlog, benchmarks
Broadcast.jsx terminal log, color-coded CRITICAL/BLOCKED/HITL
Data sources (all real-time from workspace files)
| Field | Source file | Refresh |
|---|---|---|
| tasks, task_counts, sla_at_risk | TASKS.json |
instant |
| agents (inbox, perf, status) | AGENT_STATUS.json, AGENT_PERFORMANCE.json, comms/inboxes/ |
instant |
| agent model, cron error/busy | openclaw agents/cron list |
30s cache |
| budget | BUDGET.json |
instant |
| velocity | VELOCITY.json |
instant |
| okrs | OKRs.json |
instant |
| broadcast | comms/broadcast.md |
instant |
| experiments / backlog | EXPERIMENTS.json, IMPROVEMENT_BACKLOG.json |
instant |
| knowledge_count | SHARED_KNOWLEDGE.json |
instant |
| memory_lines | MEMORY.md |
instant |
LaunchAgent (always-on)
The dashboard is registered as ai.coopercorp.dashboard and starts automatically at login.
# Status
launchctl list | grep coopercorp
curl -s http://localhost:8080/api/data | python3 -m json.tool | head -5
# Restart
launchctl stop ai.coopercorp.dashboard
launchctl start ai.coopercorp.dashboard
# Logs
tail -f /tmp/coopercorp-dashboard.log
tail -f /tmp/coopercorp-dashboard.err
# Disable / re-enable
launchctl unload ~/Library/LaunchAgents/ai.coopercorp.dashboard.plist
launchctl load ~/Library/LaunchAgents/ai.coopercorp.dashboard.plist
URL: http://localhost:8080
Rebuild React frontend
cd ~/.openclaw/skills/agi-farm/dashboard-react
npm install # first time only
npm run build # outputs to dist/ — dashboard.py serves automatically
Full reference: references/dashboard.md
/agi-farm dispatch
# Dry-run (preview only)
python3 ~/.openclaw/skills/agi-farm/scripts/auto-dispatch.py
# Execute
python3 ~/.openclaw/skills/agi-farm/scripts/auto-dispatch.py --execute
Fires agent sessions for pending tasks, handles HITL notifications, stale task resets, rate-limit backoff, and dependency checking. Cron (every 1 min):
* * * * * python3 ~/.openclaw/skills/agi-farm/scripts/auto-dispatch.py --execute \
>> ~/.openclaw/workspace/logs/auto-dispatch.log 2>&1
Troubleshooting
Setup issues
| Symptom | Fix |
|---|---|
generate.py fails with ModuleNotFoundError |
Run pip3 install jinja2 |
openclaw agents add says agent already exists |
Safe to ignore — skip that agent |
gh repo create fails |
Run gh auth login first |
| Cron registration shows 0 crons added | Run openclaw cron list to check for duplicates; use --force flag on re-register |
git commit fails in Step 13 |
Run git config --global user.email and set name/email first |
Runtime issues
| Symptom | Fix |
|---|---|
| Auto-dispatcher fires but agents don't respond | Check logs/auto-dispatch.log; verify openclaw agents list shows agents |
| Dashboard shows stale data | Restart LaunchAgent: launchctl stop ai.coopercorp.dashboard && launchctl start ai.coopercorp.dashboard |
| TASKS.json parse error | Validate JSON: python3 -m json.tool ~/.openclaw/workspace/TASKS.json |
| Agent stuck >30 min | Check broadcast.md for [BLOCKED] tags; reassign task manually |
| Rate-limit backoff too aggressive | Edit RATE_LIMIT_BACKOFF_MIN in scripts/auto-dispatch.py (default: 10 min) |
openclaw not found in cron |
Set OPENCLAW_BIN=/path/to/openclaw in the cron environment, or add PATH=/opt/homebrew/bin:$PATH |
Recovery
# Re-run setup without overwriting existing files
python3 ~/.openclaw/skills/agi-farm/generate.py \
--team-json ~/.openclaw/workspace/agi-farm-bundle/team.json \
--output ~/.openclaw/workspace/ \
--all-agents --shared --no-overwrite
# Force full regeneration (overwrites everything)
python3 ~/.openclaw/skills/agi-farm/generate.py \
--team-json ~/.openclaw/workspace/agi-farm-bundle/team.json \
--output ~/.openclaw/workspace/ \
--all-agents --shared --bundle --force
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!