A parallel AI window for Claude Code. Fork conversations to Gemini, GPT, DeepSeek, or any model via OpenRouter, then fold results back.
Claude Sidecar defines 6 tools with complete input schemas and descriptions. Tool names follow verb_noun convention (sidecar_start, sidecar_status, sidecar_read, sidecar_list, sidecar_resume, sidecar_continue). Descriptions are detailed and context-rich (200-800 chars), exceeding baseline averages. However, output schemas are not documented, responses are described in prose but lack formal JSON Schema definitions. Error handling guidance is minimal. Tool descriptions are LLM-optimized with explicit mode selection logic and polling instructions, but lack structured recovery guidance for failure cases.
Start a new sidecar session that inherits a previous session's conversation as context. The previous session's messages become read-only background for the new task. Returns a task ID immediately — use sidecar_status to poll.
List all sidecar sessions for the current project. Shows task ID, model, status, age, and briefing excerpt.
Read the results of a completed sidecar task. Returns the summary by default, or full conversation history, or session metadata.
Reopen a previous sidecar session with full conversation history preserved. The sidecar continues in the same OpenCode session. Returns a task ID immediately — use sidecar_status to poll.
Spawn a sidecar conversation with a different LLM. Returns a task ID immediately. Mode selection: use INTERACTIVE (default, noUi: false) for research, exploration, analysis, and any task where the user benefits from watching progress live. It eliminates the polling problem entirely. Use HEADLESS (noUi: true) only for background automation the user does NOT need to monitor. When in doubt, use interactive. EXCEPTION: When spawning multiple sidecars simultaneously, ALWAYS use HEADLESS (noUi: true) for all of them unless the user explicitly requests interactive. Opening multiple Electron windows at once is disruptive. For headless mode, ALWAYS run `sleep 25` in your shell before each sidecar_status call to enforce the polling interval. For interactive mode, do not poll. Wait for the user to tell you they've clicked Fold, then use sidecar_read. Call sidecar_guide first if you need help choosing a model or writing a good briefing. Pass includeContext: false when the briefing is fully self-contained.
Output schemas not documented. Tool descriptions state what is returned (task ID, status, summary, conversation history) but lack formal JSON Schema definitions. LLMs cannot plan downstream tool calls or extract fields without knowing response structure.
Error handling lacks recovery guidance. Descriptions do not explain what errors are possible, how to classify them (retryable vs fatal), or what the LLM should do next. E.g., sidecar_start does not document timeout behavior or invalid model errors.
Parameter constraints incomplete. 'thinking' enum is documented, but 'summaryLength' enum values (brief, normal, verbose) lack descriptions of what each produces. 'timeout' and 'contextMaxTokens' lack min/max bounds. 'contextTurns' lacks range specification.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Check the status of a running sidecar task. Returns status (running/complete), elapsed time, and progress info. Primarily for headless mode — in interactive mode, wait for the user to tell you the sidecar is done instead of polling.
Polling pattern not idempotent-safe. sidecar_status description instructs 'ALWAYS run sleep 25 before each call' for headless mode, but does not document whether repeated calls with the same taskId are safe or if state changes between calls. Non-idempotent polling invites duplicate side effects.
Composition gap: sidecar_start returns a taskId immediately, but sidecar_read requires taskId + mode. No guidance on which mode to use when (summary vs conversation vs metadata). LLMs must infer intent without explicit decision logic.