16 KiB
Implementation Plan — Parallel Agent Work Breakdown
Dependency Graph
┌─────────────────────┐
│ Phase 0: Foundation │ (sequential, orchestrator does this)
│ │
│ 1. Monorepo scaffold │
│ 2. types.ts │
│ 3. config.ts + Zod │
│ 4. plugin-registry │
│ 5. All package.json │
└──────────┬────────────┘
│
All Phase 1 agents work against the interfaces defined in types.ts
│
┌──────────┬──────────┬───┴────┬──────────┬──────────┬──────────┐
▼ ▼ ▼ ▼ ▼ ▼ ▼
Agent 1 Agent 2 Agent 3 Agent 4 Agent 5 Agent 6 Agent 7
Core Runtime Agent SCM + CLI Web Notifier
Services Plugins Plugins Tracker Dashboard + Terminal
│ │
│ All plugins are independent of │
│ each other — pure interface impls │
│ │
└──────── CLI + Web depend on core services ─────────┘
(can code against interfaces, wire up later)
Phase 0: Foundation (Sequential — Orchestrator Does This)
Must be done first. Everything else depends on it.
Creates the monorepo scaffold and ALL type definitions. After this, every agent has:
- A package to work in (with package.json, tsconfig)
- All interfaces defined (they just implement them)
- No ambiguity about what to build
Deliverables
pnpm-workspace.yaml+ rootpackage.json+tsconfig.base.jsonpackages/core/src/types.ts— ALL interfaces (Runtime, Agent, Workspace, Tracker, SCM, Notifier, Terminal, Session, Event, Config, etc.)packages/core/src/config.ts— Zod schemas for YAML config validationpackages/core/src/plugin-registry.ts— Plugin discovery + loading skeletonpackages/core/package.json+tsconfig.json- All plugin package scaffolds (package.json + tsconfig + src/index.ts stub)
packages/cli/package.json+packages/web/package.jsonscaffoldsagent-orchestrator.yaml.example
Estimated effort: Medium. ~500-800 lines of types + config.
Phase 1: Parallel Implementation (7 Agents)
Agent 1: Core Services
Package: packages/core/src/
Branch: feat/core-services
Depends on: Phase 0 types
Blocked by: Nothing after Phase 0
| File | What | Reference Script |
|---|---|---|
metadata.ts |
Flat-file metadata read/write (key=value) | Metadata parsing in all session managers |
event-bus.ts |
In-process pub/sub + JSONL persistence | New (inspired by OpenHands event stream) |
tmux.ts |
tmux command wrappers (list, new, send-keys, capture-pane, kill) | All scripts that call tmux |
session-manager.ts |
Session CRUD: spawn, list, kill, cleanup, send message | claude-ao-session |
lifecycle-manager.ts |
State machine per session + reaction engine | claude-review-check + claude-session-status |
Key complexity: session-manager.ts orchestrates Runtime + Agent + Workspace plugins together. lifecycle-manager.ts runs the polling loop and triggers reactions.
Estimated effort: Large (~1000-1500 lines)
Agent 2: Runtime + Workspace Plugins
Packages: packages/plugins/runtime-tmux/, runtime-process/, workspace-worktree/, workspace-clone/
Branch: feat/runtime-workspace-plugins
Depends on: Phase 0 types only
Blocked by: Nothing after Phase 0
| Plugin | What | Reference |
|---|---|---|
runtime-tmux |
Create/destroy tmux sessions, send-keys, capture-pane, alive check | claude-ao-session new/kill |
runtime-process |
Spawn child processes, stdin/stdout, signal handling | New (for headless claude -p) |
workspace-worktree |
git worktree add/remove/list, branch naming, symlinks |
claude-ao-session worktree logic |
workspace-clone |
git clone, cleanup |
New (for Docker/cloud runtimes) |
Key complexity: runtime-tmux must handle send-keys with proper escaping, busy detection, and the wait-for-idle pattern from send-to-session.
Estimated effort: Medium (~600-800 lines)
Agent 3: Agent Plugins
Packages: packages/plugins/agent-claude-code/, agent-codex/, agent-aider/
Branch: feat/agent-plugins
Depends on: Phase 0 types only
Blocked by: Nothing after Phase 0
| Plugin | What | Reference |
|---|---|---|
agent-claude-code |
Launch cmd, JSONL activity detection, process tree walk, introspection | claude-status, get-claude-session-info, claude-session-status |
agent-codex |
Launch cmd, process detection | New |
agent-aider |
Launch cmd, process detection | New |
Key complexity: agent-claude-code has the richest activity detection — reading JSONL session files, extracting summaries, walking process trees from tmux pane PID to find claude process, detecting working/idle/stuck/blocked states.
Estimated effort: Medium (~500-700 lines)
Agent 4: SCM + Tracker Plugins
Packages: packages/plugins/scm-github/, tracker-github/, tracker-linear/
Branch: feat/scm-tracker-plugins
Depends on: Phase 0 types only
Blocked by: Nothing after Phase 0
| Plugin | What | Reference |
|---|---|---|
scm-github |
PR detection, CI checks, review comments, automated comments, merge readiness, merge | claude-review-check, claude-bugbot-fix, dashboard PR fetching |
tracker-github |
Issue fetch, completion check, branch naming, prompt generation | claude-splitly-session (GitHub Issues) |
tracker-linear |
Issue fetch via GraphQL, completion check, branch naming | claude-ao-session + claude-integrator-session Linear checks |
Key complexity: scm-github is the largest — it covers PR state, CI checks (gh pr checks), review decision (gh pr view), inline review comments (gh api), automated bot comments (cursor[bot], bugbot), and merge readiness.
Estimated effort: Large (~800-1000 lines)
Agent 5: CLI
Package: packages/cli/
Branch: feat/cli
Depends on: Phase 0 types + core interfaces (codes against interfaces, wires up when core is ready)
Partially blocked by: Agent 1 (core services) for runtime testing
| Command | What | Reference Script |
|---|---|---|
ao init |
Interactive setup wizard → agent-orchestrator.yaml |
New |
ao status |
Colored terminal table of all sessions | claude-status |
ao spawn <project> [issue] |
Spawn single session | claude-spawn |
ao batch-spawn <project> <issues...> |
Batch spawn with dedup | claude-batch-spawn |
ao session ls|kill|cleanup |
Session management | claude-ao-session ls/kill/cleanup |
ao send <session> <message> |
Smart message delivery | send-to-session |
ao review-check [project] |
Trigger PR review fixes | claude-review-check |
ao dashboard |
Start web server | claude-dashboard |
ao open [session|all] |
Open terminal tabs | claude-open-all, open-iterm-tab |
Key complexity: ao status needs rich terminal output (colors, columns, live data). ao batch-spawn needs duplicate detection.
Can start immediately by coding against core interfaces. Wire up real implementations when Agent 1 finishes.
Estimated effort: Large (~800-1200 lines)
Agent 6: Web Dashboard
Package: packages/web/
Branch: feat/web-dashboard
Depends on: Phase 0 types + core interfaces
Partially blocked by: Agent 1 (core services) for API routes
| Component | What | Reference |
|---|---|---|
| Next.js setup | App Router, Tailwind, dark theme | New |
GET /api/sessions |
List all sessions with full state | claude-dashboard /api/sessions |
POST /api/spawn |
Spawn new session | New |
POST /api/sessions/:id/send |
Send message to session | New |
POST /api/sessions/:id/kill |
Kill session | New |
POST /api/prs/:id/merge |
Merge PR | New |
GET /api/events |
SSE stream for real-time updates | New (replaces polling) |
| Dashboard page | Attention-prioritized session cards | claude-dashboard HTML |
| Session detail page | Full session info + terminal embed | New |
| Components | SessionCard, PRStatus, CIBadge, AttentionZone | claude-dashboard HTML |
Key complexity: SSE endpoint that streams lifecycle events in real-time. Attention-zone layout. xterm.js terminal embed.
Can start immediately with mock data, wire up real API when Agent 1 finishes.
Estimated effort: Large (~1500-2000 lines)
Agent 7: Notifier + Terminal Plugins
Packages: packages/plugins/notifier-desktop/, notifier-slack/, notifier-webhook/, terminal-iterm2/, terminal-web/
Branch: feat/notifier-terminal-plugins
Depends on: Phase 0 types only
Blocked by: Nothing after Phase 0
| Plugin | What | Reference |
|---|---|---|
notifier-desktop |
OS notifications (node-notifier), click → deep link to dashboard | notify-session |
notifier-slack |
Slack webhook messages with action buttons | New |
notifier-webhook |
Generic HTTP POST | New |
terminal-iterm2 |
AppleScript tab management, reuse existing tabs | open-iterm-tab, claude-open-all |
terminal-web |
xterm.js config for web-based terminal | New |
Key complexity: notifier-desktop needs to be cross-platform (macOS/Linux/Windows). terminal-iterm2 has AppleScript quirks (string length limits, tab detection).
Estimated effort: Medium (~500-700 lines)
Parallelism Summary
Time ──────────────────────────────────────────────────►
Phase 0 (orchestrator):
████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
Phase 1 (7 parallel agents):
Agent 1 (core): ████████████████████████░░
Agent 2 (runtime): ██████████████░░░░░░░░░░░░
Agent 3 (agent): ██████████████░░░░░░░░░░░░
Agent 4 (scm): ████████████████████░░░░░░
Agent 5 (cli): ████████████████████████░░ ← can start on interfaces, wire later
Agent 6 (web): ██████████████████████████ ← can start on UI, wire later
Agent 7 (notifier): ██████████░░░░░░░░░░░░░░░░
Phase 2 (integration): after all agents done
████ ← wire everything together, test
True Independence
These agents are truly independent after Phase 0:
- Agents 2, 3, 4, 7 implement plugin interfaces → zero inter-dependency
- Agent 1 (core) is the critical path
- Agents 5, 6 can start with mock/interface-only imports, wire later
Risk: Agent 1 (Core) Is the Bottleneck
If core services are delayed, CLI and Web can't fully test. Mitigations:
- Agent 1 gets the most experienced agent
- Phase 0 writes enough core scaffolding (types, config, plugin-registry) that other agents aren't waiting
- CLI and Web start with mock implementations
Linear Tickets (for spawning)
| Ticket | Title | Agent |
|---|---|---|
| AO-10 | Implement core services (metadata, event-bus, session-manager, lifecycle-manager) | 1 |
| AO-11 | Implement runtime + workspace plugins (tmux, process, worktree, clone) | 2 |
| AO-12 | Implement agent plugins (claude-code, codex, aider) | 3 |
| AO-13 | Implement SCM + tracker plugins (github SCM, github tracker, linear tracker) | 4 |
| AO-14 | Implement CLI (ao init, status, spawn, session, send, review-check, dashboard, open) | 5 |
| AO-15 | Implement web dashboard (Next.js, API routes, SSE, attention-zone UI, session detail) | 6 |
| AO-16 | Implement notifier + terminal plugins (desktop, slack, webhook, iterm2, web) | 7 |
Spawning Command
After Phase 0 is committed to main:
~/claude-batch-spawn ao AO-10 AO-11 AO-12 AO-13 AO-14 AO-15 AO-16
Each agent gets its own worktree branched from main (which contains the scaffold + types).