Agent Frameworks & Infrastructure
MindForge
Agentic-intelligence framework for Claude Code.
2 min read · 451 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 174 slash commands, 154 specialized subagents, and 73 skills plus a hooks system, cost-aware model routing (Haiku/Sonnet/Opus tier escalation), SHA-256 audit chains, and stuck-detection with auto-repair. Execution runs on a semaphore-based wave (parallel) model with a streaming WebSocket SDK, persisted through an embedded sql.js datastore. Ships as npx mindforge-cc.
- 174 commands · 154 subagents · 73 skills
- Wave parallelism via a DAG + dependency tracking
- Cost-aware routing + audit/replay via hash-linked logs
- Built on a pure Node.js + WASM runtime with a strict-TypeScript SDK
1,677 commits — the most-invested project in the portfolio.
Architecture
MindForge splits into four load-bearing subsystems. Wave execution (bin/autonomous/wave-executor.js + bin/autonomous/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; a separate difficulty-scorer.js computes a per-task difficulty score but runs in shadow mode, logging intended routing to stderr without touching the real model call. Governance (bin/governance/audit-hash.js + audit-verifier.js, paired with bin/autonomous/audit-writer.js) is a single canonical SHA-256 hasher shared by the writer and the verifier, chaining each audit entry to the one before it. Persistence splits in two: resumable session state (tasks, waves, audit pointers) lives in .planning/HANDOFF.json via bin/autonomous/state-manager.js, while a separate embedded sql.js (WASM SQLite) datastore (celestial.db) holds traces, remediations, skills, and knowledge — not task/wave resumability. Streaming is a WebSocket SDK (sdk/src/events.ts) that ships with zero runtime dependencies.
How It Works
- A task enters the engine and
dependency-dag.jsbuilds a DAG from its declared dependencies, topologically sorting it into waves — a circular dependency throws immediately instead of deadlocking silently. - Within a wave,
wave-executor.js's Semaphore bounds how many tasks run concurrently, so parallelism is real but capped. - Each task resolves its model tier through
model-router.js's persona map; when a caller passes ataskContext,difficulty-scorer.jsalso runs in shadow mode, computing what would route differently but never overriding the persona map's actual choice. - As work completes,
bin/autonomous/audit-writer.jsappends an entry to the local audit log, hashing it against the previous entry's hash viabin/governance/audit-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. - Progress and results stream out over
WebSocketEventStreamto any connected SDK client;verify-audit.jscan independently replay the chain and fails closed the moment a hash breaks.