Repository navigation
Releases: grapefruit0205/click
Release list
v1.3.0 — Conditional JS reuse on Windows
Both marketplaces pin v1.3.0; updating v1.2.0 installs it.
- Python 3.10+ is asked for, not assumed. When the Claude Code launcher finds no usable interpreter (it also skips the macOS stub that only offers the command line tools) or the one it found is too old, the prompt hook shows what to install (
systemMessage) and tells the model not to useclick-gateuntil a new session; tool hooks stay silent, so nothing is blocked. The Codex Windows batch launcher prints the same instructions. (#148) - Portable observer transport. Each observed Node process announces its inspector endpoint in an
endpoint-<pid>.jsonfile the controller polls for, instead of a FIFO the runner had tomkfifoand hold open. (#149) - Conditional JS reuse on Windows. The Windows backend hands the framework observer the ETW events it captured, and a projection module answers from them what the strace projection answers on Linux: every process started and stopped inside the capture, and which files the observed process consumed after the collector acknowledged its inspector session. The collector's own transport, the null device, pre-acknowledgement metadata probes, created outputs and inherited standard handles are set aside; every other read is bound by content, and a probed path that is absent binds as one that must stay absent. The inspector collector runs on Windows with its own profile; external rows are spelled
C:/dir/file; the receipt binds the inboxlogman/tracerptpair as its backend. The sessions need an elevated session; without elevation checks run and same-state receipts still reuse. (#150) - The native random-state reader builds on Windows. With the MSVC tools on PATH (a developer prompt) and this Node version's headers (MSI install or node-gyp cache), the reader that samples V8's per-realm PRNG state and shared-buffer bytes compiles and links through an import library generated from node.exe's own export table — nothing is downloaded. SHA-256 is computed in the reader itself. Without the toolchain a Windows check that consumes
Math.randomor shared memory stays ineligible, as before. (#151) - Framework entry points run by
nodeare the framework's check.node <root>/node_modules/jest/bin/jest.js …andnode <root>/node_modules/vitest/vitest.mjs …are recognized as the jest and vitest checks (the launchers are cmd shims on Windows; the entry point stays one process on every host). The Windows CI job now runs the real jest/vitest worker paths and the conditional Hook path under ETW with Node 22.23.2. (#151)
Windows requirements for the JS observer: Git for Windows (Claude Code), an elevated session for the ETW sessions, and a developer prompt plus Node headers for the random-state reader.
Full notes: RELEASE_NOTES.md
v1.2.0 — Claude Code on Windows
Both marketplaces pin v1.2.0; updating v1.1.1 installs it.
- Claude Code on Windows. The Claude Code package's Hook command is now
sh "${CLAUDE_PLUGIN_ROOT}/hooks/claude_hook.sh", a POSIX launcher that Claude Code runs throughsh -con Linux and macOS and through Git Bash on Windows; it selectspy -3,pythonorpython3(skipping the Microsoft Store alias stub and the py launcher's exit 103), runs the adapter in UTF-8 mode, and normalizes the backslash plugin root Claude Code substitutes. On Windows the adapter renders rewrittenclick-gatecommands for Git Bash (forward-slash interpreter and script paths, bounded encoded transport), reads and writes the host's JSON as UTF-8, and the resident worker no longer requires the Codex Windows bridge: runner renderers are registered per host and activated per event. - Receipts are reused on Windows. The environment fingerprint spells Windows search-path entries one way: every MSYS hop (Git Bash, then
sh) re-spells them for a native child (trailing separators, doubled separators, drive letter case), and the Hook runs one hop deeper than the Bash tool, so the same directories used to carry two identities and no receipt was reused. The rebound notice now names the variables that differed (never their values). - Windows CI drives the packaged hooks and rewritten commands through Git Bash with a default-install PATH and proves the resubmitted check is reused; interpreter selection is covered on every OS with fake interpreters. Windows needs Git for Windows (Claude Code's Bash tool); the PowerShell tool is not rewritten yet. Python checks are the Windows scope; conditional JS reuse stays Linux-only. (#146)
Full notes: RELEASE_NOTES.md
v1.1.1 — English by default
Patch release. Both marketplaces pin v1.1.1; updating v1.1.0 installs it.
- English is the default language. The runner's result line, the reuse notice and the Evidence directive's reference to it were Korean on every host; they now render through the dashboard's translation tables in the language
CLICK_LANGUAGEor the POSIX locale selects, and the fallback for any other locale is English:
[Click result] 1 of 4 executed · 3 current (inputs unchanged since their last pass, reused) · About 45s of reruns avoided (estimate); ...
click-gate statusfollows the same rule, and the dashboard opens in the browser language (Korean or Simplified Chinese when that is what the browser reports, English otherwise) until a language is chosen. Host output is no longer cut at the summary-line value limit, the runner writes it as UTF-8 so a Windows console code page neither alters the·separator nor drops the line, and thetoken_abbenchmark accepts the result line in every language. (#144) - Plugin listing metadata. The Codex manifest declares a logo, a screenshot taken from a recorded session, and HTTPS privacy and terms links; a new
docs/privacy.mdstates what Click stores, where, and that it opens no connection beyond loopback; a.codexignoreexcludes tests, docs and other hosts' distributions from the Codex package; the Claude Code marketplace declaresstrict: trueand the./dist/claudepath form. The plugin scanner used in CI scores 94/100 (A) instead of 86; the remaining deduction is its preference for alocalCodex marketplace source, which Click keeps as an immutable release tag on purpose. (#142)
Full notes: RELEASE_NOTES.md
v1.1.0 — plain click-gate verify -- <check argv>
Install on Claude Code
claude plugin marketplace add grapefruit0205/click
claude plugin install click@clickUpdate
claude plugin marketplace update click && claude plugin update click@click
codex plugin marketplace upgrade click && codex plugin add click@clickRestart and start a new task after updating.
Changes
- Plain
click-gate verify -- <check argv>. One check without the JSON envelope: the evidence id is derived from the argv (E_plus twelve hex digits of its SHA-256), so resubmitting the same command resubmits the same check; the class is the command's minimum verification class; the working directory is the tool call's. The Evidence directive injected on every prompt now shows this form. Batches, explicit ids,reportingand a differentworkdirkeep the JSON form.
Why: in eight paired Opus 5 sessions (Click on vs off, 40 s fixture) the ~200-character JSON the model typed for every test cycle was the main output-token overhead of running with Click (cost +6–11% against session time −68%). Two further sessions with the plain form used it for every cycle and brought the Click-on cost to the Click-off level ($0.57 vs $0.60 median, n=2 — a direction, recorded as an addendum with its transcripts).
Full notes: RELEASE_NOTES.md.
v1.0.1 — receipts survive other plugins
Install on Claude Code
claude plugin marketplace add grapefruit0205/click
claude plugin install click@clickUpdate
claude plugin marketplace update click && claude plugin update click@click
codex plugin marketplace upgrade click && codex plugin add click@clickRestart and start a new task after updating.
Changes
- Receipts survive other installed plugins on Claude Code. The host appends every installed plugin's
bindirectory to the tool call's search path, and v1.0.0's environment fingerprint dropped only Click's own. With any second plugin installed, the Hook-side and runner-side fingerprints differed on every request (Verification runner environment changed after preparation) and no receipt was ever reused. Everyplugins/cache/<marketplace>/<plugin>/<version>/binentry is now treated as host-owned wherever Click itself is loaded from; the executables a check resolves stay fingerprinted by content, so a plugin that shadowed one would still change the receipt.
Found while recording eight paired Opus 5 sessions (Click on vs off on a 40 s fixture: session time −68%, test executions −50%, cost +6–11%). Verified end to end in a headless Claude Code session with a second plugin installed: no environment-changed message, four shards executed once, the identical second request reused all four.
Full notes: RELEASE_NOTES.md.
v1.0.0 — automatic Evidence observation
Install on Claude Code
claude plugin marketplace add grapefruit0205/click
claude plugin install click@clickUpdate on Codex CLI
codex plugin marketplace upgrade click
codex plugin add click@clickRestart and start a new task after updating.
What v1.0.0 is
v1.0.0 publishes the automatic Evidence observation work that main carried
as the v0.97 candidate since v0.96.1. Both marketplaces pin v1.0.0.
Changes
- Automatic input observation. Supported Evidence checks prepare local
input capture automatically. Complete signed inputs establish per-check
reuse without owner-written dependency JSON; owner declarations and shard
partition rules remain intact. Observations whose only gaps are a followed
child, concurrent threads or dynamic introspection are stored as
conditionaland back explicitly disclosed conditional reuse. - Conditional JS reuse. Default Node/Vitest/Jest checks can issue
separately attested conditional receipts after two requested executions
learn and compare inputs, including ignored files. Completeness is
disclosed as unproven in host output, dashboard and reports. Runtime-only
reads that vary between identical executions (glibc's overcommit probe, the
runtime cgroup probes, V8 re-opening its own image) no longer refuse a
receipt; Node Workers are detected explicitly and denied one. - Recovery and safety. Losing capture after an observed baseline never
downgrades to Git-only reuse; completion rechecks reused inputs after sibling
execution and invalidates only the affected evidence; SIGTERM retains output
and stops the admitted target; native preparation publishes caches
atomically. - Automatic sharding in Evidence mode. A broad unittest/pytest/Vitest/Jest
parent check without a committed plan is sharded from Click's own proposal,
kept in Click's state per repository, validated like a committed plan on
every request, and regenerated when the inventory changes. Nothing is
written into the repository. - Concurrent shard execution. Shard children run in forked workers on
Linux (CLICK_VERIFICATION_WORKERS, default core count up to 8) with
results consumed in submission order, so output, receipts and fail-fast
behaviour match a sequential run. - Receipts outlive the host session. Passing receipts are archived per
repository root; a new session starts from them as successor candidates and
the existing requalification decides what is still valid. - Fewer spurious reruns. Observed-input identity is content-based
(equal-content saves, checkouts andtouchkeep receipts); the receipt
environment fingerprint is an allowlist with a normalized search path;
project__pycache__is derived, not observed. - Faster fixed cost. Runtime identity checks and git resolution are
memoized per process, each observed input is read once per reuse decision,
and the host-runtime input index is built once per runner (six-shard
fixture: runner 9.35 s → 6.16 s). - Host output.
click-gate statusprints three short lines (JSON via
--json); checks are named by the caller's evidence id; reused checks
report the output the host did not read again as a disclosed estimate; the
Evidence prompt context is a directive to run checks through
click-gate verify. - Node Inspector controller exits on its own after reporting instead of
being terminated after a five-second wait on every observed JS execution.
The stabilization note about the historical opposite-child decision remains
open; see docs/architecture/automatic-observation.md. Full details in
RELEASE_NOTES.md.
v0.96.1 — Claude Code plugin
Install on Claude Code
claude plugin marketplace add grapefruit0205/click
claude plugin install click@clickUpdate on Codex CLI
codex plugin marketplace upgrade click
codex plugin add click@clickChanges
- Click now installs as a Claude Code plugin from the same repository:
claude plugin marketplace add grapefruit0205/clickthen
claude plugin install click@click. The generateddist/claudepackage
shares the Codex runtime, resident Hook worker, evidence ledger, and
click-gatecommand surface; only the inbound event is normalized. - The Claude Code adapter binds Click's turn identity to Claude Code's
per-promptprompt_id, so first-line@Click bypass/@Click canceland
later-turn Guarded approval keep their one-use, separate-turn proof. Events
without a prompt identity fail closed for every turn-bound action. MultiEditandNotebookEditrecordEditmutation boundaries;TodoWrite
andExitPlanModereceive plan advisories only. Successful receipts bind a
distinctclaudeknown-surfaces coverage digest and cannot be reused as
Codex or Antigravity receipts. No Claude Code Browser tool is bound.- A rewritten
click-gatecommand is merged back over the original Claude
Codetool_input, because Claude Code replacesupdatedInputwholesale.
Evidence state lives under${CLAUDE_PLUGIN_DATA}; Windows is not part of
the Claude Code package. - Turn-identity and bypass/cancel messages no longer name Codex; the resident
worker and dashboard identity accept either host manifest. Codex behavior is
otherwise unchanged from v0.96.0.
Codex behavior is otherwise unchanged from v0.96.0. Validated by CI run 34552459037 on release/v0.96.1.
Click v0.96.0
Click v0.96.0 makes incremental verification more selective while keeping uncertainty conservative.
- Rejects shard layouts whose selected child plus management overhead is slower than the parent.
- Defers duplicate Evidence bootstrap child execution to the ordinary one-use baseline runner and supports bounded long-running setup checks.
- Adds owner-committed file-input policy v2 for child-specific cross-revision reuse, including ignored files and directory membership.
- Keeps stable bounded Vitest/Jest groups for inventories larger than 64 files.
- Shares one request-local Git preflight and records SIGTERM interruption without leaving a passing receipt.
- Adds paired equivalent-work evaluation that counts setup, failures, retries, and the final full audit.
Existing automatic sharding init/status/refresh, policy v1, complete inventory, authorized shard reuse, and conservative parent fallback remain supported.
The included short CLI fixture is intentionally reported as slower with Click. This release does not claim whole-agent, token, production, or tens-of-minutes savings.
Click v0.95.0
- Automatic shard proposals preserve the exact parent's dependency declarations
and each existing child's inputs without inheriting unrelated checks' scopes.
Previously broad owner declarations are not silently narrowed. - Supported static Vitest/Jest profiles distinguish test-body changes from
file-selection changes. Assertion edits and new cases inside the same file
retain the split; file membership and discovery configuration still require
validation. Python test-case structure checks remain in place. - Child identities bind their own commands and covered files independently of
sibling changes. A complete, committed shard refresh retains compatible old
results only as stale candidates. Repeated edits retain the last successful
candidate, but current inputs, receipts and reuse authority must be rechecked.
Legacy results require a fresh baseline instead of receiving narrower bindings. - A child with changed inputs or insufficient reuse evidence executes. All
affected children execute for shared changes; an incomplete or invalid split
retains the original parent fallback. Static dependency analysis alone never
authorizes skipping verification. - GitHub CI selects repository, distribution and maintained local-link checks
for bounded documentation or version-only changes. Runtime, Hook, reuse,
sharding, policy, CI and unknown changes retain the full platform matrix.
Release tags and manual runs also select full CI. Existing required-check
names remain, and failed, cancelled or missing checks cannot pass the gate. - Automatic sharding
init/status/refresh, complete inventory, authorized shard
reuse, conservative parent fallback and generated Antigravity parity remain
release acceptance criteria. See child verification continuity
and CI change scopes for behavior and limits.
No new whole-task time or token-saving claim is made.
Validation: all 38 jobs in the final PR CI and merged-main CI passed, including Linux/macOS/Windows, native observation, automatic sharding and integration coverage. The release commit security scan also passed.
CI preparation corrected test fixtures that depended on the host Git identity or Windows' default Bash launcher. Earlier Windows native capture failures remain in the check history; the final checks passed without weakening incomplete-observation rejection or reuse requirements.
Merged in PR #101. Release commit: 624b83a89350dead6fc46031b54b37c72dc2ef36.
Click v0.94.1
- Maintained architecture documents, canonical prompts, completed phase packages,
and historical evidence now have explicit entry points underdocs/README.md,
docs/architecture/, anddocs/history/. Historical records keep their original
contents and literal paths where those paths are part of the evidence. - The canonical Click skill reference and generated Antigravity package now point
to the reorganized multilingual expansion record. Relative Markdown links and
generated distribution parity were validated after the move. - Runtime behavior is unchanged. Automatic sharding
init/status/refresh,
complete-inventory enforcement, authorized shard reuse, and conservative parent
fallback remain required regressions. The focused local suites passed 87 tests
with 2 platform-only skips, and pull request #99 passed the Linux, macOS, and
Windows matrix after one transient Windows native-observation job was rerun.