Coding agent setup

Enable MCP Server for the project first, under Settings — it's off by default.

agent value Runs
claude Claude Code
codex Codex CLI
opencode opencode
antigravity Antigravity CLI
copilot GitHub Copilot CLI
pi Pi (via pi-mcp-adapter)
omp Oh My Pi

Claude Code#

Claude Code reads .mcp.json from the working directory:

{
  "mcpServers": {
    "itsaplan": {
      "type": "http",
      "url": "http://localhost:3000/mcp",
      "headers": { "Authorization": "Bearer ${ITSAPLAN_API_KEY}" }
    }
  }
}

itsaplan-runner.json:

{
  "url": "http://localhost:3000",
  "apiKey": "the key you copied on creation",
  "agent": "claude",
  "cwd": "/Users/me/work/my-repo"
}

Claude Code uses this server in addition to any servers, skills, or memory the machine already has. The preset runs with --permission-mode auto, so a classifier examines each action (including MCP tool calls) since no person is there to approve it. For a config file in a different location, add "args": ["--mcp-config", "/path/to/mcp.json"].

Codex#

Codex reads its MCP servers from ~/.codex/config.toml:

[mcp_servers.itsaplan]
url = "http://localhost:3000/mcp"
bearer_token_env_var = "ITSAPLAN_API_KEY"

itsaplan-runner.json:

{
  "url": "http://localhost:3000",
  "apiKey": "the key you copied on creation",
  "agent": "codex",
  "cwd": "/path/to/working-dir",
  "args": ["--skip-git-repo-check"]
}

Codex has no system-prompt flag, so the preset sends the run context before the task, both on stdin. The preset passes -c sandbox_mode="workspace-write" so Codex only writes inside the working directory. Add --skip-git-repo-check only if the working directory isn't a git repo.

opencode#

opencode reads opencode.json from the working directory and expands {env:VAR}, so the key stays out of the file:

{
  "$schema": "https://opencode.ai/config.json",
  "model": "anthropic/claude-sonnet-5",
  "mcp": {
    "itsaplan": {
      "type": "remote",
      "url": "http://localhost:3000/mcp",
      "enabled": true,
      "headers": { "Authorization": "Bearer {env:ITSAPLAN_API_KEY}" }
    }
  }
}

itsaplan-runner.json uses "agent": "opencode". Set model as provider/model — opencode supports many providers; run opencode auth login first to make one available.

Antigravity CLI#

Antigravity CLI reads ~/.gemini/config/mcp_config.json (one file per machine, headers take no variables):

{
  "mcpServers": {
    "itsaplan": {
      "serverUrl": "http://localhost:3000/mcp",
      "headers": { "Authorization": "Bearer the-agent-key" }
    }
  }
}

itsaplan-runner.json uses "agent": "antigravity". The binary is agy; sign in once interactively before running it unattended. The preset passes --dangerously-skip-permissions and --print-timeout 24h.

GitHub Copilot CLI#

Copilot CLI reads .mcp.json, but only after you've trusted the directory interactively — the runner instead passes --additional-mcp-config @.mcp.json to skip that step:

{
  "mcpServers": {
    "itsaplan": {
      "type": "http",
      "url": "http://localhost:3000/mcp",
      "headers": { "Authorization": "Bearer the-agent-key" },
      "tools": ["*"]
    }
  }
}

itsaplan-runner.json uses "agent": "copilot" with "args": ["--additional-mcp-config", "@.mcp.json"]. The preset passes --allow-all-tools and --no-ask-user; add --add-dir or --allow-all-paths for a task that touches paths outside the working directory.

Pi and Oh My Pi#

Pi needs the pi-mcp-adapter extension (pi install npm:pi-mcp-adapter) to read .mcp.json. Oh My Pi reads .mcp.json directly. Both use the same header format as Claude Code above; set "agent": "pi" or "agent": "omp" in itsaplan-runner.json. Sign in with pi interactively once before running unattended.

Running the runner#

npx -y @itsaplan/runner

The project shows the agent online within a few seconds. Assign it an issue, or @mention it in a comment, and the task starts on your machine. Full option reference (multiple agents in one process, custom command, etc.) is in the runner package README in the repository.

Updated

Was this page helpful?