Repository navigation
Releases: nrzz/everyhook
Releases · nrzz/everyhook
Release list
1.5.0
list --ours: only the entries everyhook wrote across the agents, leaving out files whose hooks are all non-everyhook. It combines with--agent,--event,--hook,--problemsand--project; problems are counted on the entries shown, no match is a successful empty report, and--jsonaddsours: true. An argument with a value, or--ourstwice, is a usage error.- Contributed by @yoreva-01 in #10, for the good first issue #9. The pull request's tests ran on Windows, macOS and Linux with Node 18 to 24, and its real-binary checks against the newest Claude Code, Codex CLI, Gemini CLI and Copilot CLI on all three systems, before the merge.
The next good first issue is #11: list --theirs, only the entries everyhook did not write, across the agents, the hooks that uninstall and restore leave alone.
1.4.0
list --problems: only the entries and files with a problem, leaving out everything that is fine. It combines with--agent,--hook,--eventand--project; problems are counted on the entries and files shown, no match is a successful empty report, and--jsonaddsproblems: true. An argument with a value, or--problemstwice, is a usage error.- Contributed by @yoreva-01 in #8, for the good first issue #7. The pull request's tests ran on Windows, macOS and Linux with Node 18 to 24, and its real-binary checks against the newest Claude Code, Codex CLI, Gemini CLI and Copilot CLI on all three systems, before the merge.
The next good first issue is #9: list --ours, only the entries everyhook wrote, across the agents, the set uninstall and restore act on.
1.3.0
list --event <e,f,...>: only the entries of those contract events (pre-tool,post-tool,prompt,session-start,session-end,stop, orall), across the agents, through each agent's own event names; an agent-only native event is left out, an unknown name is the usage errorinstall --eventgives. It combines with--agent,--hookand--project; files that keep no matching entry are left out, problems are counted on the entries shown, no match is a successful empty report, and--jsonaddseventsas given.- Contributed by @yoreva-01 in #6, for the good first issue #5. The pull request's tests ran on Windows, macOS and Linux with Node 18 to 24, and its real-binary checks against the newest Claude Code, Codex CLI, Gemini CLI and Copilot CLI on all three systems, before the merge.
The next good first issue is #7: list --problems, only the entries and files with a problem, the lint on its own.
1.2.0
list --hook <name>: only the entries of one hook, across the agents: the entriesinstallwrote for it and any other entry whose command line holds the name as a whole file name or path (block-force-push.mjsmatches.../examples/block-force-push.mjs;forcematches nothing), ignoring case on Windows and the direction of slashes. Files that keep no matching entry are left out, problems are counted on the entries shown, and no match is a successful empty report;--jsonaddshook. An empty name, or--hooktwice, is a usage error.- Contributed by @yoreva-01 in #4, for the good first issue #3. The pull request's tests ran on Windows, macOS and Linux with Node 18 to 24, and its real-binary checks against the newest Claude Code, Codex CLI, Gemini CLI and Copilot CLI on all three systems, before the merge.
The next good first issue is #5: list --event <e,f,...>, the same cut by contract event, through each agent's own event names.
1.1.0
- Short agent names:
claude(forclaude-code),gemini(forgemini-cli) andcopilot(forcopilot-cli) are accepted in--agentand as the agent ofexplain, oninstall,uninstall,restore,list,benchandrun. The long name wins when both could apply; every output, text and JSON, and every lineinstallwrites into a configuration file keep the long ids. An unknown name is the usage error it was. - Contributed by @Dasprakash-Sekar in #2, the first outside pull request, for the good first issue #1. The pull request's tests ran on Windows, macOS and Linux with Node 18 to 24, and its real-binary checks against the newest Claude Code, Codex CLI, Gemini CLI and Copilot CLI on all three systems, before the merge.
The next good first issue is #3: list --hook <name>, only the entries of one hook, across the agents.
1.0.0
- First release. A CLI that lets one hook run in Claude Code, Codex CLI, Gemini CLI, GitHub Copilot CLI and Cursor. Node 18 or newer, no dependencies.
- The contract: a hook is any executable (
.mjs,.js,.cjs,.ps1,.sh,.cmd,.bat, or anything else as it is). It reads one JSON document on stdin (agent,event,toolwith itskind,prompt,cwd,session,transcript,native) and may print{ decision, reason, message, context }. runis the adapter the agents call. It reads the agent's JSON, runs the hook and answers in the agent's own JSON with exit code 0: the form that delivered the reason on all four recorded binaries, and the only one that blocks on Codex CLI for Windows. A hook that cannot start, runs too long or prints something that is not an answer is ignored with a message, or denied with--fail-closed.installputs the hook into each agent's configuration with that agent's event names, matcher syntax and timeout unit, by editing the file's text after a backup.uninstalltakes exactly those entries out and gives the file back byte for byte.restoreputs a backup back. All three take--dry-run.listshows every hook of every agent, from every file each agent reads, with the problems it would trip over.benchputs a hook to the documents the agents sent (53 recorded from Claude Code 2.1.302, Codex CLI 0.163.0, Gemini CLI 0.64.0 and Copilot CLI 1.0.98, and 11 written from Cursor's reference) and prints what each agent would do with the answer, with the exact JSON.explainis the table of how the five agents differ, every cell markedbinaryordocs, with the files each agent reads on Windows, macOS and Linux.- Three example hooks:
block-force-push,protect-env-filesandlog-tool-calls. - What the agents do is what the real binaries did: 52 raw hook outputs, the adapter at every event, project scope, and the case where everyhook itself is gone. They ran on Windows 11 and, on every push, on GitHub's Windows, macOS and Linux runners (
e2e.yml). Cursor was not run. - Zero tokens for the tool. A hook costs nothing unless it returns a
reasonor acontext; the longest reason of the examples is 140 characters.