{
  "markdown": "# MartinLoop\n\n**Give coding agents more work. Watch them less. Ship more.**\n\nOne system around coding-agent work so you can ship more production-ready software without babysitting every run.\n\nThe coding agent still writes the code. MartinLoop is the system around the job.\n\n<div align=\"center\">\n  <img src=\"./docs/assets/martinloop-logo.png\" alt=\"MartinLoop\" width=\"260\">\n\n  **MartinLoop helps coding agents stay focused, stay within budget, and finish work you can actually use.**\n\n  Built from thousands of real agent runs where the problem was not just intelligence — it was unmanaged work, false completion, wasted spend, and too much review overhead.\n\n  **Get started:** `npx -y martin-loop@latest start`  \n  **Try the demo:** `npx -y martin-loop@latest demo`\n\n  [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square&logo=apache)](./LICENSE)\n  [![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178c6?style=flat-square&logo=typescript&logoColor=white)](./tsconfig.base.json)\n  [![Node](https://img.shields.io/badge/node-%3E%3D20-3c873a?style=flat-square&logo=nodedotjs&logoColor=white)](#quick-start)\n  [![npm version](https://img.shields.io/npm/v/martin-loop?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/martin-loop)\n  [![npm downloads](https://img.shields.io/npm/dm/martin-loop?style=flat-square&label=downloads)](https://www.npmjs.com/package/martin-loop)\n\n  MartinLoop is part of the NVIDIA Inception program.\n  <br>\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"./docs/assets/nvidia-inception-program.png\">\n    <img src=\"./docs/assets/nvidia-inception-program-light.png\" alt=\"NVIDIA Inception Program logo\" width=\"280\">\n  </picture>\n</div>\n\n## Start Here\n\n**Install** — run `npx -y martin-loop@latest start`, or install it globally with `npm install -g martin-loop@latest`.\n\n**Governed run** — define the objective, set a verifier, add a budget, and cap the number of attempts with `martin run`.\n\n**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.\n\n**Budget** — set a hard spend ceiling with `--budget-usd` and an attempt ceiling with `--max-iterations`.\n\n**Outcome and evidence** — inspect the latest result with `martin dossier --latest` and validate stored integrity with `martin runs verify --latest`.\n\n**MCP** — install `@martinloop/mcp@latest` in a supported host or generate host configuration with `martin mcp print-config`.\n\n**Documentation** — continue with the [quickstart](./docs/getting-started/quickstart.md), [CLI reference](./docs/reference/cli.md), or [MCP setup](./docs/getting-started/mcp.md).\n\nWhen `--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.\n\n## For AI Agents\n\nMartinLoop is the system around the coding job. The coding agent still writes the code. MartinLoop keeps the work focused, bounded, checked, recoverable, and inspectable.\n\nUse MartinLoop when a coding task needs one or more of these controls:\n\n- preflight readiness before agent spend\n- hard budget and iteration limits\n- allowed or denied edit scope\n- controlled retries and stop conditions\n- independent verifier commands\n- recovery and rollback evidence\n- a finite completion decision\n- run history, failure classification, and post-run analysis\n- one workflow across native coding agents and supported model runtimes\n\nCanonical lifecycle:\n\n```text\nDEFINE\n  -> FOCUS\n  -> GUARD\n  -> CHECK\n  -> RECOVER\n  -> OUTCOME\n  -> LEARN\n```\n\nThe product-level flow is **Define the job -> Bound the work -> Check the result -> Decide what happens next**.\n\nFor machine-readable context start with [`llms.txt`](./llms.txt), [`llms-full.txt`](./llms-full.txt), and [MartinLoop for AI Agents](./docs/for-agents.md).\n\n## One System Around the Run\n\nTeams should not need to stitch together a separate script or point tool for every part of coding-agent execution. MartinLoop connects the workflow around the agent from setup through outcome and post-run learning.\n\n| Stage | MartinLoop role |\n| --- | --- |\n| Define | Capture the objective, verifier, budget, scope, acceptance criteria, and finish line. |\n| Preflight | Check readiness and required workflow evidence before agent spend. |\n| Guard | Enforce budgets, attempts, path boundaries, policy, and stop conditions while the coding agent works. |\n| Check | Run configured verification and bind the evidence to the active run and workspace. |\n| Recover | Preserve recovery and rollback state when another attempt or human review is required. |\n| Outcome | Produce the authoritative `VERIFIED`, `STOPPED`, or `NEEDS REVIEW` handoff. |\n| Learn | Inspect run history, cost provenance, failure classes, dossiers, and shareable evidence after execution. |\n\nMartinLoop does not replace Git, GitHub, CI, dedicated security scanners, observability platforms, code review, or the coding agent itself. It gives those workflows one consistent execution record to inspect.\n\nModel-agnostic by design. MartinLoop keeps the job, limits, verification, recovery, and outcome consistent even when the agent or model underneath changes.\n\n## Why MartinLoop\n\nAI made it much easier to create software work. It did not make it easier to know what to trust, what to merge, what to retry, or when to stop.\n\nThat is the real bottleneck.\n\nA task that looked like a quick fix can turn into dozens of attempts, wasted budget, scope drift, and a diff nobody wants to approve. MartinLoop gives every run an explicit contract: objective, verifier, budget, scope, and a clear next decision.\n\nUse it when coding work needs to stay bounded, inspectable, and safe enough to hand off without babysitting every step.\n\n## Why Teams Adopt MartinLoop\n\nIt helps you ship more without becoming the full-time manager of your agents.\n\nIt stops wasted retries before cost, context, and review debt spiral.\n\nIt adds verification before unfinished work gets rounded into “done.”\n\nIt preserves a clean handoff when work needs review, another attempt, or rollback.\n\nIt keeps one workflow across supported coding agents instead of a patchwork of scripts and point tools.\n\nTeams use MartinLoop when they want faster software output without giving up control of cost, quality, or accountability.\n\n## 2-Minute Install Path\n\n```sh\nnpx -y martin-loop@latest start\nnpx -y martin-loop@latest demo\ncd martin-loop-demo\nnpm install\nnpx -y martin-loop@latest run \"Summarize the demo workspace and prove tests still pass\" --verify \"npm test\" --budget-usd 2 --max-iterations 1\n```\n\n## Quick Start\n\nTry MartinLoop in a disposable demo workspace:\n\n```sh\nnpx -y martin-loop@latest start\nnpx -y martin-loop@latest demo\nnpx -y martin-loop@latest --version\ncd martin-loop-demo\nnpm install\nnpx -y martin-loop@latest run \"Summarize the demo workspace and prove tests still pass\" --verify \"npm test\" --budget-usd 2 --max-iterations 1\nnpx -y martin-loop@latest dossier --latest\nnpx -y martin-loop@latest share --latest\n```\n\nOptional global install:\n\n```sh\nnpm install -g martin-loop\nmartin-loop --version\n```\n\nIf this flow is useful, open an issue with feedback so we can keep improving the public experience.\n\n`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.\n\nInspect-first flow:\n\n```sh\nnpx -y martin-loop@latest doctor\nnpx -y martin-loop@latest session-start\nnpx -y martin-loop@latest preflight \"Summarize the demo workspace and prove tests still pass\" --verify \"npm test\"\n```\n\n`share --latest` writes three files into the selected run directory under `share/`: `run-receipt.json`, `run-receipt.md`, and `proof-card.svg`.\n\nThe current public package line is `0.6.0`. Use `@latest` for normal installs and pin `0.6.0` only when you need a deterministic audit lane.\n\n## Model and Engine Support\n\nMartinLoop governs the job independently of the coding worker.\n\n- Native coding-agent CLIs: Codex, Claude Code, and Gemini CLI.\n- OpenAI-compatible endpoints: use `--engine openai` for supported model/runtime adapters.\n- Broader model-specific coding execution is promoted only after its governed mutation path is release-tested.\n\nThe worker changes; MartinLoop's budget, scope, verifier, receipt, and integrity contract does not.\n\nMore detail: [Model and engine support](./docs/reference/model-support.md)\n\n## The Run From Start to Handoff\n\nMartinLoop's terminal presentation is built around the governed lifecycle, not around a single verifier command.\n\n**Governed Run Plan** shows the configured finish line before work starts, including the task, budget posture, verifier plan, scope, and execution boundaries.\n\n**Controlled Run** keeps the coding agent working inside those boundaries while MartinLoop tracks attempts, cost, stop conditions, and recovery state.\n\n**Verified Handoff** closes the loop with one authoritative outcome:\n\n- `VERIFIED` when the configured evidence supports the Definition of Done\n- `STOPPED` when a configured hard boundary ends the run\n- `NEEDS REVIEW` when completion cannot be established from the available evidence\n\nThe 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.\n\n## Visual Proof\n\nMartinLoop turns an AI coding run into an inspectable execution record: budget used, verifier result, changed files, rollback evidence, and final receipt.\n\n<div align=\"center\">\n  <img src=\"./docs/assets/cli-animated.svg\" alt=\"MartinLoop CLI showing a governed agent run\" width=\"720\">\n</div>\n\nUngoverned 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.\n\n<div align=\"center\">\n  <img src=\"./docs/assets/side-by-side.svg\" alt=\"MartinLoop governed run compared with an unbounded retry loop\" width=\"720\" height=\"1080\">\n</div>\n\n## MartinLoop Arcade\n\nLong 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.\n\nArcade 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.\n\nUse `--arcade` to offer Arcade immediately for a supported interactive run, or `--no-arcade` to suppress it for that run.\n\n## Proof Receipts\n\nProof 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. If you need to hand the run to another person, this is the clean summary artifact.\n\nThis 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.\n\n<div align=\"center\">\n  <img src=\"./docs/assets/proof-receipt-live-governed.png\" alt=\"MartinLoop CLI proof receipt for a governed run with spend, budget, verifier, integrity, and evidence boundary\" width=\"720\">\n</div>\n\nGenerate your own receipt after a governed run:\n\n```sh\nnpx -y martin-loop@latest run \"Summarize the demo workspace and prove tests still pass\" --proof --verify \"npm test\"\nnpx -y martin-loop@latest runs verify --latest\nnpx -y martin-loop@latest share --latest\n```\n\nExample receipt files: [Markdown](./docs/examples/proof-receipts/live-governed-run-receipt.md) and [JSON](./docs/examples/proof-receipts/live-governed-run-receipt.json).\n\n## Run This Audit Yourself\n\nUse this lane from a clean temp directory to verify the public CLI flow exactly as shipped:\n\n```sh\nnpx -y martin-loop@0.6.0 --version\nnpx -y martin-loop@0.6.0 start\nnpx -y martin-loop@0.6.0 demo\ncd martin-loop-demo\nnpm install\nnpx -y martin-loop@0.6.0 run \"Summarize the demo workspace and prove tests still pass\" --verify \"npm test\" --budget-usd 2 --max-iterations 1 --json\nnpx -y martin-loop@0.6.0 dossier --latest --json\nnpx -y martin-loop@0.6.0 share --latest --json\n```\n\nFor deterministic installs, pin the package line (`martin-loop@0.6.0`) or use `martin-loop@latest`. Plain `npx martin-loop` can resolve a stale local cache on some machines.\n\nExpected share bundle outputs:\n\n- `share/run-receipt.json`\n- `share/run-receipt.md`\n- `share/proof-card.svg`\n\n## See It In Action\n\nThe 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.\n\nFor a deterministic public repro lane, use the benchmark workspace and compare governed execution to unbounded retry behavior:\n\n- `npx martin-loop bench --suite under-3-challenge`\n- `npx martin-loop bench --suite ralphy-engineering-50`\n\n## Ralph-Style Loops\n\nA 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.\n\nMartinLoop keeps the useful part of the loop, then adds brakes:\n\n- stop before budget overspend\n- classify unsafe or invalid actions before execution\n- write an audit record for every attempt\n- preserve rollback and verifier evidence for review\n- reduce runaway context growth with compact run summaries\n\n## Failure Taxonomy (13 Runtime Classes)\n\nPublic governed runs use one canonical taxonomy: the 13 runtime `FailureClass` values from `@martin/contracts`.\n\n<div align=\"center\">\n  <img src=\"./docs/assets/failure-taxonomy-13-classes.png\"\n       alt=\"MartinLoop failure taxonomy showing the 13 runtime failure classes and why classification matters\"\n       width=\"900\">\n</div>\n\nSee the canonical table: [Failure Taxonomy (13 Runtime Classes)](./docs/oss/FAILURE-TAXONOMY-13.md).\n\nThe current classes are:\n\n- `logic_error` — incorrect or incomplete logic\n- `hallucination` — unsupported repo or runtime facts\n- `syntax_error` — syntax validation failed\n- `type_error` — static type checks failed\n- `test_regression` — changes broke passing tests\n- `scope_creep` — changed outside the objective boundary\n- `no_progress` — retries with no meaningful progress\n- `repo_grounding_failure` — edits not grounded to repo state\n- `verification_failure` — verifier gate failed\n- `environment_mismatch` — host, runtime, or tooling mismatch\n- `budget_pressure` — budget or iteration pressure\n- `safety_leash_blocked` — safety policy blocked the action\n- `sandbox_write_blocked` — patch could not be persisted in the allowed workspace\n\nClassification matters because it gives runs shared failure language, an explicit next safe action, reusable failure intelligence, and better future runs.\n\n## What It Does\n\n- Budget caps stop the next attempt before a configured USD, token, or iteration limit is exceeded.\n- Verifier gates require a real check, such as `npm test`, before a run can count as complete.\n- Policy checks block unsafe verifier commands, risky path changes, and secret-like task inputs before execution.\n- Failure classification uses canonical runtime classes for triage and reporting. See [Failure Taxonomy (13 Runtime Classes)](./docs/oss/FAILURE-TAXONOMY-13.md).\n- Run receipts capture stop reason, verifier evidence, budget posture, integrity state, and the next safe action.\n- `martin share --latest` turns the latest governed run into a local share bundle with a redacted JSON receipt, Markdown recap, and proof-card SVG.\n- MCP integration gives hosts one write-capable execution entrypoint plus richer planning, inspection, and review helpers.\n\n## How It Works\n\n| Layer | Purpose |\n| --- | --- |\n| Task contract | Objective, verifier plan, repo root, allowed paths, denied paths, acceptance criteria, workspace, project, and budget. |\n| Policy and budget | Defaults come from `martin.config.yaml`; CLI flags can override them. Budget preflight blocks attempts that would exceed policy. |\n| Agent adapters | Claude Code, Codex CLI, Gemini CLI, direct-provider, and OpenAI-compatible adapters keep execution behind the same MartinLoop job contract. Broader model-specific coding execution is promoted only after its governed mutation path is release-tested. |\n| Safety and verification | Scope checks, verifier command checks, prompt integrity, and grounding decide whether work can continue. |\n| Persistence | JSONL run records, evidence summaries, and repo-backed artifacts make every run inspectable later. Each loop record is locally signed (HMAC, per-runs-root key) and `dossier`/`runs get`/`runs verify`/`challenge`/`badge` report an `integrity` verdict (`verified` / `tamper_detected` / `unsigned`) so post-hoc edits to a record are detectable, not just inspectable. |\n\n## Trust Boundaries\n\n- Cost and token outputs always include provenance (`actual`, `calculated`, `estimated`, or `unavailable`).\n- 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.\n- Receipt integrity must be `verified` before a run is treated as trustworthy evidence for external review.\n\n## CLI\n\n```text\nmartin-loop doctor\nmartin-loop demo\nmartin-loop session-start [--host <claude|codex|gemini|generic>]\nmartin-loop phase status|contract|session-start|preflight|run [--execute]\nmartin-loop preflight <objective> [options]\nmartin-loop run <objective> [options]\nmartin-loop bench --suite <suiteId>\nmartin-loop triage\nmartin-loop dossier (--latest | --loop-id <id> | --file <path>)\nmartin-loop runs list|get|attempt|verify ...\nmartin-loop mcp print-config --host <codex|claude|gemini|cursor|vscode|generic>\nmartin-loop mcp install --host <codex|claude|gemini|cursor|vscode|generic>\nmartin-loop mcp verify-install --host <name> [--scope <user|project|local>]\nmartin-loop mcp rollback --host <name> [--scope <user|project|local>]\nmartin-loop mcp uninstall --host <name> [--scope <user|project|local>]\nmartin-loop challenge [--loop-id <id> | --file <path> | --latest]\nmartin-loop share (--loop-id <id> | --file <path> | --latest) [--out-dir <path>]\nmartin-loop badge [--format svg|json] [--runs-dir <path>]\n```\n\n<!-- Generated by scripts/generate-install-links.mjs. -->\n<!-- MCP package: @martinloop/mcp@0.6.0 -->\n\n[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_MartinLoop-007ACC?logo=visualstudiocode&logoColor=white)](vscode:mcp/install?%7B%22name%22%3A%22martin-loop%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40martinloop%2Fmcp%40latest%22%5D%7D)\n[![Add to Cursor](https://img.shields.io/badge/Cursor-Add_MartinLoop-111111)](cursor://anysphere.cursor-deeplink/mcp/install?name=martin-loop&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBtYXJ0aW5sb29wL21jcEBsYXRlc3QiXX0%3D)\n\n\nCommon options:\n\n```text\n--budget <n>            Hard cost cap in USD\n--budget-usd <n>        Alias for --budget\n--soft-limit-usd <n>    Soft budget threshold in USD\n--verify <cmd>          Verifier command after each attempt\n--proof                 Run verifier-only evidence checks without claiming governed execution\n--max-iterations <n>    Maximum number of attempts\n--max-tokens <n>        Maximum token budget\n--engine <name>         Adapter to use: claude, codex, gemini, or openai\n--cwd <path>            Repo root for the run\n--allow-path <glob>     Restrict writes to this path pattern; repeatable\n--deny-path <glob>      Block this path pattern; repeatable\n--runs-dir <path>       Override the local Martin runs root\n```\n\nExamples below use `npx martin-loop` so they work without a global install. If you install `martin-loop` globally, the `martin` alias works too.\n\nUse `martin-loop share --latest` after `dossier` when you want a redacted bundle you can hand to another person without sending raw run-store files.\n\nMore detail: [CLI reference](./docs/reference/cli.md) and [configuration reference](./docs/reference/config.md).\n\n<div align=\"center\">\n  <img src=\"./docs/assets/cli-static.svg\" alt=\"MartinLoop CLI terminal output\" width=\"720\">\n</div>\n\n## Benchmarks\n\nMartinLoop ships a public deterministic benchmark workspace in `benchmarks/` plus the installed-package `bench` command.\n\nFrom an installed package:\n\n```sh\nnpx martin-loop bench --suite under-3-challenge\nnpx martin-loop bench --suite ralphy-engineering-50\n```\n\nFrom a clean public clone:\n\n```sh\npnpm install --frozen-lockfile\npnpm bench:build\npnpm bench:eval\npnpm bench:report:ralphy\n```\n\nEquivalent workspace-filter commands:\n\n```sh\npnpm --filter @martin/benchmarks build\npnpm --filter @martin/benchmarks test\npnpm --filter @martin/benchmarks eval\npnpm --filter @martin/benchmarks report:ralphy\n```\n\nThe installed-package command reads the shipped public fixtures. The repo-clone workflow runs the public benchmark workspace directly.\n\n## MCP\n\nRun the standalone MCP package directly:\n\n```sh\nnpx -y @martinloop/mcp@latest\n```\n\nAdd it to common hosts:\n\n```sh\ncodex mcp add martin-loop -- npx -y @martinloop/mcp@latest\nclaude mcp add --transport stdio --scope user martin-loop -- npx -y @martinloop/mcp@latest\nclaude mcp add --transport stdio --scope user martin-loop -- cmd /c npx -y @martinloop/mcp@latest\n```\n\nGenerate host config from the root CLI:\n\n```sh\nnpx martin-loop mcp print-config --host codex --transport stdio --profile minimal\nnpx martin-loop mcp print-config --host claude --transport stdio --profile diagnostic\nnpx martin-loop mcp print-config --host gemini --transport stdio --profile full-local\nnpx martin-loop mcp print-config --host generic --transport stdio --profile github-review\n```\n\nThe root `martin-loop` package, standalone `@martinloop/mcp` package, plugin metadata, and MCPB product version are aligned at `0.6.0`. The MCPB manifest schema remains `0.3`.\n\nThe public MCP release train continues to evolve, but the current aligned public package line is `0.6.0` across the root CLI and standalone MCP package.\n\nThe standalone MCP registry/server identifier is `io.github.Keesan12/martin-loop`.\n\nMore detail: [MCP setup](./docs/getting-started/mcp.md), [MCP tool reference](./docs/reference/mcp-tools.md), and [MCP compatibility](./docs/reference/mcp-compatibility.md).\n\n## SDK\n\n```sh\nnpm install martin-loop\n```\n\n```typescript\nimport { MartinLoop, createClaudeCliAdapter } from \"martin-loop\";\n\nconst loop = new MartinLoop({\n  adapter: createClaudeCliAdapter({ workingDirectory: process.cwd() }),\n  defaults: {\n    workspaceId: \"my-workspace\",\n    projectId: \"my-project\",\n    budget: {\n      maxUsd: 3,\n      softLimitUsd: 2.25,\n      maxIterations: 3,\n      maxTokens: 20_000,\n    },\n  },\n});\n\nconst result = await loop.run({\n  task: {\n    title: \"Fix auth regression\",\n    objective: \"Fix the failing auth regression tests\",\n    verificationPlan: [\"pnpm test\"],\n    repoRoot: process.cwd(),\n  },\n});\n\nconsole.log(result.decision.status);\n```\n\nThe root SDK also exports `createCodexCliAdapter`, `createGeminiCliAdapter`, `createDirectProviderAdapter`, and `createOpenAiCompatibleAdapter`, so teams can keep one MartinLoop workflow while swapping the worker underneath.\n\nMore detail: [SDK reference](./docs/reference/sdk.md) and [package map](./docs/reference/packages.md).\n\n## Examples\n\n- [Quickstart](./docs/getting-started/quickstart.md)\n- [Examples](./docs/getting-started/examples.md)\n- [MartinLoop for AI Agents](./docs/for-agents.md)\n- [Agent Failure Atlas](./docs/agent-failure-atlas.md)\n- [Failure Taxonomy (13 Runtime Classes)](./docs/oss/FAILURE-TAXONOMY-13.md)\n- [PRE-028-PUBLIC-SURFACE-DIFF.md](./docs/oss/PRE-028-PUBLIC-SURFACE-DIFF.md)\n- [Claude Code walkthrough](./docs/getting-started/claude-code.md)\n- [Codex setup](./docs/getting-started/codex.md)\n- [MCP setup](./docs/getting-started/mcp.md)\n- [MCP tool reference](./docs/reference/mcp-tools.md)\n- [Agent run receipts](./docs/oss/AGENT-RUN-RECEIPTS.md)\n- [Benchmark + receipt page](./docs/oss/BENCHMARK-RECEIPT-PAGE.md)\n- [GitHub Actions budget gate](./examples/github-actions-budget-gate/)\n- [OpenCode-style adapter](./examples/opencode-adapter/)\n\n## Development\n\nRequirements:\n\n- Node.js 20+\n- pnpm 10.x\n\n```sh\ngit clone https://github.com/Keesan12/martin-loop.git\ncd martin-loop\npnpm install --frozen-lockfile\npnpm lint\npnpm test\npnpm build\npnpm public:copy-scan\npnpm public:git-surface\npnpm oss:validate\npnpm public:smoke\npnpm release:matrix:local\n```\n\nStandalone MCP validation:\n\n```sh\npnpm --filter @martinloop/mcp lint\npnpm --filter @martinloop/mcp test\npnpm --filter @martinloop/mcp build\npnpm --filter @martinloop/mcp smoke:pack\npnpm --filter @martinloop/mcp smoke:published:pack\npnpm --filter @martinloop/mcp verify:release\n```\n\n## Contributing\n\nIssues, bug reports, workflow feedback, and focused pull requests are welcome. Public-facing docs should stay concise, user-centered, and accurate.\n\n```sh\ngit checkout -b feat/your-feature\npnpm lint\npnpm test\ngit commit -m \"feat: describe what you built\"\ngit push -u origin feat/your-feature\n```\n\n<p align=\"center\">\n  <strong>Star this repo</strong> if MartinLoop helps you give coding agents more real work without babysitting every step.\n</p>\n<p align=\"center\">\n  <a href=\"https://martinloop.com\">martinloop.com</a> · <a href=\"mailto:support@martinloop.com\">support@martinloop.com</a>\n</p>\n<p align=\"center\">\n  MartinLoop is part of the NVIDIA Inception program.\n</p>\n<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"./docs/assets/nvidia-inception-program.png\">\n    <img src=\"./docs/assets/nvidia-inception-program-light.png\" alt=\"NVIDIA Inception Program logo\" width=\"280\">\n  </picture>\n</p>\n\n## Telemetry & Privacy\n\nMartinLoop sends minimal anonymous usage data to help improve reliability and prioritize development. A first-run notice appears before any data is transmitted. No data is sent on that first run.\n\n**What is sent:**\n- Random installation ID (generated locally, never linked to your identity)\n- Per-process session ID\n- CLI version, Node version, OS and architecture\n- Event name and timestamp\n- Command category, run duration, success/failure category\n- Whether a receipt was generated; whether recovery occurred\n- Opaque remote-experience ID/type after a click\n\n**What is never sent:**\n- Source code, prompts, task text, repository contents, file names, file paths\n- Environment variables, secrets, provider/model output\n- Receipt contents, ledger contents, approval details, verifier evidence\n- Email addresses, workspace, project, or organization identifiers\n- Raw exception messages or stack traces\n\n**Endpoint:** `https://tupopqvqnyyjuxseyxkr.supabase.co/functions/v1/product-events`\n\n**Headers sent:** `Content-Type: application/json`, `User-Agent: MartinLoop-CLI/<version>`\n\nNo authorization header, API key, or direct table access.\n\n**Opt out anytime:**\n```\nmartin telemetry off\n```\n\n**Inspect what is sent:**\n```\nmartin telemetry explain\n```\n\n**Environment variables that disable telemetry:** `MARTIN_TELEMETRY_DISABLED=1`, `DO_NOT_TRACK=1`, `CI=1`\n\nMartinLoop continues to work normally with telemetry disabled. No features are gated on telemetry consent.\n\n## License\n\nApache-2.0. See [LICENSE](./LICENSE).\n",
  "bytes": 27481,
  "sha": "8ba8d9cd588b63d058116b4b385a1f898bcf4ca284130784d3ac2d18ed127012",
  "repo_slug": "keesan12/martin-loop",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_keesan12_martin_loop_68265791/readme"
}