Skip to content

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 03 Jul 23:18

What's Changed

Major: Sidecar Compatibility Shims Removed

  • End of pre-rebrand aliases: All sidecar* environment variables, CLI commands, MCP tool names, config directory fallbacks, and public API exports have been removed. See docs/SHIMS.md for the complete migration guide — most users need zero action, but SIDECAR_* env vars must be renamed to AMICUS_* equivalents.
  • Legacy env vars fully removed: SIDECAR_ENV_DIR, SIDECAR_IDLE_TIMEOUT*, SIDECAR_DEBUG_PORT, SIDECAR_MOCK_UPDATE, and SIDECAR_MAX_SESSIONS are no longer read. Unrenamed variables are silently ignored.
  • CLI bin aliases gone: sidecar and claude-sidecar commands are removed; use amicus or the am short alias instead.

Features

  • Council pipeline now fully documented: New docs/council.md covers the five-stage flow end-to-end, including tally-input and tally-record schemas, verdict.json provenance, presets, and a complete worked example with real command outputs.
  • Council presets with built-in benches: amicus council save/list/show <name> now lets you save and reuse council configurations. Built-in free, budget, and frontier benches are available by default, with free resolving dynamically against the live catalog.
  • Per-run cost ledger and spend reporting: Every completed run appends a JSONL row to spend-ledger.jsonl. New amicus spend command rolls up total and per-model costs and tokens with --since <N>d windowing, --json output, and an OpenRouter remaining-credit footer when configured.
  • Council CLI transport is now deterministic: amicus council validate <file> and amicus council verdict <tally.json> wrap the existing validation and verdict-building logic, making the second-opinion skill's cross-review pipeline fully deterministic. Stage-2 now persists the tally record to <run-folder>/tally.json.
  • amicus_read paging and size caps: Responses are capped at ~50KB by default (showing the tail of large content with a truncation notice). New optional offset, limit, and tail parameters let you page through large files without truncation.
  • Per-tool-call stall detector: Headless runs now fail fast if a tool call is pending for longer than AMICUS_TOOL_CALL_STALL_MS (default 3 minutes) with no other progress, instead of burning the full run timeout.
  • Fold completion marker is now per-run nonced: The fold marker format changed from [SIDECAR_FOLD] to [SIDECAR_FOLD:<nonce>], preventing model output ending with a bare marker from triggering premature completion. The nonce is crypto-random, threaded through every mode, and derived from the transcript on resume.
  • All session and wave metadata writes are atomic: Metadata updates now use writeFileAtomic (tmp+rename), eliminating the torn-read race condition that pollers previously had to work around.
  • Doctor command now sweeps orphaned tmp files: amicus doctor --fix removes orphaned sessions-index.json.*.tmp files older than 60 seconds, cleaning up atomic-write artifacts from killed processes.

Documentation & Configuration

  • README restructured for clarity: Now leads with the two install channels (npm global vs Claude Code plugin), surfaces quick-start examples, and separates discovery from detailed usage. Deep dives live in docs/.
  • New "where things live" guide: docs/configuration.md documents the full config-dir tree (config.json shape, catalog cache fields, both ledgers, tmp files), per-client session storage, log behavior, and honest uninstall instructions.
  • Plugin channel now has slash commands: Claude Code plugin users can invoke the council with /amicus:council and the sidecar with /amicus:sidecar directly, in addition to natural-language phrasing.
  • Comprehensive shim removal documentation: All docs (README, usage.md, configuration.md, testing.md, troubleshooting.md, architecture.md, skill docs) updated to reflect v2.0.0 reality.

Fixes

  • Orphaned opencode serve processes on macOS/Linux: Server teardown now sends SIGTERM to the Go binary directly and escalates to SIGKILL after a bounded grace window, preventing zombie processes on fast exits. Windows semantics unchanged.
  • Wave abort status no longer reverts to running: Wave metadata merge now honors abort-wins precedence, matching the per-leg write behavior.
  • Process liveness detection now handles EPERM correctly: Signal-denied EPERM in isProcessAlive now correctly classifies a process as alive, not dead. This fixes session crash detection on systems where the process is still running but the permission check fails.
  • Terminal status no longer clobbered by cleanup failures: A committed successful terminal status can no longer be overwritten to error by a cleanup-step failure in the MCP shared-server finalize chain.
  • Windows Claude Desktop config discovery fixed: discoverCoworkMcps now checks %APPDATA%\Claude on win32 instead of the XDG path, fixing both config discovery and the doctor's Cowork signal.
  • Setup wizard Step 3 catalog reuse: The alias editor now consumes the same TTL-cached catalog as Step 2, reducing unnecessary network calls during setup.
  • Stale catalog data now clearly labeled: A failed refresh records the attempt and reason in the cache doc without touching the good data. amicus models shows a stale memo, refresh reports failure honestly, and the wizard shows a stale hint.
  • Free-council picker is now readable: Models are grouped by provider with friendly names, raw IDs shown as secondary lines, and a provider count — better UX for multi-pick selection.
  • amicus council --help now lists all subcommands: Missing save, list, and show are now documented in the help text.

Infrastructure & Internals

  • Session index tmp-sweep in doctor: New src/utils/session-index-tmp-sweep.js provides age-gated tmp-file cleanup for atomic-write artifacts.
  • Spend ledger infrastructure: New src/utils/spend-ledger.js handles JSONL row appends and rollup aggregation for the spend command.
  • Council presets module: New src/council/presets-cli.js handles save/list/show operations for saved and built-in councils.
  • Fold marker utilities: New src/utils/fold-marker.js centralizes nonce generation and marker parsing, shared between prompt-builder and headless modes.
  • Read slicing for amicus_read: New src/utils/read-slice.js implements byte-bounded slicing with truncation notices.
  • Improved abort coordination: New killPidHard() function in abort-coordinator.js separates graceful vs. forced termination.
  • Expanded test coverage: New test suites for council presets, spend ledger, fold markers, read paging, headless tool stall detection, conversation mirror pending calls, council reference docs, orphaned tmp sweeps, and more.

Full Changelog: v1.9.1...v2.0.0