Tack
Getting Started

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

RuntimeStatusRPCFile Scope
PiRPC runtimeYes (bidirectional JSON over stdin/stdout)Enforced via tool_call hooks
Claude CodeMinimal compatibilityNo (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 models
  • openai-codex — Codex models with OAuth support
  • gemini — Google Gemini models
  • groq, mistral, xai — other compatible providers

Configuration:

agents:
  runtime: pi
  pi:
    provider: openai-codex
    model: gpt-5.4
    thinking_level: medium

When 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-code

Claude Code uses its own authentication. Set runtime_auth.mode: native so Tack does not try to inject credentials:

runtime_auth:
  mode: native
  runtime: claude-code

Authentication

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:

  1. Which runtime to use
  2. Which provider to use (depends on runtime)
  3. Which authentication method (API key, OAuth)
  4. 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: pi

Then reload or restart the daemon if the change cannot be live-reloaded:

tack daemon reload
# or
tack daemon restart

Existing objectives continue running with the runtime they started with. Only new objectives use the updated config.

On this page