{
  "notes": "EPISODE 2 (2026-10-27). 6 of 30 items were used before this episode; this episode spawns 16, so 22 are used and 8 remain; episodes 3-6 remain.\n\nPILOT VERDICT: the per-tool profile brief works. profile-pilot/aider, /opencode and /gemini-cli came back with a URL plus verbatim quote per claim, source-code checks where docs were silent, ISO release dates from the GitHub API, and explicit 'not found' gaps. profile-pilot/openhands was weak: the worker profiled the separate OpenHands/OpenHands-CLI repo, whose README says it is no longer actively maintained (1.16.0, 2026-05-08), and found no token output, no provider list and no working-directory behaviour; discovery saw the main repo OpenHands/OpenHands at MIT v1.33.0 (2026-10-23), which likely carries the current CLI, so it is re-profiled this episode. Both discovery items reported release years as 'not found' when read off the GitHub releases page, so the wide brief now orders dates from the releases API or atom feed and asks for stable and prerelease separately.\n\nWHAT THE PILOT ESTABLISHED (summary; details with sources in the four profile-pilot results):\n- Aider (Apache-2.0, Python): headless via --message/--message-file plus --yes-always, but --yes-always answers 'n' to LLM-suggested shell commands (io.py explicit_yes_required); no cwd flag (cd first); no JSON result output; confinement only --read, .aiderignore, --subtree-only, --dry-run, no shell allow/deny, no sandbox (Docker image only); usage printed as text per reply (tokens + cost) and machine-readable via --analytics-log JSONL (message_send: prompt_tokens, completion_tokens, cost); no subagents; providers via LiteLLM incl. Ollama and OpenAI-compatible; subscription only GitHub Copilot via a copied oauth token; newest GitHub Release v0.86.0 2025-08-09, PyPI 0.86.2 2026-02-12, last commit 2026-05-22 (slowing).\n- OpenCode 1.x (MIT, TypeScript, anomalyco/opencode, formerly sst): opencode run --dir <d> --auto --format json '<prompt>'; permission rules per tool (bash command patterns allow/ask/deny, edit, external_directory, webfetch/websearch, task) in opencode.json or OPENCODE_PERMISSION env; no OS sandbox (macOS sandbox PR #21538 closed unmerged); usage via opencode stats and JSON events carrying cost and tokens{input,output,reasoning,cache} per step-finish (SDK types.gen.ts); subagents (general/explore, task permission) and opencode serve for many sessions; 75+ providers via AI SDK/models.dev; subscription login: ChatGPT Plus (OAuth), GitHub Copilot (device code), GitLab Duo, SuperGrok; Claude Pro/Max explicitly NOT (removed in 1.3.0). Release v1.19.4 2026-10-22; commit 2026-10-27. DISCREPANCY: discovery saw v2.1.4 (2026-10-23), which is the OpenCode 2 line with docs at opencode.ai/v2/docs, not profiled; item opencode-v2 this episode.\n- Gemini CLI (Apache-2.0, TypeScript): gemini -p (headless also when no TTY), --output-format json|stream-json with stats incl. per-model tokens but no money cost, exit codes 0/1/42/53; --approval-mode auto_edit|yolo; TOML policy engine (allow/deny/ask_user by toolName, commandPrefix, argsPattern; ask_user becomes deny headless); sandbox -s with Seatbelt, Docker/Podman, gVisor, Windows, LXC; network allowed by default, proxied Seatbelt profiles exist; subagents on by default (.gemini/agents/*.md), no nested subagents, parallel sessions via experimental --worktree; providers Google only (Google login incl. AI Pro/Ultra subscription, API key, Vertex); stable v0.65.0 2026-10-20, nightly 2026-10-27.\n- OpenHands-CLI (MIT, Python): openhands --headless -t|-f, --json JSONL, always auto-approve headless; delegate tool/subagents in release notes; no confinement and no token output found; repo unmaintained.\n\nCANDIDATE DISPOSITION from discover/angle-registries and discover/angle-articles. Profiled this episode in batch profile-wide (16 items, keys): goose, cline-cli, qwen-code, kilo-cli, kimi-code, mistral-vibe, continue-cli, pi, letta-code, forgecode, hermes-agent, gptme, zcode, mini-swe-agent, openhands-current, opencode-v2. Not profiled, to be listed in the deliverable with the reason and the discovery citation: Crush (FSL-1.1-MIT, source-available not OSI open source; headless unclear, issue #2792 says --yolo unavailable for run); Roo Code (archived 2026-05-15); Kimi CLI legacy (archived, replaced by kimi-code); Octofriend (no headless mode); SWE-agent (MIT, research scaffold, last release v1.1.0 2025-05-22; mini-swe-agent is its maintained successor); Plandex (needs its own server, last push 2025-10); Trae Agent (no releases, last push 2026-02). Second tier, profile only if budget remains after gap-fill: Nanocoder, Kode CLI, Open Interpreter (interpreter exec), Grok CLI community (superagent-ai), Grok Build (xai-org, no releases), DeepSeek Harness (web UI only), Freebuff (no headless flag). Proprietary, excluded with citations in the discovery results: Amp, GitHub Copilot CLI, Cursor CLI, Auggie, Factory Droid, iFlow.\n\nEP3 PLAN: read the 16 profile-wide results (all listed in read). Spend at most 3 items on gap-fill for fields still 'not found' on the strongest 6-8 tools (expect: token-output schema, cwd flag, network sandbox, subscription login), and 1 'rank' item that gets the profile results via read and proposes the top five with reasons against the six criteria, citing the profile sources; keep used <= 26. EP4: 1 item 'recipe' for the first-ranked tool (exact invocation, confinement, metering, tool limits, each step cited), then finish=true in EP4 or EP5 and write the deliverable from the notes and results. Reserve >= 3 items for a judge send-back. Batch names used so far: discover, profile-pilot, profile-wide (never reuse).\n\nRANKING HINTS SO FAR (not final): OpenCode and Gemini CLI lead on headless plus permissions plus JSON usage output; Gemini has a real sandbox but Google-only models; OpenCode has subscription logins (not Claude) and no OS sandbox; Aider is mature but has no JSON result, no shell allow-list and slowing maintenance; Mistral Vibe (--max-tokens, --max-price, --output json, --auto-approve) and Goose (ACP subscriptions, 15+ providers) look strong pending their profiles.",
  "spawn": [
    {
      "name": "profile-wide",
      "mode": "research",
      "brief": "Profile the open-source coding-agent CLI {{name}} (repository {{repo}}; docs start at {{docs}}) as a candidate unattended worker runtime: given a prompt and a working directory, it must run from a script to completion with nobody at the keyboard and leave files behind. Item note: {{focus}} Read only public pages: the official repository, its docs site, its releases or changelog, and the GitHub API (api.github.com/repos/OWNER/REPO, /releases, /commits/BRANCH) or the releases.atom feed. Do not install or run the tool; read nothing on the machine you run on. Use a third-party page only where official ones are silent, and mark it third-party. Establish, each as {finding, source (exact URL), quote (verbatim text from it)}: (1) headless: the flag or subcommand that takes a prompt and exits when done; how the working directory is set; how actions are auto-approved with nobody present; whether a TTY is required; JSON or JSONL output and exit codes. (2) confinement: how shell commands are limited (allow/deny lists, policy files, approval modes); how file writes are limited (workspace-only, protected paths, read-only mode); how network access is limited (sandbox such as Docker, Seatbelt, bubblewrap, gVisor; egress allowlists; proxy). Write 'none documented' where that is so. (3) usage: whether it reports the tokens a run used, in what form (stdout text, JSON field, log file, telemetry, stats command) with field names, and whether money cost is reported; if docs are silent, check the JSON output schema or source code. (4) parallel: subagents, parallel tool calls, parallel sessions, worktrees, and how each is invoked. (5) providers: documented model providers, local or OpenAI-compatible endpoints, and whether a subscription login (ChatGPT Plus, Claude Pro/Max, Google account, GitHub Copilot, the vendor's own plan) works instead of an API key, with the login method. (6) license from the LICENSE file (SPDX id); newest stable release and newest prerelease, each with tag, ISO date and URL from the releases API or atom feed (published_at gives the year: never report the year as not found); newest default-branch commit date; whether the repository is archived or superseded and by what; main language; install command. Write one JSON object with keys name, repo, headless, confinement (object with keys shell, fileWrites, network), usage, parallel, providers, subscriptionLogin, license, latestRelease, maintenance, language, install, checkedOn, gaps; each value an array of {finding, source, quote} (license and checkedOn may be one object). In gaps, list what was not found and the pages checked. Never guess: write 'not found' instead.",
      "items": [
        { "key": "goose", "vars": { "name": "Goose (Block; now the aaif-goose organisation)", "repo": "https://github.com/aaif-goose/goose", "docs": "https://github.com/aaif-goose/goose/tree/main/documentation/docs/guides", "focus": "Discovery found goose run -t and --no-session, and a README claim of 15+ providers and Claude/ChatGPT/Gemini subscriptions via ACP: verify both with the exact pages." } },
        { "key": "cline-cli", "vars": { "name": "Cline CLI", "repo": "https://github.com/cline/cline", "docs": "https://github.com/cline/cline/blob/main/apps/cli/README.md", "focus": "Profile the CLI in apps/cli (cline '<prompt>', --json, --yolo or --auto-approve), not the VS Code extension; the repository release is shared, so say which release covers the CLI." } },
        { "key": "qwen-code", "vars": { "name": "Qwen Code", "repo": "https://github.com/QwenLM/qwen-code", "docs": "https://github.com/QwenLM/qwen-code/blob/main/docs/users/features/headless.md", "focus": "It is a Gemini CLI fork: say where its headless, approval, sandbox and policy features follow or differ from Gemini CLI, and cover its Qwen OAuth login and OpenAI-compatible providers." } },
        { "key": "kilo-cli", "vars": { "name": "Kilo Code CLI", "repo": "https://github.com/Kilo-Org/kilocode", "docs": "https://github.com/Kilo-Org/kilocode/blob/main/packages/kilo-docs/pages/code-with-ai/platforms/cli.md", "focus": "Profile the kilo terminal command (kilo run --auto), not the editor extension; the repository is a monorepo so name the package and release that ship the CLI." } },
        { "key": "kimi-code", "vars": { "name": "Kimi Code CLI", "repo": "https://github.com/MoonshotAI/kimi-code", "docs": "https://moonshotai.github.io/kimi-code/en/reference/kimi-command", "focus": "This replaces the archived MoonshotAI/kimi-cli. Discovery read that -p cannot combine with --yolo/--auto and that non-interactive runs use auto permission: confirm and explain what that permits." } },
        { "key": "mistral-vibe", "vars": { "name": "Mistral Vibe", "repo": "https://github.com/mistralai/mistral-vibe", "docs": "https://github.com/mistralai/mistral-vibe/blob/main/README.md", "focus": "Discovery found -p/--prompt-file, --auto-approve, --max-turns, --max-price, --max-tokens, --output json and --time-limit: document each and what the JSON output contains; also whether non-Mistral providers are supported." } },
        { "key": "continue-cli", "vars": { "name": "Continue CLI (cn)", "repo": "https://github.com/continuedev/continue", "docs": "https://docs.continue.dev/cli/headless-mode", "focus": "The repository's releases are IDE releases; find the CLI's own version and date (npm package @continuedev/cli or a CLI tag) and say which. Cover how headless mode auto-handles approval prompts." } },
        { "key": "pi", "vars": { "name": "Pi coding agent", "repo": "https://github.com/earendil-works/pi", "docs": "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/cli.md", "focus": "Formerly badlogic/pi-mono. Cover --print, --mode json and --mode rpc, and the README claim that /login connects a subscription or API key: which subscriptions." } },
        { "key": "letta-code", "vars": { "name": "Letta Code", "repo": "https://github.com/letta-ai/letta-code", "docs": "https://docs.letta.com/letta-code/headless", "focus": "Letta Cloud is the default backend: establish whether a headless run needs a Letta account or can run fully local, and how the model provider is chosen." } },
        { "key": "forgecode", "vars": { "name": "ForgeCode (formerly Antinomy Forge)", "repo": "https://github.com/tailcallhq/forgecode", "docs": "https://github.com/tailcallhq/forgecode/blob/main/README.md", "focus": "Cover the one-shot -p/--prompt mode and whether the tool needs a ForgeCode account or provider key; the official docs site is linked from the README." } },
        { "key": "hermes-agent", "vars": { "name": "Hermes Agent (Nous Research)", "repo": "https://github.com/NousResearch/hermes-agent", "docs": "https://github.com/NousResearch/hermes-agent/blob/main/website/docs/reference/cli-commands.md", "focus": "A general-purpose agent with coding tools: cover hermes -z and --usage-file (what the usage file contains), and whether it can be pointed at a repository as its working directory." } },
        { "key": "gptme", "vars": { "name": "gptme", "repo": "https://github.com/gptme/gptme", "docs": "https://gptme.org/docs/usage.html", "focus": "Cover --non-interactive (implies --no-confirm), its tool allow/deny configuration, and the documented sandbox or Docker options." } },
        { "key": "zcode", "vars": { "name": "ZCode (Z.ai / Zhipu)", "repo": "https://github.com/zai-org/zcode", "docs": "https://github.com/zai-org/zcode/blob/main/apps/zcode-cli/docs/usage/02-cli-reference.md", "focus": "Docs are partly Chinese; translate what you quote. Cover --prompt, --cwd, --mode yolo|guarded, --json and the automation guide 13-automation.md, and whether non-Z.ai providers are supported." } },
        { "key": "mini-swe-agent", "vars": { "name": "mini-SWE-agent", "repo": "https://github.com/SWE-agent/mini-swe-agent", "docs": "https://mini-swe-agent.com/latest/usage/mini/", "focus": "Docs call mini REPL-style: establish whether mini -t '<task>' -y runs to completion with no one present, cover the batch runner and the local/docker/podman/singularity environments as confinement, and the cost/token tracking in its config." } },
        { "key": "openhands-current", "vars": { "name": "OpenHands (current CLI)", "repo": "https://github.com/OpenHands/OpenHands", "docs": "https://docs.openhands.dev/openhands/usage/cli/headless", "focus": "The separate OpenHands/OpenHands-CLI repo (1.16.0) says it is no longer actively maintained. Find where the maintained openhands CLI now lives (main repo, software-agent-sdk, or a PyPI package), profile that one, and give its release and date." } },
        { "key": "opencode-v2", "vars": { "name": "OpenCode 2", "repo": "https://github.com/anomalyco/opencode", "docs": "https://opencode.ai/v2/docs", "focus": "OpenCode 1 (1.x line, v1.19.4) is already profiled. Profile OpenCode 2 only: its run/headless flags, permissions, stats or usage output, subagents, provider auth, and the v2.x release (v2.1.4 seen 2026-10-23); say where v2 differs from v1." } }
      ],
      "output": { "format": "json", "maxBytes": 24000 },
      "merge": { "groupSize": 25, "brief": "Merge into one JSON array with one object per tool, keeping every finding's source URL and quote unchanged." }
    }
  ],
  "read": [
    "profile-wide/goose",
    "profile-wide/cline-cli",
    "profile-wide/qwen-code",
    "profile-wide/kilo-cli",
    "profile-wide/kimi-code",
    "profile-wide/mistral-vibe",
    "profile-wide/continue-cli",
    "profile-wide/pi",
    "profile-wide/letta-code",
    "profile-wide/forgecode",
    "profile-wide/hermes-agent",
    "profile-wide/gptme",
    "profile-wide/zcode",
    "profile-wide/mini-swe-agent",
    "profile-wide/openhands-current",
    "profile-wide/opencode-v2"
  ],
  "cancel": [],
  "wake": { "batches": ["profile-wide"], "afterMinutes": 120 },
  "finish": false
}
