Install
openclaw skills install deep-codingDeep coding multi-agent development system. Use when the user wants to build software projects using the Orchestrator to Builder to Reviewer workflow, mentions deep coding, multi-agent collaboration, orchestrator, spawn builder, spawn reviewer, or asks for complex coding projects that need module decomposition and iterative review. NOT for: simple one-liner fixes (just edit), reading code, or single-file changes.
openclaw skills install deep-codingThis skill requires the following system capabilities:
| Dependency | Purpose | Required? | Check |
|---|---|---|---|
python3 | Dashboard server (port 8765) | Yes | python3 --version |
node / npm | Project builds, Playwright | For web projects | node -v, npm -v |
playwright | E2E browser testing (Reviewers) | Optional, for E2E | npx playwright --version |
| ACP runtime | Builder/Reviewer agent execution | Optional, see below | Platform-specific |
No specific coding agent is required. The default configuration uses ACP + qoder, but you can use any available agent runtime. See First-Time Setup for configuration options.
⚠️ Dashboard server (server.py):
127.0.0.1:8765 only — never expose to public networksafe_path() check⚠️ Code execution:
When a user installs this skill for the first time, guide them through the following steps:
mkdir -p my-projects/{requests/done,logs}
cp <skill-dir>/assets/server.py my-projects/
cp <skill-dir>/assets/dashboard.html my-projects/
cd my-projects
This creates the project root with all required directories and the Dashboard assets.
Create an Orchestrator agent in your openclaw.json (or equivalent config):
{
"id": "orchestrator",
"name": "Orchestrator",
"workspace": "<your-path>/my-projects"
}
Give the Orchestrator a heartbeat prompt that references references/orchestrator-rules.md.
Choose your preferred coding agent(s). Options:
| Option | Configuration | Notes |
|---|---|---|
| ACP + qoder | runtime: "acp", agentId: "qoder" | Default, requires acpx plugin |
| ACP + claude | runtime: "acp", agentId: "claude" | Alternative ACP agent |
| ACP + codex | runtime: "acp", agentId: "codex" | OpenAI Codex |
| Subagent runtime | runtime: "subagent" | Built-in, no extra setup |
| PTY coding agents | exec with PTY | Claude Code, Codex CLI, etc. |
The Orchestrator rules (references/orchestrator-rules.md) default to ACP + qoder, but you should update the agent ID to match your setup.
Recommended: Set up a 3-tier fallback chain
Ensure your Orchestrator and Builder agents have access to:
read, write, edit — for file operationsexec — for running builds, tests, serverssessions_spawn, sessions_send, sessions_list — for agent communicationsubagents — for managing spawned agentsIn openclaw.json:
{
"tools": {
"sessions": {
"visibility": "all"
},
"agentToAgent": {
"enabled": true,
"allow": ["main", "orchestrator", "qoder-dev", "claude-dev"]
}
},
"acp": {
"enabled": true,
"backend": "acpx",
"defaultAgent": "qoder",
"allowedAgents": ["qoder", "claude", "codex"]
}
}
Set the default model for the Orchestrator and agents:
{
"agents": {
"defaults": {
"model": {
"primary": "your-provider/your-model"
}
}
}
}
For coding agents (qoder, claude, codex), they use their own model — no LLM config needed.
cd my-projects
python3 server.py
# Open http://localhost:8765 — should show empty dashboard
Multi-agent development: Orchestrator decomposes → Builders code → Reviewers verify → E2E test → deliver.
projects/requests/TIMESTAMP.json (use actual timestamp)sessions_send to agent:orchestrator:mainproject-state.json with module statessessions_spawnlogs/builder-MODULE.log (APPEND, UTC+8)review_historylogs/reviewer-MODULE.log (APPEND, UTC+8)integration-test module depending on ALL others{
"name": "Project Name",
"description": "What it does",
"owner": "user name",
"tags": ["web", "game"]
}
Path: <project-root>/requests/TIMESTAMP.json (use actual timestamp)
Send to agent:orchestrator:main:
Read project-state.json every heartbeat:
All paths are relative to your project root directory:
<project-root>/
├── projects-registry.json ← All projects overview
├── server.py ← Dashboard server (port 8765)
├── dashboard.html ← Dashboard UI
├── requests/
│ └── done/ ← Processed requests
├── logs/ ← Agent activity logs
├── PROJECT-SLUG/
│ ├── project-state.json ← Module states, review history
│ ├── logs/
│ │ ├── orchestrator.log ← Orchestrator decisions
│ │ ├── builder-MODULE.log ← Each Builder writes own file
│ │ └── reviewer-MODULE.log ← Each Reviewer writes own file
│ └── SOURCE CODE (generated files)
See references/architecture.md for full project structure, module lifecycle, and dashboard details.
pending → in_progress → ready_for_review → in_review → accepted
↑ |
└── needs_revision ──┘
| Rule | Description |
|---|---|
| One action per heartbeat | Never do multiple spawns in one cycle |
| Spawn Reviewer immediately | Never leave ready_for_review more than one cycle |
| Reviewer writes results | Must write to review_history array, never just change state |
| E2E smoke test | Mandatory for bugfixes and new features before delivery |
| No archive copies | DO NOT copy project-state.json to archive/ |
| Issue | Fix |
|---|---|
| 429 rate limit | Wait, then re-spawn. Do NOT self-accept |
| Missing E2E | Bugfix/feature accepted → must spawn E2E Reviewer |
| Reviewer not spawned | Check sessions_list, spawn if missing |
| Builder timeout | Check if files exist, accept if complete |
| Archive duplicates | Orchestrator should NOT copy to archive/ |
Dashboard is included in assets/server.py and assets/dashboard.html.
Usage:
assets/server.py and assets/dashboard.html to your project root directorypython3 server.pyhttp://localhost:8765Security: The server binds to 127.0.0.1 only and includes path traversal protection.
Features: project list, completion status, module states, agent activity timeline.