Guide

Agents

The same nine tools over MCP, the Pi extension and the OMP extension. What they read, what they run, what they write.

Nine tools, three surfaces

MCP server, Pi extension and OMP extension all call the same executors in src/tool-operations.ts, with the same schemas from src/tool-schemas.ts. They answer identically and a fix lands once.

ToolKindDoes
harnesses_detectreadInstalled harnesses and versions, scanned from PATH
harnesses_inforeadFull metadata for one id, or a batch of up to 20 ids
harnesses_modelsexecModels a harness can use now, optionally filtered
harnesses_runexecOne prompt through another harness
harnesses_mcp_listreadMCP servers in every config, normalized
harnesses_mcp_addwriteAdd or replace one MCP server
harnesses_mcp_removewriteRemove one MCP server
harnesses_mcp_syncwriteReset user scope configs to ~/.config/agntn/mcp.jsonc
harnesses_agents_syncwriteLink global instructions files to the master bundle, or check

harnesses_info with a list keeps the input order and returns an error entry beside the successful ones for an unknown id, so one typo doesn't fail the batch.

MCP

harnesses mcp
claude mcp add harnesses --scope user -- npx -y @agntn/harnesses mcp

Or in a client's config, or on the master list that mcp-servers sync distributes:

{
  "mcpServers": {
    "harnesses": { "command": "npx", "args": ["-y", "@agntn/harnesses", "mcp"] }
  }
}

The server speaks MCP over stdio and validates every call against the published JSON Schema. Read tools are annotated read-only and idempotent; harnesses_run is marked destructive and open world, because it is.

Running another harness from an agent

harnesses_run takes id, prompt, and tools as a required boolean. The model has to choose. tools: false is the advisor without tools, tools: true the full agent, readOnly: true beside it demands a native read-only sandbox. A mode the target harness cannot provide comes back as a tool error with the retry that would work; it never widens access on its own. timeoutSeconds defaults to 600.

Cancellation follows the host's request signal, the one MCP, Pi and OMP hand to a tool when the user interrupts. It is not a JSON argument, because a model would forget to pass it.

Pi and OMP

pi install npm:@agntn/harnesses

Both extensions are declared in package.json. Results render as a collapsed preview in the terminal, with the full text once you expand the row. harnesses_run output from a long review is where that matters.

A second harness's answer is a hypothesis. When Claude asks Codex to review a patch through harnesses_run, what comes back is text to check against the code, not a verdict to paste. The tool returns it as text on purpose.

@agntn/harnesses·MIT license· Paths follow the upstream CLIs and carry their evidence level. This site reads nothing from your machine.