v1.2.0
What's Changed
Features
-
amicus doctorcommand: A one-screen health check for your Amicus setup, showing configured providers, model resolution, catalog freshness, OpenCode binary status, Electron availability, installed skills, and MCP registration. Each issue includes the exact fix command, and--jsonoutput lets skills self-diagnose. -
Claude Code plugin support: Amicus is now installable from the marketplace (
/plugin marketplace add BourbonDog/amicus). The plugin ships both skills and the MCP server while keeping npm as the CLI engine. Global postinstall is skipped for plugin installations to prevent double-registration. -
Per-leg token and cost telemetry: Run and wave schemas (now
schemaVersion: 2) include detailedusageblocks tracking input/output/reasoning tokens and costs tagged by source (reported > estimated > unknown). This data flows intofanout --jsonoutput and council run-stats. -
Enforced budget gate: Blocks high-cost models (like o3-pro) before a wave launches with a per-
$/Mtokthreshold (enabled by default) and optional--max-costtotal ceiling. Use--no-cost-gateto skip the check. -
Council scoring engine: The council skill now uses deterministic, auditable scoring: a structured findings contract, a peers-only tier cascade with self-corrected street credibility, a compounding reviewer-reliability ledger, and machine-readable
verdict.jsonoutput. The engine owns the arithmetic and schemas, the skill owns the review flow. -
Structured
--jsonerror responses: Pre-flight failures now emit a typed error envelope ({ ok: false, error: { code, message, hint } }) on stdout with stable error codes likeMISSING_KEY,BAD_MODEL, andBUDGET_EXCEEDED, instead of bare text on stderr.
Improvements
-
Interactive GUI persistence: GUI sessions now write
conversation.jsonlandprogress.jsonlive as they run, so the CLI heartbeat,amicus status, andamicus read --conversationwork for interactive sessions. Closing the window without folding no longer loses the transcript, and interactive runs now record token and cost usage alongside headless sessions. -
Reliability fixes: Terminal state is now a single source of truth (exit code and
metadata.statusalways agree), and the interactive watchdog is now activity-driven so it won't kill a GUI session that is actively working but quiet. -
Repository layout: The chat skill moved from
skill/toskills/sidecar/alongsideskills/second-opinion/for unified plugin discovery. The npmhomepagenow points to the live site, and the README and landing page gained a "Prerequisites & cost" section.
Bug Fixes
-
MCP stderr file descriptor leak:
spawnSidecarProcesswas opening adebug.logdescriptor for the child's stderr but never closing the parent's copy, causing descriptor leaks and (on Windows) blocking session-dir cleanup since the file stayed open. -
Platform-correct API key guidance: Missing-key errors now provide the right setup command for your OS (PowerShell
$PROFILEorsetxon Windows,exporton Unix) and lead withamicus key. -
Secret scanning completeness: The committed-secret scan now detects all five provider key patterns without false collisions.
-
Model alias accuracy:
amicus modelsnow marks your actual configured aliases instead of curated defaults, giving you the truth about what Amicus will actually use. -
OpenRouter variable pricing: The "-1" sentinel for variable-pricing models now renders as "—" instead of nonsensical negative prices.
Infrastructure
-
Full CI matrix: Tests now run on Ubuntu, Windows, and macOS across Node 18, 20, and 22, plus lint, secret-scan, and size-gate gates every push and the publish workflow.
-
Headless test stability: Fake timers eliminated flaky
--timeouttest behavior on clean runners, and WindowsrmSynccleanup and config-dir defaults are now handled correctly.
Full Changelog: v1.1.0...v1.2.0