MartinLoop
Give coding agents more work. Watch them less. Ship more.
MartinLoop lets you give coding agents real software jobs without babysitting every step.
Your coding agent still writes the code. MartinLoop keeps the job focused, bounded, and accountable — with limits, stop conditions, verification, recovery, and a clear outcome when the run ends.
Start Here
Audit first — run npx -y martin-loop@latest audit to see how much API-equivalent Claude Code spend went into fix-and-retry loops. Add --offline for zero network access or --share for a shareable summary.
Install / onboard — run npx -y martin-loop@latest start, or install it globally with npm install -g martin-loop@latest.
Governed run — define an objective, verifier, budget, and iteration cap with martin run.
Verifier — completion requires fresh verifier evidence bound to the active run and workspace. A configured verifier proves only the checks it runs; VERIFIED is not a claim that the code is bug-free or automatically safe to merge.
Budget — set a hard spend ceiling with --budget-usd and an attempt ceiling with --max-iterations.
Receipts — inspect the latest result with martin dossier --latest and validate stored integrity with martin runs verify --latest.
Hosted sync (optional) — governed work is local-first. Configure MARTIN_API_TOKEN and MARTIN_TELEMETRY_ENDPOINT, then use martin sync status and martin sync flush to send preserved evidence to a dashboard later. See the quickstart.
MCP — install @martinloop/mcp@latest in a supported host or generate host configuration with martin mcp print-config.
Documentation — continue with the quickstart, CLI reference, or MCP setup.
When --model is provided, MartinLoop passes it through unchanged. Without --model, the authenticated host runtime chooses its own default. MartinLoop does not inject a hidden fallback model.
For AI Agents
MartinLoop is the system around the coding job.
The coding agent still writes the code. MartinLoop keeps the job, limits, verification, recovery, outcome, and history consistent around the work.
Use MartinLoop when a coding task needs:
- clear job and success criteria
- preflight readiness before agent spend
- hard budget and iteration limits
- allowed or denied edit scope
- controlled retries and stop conditions
- independent verifier commands
- recovery and rollback evidence
- a finite completion decision
- run receipts, dossiers, history, failure classification, and post-run analysis
- one consistent workflow across supported coding-agent runtimes
Canonical lifecycle:
The product-level flow is Definition of Done -> Controlled Run -> Verified Handoff.
For machine-readable context start with llms.txt, llms-full.txt, and MartinLoop for AI Agents.
One System Around the Run
Teams should not need to stitch together a separate script or point tool for every part of coding-agent execution. MartinLoop connects the control path around the agent from preflight through post-run evidence.
MartinLoop does not replace Git, GitHub, CI, dedicated security scanners, observability platforms, code review, or the coding agent itself. It gives those workflows one governed execution record to inspect.
Change the worker. Keep the job.
MartinLoop is model-agnostic by design. The job, limits, verification, recovery, and outcome are separate from the worker underneath.
Native coding-agent CLIs and OpenAI-compatible model runtimes use different execution paths, so MartinLoop only describes a worker as fully supported when that execution path has been publicly released and validated.
Why MartinLoop
AI coding agents can create more software than ever. The problem is trusting them with bigger jobs without turning yourself into their full-time manager.
Agents drift. They retry. They break unrelated things. They say "done" too early. And a run that was supposed to save time can create even more work to review.
MartinLoop keeps the job accountable outside the agent itself: clear boundaries, hard limits, configured checks, recovery information, and an explicit outcome.
The goal is simple:
Give the agent more responsibility without giving it unlimited freedom.
Why Teams Adopt MartinLoop
- Less babysitting — give agents larger jobs without watching every step.
- Clear boundaries — keep scope, attempts, and spend inside the limits you set.
- Checks before "done" — configured verification decides whether the evidence passed.
- Understand failures — know why the run stopped instead of digging through logs.
- Recover cleanly — preserve enough evidence to retry, repair, roll back, or hand off.
- One workflow across agents — keep the job consistent as the worker underneath changes.
More software. Less supervision.
See Your Loop Tax
Before changing your workflow, measure it:
MartinLoop reads Claude Code session history locally and reports how much API-equivalent agent spend happened inside fix-and-retry loops, how often verifier commands failed, the longest retry chain, and sessions that ended red. Session contents stay local. Use --offline to disable even the public pricing lookup, and --share to create a screenshot-ready SVG plus Markdown summary.
Then put limits around the next run:
2-Minute Install Path
If MartinLoop detects more than one supported coding-agent runtime, save the one you want to use before the first governed run. For example:
Replace codex with claude or gemini when that is your intended runtime.
Quick Start
Try MartinLoop in a disposable demo workspace:
Optional global install:
If this flow is useful, open an issue with feedback so we can keep improving the public experience.
start prints the first-run guided path. run auto-checks doctor, session-start, and preflight, then executes when the environment is ready. Use --proof only when you intentionally want an explicit no-spend lane.
Inspect-first flow:
share --latest writes three files into the selected run directory under share/: run-receipt.json, run-receipt.md, and proof-card.svg.
Release notes for MartinLoop 0.6.5: MartinLoop 0.6.5.
Release notes for MartinLoop 0.6.6: MartinLoop 0.6.6.
Release notes for MartinLoop 0.6.7: MartinLoop 0.6.7.
Release notes for MartinLoop 0.6.8: MartinLoop 0.6.8.
Release notes for MartinLoop 0.7.0: MartinLoop 0.7.0.
Release notes for MartinLoop 0.7.1: MartinLoop 0.7.1.
Release notes for MartinLoop 0.8.0: MartinLoop 0.8.0.
Release notes for MartinLoop 0.8.1: MartinLoop 0.8.1.
Release notes for MartinLoop 0.8.2: MartinLoop 0.8.2.
Release notes for MartinLoop 0.8.3: MartinLoop 0.8.3.
Release notes for MartinLoop 0.8.4: MartinLoop 0.8.4.
Release notes for MartinLoop 0.8.5: MartinLoop 0.8.5.
Release notes for MartinLoop 0.8.6: MartinLoop 0.8.6.
Release notes for MartinLoop 0.8.7: MartinLoop 0.8.7.
Release notes for MartinLoop 0.8.8: MartinLoop 0.8.8.
Release notes for MartinLoop 0.8.9: MartinLoop 0.8.9.
Release notes for MartinLoop 0.9.0: MartinLoop 0.9.0.
Swarm Mode Demo
Run the deterministic 15-agent launch-board demo without provider calls or spend:
That default result is local simulation evidence only: it is non-governed, is not persisted to the Swarm run store, and does not evaluate signed receipt integrity. Inspect simulation output through the demo --swarm human view or demo --swarm --json, plus the local files created under --dir. Do not use swarm status, swarm inspect, swarm dossier, swarm verify, or swarm share for the default simulation output.
To exercise the persisted provider-free governance path, use:
An approved live Codex qualification uses the same persisted route with --live, an explicit positive budget, and a clean repository baseline. Persisted modes use --cwd and --runs-dir; they reject the simulation-only --dir and --force flags. Live failures exit nonzero and never fall back to simulation.
Persisted demo runs and runs created by swarm plan plus swarm run are valid inputs to swarm status, swarm inspect, swarm dossier, swarm verify, and swarm share. A stored run is not automatically verified: rely on the verifier and receipt-integrity result, not the command route alone.
Model and Engine Support
MartinLoop governs the job independently of the coding worker.
- Native agent CLIs: Codex, Claude Code, Gemini CLI
- OpenAI-compatible endpoints: Kimi K2, NVIDIA Nemotron, DeepSeek, Qwen/Qwen Coder, Mistral/Codestral, OpenRouter/Together/Fireworks routes, Ollama, LM Studio, llama.cpp, and other compatible endpoints
- Use
--engine openai for OpenAI-compatible model endpoints.
The worker changes; MartinLoop's budget, scope, verifier, receipt, and integrity contract does not.
More detail: Model and engine support
The Run From Start to Handoff
MartinLoop's terminal presentation is built around the governed lifecycle, not around a single verifier command.
Governed Run Plan shows the configured finish line before work starts, including the task, budget posture, verifier plan, scope, and execution boundaries.
Controlled Run keeps the coding agent working inside those boundaries while MartinLoop tracks attempts, cost, stop conditions, and recovery state.
Verified Handoff closes the loop with one authoritative outcome:
VERIFIED when the configured evidence supports the Definition of Done
STOPPED when a configured hard boundary ends the run
NEEDS REVIEW when completion cannot be established from the available evidence
The handoff can include verifier steps, scope state, attempt count, cost provenance, unresolved evidence, recovery state, receipt integrity, and the next safe action. The exact fields depend on what the run actually established.
Visual Proof
MartinLoop turns an AI coding run into an inspectable execution record: budget used, verifier result, changed files, rollback evidence, and final receipt.
Ungoverned agents can retry until cost and scope drift. MartinLoop adds budget caps, verifier gates, and audit evidence so the run has a clear stop condition.
MartinLoop Arcade
Long governed runs do not have to mean staring at a spinner. In an interactive terminal, MartinLoop Arcade can be offered while the coding agent continues working in the background.
Arcade is presentation-only. It cannot change the agent, budget, verifier, policy decision, run outcome, or receipt evidence. It stays out of JSON, CI, non-interactive, and other machine-readable execution paths.
Use --arcade to offer Arcade immediately for a supported interactive run, or --no-arcade to suppress it for that run.
Proof Receipts
Proof receipts are local share bundles for governed AI coding runs. They show the task, spend, budget, verifier result, receipt integrity, and any evidence boundary that should not be rounded into confidence.
This real governed run spent $0.51 against a $3.00 budget. The verifier passed and the receipt integrity was signed, but the proof stayed at EVIDENCE_BOUNDARY because rollback evidence was not recorded.
Generate your own receipt after a governed run:
Example receipt files: Markdown and JSON.
Verify the Public Release Yourself
Use this lane from a clean temp directory to verify the public CLI flow exactly as shipped:
For deterministic installs, pin the package line ([email protected]) or use martin-loop@latest. Plain npx martin-loop can resolve a stale local cache on some machines.
Expected share bundle outputs:
share/run-receipt.json
share/run-receipt.md
share/proof-card.svg
See It In Action
The point is not that every governed run is always cheaper. The point is that every run becomes inspectable and enforceable: budget policy, verifier result, stop reason, and evidence are explicit.
For a deterministic public repro lane, use the benchmark workspace and compare governed execution to unbounded retry behavior:
npx martin-loop bench --suite under-3-challenge
npx martin-loop bench --suite ralphy-engineering-50
Ralph-Style Loops
A Ralph-style loop is the failure mode where an AI coding agent keeps trying without knowing when continuing is unsafe, uneconomical, or unlikely to succeed.
MartinLoop keeps the useful part of the loop, then adds brakes:
- stop before budget overspend
- classify unsafe or invalid actions before execution
- write an audit record for every attempt
- preserve rollback and verifier evidence for review
- reduce runaway context growth with compact run summaries
Failure Taxonomy (13 Runtime Classes)
When a coding agent fails, "something went wrong" is not useful enough.
MartinLoop classifies runtime failures into 13 canonical classes so a failed run can tell you what happened, what needs attention, and what future runs can learn from.
See the canonical table: Failure Taxonomy (13 Runtime Classes).
What It Does
- Budget caps stop the next attempt before a configured USD, token, or iteration limit is exceeded.
- Verifier gates require a real check, such as
npm test, before a run can count as complete.
- Policy checks block unsafe verifier commands, risky path changes, and secret-like task inputs before execution.
- Failure classification uses canonical runtime classes for triage and reporting. See Failure Taxonomy (13 Runtime Classes).
- Run receipts capture stop reason, verifier evidence, budget posture, integrity state, and the next safe action.
martin share --latest turns the latest governed run into a local share bundle with a redacted JSON receipt, Markdown recap, and proof-card SVG.
- MCP integration gives hosts one write-capable execution entrypoint plus richer planning, inspection, and review helpers.
How It Works
Trust Boundaries
- Cost and token outputs always include provenance (
actual, calculated, estimated, or unavailable).
- For Codex specifically, MartinLoop reports authoritative usage only when the host exposes it; otherwise MartinLoop labels usage as estimated and avoids presenting it as settled accounting.
- Receipt integrity must be
verified before a run is treated as trustworthy evidence for external review.
CLI
[Install in VS Code]
[Add to Cursor]
Common options:
Examples below use npx martin-loop so they work without a global install. If you install martin-loop globally, the martin alias works too.
Use martin-loop share --latest after dossier when you want a redacted bundle you can hand to another person without sending raw run-store files.
More detail: CLI reference and configuration reference.
Benchmarks
MartinLoop ships a public deterministic benchmark workspace in benchmarks/ plus the installed-package bench command.
From an installed package:
From a clean public clone:
Equivalent workspace-filter commands:
The installed-package command reads the shipped public fixtures. The repo-clone workflow runs the public benchmark workspace directly.
MCP
Run the standalone MCP package directly:
Add it to common hosts:
Generate host config from the root CLI:
The root martin-loop package, standalone @martinloop/mcp package, plugin metadata, and MCPB product version are aligned at 0.9.0. The MCPB manifest schema remains 0.3.
The public MCP release train labels are:
0.1.4 operator foundation
0.2.0 cockpit expansion
0.2.5 public MCP package line
0.2.7 usability and review release
0.3.0 host adoption and onboarding release
0.3.1 review and handoff release
0.5.3 execution-control and host-compatibility release
0.5.5 governed-autonomous execution and proof-surface release
0.5.6 hosted run sync, fail-closed rollback, and verified-completion hardening
The standalone MCP registry/server identifier is io.github.Keesan12/martin-loop.
More detail: MCP setup, MCP tool reference, and MCP compatibility.
SDK
The root SDK also exports createCodexCliAdapter, createGeminiCliAdapter, createDirectProviderAdapter, and createOpenAiCompatibleAdapter.
More detail: SDK reference and package map.
Examples
Development
Requirements:
Standalone MCP validation:
Contributing
Issues, bug reports, workflow feedback, and focused pull requests are welcome. Public-facing docs should stay concise, user-centered, and accurate.
Star this repo if you want to give coding agents more real work without babysitting every step.
martinloop.com · [email protected]
MartinLoop is part of the NVIDIA Inception program.
[NVIDIA Inception Program logo]
Telemetry & Privacy
MartinLoop sends minimal anonymous usage data to help improve reliability and prioritize development. On a fresh interactive install, telemetry is enabled by default but remains blocked until the one-time disclosure is shown. After the disclosure, the same run may send the allowlisted anonymous events unless you opt out.
What is sent:
- Random installation ID (generated locally, never linked to your identity)
- Per-process session ID
- CLI version, Node version, OS and architecture
- Event name and timestamp
- Command category, run duration, success/failure category
- Whether a receipt was generated; whether recovery occurred
- Opaque remote-experience ID/type after a click
What is never sent:
- Source code, prompts, task text, repository contents, file names, file paths
- Environment variables, secrets, provider/model output
- Receipt contents, ledger contents, approval details, verifier evidence
- Email addresses, workspace, project, or organization identifiers
- Raw exception messages or stack traces
Endpoint: https://tupopqvqnyyjuxseyxkr.supabase.co/functions/v1/product-events
Headers sent: Content-Type: application/json, User-Agent: MartinLoop-CLI/<version>
No authorization header, API key, or direct table access.
Opt out anytime:
Inspect what is sent:
Environment variables that disable telemetry: MARTIN_TELEMETRY_DISABLED=1, DO_NOT_TRACK=1, CI=1
Set MARTIN_TELEMETRY_DEBUG=1 to print the telemetry envelope to stderr without transmitting it.
MartinLoop continues to work normally with telemetry disabled. No features are gated on telemetry consent.
License
Apache-2.0. See LICENSE.