What We Built
A two-workflow orchestration system where FORGE (the strategic planner) and TOMMY (the atomiser) collaborate to resolve GitHub issues autonomously. This is Phase 0 of the ZOID agentic DX system.FORGE (Resolve Next Ticket)
FORGE reads a GitHub epic’s block and task issues, selects the next unresolved ticket, and generates an LLM prompt with full context. It now supports three execution modes:- manual: Returns the prompt for human copy-paste into Claude.
- api: Calls Claude API directly via n8n’s Anthropic node.
- tommy: Builds a payload and triggers TOMMY for autonomous execution.
ALL_PASS, FORGE auto-closes the task issue (and its parent block if all tasks are done) with a summary comment. On HAS_FAILURES, it returns the failure details without closing anything.
TOMMY (5-Phase Pipeline)
- INSPECT — Fetches repo tree, pipeline.yaml, and README from GitHub API.
- IDENTIFY — Single Anthropic call to identify tasks (skipped when FORGE provides
forge_tasks). - ATOMISE — Converts tasks to executable task-lets. Path C (FORGE shortcut) passes through pre-structured tasks.
- EXECUTE — SplitInBatches loop: SSH into VPS, run
claude --print --output-format json --max-turns 3 --dangerously-skip-permissions -p '<prompt>'per task-let. - CONFIRM — Aggregates results into ALL_PASS or HAS_FAILURES verdict.
Key Design Decisions
- n8n as orchestrator, not LLM: TOMMY uses zero LLM tokens when FORGE provides tasks (Path C). The intelligence is in FORGE’s prompt; TOMMY is pure mechanical execution.
- SSH over API: Claude Code CLI runs on a VPS via SSH, not via Anthropic API. This gives access to the full filesystem, git, and toolchain.
- Timeout chain: UI (600s) → BFF (configurable) → n8n (600s internal) → SSH (per task-let). Each layer is independently configurable.
- FORGE duplicate cleanup: Stripped 34 duplicate nodes (WIP backups) from FORGE before deployment, reducing from 77 to 43 nodes.
Trigger Interface
The Rover UI’s ForgeForm now conditionally shows SSH host and project path fields when tommy mode is selected, with sensible defaults (aj@vps.devarno.cloud, /home/aj/projects/so1-platform).