Claude Code mods · access by invitation
Conventions Claude Code cannot forget
A mod changes Claude’s own interface or behaviour: a hook on tool calls, a pane, a band above the prompt, a status line entry, a toast or a slash command. Each one enforces a convention mechanically instead of relying on memory or instructions.
- env
- ✗ denied: secret-leak-guard … use compgen -v | grep NAME
- git worktree add /tmp/wt1 -b demo
- ✗ denied: worktree-path-guard … use <repo>/.claude/worktrees/<name>
- /kb why did we pick shape B′
- ✓ example-repo/docs/decisions/ADR-0001.md:7 [authoritative]
- bus: laptop-demo · 2 unread · newest from desk-demo
- bead: demo-1a2 Fix the login redirect · cron: 1 scheduled
Four plugins, one marketplace
- 01
cw-guards 0.2.0
Guards on tool calls: refuses commands that would print secrets, refuses worktrees under temp folders and merges that would delete ignored data, and scopes forks spawned while a scheduled task is in context.
- 02
cw-ui 0.2.2
Panes, a band and a command: the beads pane, the rollout dashboard pane, the session-bus band above the prompt and the read-only /wrap session checker.
- 03
dossier-first 0.1.2
Pull-first dossier lookup: /kb, the ?kb prompt prefix and the kb_search tool search catesworks dossiers, ADRs and plans and attach a capped, untrusted-wrapped excerpt block as hidden context.
- 04
hello 0.1.0
Smoke-test mod: /hello lists the catesworks roots found on this machine, through the vendored shared roots file.
From install to enforced
- 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.
Access is by invitation
The repository is private. Installing from GitHub needs read access to it; ask for an invitation through the contact form.