v0.3.12 — Hard Governance Enforcement
The Fix
MartinLoop was promising governance but letting agents bypass it. This release makes governance mechanically enforced — not a suggestion.
What changed
martin estimate now writes a receipt
Running martin estimate "..." writes a timestamped receipt to workflow-state.json. This is the evidence trail that governance actually happened.
martin gate requires estimate
The gate now checks for both martin doctor AND martin estimate before returning exit 0. No estimate = BLOCKED. This is what the Claude Code PreToolUse hook calls — meaning Bash, Edit, and Write tool calls are blocked until governance is complete.
martin_run MCP tool blocks until estimate exists
The MCP server's run gate now includes estimate as a required step alongside doctor, plan, and preflight. Agents cannot call martin_run without first calling martin_estimate.
martin mcp install --host claude auto-installs hooks
Running martin mcp install --host claude now writes governance hooks directly into ~/.claude/settings.json. No manual copy-paste needed. The hooks install martin gate as a PreToolUse blocker for Bash/Edit/Write.
MartinLoop Memory Store
New _martin/memory.jsonl — append-only, never overwrites. Records user preferences, consent signals, budget patterns, and behavioral observations across sessions. Accessible via martin://agent/memory-summary MCP resource.
Install
npm install -g martin-loop@0.3.12After install, wire governance into Claude Code:
martin mcp install --host claude