MartinLoop — Stop Runaway Loops, Bad Code & Token Waste
This server is an MCP-based governed execution and inspection layer for AI coding agents. It enforces budgets, verification gates, and audit receipts to prevent runaway loops and unsafe changes.
Core execution
martin_runexecutes coding tasks with hard USD, token, and iteration limits plus path scopes; it requires prior doctor, estimate, plan, and preflight receipts.martin_plancreates scoped implementation plans, verifier proposals, policy packs, and risk recommendations.martin_preflightvalidates a planned run before any execution or spend.martin_doctorruns read-only environment and run-store diagnostics.martin_estimatepredicts cost, route, and pre-work burn without running the agent.
Inspection, monitoring, and audit
martin_inspect,martin_get_run,martin_get_attempt,martin_get_verification_results, andmartin_run_dossier/martin_dossierload summaries, run details, attempts, verification evidence, artifacts, events, and full dossiers.martin_status,martin_list_runs,martin_triage_runs, andmartin_logsshow current budget/cost state, filter runs, prioritize runs needing attention, and stream recent events.
Run control
martin_pause,martin_cancel, andmartin_continuerecord durable human control requests with audit trails.
Evaluation and PR workflow
martin_evalgrades runs on task completion, verifier health, diff discipline, risk, and reviewability.martin_pr_summary,martin_review_pr, andmartin_create_prgenerate PR titles/summaries, review PRs against dossiers, and create or preview GitHub PRs with integrated MartinLoop dossier content.
MartinLoop
Your coding agent says it's done. MartinLoop makes it prove it.
One system to control, verify and understand coding-agent work.
MartinLoop gives AI coding agents budgets, stop conditions, rollback rules, and receipts.
Built from thousands of agent runs where the problem was not intelligence -- it was uncontrolled execution.
Get started: npx -y martin-loop@latest start
Try the demo: npx -y martin-loop@latest demo
MartinLoop is part of the NVIDIA Inception program.
Start Here
Install — 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.
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.
Related MCP server: Playwright MCP
For AI Agents
MartinLoop is the execution-control system around coding agents. The coding agent still writes the code. MartinLoop governs the run and makes completion prove itself.
Use MartinLoop when a coding task needs one or more of these controls:
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 control layer across Codex, Claude Code, and other coding-agent environments
Canonical lifecycle:
DEFINE
-> PREFLIGHT
-> CONTROL
-> VERIFY
-> RECOVER
-> PROVE
-> ANALYZEThe 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.
Stage | MartinLoop role |
Define | Capture the objective, verifier, budget, scope, and finish line. |
Preflight | Check readiness and required workflow evidence before agent spend. |
Control | Enforce budgets, attempts, path boundaries, policy, and stop conditions while the coding agent works. |
Verify | Run configured checks and bind the evidence to the active run and workspace. |
Recover | Preserve recovery and rollback state when another attempt or human review is required. |
Prove | Produce the authoritative |
Analyze | Inspect run history, cost provenance, failure classes, dossiers, and shareable evidence after execution. |
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.
Why MartinLoop
AI coding agents are useful, but unbounded retry loops are expensive.
A task that looked like a small fix can become dozens of attempts, a blown token budget, and a diff nobody trusts. MartinLoop gives every run an explicit contract: objective, verifier, budget, scope, receipts, and a clear stop condition.
Use it when AI coding work needs to stay bounded, inspectable, and safe to review before it becomes expensive or destructive.
Why Teams Adopt MartinLoop
It turns agent behavior into inspectable run receipts you can actually review.
It enforces hard stop conditions before runaway retries spend more money.
It adds rollback-aware rules so failed attempts do not silently leave unsafe changes behind.
It helps teams compare outcomes across agents under one governed flow.
Teams use MartinLoop when they need governed agent execution that can be reviewed and trusted.
2-Minute Install Path
npx -y martin-loop@latest start
npx -y martin-loop@latest demo
cd martin-loop-demo
npm install
npx -y martin-loop@latest run "Summarize the demo workspace and prove tests still pass" --verify "npm test" --budget-usd 2 --max-iterations 1Quick Start
Try MartinLoop in a disposable demo workspace:
npx -y martin-loop@latest start
npx -y martin-loop@latest demo
npx -y martin-loop@latest --version
cd martin-loop-demo
npm install
npx -y martin-loop@latest run "Summarize the demo workspace and prove tests still pass" --verify "npm test" --budget-usd 2 --max-iterations 1
npx -y martin-loop@latest dossier --latest
npx -y martin-loop@latest share --latestOptional global install:
npm install -g martin-loop
martin-loop --versionIf 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:
npx -y martin-loop@latest doctor
npx -y martin-loop@latest session-start
npx -y martin-loop@latest preflight "Summarize the demo workspace and prove tests still pass" --verify "npm test"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 the current root package: MartinLoop 0.5.8.
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:
VERIFIEDwhen the configured evidence supports the Definition of DoneSTOPPEDwhen a configured hard boundary ends the runNEEDS REVIEWwhen 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:
npx -y martin-loop@latest run "Summarize the demo workspace and prove tests still pass" --proof --verify "npm test"
npx -y martin-loop@latest runs verify --latest
npx -y martin-loop@latest share --latestExample receipt files: Markdown and JSON.
Run This Audit Yourself
Use this lane from a clean temp directory to verify the public CLI flow exactly as shipped:
npx -y martin-loop@0.5.6 --version
npx -y martin-loop@0.5.6 start
npx -y martin-loop@0.5.6 demo
cd martin-loop-demo
npm install
npx -y martin-loop@0.5.6 run "Summarize the demo workspace and prove tests still pass" --verify "npm test" --budget-usd 2 --max-iterations 1 --json
npx -y martin-loop@0.5.6 dossier --latest --json
npx -y martin-loop@0.5.6 share --latest --jsonFor deterministic installs, pin the package line (martin-loop@0.5.8) 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.jsonshare/run-receipt.mdshare/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-challengenpx 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)
Public governed runs use one canonical taxonomy: the 13 runtime FailureClass values from @martin/contracts.
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 --latestturns 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
Layer | Purpose |
Task contract | Objective, verifier plan, repo root, allowed paths, denied paths, acceptance criteria, workspace, project, and budget. |
Policy and budget | Defaults come from |
Agent adapters | Claude CLI, Codex CLI, Gemini CLI, and direct-provider adapters normalize execution results. |
Safety and verification | Scope checks, verifier command checks, prompt integrity, and grounding decide whether work can continue. |
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 |
Trust Boundaries
Cost and token outputs always include provenance (
actual,calculated,estimated, orunavailable).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
verifiedbefore a run is treated as trustworthy evidence for external review.
CLI
martin-loop doctor
martin-loop demo
martin-loop session-start [--host <claude|codex|gemini|generic>]
martin-loop phase status|contract|session-start|preflight|run [--execute]
martin-loop preflight <objective> [options]
martin-loop run <objective> [options]
martin-loop bench --suite <suiteId>
martin-loop triage
martin-loop dossier (--latest | --loop-id <id> | --file <path>)
martin-loop runs list|get|attempt|verify ...
martin-loop mcp print-config --host <codex|claude|gemini|cursor|vscode|generic>
martin-loop mcp install --host <codex|claude|gemini|cursor|vscode|generic>
martin-loop mcp verify-install --host <name> [--scope <user|project|local>]
martin-loop mcp rollback --host <name> [--scope <user|project|local>]
martin-loop mcp uninstall --host <name> [--scope <user|project|local>]
martin-loop challenge [--loop-id <id> | --file <path> | --latest]
martin-loop share (--loop-id <id> | --file <path> | --latest) [--out-dir <path>]
martin-loop badge [--format svg|json] [--runs-dir <path>]
Common options:
--budget <n> Hard cost cap in USD
--budget-usd <n> Alias for --budget
--soft-limit-usd <n> Soft budget threshold in USD
--verify <cmd> Verifier command after each attempt
--proof Run verifier-only evidence checks without claiming governed execution
--max-iterations <n> Maximum number of attempts
--max-tokens <n> Maximum token budget
--engine <name> Adapter to use: claude, codex, gemini, or openai
--cwd <path> Repo root for the run
--allow-path <glob> Restrict writes to this path pattern; repeatable
--deny-path <glob> Block this path pattern; repeatable
--runs-dir <path> Override the local Martin runs rootExamples 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:
npx martin-loop bench --suite under-3-challenge
npx martin-loop bench --suite ralphy-engineering-50From a clean public clone:
pnpm install --frozen-lockfile
pnpm bench:build
pnpm bench:eval
pnpm bench:report:ralphyEquivalent workspace-filter commands:
pnpm --filter @martin/benchmarks build
pnpm --filter @martin/benchmarks test
pnpm --filter @martin/benchmarks eval
pnpm --filter @martin/benchmarks report:ralphyThe 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:
npx -y @martinloop/mcpAdd it to common hosts:
codex mcp add martin-loop -- npx -y @martinloop/mcp
claude mcp add --transport stdio --scope user martin-loop -- npx -y @martinloop/mcp
claude mcp add --transport stdio --scope user martin-loop -- cmd /c npx -y @martinloop/mcpGenerate host config from the root CLI:
npx martin-loop mcp print-config --host codex --transport stdio --profile minimal
npx martin-loop mcp print-config --host claude --transport stdio --profile diagnostic
npx martin-loop mcp print-config --host gemini --transport stdio --profile full-local
npx martin-loop mcp print-config --host generic --transport stdio --profile github-reviewThe root martin-loop package, standalone @martinloop/mcp package, plugin metadata, and MCPB product version are aligned at 0.5.8. The MCPB manifest schema remains 0.3.
The public MCP release train labels are:
0.1.4operator foundation0.2.0cockpit expansion0.2.5public MCP package line0.2.7usability and review release0.3.0host adoption and onboarding release0.3.1review and handoff release0.5.3execution-control and host-compatibility release0.5.5governed-autonomous execution and proof-surface release0.5.6hosted 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
npm install martin-loopimport { MartinLoop, createClaudeCliAdapter } from "martin-loop";
const loop = new MartinLoop({
adapter: createClaudeCliAdapter({ workingDirectory: process.cwd() }),
defaults: {
workspaceId: "my-workspace",
projectId: "my-project",
budget: {
maxUsd: 3,
softLimitUsd: 2.25,
maxIterations: 3,
maxTokens: 20_000,
},
},
});
const result = await loop.run({
task: {
title: "Fix auth regression",
objective: "Fix the failing auth regression tests",
verificationPlan: ["pnpm test"],
repoRoot: process.cwd(),
},
});
console.log(result.decision.status);The root SDK also exports createCodexCliAdapter, createGeminiCliAdapter, createDirectProviderAdapter, and createOpenAiCompatibleAdapter.
More detail: SDK reference and package map.
Examples
Development
Requirements:
Node.js 20+
pnpm 10.x
git clone https://github.com/Keesan12/martin-loop.git
cd martin-loop
pnpm install --frozen-lockfile
pnpm lint
pnpm test
pnpm build
pnpm public:copy-scan
pnpm public:git-surface
pnpm oss:validate
pnpm public:smoke
pnpm release:matrix:localStandalone MCP validation:
pnpm --filter @martinloop/mcp lint
pnpm --filter @martinloop/mcp test
pnpm --filter @martinloop/mcp build
pnpm --filter @martinloop/mcp smoke:pack
pnpm --filter @martinloop/mcp smoke:published:pack
pnpm --filter @martinloop/mcp verify:releaseContributing
Issues, bug reports, workflow feedback, and focused pull requests are welcome. Public-facing docs should stay concise, user-centered, and accurate.
git checkout -b feat/your-feature
pnpm lint
pnpm test
git commit -m "feat: describe what you built"
git push -u origin feat/your-featureTelemetry & Privacy
MartinLoop 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.
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:
martin telemetry offInspect what is sent:
martin telemetry explainEnvironment variables that disable telemetry: MARTIN_TELEMETRY_DISABLED=1, DO_NOT_TRACK=1, CI=1
MartinLoop continues to work normally with telemetry disabled. No features are gated on telemetry consent.
License
Apache-2.0. See LICENSE.
Available Tools
24 toolsmartin_arcadeA
Open the presentation-only MartinLoop Arcade when the host supports MCP Apps. The Arcade cannot change governed execution or evidence.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does so well. 'Presentation-only' and 'cannot change governed execution or evidence' accurately disclose both what the tool does and what it will not do, giving the agent clear safety expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no filler. The first sentence front-loads the action and preconditions, and the second adds the essential limitation. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description provides everything needed: what happens, when it should happen, and what side effects it cannot have. No important invocation information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is already fully covered. With no parameters to document, the description does not need to add parameter explanations; the baseline for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Open') and a distinct resource ('MartinLoop Arcade') and scopes it as presentation-only. It differentiates the tool from the run/eval/status siblings by emphasizing it is strictly a display surface, not a control surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the condition under which the tool should be used ('when the host supports MCP Apps'). It also tells the agent not to use it for mutating or governed workflows by clarifying that the Arcade 'cannot change governed execution or evidence'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_arcade_statusARead-onlyIdempotent
Read the read-only evidence projection used by the Arcade view. Provide loopId for one exact run or omit it to load the latest run. Use only for Arcade rendering; use martin_status for budget pressure or martin_run_dossier for full evidence. This tool reads persisted evidence and never changes run state.
| Name | Required | Description | Default |
|---|---|---|---|
| loopId | No | Optional MartinLoop run identifier. Omit it to read the latest persisted run. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | Yes | |
| budget | Yes | |
| loopId | Yes | Run identifier represented by this Arcade snapshot. |
| attempts | Yes | Number of recorded attempts. |
| warnings | Yes | Evidence or interpretation warnings for the Arcade view. |
| completed | Yes | Whether the run is outside an active lifecycle state. |
| verification | Yes | Persisted verifier evidence summary. |
| displayOutcome | Yes | Terminal verified-handoff outcome, or null while the run is active. |
| lifecycleState | Yes | Current persisted lifecycle state. |
| receiptIntegrity | Yes | Persisted receipt-integrity verdict. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds useful context by clarifying that the tool reads 'persisted evidence' and that omitting loopId dynamically loads the latest run. The closing sentence reinforces the read-only guarantee, though it is somewhat redundant with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences with no filler. It front-loads the core purpose, then covers parameter behavior, usage boundaries, and read-only safety, with every sentence earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single optional parameter, an output schema, and annotations covering safety, the description is complete. It provides purpose, usage constraints, alternatives, parameter guidance, and state-change guarantees, so an agent can select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents loopId as optional with the 'omit to read latest run' behavior. The description restates this logic but adds no new semantic detail beyond the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read'), names a precise resource ('read-only evidence projection used by the Arcade view'), and explicitly distinguishes itself from sibling tools like martin_status and martin_run_dossier. An agent can immediately understand what this tool does and how it differs from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states 'Use only for Arcade rendering' and explicitly redirects to martin_status for budget pressure and martin_run_dossier for full evidence. It also explains the loopId behavior clearly: provide it for an exact run or omit it for the latest run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_cancelADestructive
Write a durable cancellation receipt for one canonical MartinLoop run. Provide exactly one selector: file, loopId, or latest; runsDir changes the run-store root, while reason and requestedBy add audit context. Use when work must be abandoned, not temporarily held. This records a request and does not kill a process; use martin_pause for a reversible hold.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Path to one canonical run record or directory. Mutually exclusive with loopId and latest. | |
| latest | No | When true, targets the latest canonical run. Mutually exclusive with file and loopId. | |
| loopId | No | Canonical MartinLoop run identifier. Mutually exclusive with file and latest. | |
| reason | No | Optional non-empty reason recorded in the cancellation receipt. | |
| runsDir | No | Optional run-store root override used to resolve loopId or latest. | |
| requestedBy | No | Optional human or runtime identity label recorded for audit context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | The control action that was recorded. |
| loopId | Yes | MartinLoop run identifier the control was applied to. |
| reason | No | Human-readable reason for the control, if provided. |
| controlId | Yes | Unique receipt ID for this control action. |
| requestedAt | Yes | ISO 8601 timestamp when the control was recorded. |
| requestedBy | No | Identity that requested the control, if provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and idempotentHint=false. The description adds behavioral nuance beyond that by clarifying that the tool 'records a request and does not kill a process' and that the receipt is 'durable.' It does not fully spell out what state changes the cancellation causes, but it meaningfully reduces ambiguity around process termination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all front-loaded and purposeful. The core action and primary constraint come first, followed by usage conditions and the key alternative. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values need not be described. The description covers when to use it, when not to, how selectors work, the side-effect boundary, and the audit parameters. Nothing essential is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by grouping parameters semantically: it states the exact-one-selector requirement among file, loopId, and latest, explains runsDir as a run-store root override, and identifies reason and requestedBy as audit context. This goes beyond the schema's per-property text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Write a durable cancellation receipt for one canonical MartinLoop run.' It clearly defines scope ('one... run') and differentiates the tool by noting it records a request rather than killing a process, which separates it from siblings like martin_pause.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use when work must be abandoned, not temporarily held' and 'use martin_pause for a reversible hold.' This gives an agent a clear decision rule and names the alternative tool for the opposite case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_continueADestructive
Record a durable continue or resume request for a Martin run after a human pause or approval checkpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | ||
| latest | No | ||
| loopId | No | ||
| reason | No | ||
| runsDir | No | ||
| requestedBy | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | The control action that was recorded. |
| loopId | Yes | MartinLoop run identifier the control was applied to. |
| reason | No | Human-readable reason for the control, if provided. |
| controlId | Yes | Unique receipt ID for this control action. |
| requestedAt | Yes | ISO 8601 timestamp when the control was recorded. |
| requestedBy | No | Identity that requested the control, if provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral context of 'durable' persistence and the post-pause/checkpoint timing, which is useful beyond the annotations. However, with destructiveHint=true, it does not explain what destructive effect may occur or why a record-request operation is flagged destructive, leaving that significant behavior unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. It front-loads the core action and provides the key contextual condition without wasting words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, a oneOf selection requirement, and zero parameter descriptions, the tool needs much more contextual explanation to be invoked correctly. The description tells why and when, but not how to specify the target run or what values like reason, runsDir, and requestedBy mean. The output schema exists but does not compensate for the missing parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility for explaining parameters, but it mentions none of them. The oneOf construct with file, loopId, or latest is present in the schema but not elaborated, leaving the agent to guess what each identifier means and when to choose one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Record') and clearly identifies both the action (durable continue/resume request) and the context (a Martin run after a human pause or approval checkpoint). This is distinct from sibling tools like martin_pause or martin_cancel, as it describes resumption rather than stopping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'after a human pause or approval checkpoint' gives useful contextual guidance for when the tool should be invoked. It does not explicitly name alternatives or say when not to use it, so it falls short of full exclusionary guidance, but the timing context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_create_prADestructive
Create or preview a GitHub PR with a MartinLoop dossier body. Use execute=true to actually call gh.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | ||
| file | No | ||
| title | No | ||
| format | No | ||
| latest | No | ||
| loopId | No | ||
| execute | No | ||
| runsDir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| body | Yes | GitHub-flavoured Markdown PR body containing the run dossier. |
| grade | Yes | Verification grade assigned to the run. |
| score | Yes | Numeric verification score from 0–100. |
| title | Yes | Suggested GitHub pull-request title. |
| loopId | Yes | MartinLoop run identifier used to generate the summary. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint=true, and the description adds meaningful context by explaining that the destructive action only happens when execute=true. This clarifies the side-effect boundary and prevents accidental PR creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the primary action and the critical execute flag front-loaded. Every sentence adds operational value and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, a oneOf constraint, and no schema descriptions, this description is far too thin. It omits how to choose among file, loopId, or latest, what format options mean, and how base, title, and runsDir affect the PR. The output schema may cover return values, but the input semantics are largely undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only explains execute. The remaining seven parameters (file, loopId, latest, format, title, base, runsDir) and the oneOf selection logic are left unexplained, leaving agents to guess how to specify the dossier source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: create or preview a GitHub PR with a MartinLoop dossier body. The preview-vs-execute distinction is clear, though it does not explicitly differentiate it from sibling PR-related tools like martin_pr_summary or martin_review_pr.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance for the key behavior: use execute=true to actually call gh, otherwise preview. It does not mention alternatives or when-not-to-use, but the preview/execute gate is a strong, explicit usage signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_doctorARead-onlyIdempotent
Read-only environment, engine, workspace, and run-store diagnostics for MartinLoop. Use first for software work, fresh installs, suspicious state, or before retries. Do not use as proof that a task is complete. Next: call martin_estimate or martin_triage_runs depending on whether this is new work or failed prior work.
| Name | Required | Description | Default |
|---|---|---|---|
| engine | No | Optional engine to highlight in diagnostics. | |
| runsDir | No | Optional runs-root override resolved under the default Martin runs root. | |
| workingDirectory | No | Optional repo-root override for doctor context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| server | Yes | |
| status | Yes | |
| engines | Yes | |
| summary | Yes | |
| runStore | Yes | |
| warnings | Yes | |
| environment | Yes | |
| receiptScope | Yes | |
| requestedEngine | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description's 'Read-only' aligns with them. The description adds useful context by scoping the diagnostic coverage and warning that its output must not be treated as task-completion proof.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short sentences with the core purpose front-loaded. Every sentence contributes either purpose, usage timing, an exclusion, or next-step routing, with no repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent, zero-required-parameter diagnostic tool with an output schema, the description fully covers what it inspects, when to use it, what it should not be used for, and the follow-up routing. An agent has what it needs to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have full schema descriptions, so schema coverage is 100%. The tool description does not add parameter-specific detail, which is acceptable because the structured schema already carries that burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read-only environment, engine, workspace, and run-store diagnostics for MartinLoop', which clearly names the resource scope and the action. It further differentiates the tool as a universal first-step check ('Use first...') among many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: 'for software work, fresh installs, suspicious state, or before retries'. It also provides a clear exclusion ('Do not use as proof that a task is complete') and routes to the next relevant tool based on the situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_dossierARead-onlyIdempotent
Read a formatted evidence summary for one MartinLoop run. Provide exactly one selector: file, loopId, or latest; runsDir changes the run-store root. Set format to json, md, or github-pr; json is the default. Use after martin_run, before merge or release claims, or when sharing what happened. Do not use as a substitute for missing verifier evidence; use martin_run_dossier for the full structured record. Next: review verification results, retry, or hand off the receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Path to one run record or directory. Mutually exclusive with loopId and latest. | |
| format | No | Output format. Defaults to json. | |
| latest | No | When true, loads the latest run. Mutually exclusive with file and loopId. | |
| loopId | No | MartinLoop run identifier. Mutually exclusive with file and latest. | |
| runsDir | No | Optional run-store root override used to resolve loopId or latest. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | Yes | |
| loop | Yes | |
| budget | Yes | |
| source | Yes | |
| related | Yes | |
| attempts | Yes | |
| warnings | Yes | |
| artifacts | Yes | |
| inspection | Yes | |
| sourceKind | Yes | |
| recentEvents | Yes | |
| verification | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description's 'Read' is consistent. It adds useful behavioral context: the summary is formatted, a selector must be supplied, format defaults to json, and the output is meant to serve as a handoff receipt. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by parameter rules, usage context, and alternatives. The 'Next: review verification results, retry, or hand off the receipt' sentence is slightly vague but adds workflow context without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter read-only tool with 100% schema coverage, an output schema, and readOnly/idempotent annotations, the description covers everything needed: what it reads, how to select a run, format handling, runsDir override, workflow timing, and the sibling alternative. No critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents file, loopId, latest, format, and runsDir. The description repeats the selector exclusivity and the format options rather than adding new semantic depth. This meets the baseline but does not substantially elevate parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read a formatted evidence summary for one MartinLoop run.' It also clearly distinguishes itself from the sibling martin_run_dossier by calling that the 'full structured record,' so an agent can select between them without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use after martin_run, before merge or release claims, or when sharing what happened.' It also provides an explicit exclusion: 'Do not use as a substitute for missing verifier evidence; use martin_run_dossier for the full structured record.' This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_estimateARead-onlyIdempotent
Read-only cost, route, and pre-work burn estimate for a software objective. Use before planning/preflight when a change may spend agent time or exceed budget. Do not use for casual questions or as permission to execute. Next: call martin_plan if the estimate is acceptable, or ask for consent if budget/risk is high.
| Name | Required | Description | Default |
|---|---|---|---|
| engine | No | Which agent CLI would be used. Defaults to claude. | |
| budgetUsd | No | Budget ceiling for estimation. Defaults to 5. | |
| fileScope | No | Optional file paths to scope the estimate. | |
| objective | Yes | The coding task to estimate. | |
| workingDirectory | No | Optional workspace path for recording the estimate receipt against the same task root you plan to run. |
Output Schema
| Name | Required | Description |
|---|---|---|
| engine | Yes | |
| reason | Yes | |
| budgetUsd | Yes | |
| objective | Yes | |
| compressed | No | |
| confidence | Yes | |
| blockedSteps | No | |
| selectedMode | Yes | |
| expectedCostUsd | Yes | |
| compressionSummary | No | |
| recommendedBudgetUsd | No | |
| expectedPreworkBurnPct | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description reinforces this with 'Read-only' and 'not as permission to execute.' It adds context about producing a pre-work burn estimate and warns about budget/risk consent, going beyond the bare annotation flags. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences deliver purpose, usage conditions, exclusions, and next-step guidance with zero filler. The most important information—read-only estimation—is front-loaded, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that annotations cover read-only and idempotent behavior, the schema covers all parameters, and an output schema exists, the description fills the remaining gaps: when to use it, what it is for, and what to do next. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema itself documents all parameters. The description adds general context about 'software objective' and 'budget/risk' but does not provide new meaning for individual parameters beyond the schema. Baseline 3 is appropriate; the description does not carry the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read-only cost, route, and pre-work burn estimate for a software objective.' This clearly distinguishes the tool from planning, execution, and run-management siblings like martin_plan and martin_run. It also communicates the operative scope—estimating, not executing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it ('before planning/preflight when a change may spend agent time or exceed budget') and when not to ('Do not use for casual questions or as permission to execute'). It also provides a concrete next step: call martin_plan if acceptable, or ask for consent for high budget/risk. This is exemplary routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_evalARead-onlyIdempotent
Grade a MartinLoop run across six dimensions — task completion, verifier health, diff discipline, regression risk, security risk, and reviewability — and return a scored merge-readiness verdict. Use after a governed run completes to decide whether the result is safe to merge or promote. Use before martin_pr_summary or martin_create_pr to confirm the run is merge-ready. Do not use to retrieve raw verification command output — use martin_get_verification_results for that. Do not use to review an existing PR body — use martin_review_pr instead. This tool reads saved run evidence and inspects local git signals; it does not modify state or contact GitHub.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId and latest. | |
| latest | No | When true, evaluates the most recently updated run in the run store. Mutually exclusive with file and loopId. | |
| loopId | No | MartinLoop run identifier from the run store. Mutually exclusive with file and latest. | |
| runsDir | No | Override the default run-store root directory. Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| grade | Yes | Overall merge readiness grade derived from the six check dimensions. |
| score | Yes | Numeric evaluation score from 0–100. |
| checks | Yes | |
| loopId | Yes | Unique MartinLoop run identifier. |
| source | Yes | Resolved path to the loop-record source file. |
| summary | Yes | One-paragraph plain-English evaluation summary. |
| warnings | Yes | Non-blocking advisory warnings from the evaluation. |
| sourceKind | Yes | How the run was identified. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds valuable behavioral context beyond those: it 'reads saved run evidence and inspects local git signals' and explicitly states 'it does not modify state or contact GitHub.' This clarifies the data sources and side-effect boundary without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then provides sequencing guidance, exclusions, and behavioral guarantees in a compact, structured way. Every sentence adds information needed for correct selection and invocation; the length is justified by the many sibling tools and the need to route to alternatives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a rich output schema, so return-value details are covered separately. The description supplies everything else an agent needs: when to call it, when not to call it, what it reads, what it does not affect, and how it fits into the merge workflow. No important gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the file, loopId, latest, and runsDir parameters and their mutual exclusivity. The tool description focuses on the tool's purpose rather than parameter details, which is acceptable because the schema already carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Grade') and resource ('a MartinLoop run'), enumerates the six evaluation dimensions, and names the output ('scored merge-readiness verdict'). It also differentiates itself from sibling tools like martin_get_verification_results and martin_review_pr, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use it after a governed run completes and before martin_pr_summary or martin_create_pr, establishing clear sequencing. It also gives two concrete negative cases with named alternatives: raw verification output goes to martin_get_verification_results, and existing PR review goes to martin_review_pr.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_get_attemptARead-onlyIdempotent
Load one Martin attempt summary with artifact directory references for a canonical run.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Path to a canonical loop-record.json file or run directory. | |
| loopId | No | Loop ID under the run store. | |
| runsDir | No | Optional runs-root override. | |
| attemptIndex | No | Attempt index to inspect. Defaults to the latest attempt. |
Output Schema
| Name | Required | Description |
|---|---|---|
| loop | Yes | |
| source | Yes | |
| attempt | Yes | |
| warnings | Yes | |
| sourceKind | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint, covering the safety profile. The description adds context that the result is a summary with artifact directory references, but it does not clarify canonical-run semantics or attempt-selection behavior beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single tightly written sentence that front-loads the action and object with no filler. Every word earns its place; the only ambiguity, 'canonical run,' is a semantic issue rather than a conciseness problem.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The rich input schema, output schema, and readOnly/idempotent annotations compensate for much of the brevity. The remaining gaps are selection guidance versus sibling tools and a definition of 'canonical run,' making the description adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the input schema. The description adds no additional meaning about choosing between file and loopId, runsDir, or attemptIndex, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Load') and a specific resource ('one Martin attempt summary') plus a distinctive qualifier about artifact directory references. It clearly differentiates from run-level tools like get_run, though 'canonical run' remains undefined and no sibling is explicitly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the tool is for loading attempt summaries from canonical runs, with schema defaults indicating attemptIndex selects the latest attempt. It does not say when to prefer this over get_run, inspect, or run_dossier, nor what disqualifies a non-canonical run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_get_runARead-onlyIdempotent
Load one Martin run and return its budget, cost, verification, artifact, and canonical path summary.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Path to a canonical loop-record.json, legacy file, or run-store directory. | |
| latest | No | When true, loads the most recently updated loop record in the run store. | |
| loopId | No | Loop ID under the run store. | |
| runsDir | No | Optional runs-root override. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | Yes | |
| loop | Yes | |
| budget | Yes | |
| source | Yes | |
| warnings | Yes | |
| artifacts | Yes | |
| inspection | Yes | |
| sourceKind | Yes | |
| verification | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is known. The description adds useful context about the returned summary content, but does not disclose operational details such as identifier resolution behavior, run-store defaulting, or any edge cases beyond what annotations and schema already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one efficient sentence with no wasted words. It front-loads the core action ('Load one Martin run') and then lists the returned summary categories, making it easy to scan and undersstand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich input schema, a covering output schema, and read-only/idempotent annotations, the description is largely complete for a single-run read tool. It lacks usage-routing context and does not explain how the identifier options relate, but those gaps are partly covered by the schema's oneOf structure and sibling names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (file, latest, loopId, runsDir) is already documented. The description adds no additional parameter-level semantics beyond 'canonical path' alignment, and the oneOf-selection logic is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Load'), a specific resource ('one Martin run'), and a concrete set of returned summary categories (budget, cost, verification, artifact, canonical path). This clearly distinguishes it from list-oriented tools like martin_list_runs and attempt-level tools like martin_get_attempt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to prefer this tool over siblings such as martin_get_attempt, martin_status, or martin_dossier. The description implies the general need to load a run but gives no exclusions, prerequisites, or alternative-selection advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_get_verification_resultsARead-onlyIdempotent
Load structured verification evidence for a MartinLoop run — verifier commands, pass/fail outcomes, and contradiction signals — from stored loop events and ledger entries. Use after a run completes to confirm whether automated verifiers passed before merging or promoting the result. Do not use to get a merge-readiness grade — use martin_eval for a scored grade with six check dimensions. Do not use for live run status — use martin_get_status instead. This tool only reads persisted run files and does not execute commands, modify state, or contact GitHub.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId. | |
| loopId | No | MartinLoop run identifier from the run store. Mutually exclusive with file. | |
| runsDir | No | Override the default run-store root directory. Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| loop | Yes | |
| source | Yes | |
| warnings | Yes | |
| sourceKind | Yes | |
| verification | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description reinforces and expands on this by stating the tool 'only reads persisted run files and does not execute commands, modify state, or contact GitHub.' This adds concrete behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each with a distinct job: what the tool returns, when to use it, which alternatives to use instead, and what side effects it does not have. There is no filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has multiple identifier modes, an output schema, and many sibling tools, but the description plus schema together cover the input modes, return content, routing, and safety profile. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents file, loopId, and runsDir, including their mutual exclusivity. The description does not add extra guidance on how to choose between file and loopId, but the baseline of 3 is appropriate because the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Load structured verification evidence for a MartinLoop run', and enumerates the contents: verifier commands, pass/fail outcomes, and contradiction signals. It also distinguishes itself from martin_eval and martin_get_status, making the tool's role unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('Use after a run completes to confirm whether automated verifiers passed before merging or promoting the result') and gives two explicit negative-routing instructions with named alternatives: martin_eval for merge-readiness grades and martin_get_status for live run status. This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_inspectARead-onlyIdempotent
Summarise Martin Loop run records from a saved loop file or run-store directory.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Optional path under the Martin runs root to a loop-record.json file, a legacy .jsonl file, or a run-store directory. | |
| runsDir | No | Optional runs-root override resolved under the default Martin runs root. |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| warnings | Yes | |
| latestRun | No | |
| loopCount | Yes | |
| portfolio | Yes | |
| inspection | Yes | |
| recentRuns | Yes | |
| statusBreakdown | Yes | |
| lifecycleBreakdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds behavioral value by specifying that the tool summarises records rather than returning them raw, and that it works from a saved loop file or run-store directory. This is consistent with the annotations and adds context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to explaining the action and the accepted inputs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with zero required parameters, a complete output schema, and annotations covering idempotency, the description is largely sufficient. The main missing element is routing guidance among sibling tools, but that is more of a usage-guideline concern; the core invocation context is adequately covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are already well described in the schema. The tool description does not add parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Summarise', and identifies the resource, 'Martin Loop run records', plus the two accepted input source types. It is clear about what the tool does, though it does not explicitly differentiate itself from sibling tools such as martin_get_run, martin_status, or martin_run_dossier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool instead of the many sibling inspection/status tools. There are no exclusions, conditions, or references to alternatives, leaving the selection decision entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_list_runsARead-onlyIdempotent
List recent Martin runs from the run store with lightweight filters for status, lifecycle, engine metadata, and recency.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of runs to return. Defaults to 20. | |
| model | No | Filter by attempt model. | |
| status | No | Filter by loop status. | |
| runsDir | No | Optional runs-root override. | |
| adapterId | No | Filter by attempt adapter ID. | |
| updatedAfter | No | Optional ISO-8601 timestamp for recency filtering. | |
| lifecycleState | No | Filter by lifecycle state. |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| filters | Yes | |
| runsRoot | Yes | |
| warnings | Yes | |
| latestRun | No | |
| loopCount | Yes | |
| recentRuns | Yes | |
| statusBreakdown | Yes | |
| lifecycleBreakdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that results are recent runs from the run store and that filters are lightweight, but it does not detail ordering, default recency behavior, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the action and resource, then filter categories. There is no filler or redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 100% schema coverage and an output schema, the description is nearly sufficient. It lacks explicit guidance on when to prefer this over sibling run-inspection tools, but all required call parameters are covered by the schema and annotations carry the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are individually documented. The description adds a useful grouping (status, lifecycle, engine metadata, recency) but no additional syntax, allowed values, or relationships beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with the resource 'Martin runs' and further scopes it to the run store with 'recent' and 'lightweight filters.' This clearly distinguishes it from siblings like martin_get_run, martin_inspect, and martin_status, which target single runs or different views.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the lightweight listing tool, but it never explicitly states when to choose it over martin_get_run, martin_inspect, or martin_triage_runs. No exclusion criteria or alternative routing is provided, so usage guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_logsARead-onlyIdempotent
Read recent MartinLoop events, ledger entries, and operator control receipts for a single run. Use to observe live or completed run activity, diagnose stuck or failed runs, or audit operator actions. Do not use to check run completion status — use martin_get_status instead. Do not use to retrieve verification evidence — use martin_get_verification_results instead. This tool only reads persisted run files and does not execute commands, modify state, or contact GitHub.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId and latest. | |
| limit | No | Maximum number of log entries to return, sorted by timestamp descending. Defaults to 20. | |
| latest | No | When true, loads the most recently updated run in the run store. Mutually exclusive with file and loopId. | |
| loopId | No | MartinLoop run identifier from the run store. Mutually exclusive with file and latest. | |
| runsDir | No | Override the default run-store root directory. Optional; defaults to the MartinLoop runs directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| live | Yes | |
| loopId | Yes | Unique MartinLoop run identifier. |
| source | Yes | Resolved path to the loop-record source file. |
| entries | Yes | Log entries sorted by timestamp descending, capped at limit. |
| logCount | Yes | Number of log entries returned after applying the limit. |
| sourceKind | Yes | How the run was identified: by file path, loop ID, latest flag, or runs directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnly, idempotent, and non-destructive. The description adds meaningful specifics: it only reads persisted run files, executes no commands, modifies no state, and does not contact GitHub. This goes beyond the annotation hints and prevents incorrect assumptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences with no filler: purpose first, usage and exclusions next, behavioral guarantees last. Every sentence earns its place and the most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full parameter documentation, an output schema, and read-only annotations, the description closes the remaining gaps: what data is exposed, when to use it, when not to use it, and what side effects it avoids. An agent has enough context to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a meaningful description including mutual-exclusion constraints and defaults. The tool description adds no parameter-specific detail, but none is necessary because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (MartinLoop events, ledger entries, operator control receipts) and a specific action (read). It also explicitly separates itself from status-checking and verification-evidence tools, so an agent can distinguish it from the sibling tools without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool (observe, diagnose, audit) and gives clear exclusions with alternative tools. Minor deduction: it references 'martin_get_status', but the sibling tool list contains 'martin_status', not 'martin_get_status', so the alternative pointer is slightly unreliable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_pauseADestructive
Write a durable pause receipt for one canonical MartinLoop run. Provide exactly one selector: file, loopId, or latest; runsDir changes the run-store root, while reason and requestedBy add audit context. Use for a temporary hold before risky follow-up work. This records a request and does not kill a process; use martin_cancel to abandon work or martin_continue to resume.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Path to one canonical run record or directory. Mutually exclusive with loopId and latest. | |
| latest | No | When true, targets the latest canonical run. Mutually exclusive with file and loopId. | |
| loopId | No | Canonical MartinLoop run identifier. Mutually exclusive with file and latest. | |
| reason | No | Optional non-empty reason recorded in the pause receipt. | |
| runsDir | No | Optional run-store root override used to resolve loopId or latest. | |
| requestedBy | No | Optional human or runtime identity label recorded for audit context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | The control action that was recorded. |
| loopId | Yes | MartinLoop run identifier the control was applied to. |
| reason | No | Human-readable reason for the control, if provided. |
| controlId | Yes | Unique receipt ID for this control action. |
| requestedAt | Yes | ISO 8601 timestamp when the control was recorded. |
| requestedBy | No | Identity that requested the control, if provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey idempotentHint=false and destructiveHint=true, so the bar is lower. The description adds useful context by clarifying that the tool 'records a request and does not kill a process' and that the receipt is durable. However, it does not explain what destructive side effect the destructiveHint refers to, such as overwriting prior pause state or mutating the run record, so the behavioral disclosure remains incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core verb-resource pair is front-loaded, selector requirements follow immediately, and the guidance about when not to use it is packed into the final clause. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with a oneOf constraint and existing annotations, the description covers the selector rule, optional parameter purposes, the intended use case, and how this tool differs from its closest alternatives. The output schema exists, so return-value details do not need to be repeated in prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters. The description adds value by grouping file, loopId, and latest as mutually exclusive selectors and by summarizing runsDir as the run-store root and reason/requestedBy as audit context, but this mostly restates or lightly repackages schema information rather than adding deep new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Write a durable pause receipt for one canonical MartinLoop run.' It clearly distinguishes this from related tools by naming martin_cancel and martin_continue, and it frames the operation as a temporary hold rather than termination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use for a temporary hold before risky follow-up work.' It also gives exclusions and alternatives: 'This records a request and does not kill a process; use martin_cancel to abandon work or martin_continue to resume.' An agent can confidently choose between pause, cancel, and continue.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_planARead-onlyIdempotent
Read-only planning step that turns an objective into bounded scope, verifier proposal, policy pack, and risk recommendation. Use for authorized software changes before preflight/run. Do not use to mutate files or replace the verifier. Next: call martin_preflight with the chosen scope, budget, and verifier.
| Name | Required | Description | Default |
|---|---|---|---|
| maxUsd | No | ||
| context | No | Optional extra issue or bug context. | |
| maxTokens | No | ||
| objective | Yes | The coding objective to plan. | |
| maxMinutes | No | ||
| policyPack | No | ||
| deniedPaths | No | ||
| maxCommands | No | ||
| allowedPaths | No | ||
| maxIterations | No | ||
| maxFilesChanged | No | ||
| verificationPlan | No | ||
| workingDirectory | No | Optional repo-root override resolved under the MCP workspace root. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint. The description reinforces the read-only nature, adds what the tool produces, and clarifies that it does not mutate files or replace the verifier. This adds useful behavioral context beyond the annotations, though idempotence is not explicitly discussed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the core purpose front-loaded and no filler. Every sentence adds useful information about scope, usage boundaries, or next steps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and safety annotations, the tool is complex with 13 input parameters. The description gives a good workflow overview but does not explain how to choose or set the many constraint parameters, which are mostly undocumented at 23% schema coverage. An agent would struggle to construct a well-formed planning request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 23%, so the description must compensate for the many undocumented parameters. It mentions 'objective', 'scope', 'budget', and 'verifier', but does not map these to specific fields such as maxUsd, verificationPlan, policyPack, allowedPaths, or deniedPaths. Most parameters remain unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a read-only planning step that converts an objective into concrete artifacts: bounded scope, verifier proposal, policy pack, and risk recommendation. It also differentiates itself from preflight and run by explicitly positioning itself before those phases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it ('before preflight/run' for 'authorized software changes'), when not to use it ('Do not use to mutate files or replace the verifier'), and what to do next ('call martin_preflight with the chosen scope, budget, and verifier'). This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_preflightARead-onlyIdempotent
Read-only validation of the exact run contract before execution or spend. Use after planning and before martin_run to check engine, verifier, path scope, and budget. Do not use as execution or completion proof. Next: call martin_run if allowed, otherwise resolve the reported blocker.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model override passed to the CLI. | |
| engine | No | Which agent CLI would be used. Defaults to claude. | |
| maxUsd | No | Hard budget ceiling in USD. | |
| context | No | Optional issue context carried into the run contract. | |
| maxTokens | No | Maximum total tokens across all attempts. | |
| objective | Yes | The coding task to validate. | |
| projectId | No | ||
| maxMinutes | No | Estimated wall-clock minutes allowed for the run contract. | |
| policyPack | No | ||
| deniedPaths | No | Repo-relative path globs Martin must never modify. | |
| maxCommands | No | Estimated maximum commands allowed for the run contract. | |
| workspaceId | No | ||
| allowedPaths | No | Repo-relative path globs Martin may modify. | |
| maxIterations | No | Maximum number of loop attempts. | |
| maxFilesChanged | No | Estimated maximum files changed for the run contract. | |
| verificationPlan | No | Commands that must all exit 0 for completion. | |
| workingDirectory | No | Optional repo-root override resolved under the MCP workspace root. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| summary | Yes | |
| warnings | Yes | |
| execution | Yes | |
| readiness | Yes | |
| normalized | Yes | |
| receiptScope | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds meaningful context beyond that by specifying exactly what the validation covers (engine, verifier, path scope, budget) and clarifying it is not a proof of execution or completion. This enriches the behavioral contract without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the purpose, usage timing, checks performed, exclusion, and next step. Every clause earns its place, and the most critical info (purpose) is front-loaded. There is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a preflight validation tool with 17 parameters, an output schema, and read-only/idempotent annotations, the description fully covers the needed context: what it validates, when to call it, what it is not, and what to do next. The output schema handles return specifics, so no additional return-value explanation is needed. An agent can invoke this tool correctly with no missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 82%, and most parameters have clear descriptions (e.g., engine enum, maxUsd, maxTokens, deniedPaths). The description does not add parameter-specific details beyond what the schema already provides. With high coverage, the description is not required to elaborate on each parameter, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Read-only validation of the exact run contract') on a specific resource (the run contract) and explicitly distinguishes it from execution by noting 'before execution or spend' and naming the sibling martin_run. It also makes clear it is not a proof of completion, removing any ambiguity about its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit timing ('Use after planning and before martin_run'), states the checks it performs (engine, verifier, path scope, budget), and directs the next action ('call martin_run if allowed, otherwise resolve the reported blocker'). It also says 'Do not use as execution or completion proof,' which is a clear when-not-to-use condition. No exclusions or alternatives are left unstated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_pr_summaryARead-onlyIdempotent
Generate a GitHub-ready pull-request title and Markdown body from a completed MartinLoop run dossier, including its verification grade and score. Use after a governed run completes when you need PR copy without creating the PR. Use martin_create_pr instead to actually open the PR on GitHub. Use martin_review_pr to evaluate an existing PR body against run evidence. Use martin_eval first if you need a merge-readiness grade before generating the PR body. This tool only reads saved run evidence and does not modify the repository or contact GitHub.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId and latest. | |
| format | No | Dossier rendering format. Defaults to github-pr for PR body generation. Use md for plain Markdown or json for structured output. | |
| latest | No | When true, generates the summary for the most recently updated run. Mutually exclusive with file and loopId. | |
| loopId | No | MartinLoop run identifier from the run store. Mutually exclusive with file and latest. | |
| runsDir | No | Override the default run-store root directory. Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| body | Yes | GitHub-flavoured Markdown PR body containing the run dossier. |
| grade | Yes | Verification grade assigned to the run. |
| score | Yes | Numeric verification score from 0–100. |
| title | Yes | Suggested GitHub pull-request title. |
| loopId | Yes | MartinLoop run identifier used to generate the summary. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description adds meaningful context by stating the tool 'only reads saved run evidence and does not modify the repository or contact GitHub.' This clarifies that despite producing GitHub-ready copy, it has no external side effects. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then efficiently covers usage timing, sibling alternatives, preconditions, and behavioral safety. Every sentence earns its place, and there is no redundant restating of the tool name or schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the strong annotations, full parameter schema coverage, and the presence of an output schema, the description is complete enough for correct tool selection and invocation. It explains when to use it, what it consumes, what it produces, how it differs from related tools, and that it is read-only with no GitHub interaction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, including the oneOf requirement among file, loopId, and latest, and the format enum. The description adds no parameter-specific semantics, which is acceptable because the structured schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Generate a GitHub-ready pull-request title and Markdown body from a completed MartinLoop run dossier.' It clearly states the deliverable, including verification grade and score, and distinguishes itself from PR-creating and PR-reviewing siblings without needing to infer from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Use after a governed run completes when you need PR copy without creating the PR') and names concrete alternatives with conditions: use martin_create_pr to open the PR, martin_review_pr for existing PR bodies, and martin_eval first if a merge-readiness grade is needed. This fully routes an agent to the right sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_review_prARead-onlyIdempotent
Review a PR body or draft against the MartinLoop run dossier and evaluation evidence, and return a verdict with specific findings. Use when you have an existing PR body and want to check whether it accurately represents the governed run evidence. Supply prBody to review a specific body string; omit it to evaluate the auto-generated dossier body. Do not use to generate a PR body from scratch — use martin_pr_summary instead. Do not use to open or create a PR — use martin_create_pr instead. This tool only reads saved run evidence and does not modify the repository or contact GitHub.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Absolute or relative path to a loop-record.json file or run directory. Mutually exclusive with loopId and latest. | |
| format | No | Dossier format used when generating the reference body for comparison. Defaults to github-pr. | |
| latest | No | When true, reviews against the most recently updated run. Mutually exclusive with file and loopId. | |
| loopId | No | MartinLoop run identifier from the run store. Mutually exclusive with file and latest. | |
| prBody | No | The PR body text to review. If omitted, the auto-generated dossier body is evaluated instead. | |
| runsDir | No | Override the default run-store root directory. Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| loopId | Yes | MartinLoop run identifier the review was performed against. |
| summary | Yes | Plain-English review summary. |
| verdict | Yes | Merge verdict: approve_with_review means safe to merge with human review; needs_changes requires fixes; blocked means do not merge. |
| findings | Yes | Specific findings that informed the verdict. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds genuinely useful context beyond those fields: the tool 'only reads saved run evidence and does not modify the repository or contact GitHub.' This is valuable because the name 'review_pr' could otherwise imply GitHub API interaction. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each earning its place: purpose, when-to-use, invocation mode, two sibling exclusions, and safety. It is appropriately sized given the sibling ambiguity (martin_pr_summary, martin_create_pr) and includes all necessary routing information. The prBody sentence slightly overlaps with schema text, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with full schema coverage and an output schema, the description covers everything an agent needs: what it does, when to use it, how to invoke both modes, which tools not to use instead, and the safety profile. Return-value details are handled by the output schema, so no gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's guidance on prBody ('Supply prBody to review a specific body string; omit it to evaluate the auto-generated dossier body') largely restates the schema's own prBody description. It adds minimal meaning beyond the structured fields, but no compensation is needed given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Review') with a clear resource ('PR body or draft against the MartinLoop run dossier and evaluation evidence') and a concrete outcome ('return a verdict with specific findings'). It further disambiguates from siblings by naming what it is not: not martin_pr_summary (generation) and not martin_create_pr (creating/opening PRs). An agent can select this tool confidently without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use is stated ('when you have an existing PR body and want to check whether it accurately represents the governed run evidence') and two explicit exclusions name the exact alternatives. The description also covers the two invocation modes (supply prBody vs omit it), which is practical operational guidance an agent needs before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_runADestructive
Execute a governed MartinLoop coding run after MCP workflow admission is satisfied. Use when the user has authorized implementation, bug fixing, tests, or refactoring and doctor/estimate/plan/preflight receipts match this task. Do not use for question-only diagnosis or when policy, budget, credentials, or scope still need consent. Next: read martin_dossier and verifier evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Optional model override passed to the CLI. | |
| engine | No | Which agent CLI to use. Defaults to claude. | |
| maxUsd | No | Hard budget ceiling in USD. | |
| maxTokens | No | Maximum total tokens across all attempts. | |
| objective | Yes | The coding task to complete. Be specific about what needs to change. | |
| projectId | No | Project identifier for telemetry. | |
| deniedPaths | No | Repo-relative path globs Martin must never modify. | |
| workspaceId | No | Workspace identifier for telemetry. | |
| allowedPaths | No | Repo-relative path globs Martin may modify. | |
| maxIterations | No | Maximum number of loop attempts. | |
| verifyTimeoutMs | No | Hard timeout for each verifier command in milliseconds. | |
| verificationPlan | No | Commands that must all exit 0 for the task to be considered complete. | |
| workingDirectory | No | Optional repo-root override resolved under the MCP workspace root. Must stay within that safe root. | |
| providerExecutionTimeoutMs | No | Hard timeout for each provider coding process in milliseconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| budget | Yes | |
| engine | Yes | |
| loopId | Yes | |
| reason | Yes | |
| status | Yes | |
| costUsd | Yes | |
| attempts | Yes | |
| pressure | Yes | |
| inspection | Yes | |
| shouldStop | Yes | |
| lifecycleState | Yes | |
| remainingTokens | No | |
| workingDirectory | Yes | |
| remainingBudgetUsd | Yes | |
| verificationPassed | Yes | |
| remainingIterations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and idempotentHint=false, so the description doesn't need to restate that this mutates state. It adds useful behavioral context about the governance workflow ('after MCP workflow admission is satisfied', receipts matching, next step to read dossier/verifier evidence). This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: what the tool does, when to use it, when not to use it, and what to do next. The purpose is front-loaded, and each sentence earns its place. It is concise without losing necessary governance context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity (14 parameters, output schema present, many siblings), the description covers the key non-schema context: authorization requirements, workflow prerequisites, exclusions, and the next recommended action. The output schema handles return-value documentation, so nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 14 parameters are already individually documented in the input schema. The description adds no parameter-specific meaning beyond what the schema provides, which matches the baseline of 3 for high schema coverage. No compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Execute a governed MartinLoop coding run.' It further distinguishes the tool by listing concrete supported task types ('implementation, bug fixing, tests, or refactoring') and by referencing the prior workflow stages (doctor/estimate/plan/preflight), making it clearly distinct from siblings such as martin_plan, martin_status, or martin_list_runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use conditions: the user has authorized implementation/bug fixing/tests/refactoring and the upstream receipts match the task. It also gives explicit when-not-to-use exclusions: 'Do not use for question-only diagnosis or when policy, budget, credentials, or scope still need consent.' This is strong routing guidance relative to the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_run_dossierARead-onlyIdempotent
Read the full structured execution dossier for one MartinLoop run, including attempts, events, artifacts, verification, integrity, cost, and related discovery surfaces. Provide exactly one selector: file, loopId, or latest; runsDir changes the run-store root. Use for comprehensive evidence review. Do not use for a compact state check; use martin_get_run, or use martin_dossier when formatted sharing output is required.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Path to a canonical loop-record.json, legacy file, or run-store directory. Mutually exclusive with loopId and latest. | |
| latest | No | When true, loads the most recently updated loop record. Mutually exclusive with file and loopId. | |
| loopId | No | Loop ID under the run store. Mutually exclusive with file and latest. | |
| runsDir | No | Optional run-store root override used to resolve loopId or latest. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | Yes | |
| loop | Yes | |
| budget | Yes | |
| source | Yes | |
| related | Yes | |
| attempts | Yes | |
| warnings | Yes | |
| artifacts | Yes | |
| inspection | Yes | |
| sourceKind | Yes | |
| recentEvents | Yes | |
| verification | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral context by specifying that the tool reads a full dossier, requires exactly one selector, that runsDir changes the run-store root, and that it is not a formatted-output tool. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three purposeful sentences with no filler. The main purpose is front-loaded, followed by selector usage and then exclusion guidance. Every sentence contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent tool with full schema coverage and an output schema, the description is complete. It covers purpose, selector constraints, runsDir semantics, and alternative tools, leaving no critical calling decision ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is already 3. The description goes beyond the schema by stating the exclusivity requirement ('exactly one selector') and clarifying runsDir's role ('changes the run-store root'), adding value on top of the already well-described parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Read') with a clearly defined resource: 'the full structured execution dossier for one MartinLoop run.' It enumerates the dossier contents (attempts, events, artifacts, verification, integrity, cost, discovery surfaces) and explicitly contrasts itself with martin_get_run and martin_dossier, making sibling differentiation easy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States exactly when to use it ('comprehensive evidence review') and when not to ('compact state check'), naming the alternatives explicitly: martin_get_run for compact state and martin_dossier for formatted sharing output. It also gives selector usage guidance ('exactly one selector: file, loopId, or latest').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_statusARead-onlyIdempotent
Read the current budget, cost, remaining limits, and stop pressure for one MartinLoop run. Provide exactly one selector: loopJson for an inline record, file for a saved record, loopId for a run-store ID, or latest for the newest run; runsDir only changes the run-store root. Use for a compact budget check. Do not use for full events or artifacts; use martin_get_run or martin_run_dossier instead.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Path under the Martin runs root to a loop-record.json file, a legacy .jsonl file, or a run-store directory. Mutually exclusive with loopJson, loopId, and latest. | |
| latest | No | When true, loads the most recently updated loop record. Mutually exclusive with loopJson, file, and loopId. | |
| loopId | No | Loop ID resolved as <runsDir>/<loopId>/loop-record.json. Mutually exclusive with loopJson, file, and latest. | |
| runsDir | No | Optional runs-root override resolved under the default Martin runs root. | |
| loopJson | No | JSON-serialized LoopRecord. |
Output Schema
| Name | Required | Description |
|---|---|---|
| budget | Yes | |
| loopId | Yes | |
| source | Yes | |
| status | Yes | |
| costUsd | Yes | |
| attempts | Yes | |
| pressure | Yes | |
| avoidedUsd | Yes | |
| inspection | Yes | |
| shouldStop | Yes | |
| lifecycleState | Yes | |
| remainingTokens | No | |
| remainingBudgetUsd | Yes | |
| remainingIterations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful behavioral boundaries: it returns budget/cost/limits/stop pressure only, is scoped to one run, and does not provide full events or artifacts. It also clarifies that runsDir only changes the run-store root, preventing misinterpretation of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, selector guidance second, usage boundaries last. Every sentence earns its place, and there is no redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the oneOf selector structure, 5 parameters, and presence of an output schema, the description covers all needed context: what is returned, how to select the target run, the optional runsDir behavior, and when to choose sibling tools. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already described, including mutual exclusivity. The description adds little beyond rephrasing the selector categories and the runsDir scope, which the schema already conveys. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Read the current budget, cost, remaining limits, and stop pressure for one MartinLoop run.' It also distinguishes itself from siblings by explicitly saying it is a compact budget check and not for full events or artifacts, naming martin_get_run and martin_run_dossier as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use the tool ('Use for a compact budget check') and when not to use it ('Do not use for full events or artifacts'), with explicit sibling alternatives. It also constrains selector usage with 'Provide exactly one selector,' which is actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
martin_triage_runsARead-onlyIdempotent
Read-only prioritization of saved Martin runs that need attention. Use when the user says a prior attempt failed, asks what to fix next, or resumes an interrupted session. Do not use for a brand-new objective with no relevant run history. Next: inspect the selected run or dossier before retrying.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of runs to triage. Defaults to 20. | |
| model | No | Filter by attempt model. | |
| status | No | Filter by loop status. | |
| runsDir | No | Optional runs-root override. | |
| adapterId | No | Filter by attempt adapter ID. | |
| updatedAfter | No | Optional ISO-8601 timestamp for recency filtering. | |
| includeHealthy | No | When true, include healthy runs instead of only attention-worthy findings. | |
| lifecycleState | No | Filter by lifecycle state. |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| filters | Yes | |
| findings | Yes | |
| runsRoot | Yes | |
| warnings | Yes | |
| findingCount | Yes | |
| evaluatedRuns | Yes | |
| severityBreakdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and idempotentHint, so the description does not need to repeat them. It adds value beyond annotations by clarifying that this surfaces attention-worthy runs by default and that healthy runs are excluded unless includeHealthy is true, plus the workflow hint to inspect before retrying.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, with the purpose in the first sentence and all subsequent sentences earning their place: trigger conditions, an exclusion, and a next-step directive. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 optional params, full schema coverage, an output schema present, and read-only/idempotent annotations, the description supplies the missing selection context: when to call it, when not to, and what to do next. Nothing needed for correct selection or invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter has its own description. The tool description adds no parameter-level detail, but the baseline of 3 applies because the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action, resource, and filtering criterion: 'Read-only prioritization of saved Martin runs that need attention.' This distinguishes it from sibling tools like martin_list_runs or martin_status, which list or report status without prioritization. The 'need attention' scope is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names concrete triggering scenarios: prior attempt failed, user asks what to fix next, or resuming an interrupted session. It also gives an explicit non-use case: brand-new objective with no relevant run history, and ends with the correct next action, inspect the selected run or dossier before retrying.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
There is substantial overlap among read-only inspection tools: martin_status, martin_get_run, martin_inspect, martin_logs, martin_run_dossier, and martin_dossier all retrieve run information with subtle differences. The descriptions work hard to disambiguate them, but an agent would need to parse long caveats to avoid selecting the wrong retrieval tool.
All tools share the martin_ prefix and snake_case, which helps, but the naming pattern is inconsistent: some are verb_noun (list_runs, get_run, create_pr), some are bare verbs (run, inspect), and some are noun-only commands (doctor, dossier, arcade). martin_dossier and martin_run_dossier are especially easy to confuse.
24 tools is on the heavy side, but the governed-run lifecycle is broad: estimation, planning, preflight, execution, control, inspection, evaluation, and PR workflows. Most tools serve a distinct phase or audience, though a few niche tools like martin_arcade and martin_arcade_status add marginal value.
The surface covers the full governed-run workflow from estimate, plan, preflight, run, pause/cancel/continue, inspection, evaluation, and PR creation/review. Minor gaps exist, such as no explicit tool for updating a PR or directly editing run policies, but agents can work around these using existing tools.
Maintenance
Related MCP Connectors
Deterministic runtime safety for AI agents: scan PII, gate tool actions, verify LLM output.
Budget & cost control for AI agents — per-agent spend caps + rate limits before each call.
Pre-execution governance for AI agents. Deterministic PASS/FAIL/REVIEW verdicts, replayable proof.
Enterprise AI Control Plane: governance, guardrails, spend tracking, compliance & smart routing.
Related MCP Servers
- AlicenseAqualityAmaintenanceThis server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.190,042MIT
- AlicenseAqualityNot gradedmaintenanceEnables browser automation through Playwright using accessibility tree snapshots instead of screenshots. Supports web scraping, form interactions, testing, and connecting to existing browser sessions with logged-in accounts.22239,3205
- AlicenseNot gradedqualityFmaintenanceGovernance kernel for AI agents — policy enforcement, code safety verification, multi-model hallucination detection (CMVK), trust attestation (IATP), and immutable audit trails. Works with Claude Desktop, Cursor, and any MCP client.73MIT
- AlicenseNot gradedqualityDmaintenanceMCP Guard Server - Budget control, approval workflows and audit logging for AI agents (Claude Code, Cursor, ChatGPT)MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Keesan12/martin-loop'
If you have feedback or need assistance with the MCP directory API, please join our Discord server