v4.5.0
What's Changed
Policy Packs
- Save and reuse run configurations:
amicus pack save <name> --kind council|fanout|solo [flags]captures your bench, chair, critic/lenses, options, and briefing template as a reusable JSON file. Load it with--pack <name>on any run, and explicit flags always override the pack's values. Packs are recorded on the run metadata either way, so you always know which configuration was used. - Pack management commands:
amicus pack list,pack show <name>, andpack rm <name>help you organize saved packs.--from-run <id>builds a pack from a run you already liked instead of typing flags manually. - MCP pack semantics: On
amicus_start,amicus_fanout, andamicus_council_runover MCP, packs resolve in-process without forwarding to child processes. Special handling formaxCostandtemplateensures they apply correctly even on the MCP path, and any pack field with no MCP destination surfaces as an explicit notice so nothing silently disappears. - Council packs reject invalid fields:
agent,thinking, andsummaryLengthare now rejected on council packs withPACK_INVALID, since the council engine hard-codes these values and ignores pack values anyway. They remain valid on fanout and solo packs.
Briefing Templates
- Render
{{variable}}templates before sending:--template <name|path>with optional--artifact <file>and repeatable--var k=vrenders a Markdown briefing with known variables like{{prompt}},{{artifact}},{{date}}, and{{project}}. Templates live in~/.config/amicus/templates/, and a user template shadows a built-in of the same name. - Strict template rendering: Unknown variables, missing data, or unused
--varvalues all fail withTEMPLATE_RENDERrather than silently dropping data, catching mistakes early. - Template library management:
amicus template listandtemplate show <name>inspect saved templates. v4.5 ships one built-in,review. On MCP, a pack'sbriefing.templateis the only way to reach a template since the tools have no template param of their own.
Council Workspace Auto-Open
- GUI launches automatically on MCP council runs from Claude Code (local): When
amicus_council_runis invoked from Claude Code (local), the Electron workspace window now opens automatically after the run starts, eliminating the need for a separateamicus watch <runId> --uicall. Decision order respects explicituiparams, hard guards (no Electron, noDISPLAY), and the newworkspace.autoOpenconfig key. - Workspace auto-open configuration: A new
workspace.autoOpenkey inconfig.json(default on) lets you opt out. The MCP response includesworkspaceOpened: booleanandworkspaceOpenReasonwhen it did not open, so callers know why.
Council Run Observability
- Dropped members are now recorded and surfaced: When a preset member's alias no longer resolves or has fallen out of the model catalog,
run.jsonnow carries an additivedroppedMembers: [{member, reason}]array. The--jsonenvelope andamicus_council_runMCP response include this for scripted callers, andamicus council show <name>reports the identical resolved/dropped split as a preview before you spend. - Pack-attributed errors are clear: When a pre-flight error names a value the pack supplied, the message adds
(set by pack '<name>')so pack-caused failures are never mistaken for typos in your own flags.
Workspace Rendering Fixes
- Blind-mode toggle no longer collapses open panels or repaints twice: Toggling blind mid-run now updates in place and paints once, preserving the open/loaded state of lazy-loaded prose panels instead of closing them.
- Artifact name collisions no longer misattribute prose: Two models whose sanitized filenames collide (e.g.,
vendor/aandvendor?aboth becomingvendor-a) now get deterministic suffixes (~2,~3), and the workspace consults the collision map on every lookup instead of showing the wrong model's text. - Seat rows reorder to match the composed run:
renderSeatsnow moves existing rows into place on every render, fixing the frozen row order that occurred when a repair solo or new wave changed the underlying leg order mid-run. - Failed council seats no longer render as perpetually live: A shared-server early return bypassed the terminal
progress.jsonwrite, leaving a stage marked in-progress. Terminal-write logic is now centralized inwriteTerminalProgressSafe, called at all early-return sites.
Config and Validation
- Pack validation on save and load: Packs are validated when saved (hard-fail with
PACK_INVALIDfor any fatal issues, warnings to stderr) and again on every use.pack shownever fails on an invalid pack, only reports what's wrong. - Pack precedence is explicit: Everywhere a pack applies, resolution order is flag > pack > config default > built-in default, so explicit command-line flags always win and packs only fill in what you didn't say.
- Schema normalization: Five v4.3-era schemas now use the raw-file
$idconvention, and a newschemas/pack.schema.jsondocuments all 19 schemas in the repo.
MCP Improvements
- MCP schemas reflect actual defaults:
amicus_startandamicus_fanoutno longer declare JSON-Schema defaults foragent,noUi, orincludeContext, keeping schema metadata honest while defaults are still applied at the same read sites. - Pack child pid pre-seed on fanout: The fanout wave pre-seeds pack-related child process metadata so deaths are reapable, even before pack-using child processes are created.
CLI and Tooling
- Template and pack CLI handlers: New
amicus templateandamicus packcommand trees, with full coverage of list/show/save/rm operations and robust error handling. - Explicit-flag precedence in parseArgs: The CLI's argument parser now records explicitly-typed keys for pack merge precedence, so flags always beat pack defaults.
Docs and Reference
- Comprehensive usage documentation: Policy packs, briefing templates, and auto-open are fully documented in
docs/usage.md,docs/configuration.md, anddocs/council.md. - Implementation plan captured:
docs/superpowers/plans/2026-07-27-v4.5-save-and-share.mddetails the 23-task implementation, with dispositions for all open items tabled in the design spec.
Full Changelog: v4.4.1...v4.5.0