v0.5.0
Highlights
- The MCP protocol moves out of the command line into one internal
BridgeSession: spawn the child, negotiate initialization in specification order, allocate request ids, validate replies before anyone reads them, then terminate and reap.cic listandcic callare now create-session, one call, close. - The one-shot contract is unchanged. The proof a refactor changed nothing is the old tests passing untouched, so that came first: all 120 checks from 0.4.1 ran green against the new core before a single new test was written. Same stdout, stderr, exit codes and frozen
--jsonshape. - Adds
--retries <n>, restricted to failures that never reached the browser. Exit 3 is the only retryable class by definition; an exit-2 unknown outcome is never retried whatever the flag says, because repeating a click is a second action rather than a second look at the first. - CI runs on Ubuntu, macOS and Windows across Node 22 and 24, six legs, none cancelling the others.
Install
npm install -g claude-in-chrome-cliPlugin users need nothing new: the CLI ships bundled at node ${CLAUDE_PLUGIN_ROOT}/bin/cic.js.
Windows, stated precisely
Both Windows legs pass, and the assertions say what they actually prove. A child there cannot refuse a signal, because Node maps kill() to TerminateProcess, so the test that demonstrates SIGTERM escalation on POSIX demonstrates only that the client asked on Windows, and its label says so. Two tests stay POSIX-only and print a visible skip with the reason rather than being weakened into assertions that pass everywhere: the EPIPE pipeline needs a POSIX shell, and the detached-descendant shutdown test needs POSIX fd inheritance. The README does not yet claim Windows support, because the matrix proves the contract and parser suites there, not the process-lifecycle guarantees.
Three bugs worth naming
Review of this release found two defects in the new core, both invisible to one-shot use and both fatal to the reuse it exists for. The dispatched flag was set after the request write resolved, leaving a window where the child had already received the request and replied badly or died while the session still reported nothing dispatched: the failure was then classified exit 3, and --retries would have repeated an action that had already run. The flag now leads the write. Separately, four listeners per request were never detached, so twelve sequential calls on one session reached thirteen data listeners and Node began warning about a leak.
A third came from writing --retries itself, and it is the same family as the 0.4.0 output truncation: the backoff timer was unref'd, so it did not hold the event loop open. By the time a retry waits, the child is dead and its pipes destroyed, so nothing else held it either, and Node exited cleanly with code 0 mid-backoff, reporting success for a call that never happened.
Known limit, carried to 0.6.0
Each request owns its own reader and buffer, so bytes arriving between calls are dropped. Serialized one-shot use never sees this; a long-lived streaming session needs one persistent reader with a per-id waiter map instead.
Verified
142 checks across four offline suites, no Chrome and no extension required. Coverage 95.98% of statements, 85.33% of branches, 51 of 51 functions. The published tarball is 5 files. Installed from the registry, cic --version reports 0.5.0, cic list returns 22 live tools through a real bridge, and a missing binary still exits 3. Provenance attached and verifiable with npm audit signatures.
Full changelog: v0.4.1...v0.5.0