Skip to content

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 24 Jun 13:12

What's Changed

Features

  • amicus doctor command: 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 --json output 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 detailed usage blocks tracking input/output/reasoning tokens and costs tagged by source (reported > estimated > unknown). This data flows into fanout --json output and council run-stats.

  • Enforced budget gate: Blocks high-cost models (like o3-pro) before a wave launches with a per-$/Mtok threshold (enabled by default) and optional --max-cost total ceiling. Use --no-cost-gate to 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.json output. The engine owns the arithmetic and schemas, the skill owns the review flow.

  • Structured --json error responses: Pre-flight failures now emit a typed error envelope ({ ok: false, error: { code, message, hint } }) on stdout with stable error codes like MISSING_KEY, BAD_MODEL, and BUDGET_EXCEEDED, instead of bare text on stderr.

Improvements

  • Interactive GUI persistence: GUI sessions now write conversation.jsonl and progress.json live as they run, so the CLI heartbeat, amicus status, and amicus read --conversation work 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.status always 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/ to skills/sidecar/ alongside skills/second-opinion/ for unified plugin discovery. The npm homepage now points to the live site, and the README and landing page gained a "Prerequisites & cost" section.

Bug Fixes

  • MCP stderr file descriptor leak: spawnSidecarProcess was opening a debug.log descriptor 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 $PROFILE or setx on Windows, export on Unix) and lead with amicus key.

  • Secret scanning completeness: The committed-secret scan now detects all five provider key patterns without false collisions.

  • Model alias accuracy: amicus models now 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 --timeout test behavior on clean runners, and Windows rmSync cleanup and config-dir defaults are now handled correctly.

Full Changelog: v1.1.0...v1.2.0