Repository navigation
v1.15.0
Added
-
The run surfaces are interactive.
/interlock-handoffand/interlock-specoffer each command their card prints as a Draft: control (a Copy: control for aclaude --resumeline) that fills an empty prompt box, copies when the box holds text, and never submits. The/interlock-meterpane draws the wave plan as a diagram above the board outside a plain terminal. A change name or run id typed after the plugin's own commands is suggested from the preflight report. A halt, a close, a first quiet word and a spec checkpoint are told with a notification, with a toast when the host has no channel. Three new rows ininterlock limitsbound the diagram, the suggestions and the preflight lists. -
interlock checkpoint [change] [--json]prints the spec checkpoint card: each artifact with the question asked of it, the ledger, validate and gate results as the CLI printed them, and the five outcomes with the command each runs. The spec skill prints it before the checkpoint mark; a non-zero exit is reported in one line and does not stop the hand-off.docs/02-the-checkpoint.mdnames it as the way to print the card again The two send-back outcomes print/interlock:specalone: recording an override stays a person's own typed act. -
interlock run-log follow [--run <id>]waits on one run's trajectory and prints one line when it halts or completes, exit 0; it gives up with exit 1 after thelaunch ledger max age (ms)bound. It prints no quiet line and only reads. -
Package pins for what the directory holds a plugin for:
- no shipped code opens a network connection;
- no shipped file names a credential variable or file, or the host's option variables, with no changelog exception;
- a sensitive option may reach only an MCP or LSP server's
envorheaders; - no shipped file carries the removed push.
Each is a named check with a self-test.
-
npm run scan-packbuilds the bundle onto a localtemp/plugin-scanbranch for the directory's Validate, and prints the push and Validate steps. It never pushes.
Changed
- BREAKING: the panes need Claude Code 2.1.295. The mods floor rises from 2.1.287. On 2.1.292 to 2.1.294 the hooks module loads, draws nothing, toasts the floor once and keeps its launch guard; 2.1.287 to 2.1.291 refuse the module outright, because it hooks
prompt.autocomplete, so only the settings-hook launch guard runs there. Both were probed on 2026-11-07. The run itself is unchanged on every engine, andinterlock doctor'smodsrow says which case yours is in. - The hooks module waits on nothing it tells. A notification is started, never awaited, so an engine whose notify never answers holds neither the ship driver's step relay nor the spec skill's last command. Each accepted launch clears the run's told keys, so a second run in one session is told too. A pane control is offered only for a line that is exactly one the checkpoint or resume card prints, because card text is partly the repository's own.
run-log followreports the run's latest end, after its lastrun-start, and says when it set aside foreign-schema lines. The preflight report is written through a temp file renamed into place. - The hooks module's allow-list gains four engine calls,
$.ui.notify,$.ui.copy,$.prompt.readand$.prompt.fill, each with one call site pinned intest/spine/mod-pins.test.mjs. The module still decides nothing and submits nothing. The preflight report gainsopenChangesandrecentRunslists under the unchangedinterlock.preflight/1stamp. - The CLI smoke is started by hand. The packed-tarball smoke stalled runners and turned a pull request's status red without catching what the unit suite and the
upgrade-installjob do not. It moved out ofci.ymlinto.github/workflows/cli-smoke.yml, whichworkflow_dispatchalone starts, and the barecli-smokegate job is gone; themainruleset no longer requires it. The post-install smoke script and the canary are unchanged. It replaces the advisory-in-CI form of the same job: nothing waits on a macOS runner queue any more. - The strict ship review fans out. The review step is one spawn per selected dimension, each blind to the others and writing its own ledger; the new
interlock run foundfolds the ledgers and emits askepticsstep with two skeptics per blocker and warning, whichrun reviewedfolds and adjudicates. The skeptics step is bounded by a newskeptic spawns (per skeptics step)cap ininterlock limits; past it the remaining findings share one pair and the step printsSKEPTIC CAP REACHED. Reviewers and skeptics are routed from the publishedreview-dimensionandreview-skepticrows, printed asREVIEW WAVE. A dimension is recorded as run only when its own answer file is usable (REVIEW INCOMPLETE, which also carries the reviewer's owndetailwhen it gave one, andREVIEW ANSWER MISMATCHED, which prints the value it read on one bounded line), and a silent skeptic sets aside its pair (SKEPTIC VERDICTS MISSING). A reviewer can no longer add a dimension. No host chunks either step, so a step wider than the--max-parallelyou set printsREVIEW WIDER THAN MAX PARALLEL: oninterlock-runall of its agents start at once. The single-worker review briefing is retired. Remediation rounds are unchanged.
Removed
-
BREAKING: Interlock sends no push, and the plugin reads no credential. The plugin directory holds every version up to 1.14.0 on "Uses a credential from the user's machine": its rule is not to read a credential already set in the environment and send it to a server, "even in a README example". The ntfy topic was that credential. The manifest marked it sensitive, the CLI read it from the environment and posted to
<server>/<topic>, and the only shape that rule accepts, a${user_config.…}value, is one the directory's hook-command rule refuses. Gone:- both plugin options and
hooks/notify-option.mjs; lib/notify.mjs;- the push from
run close; - the doctor's
notifyrow; - the
push timeout (ms)row ofinterlock limits.
interlock notify checkpoint <change>stays as the spec skill's checkpoint marker, which the spec meter keys on: it prints onecheckpoint:line and sends nothing. Until 1.16.0,run close --notifyfrom an older driver on PATH andinterlock notify --titleare accepted, do nothing, and printpush: removed — interlock sends no notifications. Neither driver passes--notify. Claude Code's Remote Control push reaches a phone when a session needs you. - both plugin options and
-
CHANGELOG.mdno longer ships in the npm package or the plugin bundle. The directory reads shipped prose as evidence, and the changelog names what earlier versions read. It stays in the repository and on GitHub.
Upgrading
- Update Claude Code to 2.1.295 or later to keep the panes. The run is unchanged below it;
interlock doctornames your engine's case. - If you saved an
ntfy topic, remove it from the plugin's settings. Unset anyINTERLOCK_NTFY_*variable in your shell; nothing reads them. Stop using the topic too: anyone who knows it can still read what was sent to it. - A script that calls
interlock notify --titlekeeps exit 0 until 1.16.0, then gets the usage error any unknown form gets. - The release carrying this is a minor version.