How it works
How it works
A plugin’s `hooks/hooks.json` names one module that exports `register`. Claude Code calls its hooks at fixed points in a session, and each hook can let the event through, refuse it with a reason, add hidden context or draw on screen.
- Step 1
Add the marketplace
Point Claude Code at the repository (with access) or at a local clone. The marketplace
catesworks-modslists one entry per plugin under./mods/<plugin>. - Step 2
Install the plugins you want
claude plugin install <name>@catesworks-modsfor each one. Each plugin is independent: install only the guards, only the UI, or all of them. - Step 3
Hooks run in your session
On
session.starta plugin registers its slash commands. Ontool.call,prompt.submitoragent.spawnit inspects the event before it happens. - Step 4
Refuse with the safe form
A refusal names the safe form; the secret-leak guard never quotes the refused command. A one-time escape such as
/secret-guard allow-onceis honoured only when you type it at the prompt. - Step 5
Draw what matters
Panes, the band above the prompt, the status line and toasts show beads, rollouts, unread bus messages and scheduled jobs without a model turn.
- Step 6
Fail open, within bounds
The hooks catch their own failures. A guard refuses on an internal error only when the raw input matches a narrow pattern, so a parser bug cannot block every Bash call.
Checked on every push
scripts/check.sh runs every CI check locally: the Claude Code version pin, the vendored copies, tsc, claude plugin validate and claude plugin test for each plugin, plus Node tests against real git repositories and a real ripgrep.
No login or secret is needed: validate and test run credential-free (ADR-0001, experiment b).
Access is by invitation
The repository is private. Installing from GitHub needs read access to it; ask for an invitation through the contact form.