Agent Frameworks & Infrastructure
MindForge
Agentic-intelligence framework for Claude Code.
3 min read · 543 words
Multi-agent AI workflows are powerful but chaotic: unbounded token spend, logic drift in long loops, and no audit trail. MindForge is a command-driven orchestration framework for Claude Code that brings governance to that chaos.
It exposes 221 slash commands, 164 specialized subagents, and 354 skills plus a hooks system, cost-aware model routing (Haiku/Sonnet/Opus tier escalation), and SHA-256 audit chains. A unit-tested wave engine over a dependency DAG, with audit events streamed over SSE and an embedded sql.js store. Ships as npx mindforge-cc, which also installs for Antigravity, Cursor, Copilot, Gemini CLI and OpenCode, with hooks enforced on Claude Code only.
- 221 commands · 164 subagents · 354 skills — 152 subagents adapted from VoltAgent's
awesome-claude-code-subagents(MIT) - Wave execution via a DAG + dependency tracking in a unit-tested JS engine
- Cost-aware routing + audit/replay via hash-linked logs
- Built on a pure Node.js + WASM runtime with a strict-TypeScript SDK
1,822 commits on
mainas of 2026-10-21, the most of any project in this portfolio; 0 stars.
Architecture
MindForge splits into four load-bearing subsystems. Wave execution (bin/autonomous/wave-executor.js + dependency-dag.js) topologically sorts tasks with Kahn's algorithm, detects cycles explicitly, and groups the result into waves bounded by a hand-rolled Semaphore. Model routing (bin/models/model-router.js) maps personas to model tiers — planner and security personas escalate to Opus, executor/reviewer/QA run on Sonnet, quick tasks run on Haiku — configurable via MINDFORGE.md. Governance (bin/governance/audit-hash.js + audit-verifier.js, paired with bin/autonomous/audit-writer.js) is one canonical SHA-256 hasher shared by writer and verifier, chaining each entry to the one before it. Persistence splits in two: resumable session state lives in .planning/HANDOFF.json via state-manager.js, while a separate embedded sql.js datastore (celestial.db) holds traces, remediations, skills, and knowledge. Streaming is MindForgeEventStream (sdk/src/events.ts), a localhost-only SSE server that tails .planning/AUDIT.jsonl, in an SDK with zero runtime dependencies; its WebSocketEventStream is a client only, as MindForge ships no WebSocket server.
The repo's own capabilities manifest states the limit: the bin/autonomous/ engine is unit-tested but not yet wired to any live command path. AutoRunner has no production caller, mindforge headless is a stub that exits 1, and /mindforge:auto and /mindforge:execute-phase are markdown specs the model follows.
How It Works
Steps 1, 2 and 5 belong to the unit-tested engine, which no live command calls yet (the council reuses only its Semaphore); steps 3, 4 and 6 are reachable today.
dependency-dag.jsbuilds a DAG from a plan's declared dependencies and topologically sorts it into waves — a circular dependency throws immediately instead of deadlocking silently.- Within a wave,
wave-executor.js's Semaphore caps how many tasks run concurrently. - A model tier resolves through
model-router.js's persona map whenmodel-client.jsis asked for a model (the council, cross-review and research engines do);difficulty-scorer.jswould log a shadow route to stderr given ataskContext, but nothing inbin/passes one yet. - Lifecycle hooks append entries to the local audit log through
audit-writer.js, hashing each against the previous entry's hash viaaudit-hash.js— a tamper-evident chain, though the log itself (.planning/AUDIT.jsonl) is gitignored, so it protects a local run rather than git history. - State — tasks, waves, audit pointers — persists to
.planning/HANDOFF.jsonviastate-manager.js, so a session can resume after a crash. - Once started and pointed at a project,
MindForgeEventStream's/eventsendpoint streams new audit entries asaudit_entryevents to any local client;verify-audit.jscan independently replay the chain and fails closed the moment a hash breaks.