Skip to content

Releases: nrzz/everyhook

1.5.0

Choose a tag to compare

@nrzz nrzz released this 28 Oct 09:07
0d80266
  • 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, --problems and --project; problems are counted on the entries shown, no match is a successful empty report, and --json adds ours: true. An argument with a value, or --ours twice, 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

Choose a tag to compare

@nrzz nrzz released this 19 Oct 17:34
6ac7192
  • list --problems: only the entries and files with a problem, leaving out everything that is fine. It combines with --agent, --hook, --event and --project; problems are counted on the entries and files shown, no match is a successful empty report, and --json adds problems: true. An argument with a value, or --problems twice, 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

Choose a tag to compare

@nrzz nrzz released this 19 Oct 16:59
65e9735
  • list --event <e,f,...>: only the entries of those contract events (pre-tool, post-tool, prompt, session-start, session-end, stop, or all), across the agents, through each agent's own event names; an agent-only native event is left out, an unknown name is the usage error install --event gives. It combines with --agent, --hook and --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 --json adds events as 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

Choose a tag to compare

@nrzz nrzz released this 19 Oct 16:30
03e87cc
  • list --hook <name>: only the entries of one hook, across the agents: the entries install wrote for it and any other entry whose command line holds the name as a whole file name or path (block-force-push.mjs matches .../examples/block-force-push.mjs; force matches 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; --json adds hook. An empty name, or --hook twice, 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

Choose a tag to compare

@nrzz nrzz released this 19 Oct 12:19
90d15c1
  • Short agent names: claude (for claude-code), gemini (for gemini-cli) and copilot (for copilot-cli) are accepted in --agent and as the agent of explain, on install, uninstall, restore, list, bench and run. The long name wins when both could apply; every output, text and JSON, and every line install writes 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

Choose a tag to compare

@nrzz nrzz released this 17 Oct 20:50
e1bbda7
  • 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, tool with its kind, prompt, cwd, session, transcript, native) and may print { decision, reason, message, context }.
  • run is 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.
  • install puts 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. uninstall takes exactly those entries out and gives the file back byte for byte. restore puts a backup back. All three take --dry-run.
  • list shows every hook of every agent, from every file each agent reads, with the problems it would trip over.
  • bench puts 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.
  • explain is the table of how the five agents differ, every cell marked binary or docs, with the files each agent reads on Windows, macOS and Linux.
  • Three example hooks: block-force-push, protect-env-files and log-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 reason or a context; the longest reason of the examples is 140 characters.