Compound your coding agents. Bring any CLI coding agent at full power, put your Fusion team on a Loop, and let scheduled, recurring runs compound toward the best answer, while you sleep. AgentsCommander only adds, never subtracts. Road to the Dark Factory.
A Fusion team combines multiple models in one team: point OpenCode at any provider and any model can join, even OpenRouter Fusion.
npm install · Download desktop installer · ▶ 60-second quickstart · Quickstart
npm install -g @mblua/agentscommanderThen run the CLI:
agentscommander --help
agentscommander new-project /path/to/projectThe npm package is @mblua/agentscommander. The installed command is still agentscommander.
Prefer a desktop installer or a manual download? Get the signed Windows installer, Linux AppImage, macOS dmg, or portable assets from GitHub Releases.
A Dark Factory runs with the lights off, no humans on the floor. AgentsCommander is how you get there: bring any coding agent at full power, put a Fusion team of cheaper models on a Loop, and let scheduled runs compound toward the best answer. We only add, never subtract.
- Pick the coding agent per role (Claude Code, Codex, Gemini, or OpenCode) at full power. Each runs in its own real terminal with a full PTY, not a command runner. AgentsCommander only adds capability; it never wraps, sandboxes, or nerfs your agent.
- Direct multiple workgroups from the Root Agent. The Agent Commander / Root Agent gives you one place to steer work across teams. Ask it to talk to workgroup coordinators, send work to different teams, and keep initiatives aligned across parallel workgroups.
- Multi-agent Teams that coordinate through files. Agents exchange markdown messages in a
messaging/folder you cancat,git diff, and audit. The whole org fits inls. - Phone-ready updates with images. The Telegram bridge can stream session output and send photos or screenshots captured by agents, so remote status can include the actual screen or report.
- Local state, no telemetry. All state lives in plain JSON, TOML, and markdown next to the binary. Portable: copy the
.exeto any drive and it carries its own config.
You bring the coding agents. AgentsCommander coordinates them.
OpenRouter Fusion compounds models on a single request. AgentsCommander compounds agents, models, and Fusion itself: on a Loop, across a team. Point OpenCode at any provider and bring any model (including OpenRouter Fusion) into the team.
-
Install AgentsCommander from npm:
npm install -g @mblua/agentscommander
Then start it:
agentscommander
Prefer a desktop installer or portable binary? Use GitHub Releases.
-
Open a project: click
New Projectin the sidebar and point it at an empty folder. AC creates a Project AC Root (.ac/) there. -
Create a Team: add a coordinator and one worker agent, each with a role prompt. Teams and workgroups walks through this.
-
Launch the coordinator: pick Claude Code, Codex, Gemini, or OpenCode from the dropdown. Ask it to send the worker a hello message. The worker terminal receives a file notification and responds in real time.
Full walkthrough: docs/quickstart.md.
Most agent tools focus on in-process orchestration or one interactive session. AgentsCommander starts with the coding agents you already use (Claude Code, Codex, Gemini, OpenCode), runs them as real OS processes, and lets them coordinate through plain markdown files that any human, any tool, and any git diff can inspect. You see every step in a real terminal, and the coordination state stays visible on disk.
| Use case | Setup |
|---|---|
| Parallel feature development | Two coding agents on the same repo, each owning a different module. Coordinator routes work and merges results. |
| Code-review swarm | One agent ships a PR; two others review independently. You read both reviews in their own terminals before merging. |
| Autonomous refactor crew | A long-running coordinator splits a multi-file refactor across worker agents and rebases their branches as they finish. |
| Long-running agent with phone alerts | Pair a session with a Telegram bot, kick off a build from your phone, and receive text updates plus screenshots or image artifacts. |
Full recipes: docs/use-cases.md.
| AgentsCommander | LangGraph | AutoGen / AG2 | CrewAI | Aider | Claude Code alone | |
|---|---|---|---|---|---|---|
| Operates real CLI coding agents | ✅ Claude Code, Codex, Gemini, OpenCode | ❌ Python LLM calls | ❌ Python conversation | ❌ Python library | Partial (one agent) | ✅ (one agent) |
| Real PTY per agent | ✅ ConPTY / Unix PTY | ❌ | ❌ | ❌ | ✅ | ✅ |
| Filesystem-first messaging | ✅ Markdown in messaging/ |
❌ DB / Python state | ❌ Python objects | ❌ Python tasks | n/a | n/a |
| Standalone runtime | ✅ Rust / Tauri | ❌ Python library | ❌ Python library | ❌ Python library | ❌ Python app | ✅ standalone CLI |
| Multi-agent on the same repo | ✅ | Partial | Partial | Partial | ❌ | ❌ |
| Desktop UI | ✅ Tauri app | ❌ | ❌ | ❌ | TUI only | TUI only |
Full comparison with trade-offs and honest losses: docs/comparison.md.
These are not accidents.
- Start with files and CLIs. AgentsCommander keeps the core workflow in plain files and real terminal sessions. External protocols, including MCP, belong where they improve a concrete integration without hiding the workflow.
- Files before databases. All state and communication is persisted to plain files (JSON, TOML, markdown). Every change is visible via
git diff, trivial to inspect, easy to debug. Databases can be introduced later for performance-critical paths once the data model is mature. - One agent = one directory. An agent is defined by a
CLAUDE.mdfile (or equivalent role-prompt file) inside its own directory. Multiple role prompts within the same directory or its subdirectories are forbidden. Coding agents assume the entire contents of their working directory are relevant context; if two role prompts coexisted, an agent could read another agent's role and leak context.
- Quickstart: 60-second install to first running agent
- Concepts: agent, team, workgroup, coordinator, brief
- Teams and workgroups: coordinators, members, briefs, messaging
- Features: Coding Agent Profiles, Session auto-close, Config seed, Telegram bridge with image and screenshot sends, voice-to-text, portable instances, RTK integration
- Reference: full CLI,
settings.jsonschema, architecture, log filtering - Roadmap · Changelog · Docs style guide
| Platform | Status |
|---|---|
| Windows | Primary version where most development happens. |
| Linux | Testing is beginning. |
| macOS | Untested. |
AgentsCommander does not collect telemetry, analytics, or usage data. Optional features (Telegram Bridge, Voice-to-Text) transmit data to external services only when you enable them; see PRIVACY.md. Windows releases are digitally signed: certificate by SignPath Foundation, free code signing courtesy of SignPath.io. Full policy in CODE_SIGNING_POLICY.md.
- Questions, ideas, show-and-tell: GitHub Discussions.
- Bug reports, feature requests: GitHub Issues.
- What's next:
ROADMAP.md. Pinned issues track macOS verification and the coding agents we want to add next.
See CONTRIBUTING.md: branch naming, local build, log-filter setup, and the docs style guide.
AgentsCommander stands on the shoulders of:
- @msitarzewski/agency-agents: community library of agent role templates. AC can download an explicit, offline cache with
agency-templates update; normal startup and role browsing never hit the network. Big thanks to the maintainers for keeping it open. - RTK (Rust Token Killer): CLI proxy that compresses command outputs to cut LLM token consumption by 60–90% on common dev operations. AC auto-detects
rtkon PATH at startup and wires thePreToolUsehook into managed agent directories (seesrc-tauri/src/lib.rs:382-473andsrc-tauri/src/config/claude_settings.rs).
Also: Tauri, SolidJS, xterm.js, portable-pty, axum, tokio; the toolchain layer this app would be impossible without.
Mariano is passionate about software development, AI, and blockchain. He approaches the world with deep curiosity, always amazed by life and the universe. Above all, he is a father, which remains the most wonderful part of his life.
Mariano Blua: GitHub · LinkedIn · 🇦🇷 MarianoBlua · 🇺🇸 MarianoBluaEN (English)
