Agent Runtimes
Choose and configure the agent runtime that executes code changes.
Tack does not implement its own AI agent. It orchestrates existing agent runtimes — the programs that actually read code, reason about it, and write changes. The runtime you choose determines which LLM provider you can use and how the agent communicates with Tack.
Supported Runtimes
| Runtime | Status | RPC | File Scope |
|---|---|---|---|
| Pi | RPC runtime | Yes (bidirectional JSON over stdin/stdout) | Enforced via tool_call hooks |
| Claude Code | Minimal compatibility | No (fire-and-forget) | Prompt-level guidance only |
Choosing a Runtime
Pi
Pi is an open-source coding agent/runtime from the pi-mono project. It supports bidirectional JSON-RPC communication, which lets Tack enforce file scope boundaries at the tool level and exchange structured messages in real time.
Pi characteristics:
- Tool-call hooks can enforce file scope boundaries
- JSON-RPC communication supports status updates and message exchange
- Provider settings can control models per role
- Multiple streams can run with runtime-level scope checks
Pi supports these providers:
anthropic— Claude models (Opus, Sonnet, Haiku)openai— GPT modelsopenai-codex— Codex models with OAuth supportgemini— Google Gemini modelsgroq,mistral,xai— other compatible providers
Configuration:
agents:
runtime: pi
pi:
provider: openai-codex
model: gpt-5.4
thinking_level: mediumWhen Pi is selected during setup and missing, Tack can install it after explicit consent if Bun or npm is available. Tack uploads a custom extension that provides tool-call hooks for file scope enforcement and structured message output.
Claude Code
Claude Code is supported as a minimal compatibility path. Tack invokes it with a prompt and waits for it to finish. There is no bidirectional communication.
Claude Code characteristics:
- Uses the Claude Code CLI already installed on the machine
- Runs through prompt-and-wait execution rather than Tack RPC
- Relies on prompt-level file scope guidance
Configuration:
agents:
runtime: claude-codeClaude Code uses its own authentication. Set runtime_auth.mode: native so Tack does not try to inject credentials:
runtime_auth:
mode: native
runtime: claude-codeAuthentication
Every runtime needs to authenticate with an LLM provider. Tack supports two modes:
- Native mode — the runtime uses your local environment (e.g.,
ANTHROPIC_API_KEY). Works with local sandboxes only. - Tack mode — Tack manages credentials and injects them into the sandbox. Required for remote sandboxes.
See Credentials & Auth for the full authentication setup, credential formats, and multi-provider configuration.
Setting Up
tack setup records the global runtime selection. tack init can inherit that value or write a project override. The setup/init prompts ask:
- Which runtime to use
- Which provider to use (depends on runtime)
- Which authentication method (API key, OAuth)
- Whether to validate the combination
The wizard rejects incompatible combinations (e.g., native auth with Daytona sandboxes) before you start.
Switching Runtimes
Change the runtime in your project config:
agents:
runtime: piThen reload or restart the daemon if the change cannot be live-reloaded:
tack daemon reload
# or
tack daemon restartExisting objectives continue running with the runtime they started with. Only new objectives use the updated config.