Guide 09

Wire Tarn into your coding agent.

Tarn drives any agent that speaks MCP or has a shell. tarn-mcp exposes list / validate / run / fix_plan as structured tools; the tarn-api-testing skill teaches the failures-first loop.

Supported agents

This table is the canonical supported-agents list. Per-agent setup kits live under editors/.

AgentHow Tarn plugs inSetup
Claude Codetarn-mcp + skill plugin, plus the tarn-lsp pluginmarketplace plugin
OpenAI Codextarn-mcp (codex mcp add) + .agents/skills/ skill + AGENTS.mdeditors/codex
opencodetarn-mcp + tarn-lsp + skill via opencode.jsonceditors/opencode
pitarn-api-testing skill + tarn CLI (no native MCP; optional MCP via adapter)editors/pi
Cursortarn-mcp via .cursor/mcp.jsonMCP setup
Windsurftarn-mcp via .windsurf/mcp.jsonMCP setup
Neovim / Helix / Zed / VS Codetarn-lsp language servertarn-lsp

OpenAI Codex

Register the MCP server with the Codex CLI — it writes ~/.codex/config.toml for you:

codex mcp add tarn -- tarn-mcp
codex mcp list   # confirm "tarn" is listed

Or add the block by hand to ~/.codex/config.toml (user) or .codex/config.toml (project). command is the bare executable; args is a separate array:

[mcp_servers.tarn]
command = "tarn-mcp"
args = []

For the skill, Codex reads the Agent Skills standard at .agents/skills/<name>/SKILL.md (or ~/.agents/skills/). Full flow: editors/codex/README.md.

opencode

opencode uses its native opencode.jsonc at the repo root — note the schema shape (mcp, not mcpServers; type: "local"; a command array). It also gets the tarn-lsp language server:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tarn": { "type": "local", "command": ["tarn-mcp"], "enabled": true }
  },
  "lsp": {
    "tarn": { "command": ["tarn-lsp"], "extensions": [".yaml", ".yml"] }
  }
}

The lsp entry claims all .yaml/.yml files (opencode matches by final extension, not the .tarn.yaml compound suffix), so keep it in project-level config for Tarn-focused repos. Full flow: editors/opencode/README.md.

pi

The pi coding agent is deliberately minimal and has no native MCP — its docs say to "build CLI tools with READMEs (skills), or build an extension." That fits Tarn perfectly: tarn is a single static binary, and pi runs it through its bash tool. The canonical integration is the skill plus the CLI:

# drop the skill where pi discovers it
.agents/skills/tarn-api-testing/SKILL.md

# inside pi
/skill:tarn-api-testing write a smoke test for GET /health and run it

To expose the structured tarn-mcp tools in pi, use the community pi-mcp-adapter, which reads the same .mcp.json Tarn already ships. Full flow: editors/pi/README.md.

The cross-agent skill

The tarn-api-testing skill teaches an agent the failures-first loop, the .tarn.yaml format, and the diagnosis taxonomy. .agents/skills/<name>/SKILL.md is a shared standard read by Codex, opencode, and pi — one directory serves all three. The Tarn repo ships it at .agents/skills/tarn-api-testing/, symlinked to the canonical plugin/skills/tarn-api-testing/.

End-to-end example

A reproducible write → run → read-failure → fix loop lives in examples/agent-loop/. It hits the public JSONPlaceholder API, so there is nothing to start:

tarn validate examples/agent-loop/api.tarn.yaml
tarn run      examples/agent-loop/api.tarn.yaml --format llm

Ask any MCP-enabled agent: "Run examples/agent-loop/api.tarn.yaml with the tarn tools; if anything fails, call tarn_fix_plan and patch it." See the AI Workflows guide for the loop in depth.