Quickstart Β· Mission Control Β· Auto-enter Β· Architecture Β· Rust accelerator
AgentForge Command is a local cockpit for orchestrating multiple Claude Code sessions in one window. Atlas Prime is the only lead β you talk to Atlas, Atlas dispatches the right specialists, every specialist reports back to Atlas so he always knows what the swarm is doing. You can also broadcast directly to the entire swarm, or open any specialist's drawer and talk to that single agent.
There is no mock activity. If you haven't configured the LLM bridge and nothing is running, the cockpit stays honestly idle and tells you exactly what to set. Everything you see is either a real PTY's output or a live Claude stream.
Local-first, file-coordinated and dependency-light. The optional Rust
accelerator (forge-pulse) sharpens prompt detection but is never required.
Anthropic restricts Pro/Max subscription access for third-party, PTY-based agent frameworks. In practice, for AgentForge:
- Test-harness mode (no key): β Works β deterministic, no LLM calls.
- Your own Anthropic API key: β Works β your account, your key, your consumption, via the official Messages API.
- A shared Pro/Max account driven through this framework: β Not permitted by Anthropic's terms.
You are responsible for ensuring your usage complies with the Anthropic Usage Policies and Consumer/Commercial Terms. This is our good-faith reading, not legal advice, and AgentForge ships no mechanism to circumvent any provider limit. See
docs/THREAT_MODEL.mdfor the full breakdown.
The redesigned cockpit β Atlas Prime is the central figure with a large, readable answer area.
A swarm-check in flight: your message, Atlas's streamed answer, the workflow stepper, and the Dispatch & reports panel naming every specialist (here shown via the deterministic test harness, hence the badge β no fake activity).
![]() |
![]() |
| Sentinel specialist drawer | Ledger drawer Β· spend + forecast |
![]() |
![]() |
| Spawn-Builder modal Β· Alt+N | Mobile Β· stacked layout |
| Agent | Mascot | Domain |
|---|---|---|
| ATLAS PRIME | Cyber Turtle | Chief Orchestrator |
| SENTINEL | Guardian Owl | Risk & Safety |
| AURORA | Neon Fox | Premium UI / Motion |
| FORGE | Forge Mole | Build & Release |
| PRISM | Prism Chameleon | Visualization & Graphs |
| ECHO | Signal Bat | Event Stream & Replay |
| VEGA | Neon Hummingbird | Performance / Motion Engine |
| SCRIBE | Scribe Raven | Documentation |
| LEDGER | Accountant Raccoon | Tokens & Cost |
| RAVEN | Debug Raven | Debug & Failure Analysis |
| LUMA | Firefly | Accessibility |
| NOVA | Star Dragon | Product Story / Positioning |
Mascots are rendered from
gui/public/arena/mascots.jsvianode scripts/render-mascots.mjsβ same source, two outputs (live arena + static docs).
Note
The .team/ file-based protocol that started this project is preserved β
the board, the per-lane logs, the atomic mkdir locks, the green gate,
the MCP server and the bash test suite all stay in place. AgentForge
specialists each map onto a lane (lead, backend, frontend, quality)
via gui/agents.json and write into that lane's log. The original
4-terminal flow now lives directly in the cockpit as well β Atlas is the
lead, the others fall into the backend / frontend / quality lanes by role.
- Quickstart
- Mission Control
- Three ways to talk to the swarm
- Auto-enter
- Persistence
- Spawn-Builder
- Architecture
- Optional Rust accelerator
- Quality and security
- How it compares
- License
A fair look at where AgentForge sits among local Claude-agent orchestrators.
The AgentForge column reflects what's verifiable in this repo (tests,
docs, CI). Competitor cells are from the survey in ROADMAP.md Β§1
(β May 2026) β verify before quoting; star counts and features move.
We're new and small β the honest pitch isn't "most stars"; it's the most
polished local cockpit, with no fake activity, the lowest activation energy
(harness mode), and production-grade testing to back the claims. Where we
can't verify a competitor's capability we mark it ? rather than guess.
Important
Prerequisites: Bash, Git, the Claude Code CLI,
and Node.js 18+. Optional: Rust / Cargo for the forge-pulse accelerator.
git clone https://github.com/BEKO2210/AgentForge-Command
cd AgentForge-Command
npm install # installs the gui + mcp workspaces from the root
npm start # β http://localhost:4173/ (Mission Control)Prefer no local toolchain? Try it in Docker (Harness Mode, no API key):
docker compose up --build # β http://localhost:4173/Build details, per-OS prerequisites, the full environment-variable reference, and node-pty troubleshooting live in docs/INSTALL.md.
Optional β build the Rust accelerator (auto-detected on next launch):
cd tools/forge-pulse
cargo build --releaseOptional β live LLM briefings:
ANTHROPIC_API_KEY=sk-ant-... node gui/server.js
# Atlas now briefs the swarm through the Anthropic Messages API,
# streaming text deltas and reporting tokens + cost in its own terminal.Optional β launch a real Claude session per specialist:
In the cockpit, every card has a βΆ launch button. Click it (or open the
detail drawer and use the launch control there) β the server starts a PTY
for that specialist, pastes its role-specific briefing from gui/agents.json
and presses Enter so the session boots into role. Specialists don't
autostart, because 12 concurrent claude sessions is rarely what you want.
Set AUTOSTART=lead to start just Atlas, or AUTOSTART=all to start
everyone.
| Where | What happens | |
|---|---|---|
| πͺ Talk to Atlas | Broadcast bar (mode = ATLAS) | Your message goes straight to Atlas Prime via the LLM bridge. Atlas plans, dispatches specialists by name in @<id> form, and integrates their reports. Default mode. |
| π’ Broadcast to all | Broadcast bar (mode = SWARM) | Raw text is written to every running specialist's PTY simultaneously. Useful for "everyone β state" style nudges. |
| π¬ Talk to one specialist | Detail drawer β Direct message | Open any card's drawer, the chat box at the bottom writes straight into that specialist's PTY. Atlas still sees the result via the mission stream. |
Atlas's command center shows his answer large and readable, a workflow stepper (User β Atlas β plan β dispatch β work β reports β summary β done), a Dispatch & reports panel naming every specialist he addressed (honestly flagged running / dispatched / skipped), and a collapsible Technical events panel for tool calls, hooks and raw PTY output β so the answer is never buried.
cd gui && npm run smoke:atlas # β _handoff/agentforge-command/WORKFLOW_TEST_REPORT.md
# or the assertion suite:
npm run test:workflow # agentforge-real-workflow-smokeWithout an API key this runs a TEST HARNESS: a deterministic Atlas that
drives the real routing pipeline (parse β dispatch β reports β summary)
offline. It never pretends an LLM ran β every event is tagged harness:true
and the cockpit shows a TEST HARNESS badge. Set
AGENTFORGE_LIVE_TEST=1 ANTHROPIC_API_KEY=sk-ant-... for a real run. A full
operator handover lives in _handoff/agentforge-command/.
The default surface (/) is Mission Control. Atlas Prime sits at the top,
the swarm below.
- Atlas Prime β Chief Orchestrator (Cyber Turtle). Scans the repo, runs the spawn rules, holds the integration window.
- Sentinel β Risk & Safety (Guardian Owl). Audits gates, blocks unsafe outputs.
- Aurora β Premium UI / Motion (Neon Fox). Visual hierarchy, restrained motion, atmosphere.
- Forge β Build & Release (Forge Mole). CI, deps, release stability.
- Prism β Visualisation & Graphs (Prism Chameleon). Renders agent graphs and tool-call flows.
- Echo β Event Stream & Replay (Signal Bat). Subscribes to hooks, surfaces patterns.
- Vega β Performance & Motion Engine (Neon Hummingbird). FPS, jank, RAF.
- Scribe β Documentation (Scribe Raven). README, tutorials, changelog.
- Ledger β Cost & Tokens (Accountant Raccoon). Budget guardrails, burn rate.
- Raven β Debug & Failure Analysis (Debug Raven). Stack traces, bisects.
- Luma β Accessibility (Firefly). Contrast, ARIA, keyboard flow.
- Nova β Product Story (Star Dragon). Demo arc, positioning.
Each specialist has its own terminal card with:
- An animated SVG mascot that reflects its current state across the full
10-state vocabulary (
idle / listening / thinking / typing / working / reading / success / warning / error / celebrating). Every mascot has its own keyframe set, so the sameworkingreads differently on Sentinel (security scan sweep), Forge (anvil sparks), Ledger (spinning coin), Nova (mouth fire), etc. A side-by-side preview lives at/mascot-preview.html. - Channel callsign (
CHΒ·01), role badge, status pill with a pulsing dot. - Live terminal lines with a blinking cursor and a sweeping activity glow while the agent is busy.
- Confidence / Risk / Evolution mini-bars.
- Per-card β auto toggle and β evolve button.
The broadcast bar at the bottom is how you drive the swarm. In ATLAS
mode your message goes to Atlas β through the live LLM bridge if
ANTHROPIC_API_KEY is set, otherwise straight into Atlas's real claude PTY
(the first message launches it with your text as the mission). In SWARM
mode the text is written into every running specialist's PTY. Specialist
cards only move when something real happens β a real PTY byte, a hook event or
a live LLM stream. Nothing is simulated; an idle swarm stays idle. Press / to
focus, Enter to dispatch, Esc to close any drawer.
βTell the system once: You can press Enter - and it will do it for you from now on ."
A per-PTY watchdog presses Enter on clear permission prompts so the operator doesn't keep approving them by hand.
Warning
Responsible use. Auto-enter auto-approves permission prompts on your
behalf β including tool/command approvals in the agent's session. Only arm it
in repositories and tasks you trust, and only for agents you're actively
supervising. It's off by default, fires once per prompt with a 1.5 s
cooldown, and every fire is announced in the timeline β but it is still you
consenting in advance. See SECURITY.md.
Server-side, the watchdog matches a conservative whitelist:
(y/n) [y/n] (yes/no) [yes/no]
press enter to continue press any key
approve? approve this?
do you want to ... are you sure ... continue? confirm?
allow this to run allow this tool to run
When armed, the server presses \r (single fire, 1.5s cooldown so it can't
loop on a stuck prompt) and broadcasts an auto-fired note back to the arena
so the operator sees exactly when and why it acted.
Arm per agent with the β auto card toggle, or hit β Auto Β· all in the toolbar. The choice is persisted (see below) β turn it off any time.
The cockpit can be driven authoritatively by Claude Code's native hook system instead of inferring agent state from PTY stdout. The server exposes a single endpoint:
POST /api/hooks { "agent": "<id>", "event": "<hook>", "tool": "<name>" }
The same payload is accepted as JSON body, application/x-www-form-urlencoded,
or a GET query string β pick whichever is easiest from the hook script. The
event + tool resolve to one of the 11 activity states (reading, working,
thinking, listening, success, warning, idle, β¦) and propagate to the
agent's mascot through the same WebSocket the cockpit already uses.
Every spawned PTY sees AGENTFORGE_AGENT_ID and AGENTFORGE_HOOK_URL in its
environment, so the bundled
.claude/agentforge-hooks.example.json
template drops straight into a project's settings.json and just works.
Arena UI state lives at <repo>/.team/arena.json:
{
"evolution": { "sentinel": 3, "aurora": 2 },
"autoEnter": ["lead", "backend"],
"customAgents": [ /* operator-defined specialists */ ],
"atlasMission": ""
}The file is gitignored: it is runtime state, not a source of truth. Reset it from the UI ("βΊ Reset") or by deleting the file.
Atlas's seed roster is 12 specialists. To add more on the fly, click + New agent (or press Alt+N):
- Name, title, role, super-skill
- Mascot (pick one of 12 SVG templates β turtle, owl, fox, mole, chameleon, bat, hummingbird, raven, raccoon, debug-raven, firefly, dragon)
- Accent colour
The new agent appears in the grid immediately, is persisted to arena.json
and survives restarts. The mascot library lives in
gui/public/arena/mascots.js β drop in another
SVG template if you want a new species.
gui/server.js Node HTTP + WebSocket bridge
βββ http / β Mission Control (default)
βββ http /console β 302 redirect to / (legacy console retired)
βββ http /api/agents β swarm config (no prompts) + leadId
βββ http /api/state β folded .team state
βββ http /api/arena β arena server state (autoEnter, llm, claudeCli, pulse, spendβ¦)
βββ http /api/hooks β Claude Code tool-hook receiver (GET/POST)
βββ ws / β legacy PTY bridge (compat shim)
βββ ws /arena β arena protocol (auto-enter, persistence, live)
gui/public/arena/
βββ arena.html β Mission Control shell
βββ styles.css β cockpit theme + per-species mascot animations
βββ data.js β registry (identities, briefings, priors)
βββ mascots.js β 12 SVG mascot templates, 5 evolution levels
βββ state.js β tiny reactive store
βββ spawner.js β swarm registry + live-state engine
βββ broadcast.js β no-op stub (the mock simulator was removed β no fake activity)
βββ ui.js β renderers (hero, lead panel, grid, drawer, modal, timeline)
βββ main.js β app entry; ties store, engine, UI, persistence, WS
tools/forge-pulse/ β OPTIONAL Rust accelerator (see below)
.team/ β file-based coordination scaffold (unchanged)
Each specialist runs in its own git worktree on branch agentforge/<id>, so
two specialists can edit the same file in parallel without stomping each other;
Atlas (the lead) stays on the shared repo and integrates. Worktrees live under
.agentforge/worktrees/<id>/ and are kept after a run for review unless you
set AGENTFORGE_WORKTREE_CLEANUP=1. Disable the whole feature with
AGENTFORGE_WORKTREES=0 (falls back to the shared repo dir); a non-git repo
auto-disables it. Session metadata is persisted to .team/sessions.json, so
after a server restart the cockpit surfaces the previous run's sessions as
orphaned with a one-click relaunch (PTYs don't survive a restart β no fake
reattach).
AgentForge ships a read-only MCP server (mcp/server.js) that exposes the
.team/ coordination state (board, logs, memory, metrics, folded JSON) plus
a read-only swarm_status. Add it to Claude Code:
claude mcp add agentforge -- node mcp/server.jsThe launch_specialist / dispatch_goal tools are guidance-only
placeholders by design: spawning a PTY or dispatching a goal is a
state-changing action that must go through the cockpit's authenticated
/arena WebSocket (origin + session token). The read-only MCP process holds
no token and must never become an unauthenticated control path β see
docs/THREAT_MODEL.md.
Most of the runtime is I/O-bound; Node handles it comfortably. The one place that benefits from a tighter implementation is the hot loop that watches every PTY byte for permission prompts and activity changes. As the swarm grows we want that loop to stay sub-millisecond and crash-isolated.
tools/forge-pulse/ is a single-file, zero-dependency Rust binary that does
exactly this. The Node server pipes PTY bytes into its stdin and forwards
its stdout as {t:"pulse", kind:"prompt"|"activity", β¦} events to the
arena WebSocket. It is purely advisory β Node's JS matcher still drives
auto-enter, so removing or skipping the binary changes nothing functionally.
cd tools/forge-pulse
cargo build --release # produces target/release/forge-pulse
cargo test --release # 5 unit tests
cargo clippy --release -- -D warnings # lint cleanAuto-detected by the server on the next start. Set FORGE_PULSE=0 to disable
even when present.
Why Rust here and not the rest of the stack? The UI must stay in the browser. The server is I/O-bound β JavaScript is fine for that. But the matcher is in the hot path of every byte coming out of every PTY, and Rust gives us crash isolation, headroom for richer detection (token streams, multi-line context, diff-aware logs) and an easy export point to a remote VM later. It is a contained, well-scoped use of Rust β exactly the way a polyglot stack should grow.
- Tests β
bash tests/run.shruns 165 checks (87 bash against the coordination scripts + 40 arena unit tests for the cockpit modules + 30 server integration tests that boot the realgui/server.jsover HTTP + WebSocket β covering the hook receiver, auto-enter scoping, launch failure and corrupt-state recovery + 8 workflow checks that prove the full routing chain).cargo test --releaseintools/forge-pulseadds 5 Rust unit tests. - Lint β
bash scripts/team-check.sh(bash -n+shellcheck+ tests) andcargo clippy --release -- -D warningsare both clean. - Concurrency safety β locks are atomic
mkdirdirectories with stale detection (unchanged from the original kit). - Privacy β everything is local. The server binds to
127.0.0.1. Arena state lives in.team/arena.jsonand is gitignored. No external trackers, no telemetry, no LLM calls leave the machine unless you wire them yourself. - Accessibility β focus rings on every interactive element, keyboard
shortcuts for the broadcast bar (
/), drawer (Esc), and spawn-builder (Alt+N). All animations honourprefers-reduced-motion: reduce.
The original file-based coordination kit lives on underneath the cockpit. The
board, role lanes, atomic mkdir locks, the green gate, the MCP server and the
team-*.sh scripts in .team/ and scripts/ work
exactly as before β Mission Control sits on top of them. (The old 4-agent
terminal console UI has been retired; /console now redirects to Mission
Control.)
See gui/README.md for the server's own documentation, and
.team/PROTOCOL.md for the file-based coordination
rules.
| Doc | What |
|---|---|
docs/INSTALL.md |
Per-OS setup, Docker, env-var reference |
ROADMAP.md |
The full Phase 0β6 plan + competitive survey |
docs/THREAT_MODEL.md |
Trust boundaries, STRIDE, Anthropic policy, fallbacks |
SECURITY.md |
Disclosure policy + Phase 1β4 audit history |
docs/BENCHMARKS.md |
Auto-enter matcher benchmark (sub-ms proof) |
KNOWN_LIMITS.md |
Honest boundaries & trade-offs |
PRIVACY.md |
Local-first data handling + DSGVO/GDPR |
TRADEMARK.md Β· THIRD_PARTY_NOTICES.md |
Legal + license inventory |
docs/LAUNCH.md |
Launch sequence & checklist |
Try without a key: test-harness mode runs the whole cockpit with no Anthropic key β
npm install && npm start(ordocker compose up --build), then open http://localhost:4173. To record a demo, seedocs/demo/.
MIT β Copyright Β© 2026 Belkis Aslani (BEKO2210). Use it freely, including commercially.
Trademark & non-endorsement. "Claude," "Claude Code," and related marks
are trademarks of Anthropic PBC. AgentForge Command is an independent,
unofficial community project β not endorsed by, affiliated with, or
officially connected to Anthropic. It is provided as-is for educational and
experimental use. See TRADEMARK.md.
Privacy / Datenschutz. AgentForge is local-first and ships zero telemetry.
See PRIVACY.md (incl. a DSGVO/GDPR note for the DACH region).
Third-party software. Built on open-source components (all permissive
licenses). Inventory + SBOM: THIRD_PARTY_NOTICES.md.
Boundaries. Honest limits and trade-offs: KNOWN_LIMITS.md.
Security model + reporting: SECURITY.md Β·
docs/THREAT_MODEL.md.





