v2.0.0
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, butSIDECAR_*env vars must be renamed toAMICUS_*equivalents. - Legacy env vars fully removed:
SIDECAR_ENV_DIR,SIDECAR_IDLE_TIMEOUT*,SIDECAR_DEBUG_PORT,SIDECAR_MOCK_UPDATE, andSIDECAR_MAX_SESSIONSare no longer read. Unrenamed variables are silently ignored. - CLI bin aliases gone:
sidecarandclaude-sidecarcommands are removed; useamicusor theamshort alias instead.
Features
- Council pipeline now fully documented: New
docs/council.mdcovers 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-infree,budget, andfrontierbenches are available by default, withfreeresolving dynamically against the live catalog. - Per-run cost ledger and spend reporting: Every completed run appends a JSONL row to
spend-ledger.jsonl. Newamicus spendcommand rolls up total and per-model costs and tokens with--since <N>dwindowing,--jsonoutput, and an OpenRouter remaining-credit footer when configured. - Council CLI transport is now deterministic:
amicus council validate <file>andamicus 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_readpaging and size caps: Responses are capped at ~50KB by default (showing the tail of large content with a truncation notice). New optionaloffset,limit, andtailparameters 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 --fixremoves orphanedsessions-index.json.*.tmpfiles 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.mddocuments 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:counciland the sidecar with/amicus:sidecardirectly, 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 serveprocesses 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
isProcessAlivenow 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:
discoverCoworkMcpsnow checks%APPDATA%\Claudeon 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 modelsshows 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 --helpnow lists all subcommands: Missingsave,list, andshoware now documented in the help text.
Infrastructure & Internals
- Session index tmp-sweep in doctor: New
src/utils/session-index-tmp-sweep.jsprovides age-gated tmp-file cleanup for atomic-write artifacts. - Spend ledger infrastructure: New
src/utils/spend-ledger.jshandles JSONL row appends and rollup aggregation for the spend command. - Council presets module: New
src/council/presets-cli.jshandles save/list/show operations for saved and built-in councils. - Fold marker utilities: New
src/utils/fold-marker.jscentralizes nonce generation and marker parsing, shared between prompt-builder and headless modes. - Read slicing for amicus_read: New
src/utils/read-slice.jsimplements byte-bounded slicing with truncation notices. - Improved abort coordination: New
killPidHard()function inabort-coordinator.jsseparates 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