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/runnerThe 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.