Supported Agents
Tempest supports multiple AI coding agents out of the box. This guide covers the exact CLI commands, configuration options, and integration details for each agent.Agent Configuration System
Each agent in Tempest is defined by anAgentConfig object with the following properties:
The
{UUID} placeholder is replaced by Tempest with the actual session or conversation UUID.
Claude Code
Display Name: Claude CodeCLI Command:
claudeResumable: Yes (by conversation ID)
Launch Command
First spawn:Configuration
Claude Code reads configuration from:~/.claudedirectory (user home)- Environment variables (e.g.,
ANTHROPIC_API_KEY) - MCP configuration from
.mcp.jsonin the project root (if Token Intelligence is enabled)
API Key Setup
Set your Claude API key via the Claude CLI:~/.claude/config.json so Tempest can access them.
Model Selection
Claude Code uses the model configured in your Claude CLI settings. To change the model:Tempest Integration
- Session ID: Persisted as
conversationIdin localStorage - Work-Done Detection:
- Primary: OSC 9 notification signal at turn completion
- Secondary: Title-based detection (title starts with
✳for idle, Unicode spinners for busy) - Fallback: Quiet timer (5 seconds no output)
- MCP Support: Enabled by default if Token Intelligence is configured
- Tab Badge: Shows ”✳ Claude Code” title when idle
- Auto-approve flag:
--dangerously-skip-permissions— appended by default; disables all tool-call confirmation prompts
Troubleshooting
If Claude Code doesn’t launch:- Ensure
claudeis installed:which claude(macOS/Linux) orgcm claude(Windows) - Run
claude configureto set up your API key - Test in a terminal:
claude --helpshould print the help menu - Check that the API key is valid by running
claudein the terminal
Gemini CLI
Display Name: Gemini CLICLI Command:
geminiResumable: Yes (by conversation ID)
Launch Command
First spawn:Configuration
Gemini CLI reads configuration from:~/.geminidirectory (user home)- Environment variables (e.g.,
GOOGLE_API_KEY,GOOGLE_PALM_KEY) - MCP configuration from
.gemini/settings.jsonin the project root (if Token Intelligence is enabled)
API Key Setup
Set your Google API key via the Gemini CLI:Model Selection
Gemini CLI uses the model configured in your settings. To change the model:Tempest Integration
- Session ID: Persisted as
conversationIdin localStorage - Work-Done Detection:
- Primary: OSC 9 notification signal at turn completion
- Secondary: Title-based detection (title starts with
◇for idle,✦or✋for busy) - Fallback: Quiet timer (5 seconds no output)
- MCP Support: Enabled if Token Intelligence is configured (writes to
.gemini/settings.json) - Tab Badge: Shows title with busy/idle indicators
- Auto-approve flag:
--yolo— appended by default; puts Gemini CLI into full auto-approval mode
Troubleshooting
If Gemini CLI doesn’t launch:- Ensure
geminiis installed:which gemini(macOS/Linux) orgcm gemini(Windows) - Run
gemini configureto set up your API key - Test in a terminal:
gemini --helpshould print the help menu - Check that the API key is valid by running
geminiin the terminal
Opencode
Display Name: OpencodeCLI Command:
opencodeResumable: Yes (session ID captured from output)
Launch Command
First spawn:Session ID Capture
Unlike Claude Code or Gemini CLI, Opencode does not accept a--session-id flag on first spawn. Instead, it prints a session ID to stdout when it starts. Tempest captures this ID using a regex pattern:
Configuration
Opencode reads configuration from:opencode.jsonoropencode.jsoncin the project root- Environment variables
- MCP configuration under
mcp.atlasin the config file (if Token Intelligence is enabled)
MCP Configuration (Atlas)
If Token Intelligence is enabled, Tempest writes:Tempest Integration
- Session ID: Captured from output on first spawn, then persisted as
conversationId - Work-Done Detection: Uses standard heuristics (quiet timer, signal-based detection)
- MCP Support: Writes to
opencode.jsoncoropencode.json - Resume Behavior: Uses
-s <captured-id>flag on reopening
Troubleshooting
If the session ID is not captured:- Check that Opencode prints a UUID to stdout on startup
- Run Opencode in a terminal and look for UUID output:
opencode - If Opencode prints a different ID format, the regex pattern in
NewSessionMenu.tsxmay need tuning - Check the Tempest logs (DevTools console) for capture errors
Copilot CLI
Display Name: Copilot CLICLI Command:
gh copilotResumable: No (stateless)
Launch Command
Configuration
Copilot CLI reads configuration from:- GitHub CLI config (
~/.config/gh/config.ymlon macOS/Linux) - GitHub authentication token (use
gh auth loginto set up)
Authentication
Authenticate with GitHub:Tempest Integration
- Session ID: Not persisted (stateless sessions)
- Resumption: Not supported; each spawn creates a fresh session
- Work-Done Detection: Uses heuristics and signal detection
- Limitations: Copilot CLI is designed for one-off suggestions, not persistent conversations
Use Cases
- Quick code suggestions
- Testing command generation
- One-off questions without conversation context
Cline
Display Name: ClineCLI Command:
clineResumable: No (stateless)
Launch Command
Configuration
Cline reads configuration from:~/.clinedirectory (user home)- Environment variables (model selection, API keys)
- Project-level configuration files
API Key Setup
Set your Anthropic API key:Tempest Integration
- Session ID: Not persisted
- Resumption: Not supported; each spawn creates a fresh session
- Work-Done Detection: Uses signal detection and heuristics
- Model Support: Typically runs Claude models; configuration via environment
Troubleshooting
If Cline doesn’t launch:- Ensure
clineis installed:which cline(macOS/Linux) orgcm cline(Windows) - Set your API key:
export ANTHROPIC_API_KEY="your-key" - Test in a terminal:
cline --helporclineto start a session
Cursor Agent
Display Name: Cursor AgentCLI Command:
cursorResumable: No (stateless)
Launch Command
Configuration
Cursor Agent reads configuration from:- Cursor IDE settings (if the user also has Cursor installed)
- Environment variables
.cursor/mcp.jsonfor MCP configuration (if Token Intelligence is enabled)
MCP Configuration
If Token Intelligence is enabled, Tempest writes:Tempest Integration
- Session ID: Not persisted
- Resumption: Not supported; each spawn creates a fresh session
- Work-Done Detection: Uses signal detection
- MCP Support: Writes to
.cursor/mcp.jsonif Token Intelligence is configured
Troubleshooting
If Cursor doesn’t launch:- Ensure the Cursor CLI is installed:
which cursororgcm cursor - Cursor may require the Cursor IDE to be installed or configured
- Check Cursor’s documentation for CLI setup
Goose
Display Name: GooseCLI Command:
gooseResumable: No (stateless)
Launch Command
Configuration
Goose reads configuration from:~/.goosedirectory (user home)- Environment variables
- Project-level configuration files
API Key Setup
Set your API key (if required):Tempest Integration
- Session ID: Not persisted
- Resumption: Not supported; each spawn creates a fresh session
- Work-Done Detection: Uses signal detection and heuristics
- Limitations: Designed for autonomous task execution without persistent conversation
Use Cases
- Autonomous task execution
- One-shot agents that solve specific problems
- Testing and automation workflows
Troubleshooting
If Goose doesn’t launch:- Ensure
gooseis installed:which goose(macOS/Linux) orgcm goose(Windows) - Check that any required environment variables are set
- Test in a terminal:
goose --helporgooseto start
Antigravity
Display Name: Antigravity CLI Command:agy
Resumable: No (stateless — resumes last session via --continue)
Launch Command
First spawn:Tempest Integration
- Session ID: Not persisted (no externally addressable session ID)
- Resumption:
--continueresumes the most recent session in the current directory - Work-Done Detection: Uses signal detection and heuristics
- Auto-approve flag:
--dangerously-skip-permissions— appended by default
Troubleshooting
If Antigravity doesn’t launch:- Ensure
agyis installed and on your PATH - Test in a terminal:
agy --help
Codex CLI
Display Name: Codex CLI CLI Command:codex
Resumable: Yes (resumes last session in CWD via subcommand)
Launch Command
First spawn:Tempest Integration
- Session ID: Not persisted (no externally addressable session ID; resume is CWD-based)
- Resumption:
codex resume --lastpicks up the most recent Codex session in the working directory - Work-Done Detection: Uses signal detection and heuristics
- Auto-approve flag:
--dangerously-bypass-approvals-and-sandbox— appended by default
Troubleshooting
If Codex CLI doesn’t launch:- Ensure
codexis installed:which codex(macOS/Linux) orgcm codex(Windows) - Test in a terminal:
codex --help
Comparison Table
Droid: why no resume or auto-approve
Droid’s--auto <low\|medium\|high> autonomy flag is droid exec-only — interactive
mode sets autonomy through the /model and /fast slash commands instead. Tempest applies
flags.autoApprove to the interactive spawn as well as the headless one, so declaring
--auto there would break every interactive Droid launch whenever Auto is on. The entry
therefore ships without it; set your preferred level per-agent under
Settings → Agents → Droid → Extra flags if you only use Droid headlessly.
--resume [sessionId] is likewise omitted: it takes an id that Droid minted, and with no
value it resumes the last-modified session — which is not necessarily the one belonging to
this worktree. Tempest’s flags.session slot needs a CLI that accepts an id we supply on
first run.
Provider presets
Some vendors sell a coding plan with no CLI of their own: you keep using Claude Code (or Codex, or opencode) and redirect it at their endpoint with a handful of environment variables. MiniMax and Z.ai/GLM both work this way. Rather than have you paste those vars by hand, Tempest ships the vendors’ documented recipes as presets. Pick one under Settings → Agents → <agent> → Provider, paste your API key, and new sessions of that agent use that provider.
Notes:
- Keys live in your OS credential manager, not in Tempest’s config — the same store the API Keys section uses. One key per provider is shared by every agent pointed at it.
- A preset with no key is inert. Until you paste a key, the agent keeps using its own credentials, rather than being pointed at the vendor with an empty token.
- Precedence: a preset sits below everything you set explicitly. Your per-agent
Environmententries and the repo’stempest.ymlenv both override it. - A provider only appears for agents whose recipe has been verified against vendor docs. The variables differ per CLI, so a guessed recipe would silently break authentication.
- Presets are bundled with the release, not fetched. They rewrite an API base URL and
carry the variable your key is exported into, so they deliberately do not ride the unsigned
models.jsonpatch channel. Adding one is a release.
Manifest-Driven Agents
The full agent list ships asconfig/agents.json. The AgentConfig fields on each entry — hint, sessionIdArgs, resumeArgs, capturePattern, captureResumeArgs, autoApproveArgs, printArgs, modelArgs, clearCommand — are what every surface in Tempest reads: the New Session menu, the Automations headless runner, the Chat pane bridges, and the Message Queue’s agent-aware clear.
Agents added since this table was first written and driven entirely through the manifest: Antigravity, Codex CLI, Cursor Agent, Gemini CLI, Amp, Hermes, Pi, fx, Grok, Qwen Code, Droid.
Tempest periodically fetches an updated manifest from the tempestai-dev/tempest repository at startup — a new agent added upstream shows up in your workspace without needing to rebuild.
Adding a New Agent
Most agents need no code — just a manifest entry. Add one without rebuilding by using Settings → Agents → Add (see custom agents); to ship one to everyone, open a PR againstconfig/agents.json.
-
Add an entry to
config/agents.json. Note the nesting: the flag templates live under aflagsobject, and the CLI command iscommand(it becomesAgentConfig.hintinternally).Placeholders substituted in every group:{UUID},{MODEL},{PROMPT},{WORKSPACE_ID|NAME|SLUG|PATH},{BRANCH},{PORT}. An unknown one passes through verbatim and reaches the CLI literally, sosrc/lib/agentsManifestFile.check.tsrejects typos. -
Commit the icon to
config/agent-icons/(notsrc/assets/, which holds only the bundled built-ins). Icons are served from Tempest’s own repo via jsDelivr, never a third-party host. Omiticonand the agent renders a generic terminal glyph. -
Verify each flag against the CLI’s own
--helpor docs. Two traps worth calling out:autoApproveis applied to the interactive spawn as well as the headless one. A flag that only exists on a headless subcommand (Droid’s--auto, Crush’s--yolo) breaks every launch when Auto is on — leave it out.sessionneeds a CLI that accepts an id you supply on first run. A--resumethat only takes an id the CLI minted belongs incapture.resumeinstead, or nowhere.
-
Run the checks:
npm test.agentsManifestFile.check.tsvalidates the shipped file — every entry survives sanitization, ids are unique, icons resolve to a real file, placeholders are known, and value-carrying slots actually reference their placeholder. A malformed entry is otherwise dropped silently, which looks like “my agent never showed up” rather than an error. -
Optional — status detection. Agents whose title conventions are taught to
sessionManager.ts’sclassifyTitle()get busy/idle/needs-you states; the rest fall back to the quiet timer and OSC/BEL signals. Lifecycle hooks (src/lib/agentHooks/adapters/) give the most accurate status but need a bundled adapter, so they ship with a release. -
Sign the manifest.
config/agents.jsonis delivered over a signed channel, so a new entry reaches existing installs only once a key holder regeneratesconfig/agents.json.minisig(seeconfig/README.md). Until then it ships in the bundled floor with the next release. -
Test in Tempest: launch it, resume it, and — if
printis set — run it as a headless automation.