TeamFuse open-sources a 5-agent Claude Code dev team
AgentDM has open-sourced TeamFuse, a framework that runs five persistent Claude Code agents — PM, eng, QA, marketing, and analyst — coordinating over a messaging bus instead of a monolithic process or shell pipeline.
Score breakdown
Developers building multi-agent systems can fork TeamFuse as a working reference architecture for running isolated, role-specific Claude Code agents that coordinate over a message bus — avoiding the fragility of monolithic runtimes or brittle shell pipelines.
- 01TeamFuse is open-sourced at github.com/agentdmai/teamfuse and runs five persistent Claude Code agents: PM, eng, QA, marketing, and analyst.
- 02Agents communicate via AgentDM, a messaging bus modeled on Slack, using DMs and channels rather than filesystem polling or shared function calls.
- 03Each agent has its own `CLAUDE.md`, `MEMORY.md`, and `.mcp.json`; a thin Python wrapper keeps the Claude process hot across ticks to avoid repeated MCP connection overhead.
AgentDM has open-sourced TeamFuse, the multi-agent setup that runs their own product development. The system comprises five persistent Claude Code sessions — one each for PM, eng, QA, marketing, and analyst — that coordinate through AgentDM, a messaging bus where agents DM each other and post to channels rather than polling the filesystem or calling functions within a shared runtime. The author describes two prior approaches they rejected: a single monolithic Python process with all roles in one runtime (fragile, hard to swap roles), and a shell pipeline of chained `claude` invocations (neither resembling how real teams operate). TeamFuse is designed around the shape of a real team: roles, messaging, and standing procedures.
The marketing agent is the only one that boots with `claude --chrome` because the host has a single shared browser session.
Each agent is isolated with its own `CLAUDE.md`, `MEMORY.md`, and `.mcp.json`, and a thin Python streaming loop spawns the Claude process once, feeds tick prompts via stdin, honors `/clear` between work units (rate-limited to once per 10 minutes), and handles `SIGUSR1` wakes and `SIGTERM` shutdown. The marketing agent is the only one that boots with `claude --chrome` because the host has a single shared browser session. A local Next.js control panel at `127.0.0.1:3005` — styled like an electrical breaker box — provides per-agent state, token gauges, start/stop/wake controls, and live log and MCP tool views. A master breaker flips all five starter roles at once.
Setup is driven by a `/teamfuse-init` slash command that asks roughly ten questions (company name, roles, GitHub org, board setup, local clone paths) and then provisions agents on AgentDM, writes per-agent `.env` files and `.mcp.json` configs, creates channels like `#eng`, `#leads`, and `#ops`, seeds skills, and populates every `CLAUDE.md`. The command is idempotent and safe to rerun. A shared SOP library under `agents/sop/` covers protocols for card lifecycle, WIP caps, PR review, commit attribution, release validation, browser requests, and DB access — giving agents a written file to reference when disagreements arise. The team is still iterating on cost per tick, noting that an early issue had agents burning tokens on polling ticks when the PM bot generated cards for every idle teammate.
Key facts
- 01TeamFuse is open-sourced at github.com/agentdmai/teamfuse and runs five persistent Claude Code agents: PM, eng, QA, marketing, and analyst.
- 02Agents communicate via AgentDM, a messaging bus modeled on Slack, using DMs and channels rather than filesystem polling or shared function calls.
- 03Each agent has its own `CLAUDE.md`, `MEMORY.md`, and `.mcp.json`; a thin Python wrapper keeps the Claude process hot across ticks to avoid repeated MCP connection overhead.