fable-agent/docs/receipts/cmux-herdr-multi-agent-orch...

124 lines
6.9 KiB
JSON

{
"schema": "fable.external_project.review.v1",
"id": "cmux-herdr-multi-agent-orchestration-advisory-map-20260705",
"title": "cmux + herdr + Multi-Agent Orchestration Patterns \u2014 Advisory Map",
"source": {
"type": "video + repos + Discord",
"video": "IndyDevDan: SEE CMUX SOLVE Multi-Agent Orchestration (Claude Code and Pi Agent) \u2014 https://youtu.be/WAFUMBLOjHo",
"repos": [
"https://github.com/disler/learning-cmux-with-agents",
"https://herdr.dev/",
"https://github.com/ogulcancelik/herdr"
],
"discord": "Watchmedropship and Artale shared cmux/herdr links",
"fetchedAt": "2026-07-06T22:40:18.310273+00:00"
},
"externalProjectReviews": [
{
"repo": "disler/learning-cmux-with-agents",
"stars": null,
"license": "unknown",
"description": "31 natural-language prompts proving one primary agent can stand up, drive, and tear down a whole fleet of AI coding agents inside cmux.",
"keyPattern": "Primary agent orchestrates fleet lifecycle: spawn \u2192 drive \u2192 tear down. Natural language prompts, not code. One agent manages many.",
"relevance": "Validates fable-agent execution-pipeline.ts pattern: one pipeline orchestrates worktree creation, agent task, verify-gate, interrupt-gate, ledger recording. The pipeline IS the primary agent. cmux does for terminals what fable-agent does for code tasks.",
"decision": "advisory",
"safeToVendor": false,
"vendorReason": "cmux-specific prompts. Learn the orchestration pattern, not the prompts.",
"patternMappings": [
{
"cmux": "Primary agent spawns sub-agents in split panes",
"fable_agent": "execution-pipeline.ts spawns agent task in isolated worktree"
},
{
"cmux": "31 NL prompts prove fleet lifecycle",
"fable_agent": "runPipeline() spec: create \u2192 map \u2192 agent \u2192 verify \u2192 interrupt \u2192 ledger"
},
{
"cmux": "Stand up, drive, tear down",
"fable_agent": "worktree-isolation.ts creates disposable worktree, verifyAndClean() tears it down on failure"
},
{
"cmux": "Agent drives terminals via cmux CLI",
"fable_agent": "runDeepSeekAgent() drives Ollama model via HTTP /api/chat"
}
]
},
{
"repo": "ogulcancelik/herdr (herdr.dev)",
"stars": null,
"license": "AGPL-3.0",
"description": "Agent multiplexer \u2014 one terminal for the whole herd. Single binary, fully local, runs coding agents in parallel. Keeps agents alive when laptop closes. Reattach from phone.",
"keyPattern": "Terminal multiplexer for AI agents. Each agent runs in own real terminal on a server. See blocked/working/done at a glance. Binary not app. SSH-friendly.",
"relevance": "Validates fable-agent flat-ledger.ts pattern: state lives OUTSIDE agent context. herdr shows agent status externally (blocked/working/done). flat-ledger.ts does the same \u2014 JSONL state file outside LLM context. Also validates worktree-isolation: herdr isolates agents in separate terminals, fable-agent isolates in separate git worktrees.",
"decision": "advisory",
"safeToVendor": false,
"vendorReason": "AGPL-3.0 license. Terminal multiplexer, different domain. Learn the status-tracking and isolation patterns.",
"patternMappings": [
{
"herdr": "See blocked/working/done at a glance",
"fable_agent": "FlatLedger.summary() + lastStep() \u2014 pipeline state visible without reading LLM context"
},
{
"herdr": "Keeps agents alive when laptop closes",
"fable_agent": "Ledger persists across sessions \u2014 state survives process restart"
},
{
"herdr": "Each agent in own real terminal",
"fable_agent": "Each agent task in own git worktree \u2014 isolated, disposable"
},
{
"herdr": "Single binary, fully local",
"fable_agent": "No external dependencies \u2014 stdlib fetch, built-in crypto, no framework"
},
{
"herdr": "Reattach from phone",
"fable_agent": "Ledger is JSONL \u2014 read from anywhere, anytime"
}
]
},
{
"repo": "cmux (cmux.com)",
"stars": null,
"license": "proprietary",
"description": "Terminal built for AI coding agents. macOS native, Ghostty GPU rendering, vertical tabs, embedded browser, subagent spawning, CLI automation. Skills system.",
"keyPattern": "Terminal-as-platform for agents. Agent controls browser, spawns subagents in split panes, sends notifications. Skills = reusable workflows.",
"relevance": "Validates fable-agent repo-mapper.ts pattern: agent needs environment awareness to function. cmux gives agents terminal+browser+filesystem control. repo-mapper.ts gives agents repo tree awareness. Both solve the same problem: agent must understand its environment to act reliably.",
"decision": "advisory",
"safeToVendor": false,
"vendorReason": "Proprietary macOS app. Learn the environment-mapping pattern.",
"patternMappings": [
{
"cmux": "Skills = reusable workflows for agents",
"fable_agent": "repo-mapper.ts builds reusable repo tree for system prompt injection"
},
{
"cmux": "Agent controls browser surface",
"fable_agent": "Agent controls code surface via worktree + verify-gate"
},
{
"cmux": "Subagent spawning in split panes",
"fable_agent": "Parallel worktrees via WorktreeManager.create()"
}
]
}
],
"keyTakeaways": [
"Multi-agent orchestration is converging on the same pattern: one primary controller spawns, drives, and tears down workers. fable-agent execution-pipeline.ts already does this.",
"State must live outside agent context. herdr shows blocked/working/done externally; fable-agent FlatLedger records to JSONL. Same insight, different implementation.",
"Agent isolation is non-negotiable. cmux uses split panes, herdr uses separate terminals, fable-agent uses git worktrees. All solve the same blast-radius problem.",
"Natural language prompts can drive fleet lifecycle (disler 31 prompts). fable-agent pipeline spec accepts natural language task descriptions.",
"All three tools are advisory only. No vendoring warranted. Pattern validation is the value.",
"IndyDevDan video is advisory. David Ondrej cmux video is advisory. Discord links are advisory."
],
"contentVerified": true,
"liveVerification": "GitHub API + web search confirmed all repos/sites exist. cmux is macOS terminal by Lawrence Chen. herdr is AGPL single binary by ogulcancelik. disler repo has 31 NL prompts for cmux agent fleet.",
"advisoryOnly": true,
"noActionRequired": true,
"fableAgentStatus": {
"containers": 19,
"phase": 4,
"autoPatchProven": false,
"tests": "295 passing, 69 files",
"commit": "e84f21e"
}
}