not two browser tabs
Enforcee lives inside the session, not beside it.
The website is a place to try it. The real product is a plugin and a command-line tool that sit in your project and run on every turn. A forbidden command is denied before it executes, not described to you afterwards.
Five steps, about a minute
- 01
Add the marketplace
One line, once per machine. It points Claude Code at this repo.
/plugin marketplace add 7patriksz-art/Enforcee
- 02
Install the plugin
Brings the guard hooks, the audit skill and the /receipt command with it.
/plugin install enforcee@enforcee
- 03
Drop in your licence
Once per machine. It is a signed line of text checked on your own disk — no activation server, no phone-home, and it keeps working on a plane.
mkdir -p ~/.enforcee && echo "<your licence>" > ~/.enforcee/licence
- 04
Compile your rules into a policy
Run this in your project root. It reads your ruleset and writes .enforcee/policy.json. Nothing leaves the machine.
npx enforcee guard CLAUDE.md
- 05
Restart Claude Code
Hooks load at startup. From here the guard is live in every session in that project.
What it does once it is in
A PreToolUse hook denies the call before it runs and hands the model your own rule text as the reason. Force-push denied, --force-with-lease allowed, rm -rf ./build warned, rm -rf / denied.
Claude Code already re-reads your project-root CLAUDE.md after /compact — that part is native, free, and we will not sell it to you. What it does not re-inject is nested CLAUDE.md files and paths:-scoped rules. A PostCompact hook covers that residue and records that it did.
Every allow, warn and deny is appended to .enforcee/ledger.jsonl on your disk. It is yours; nothing is sent anywhere.
The command line
Zero network calls. Not one, not even the licence check. About 80% of a real ruleset is decided by code, so the diagnostic half genuinely does not need a model, a key or an account — and it never will.
npx enforcee audit CLAUDE.md answer.mdfree, no accountPer-rule verdicts with evidence. Exits non-zero on a violation, so it drops straight into CI.
npx enforcee health CLAUDE.mdfree, no accountCritiques the ruleset itself: duplicates, contradictions, rules too vague to ever check.
npx enforcee learn conversation.txtfree, no accountProposes rules from things you already said. Nothing is switched on for you.
npx enforcee session <session>.jsonlfree, no accountWhat the model could actually see: skills offered vs used, MCP servers that never connected.
npx enforcee guard CLAUDE.mdlicensedCompiles and recompiles the policy the guard enforces.
npx enforcee licencefree, no accountShows which licence this machine is using, and when it expires.
How the licence works, plainly
The auditing commands are free forever and need no licence — that is not a trial, it is the deal. The guard is what we charge for, and it is checked with a signature your machine verifies on its own.
- Your licence is one line of text. Put it in
~/.enforcee/licence, or inENFORCEE_LICENCEfor CI. - It is verified offline against a key compiled into the tool. Nothing is sent to us, ever — including the fact that you ran it.
- It renews itself while you are subscribed. It stops working a few weeks after you cancel, without us having to watch you.
npx enforcee licencetells you what you have and when it expires.
Use it as a CI gate
audit exits non-zero when any rule is violated, so the same check that runs on your laptop can fail a pull request.
- name: Enforcee run: npx enforcee audit CLAUDE.md build/answer.md
What it will not do
- It sees tool calls, not intentions. It can stop an action, not a plan.
- Re-injection puts your rules back into context. It cannot force the model to weigh them.
- Anything ambiguous arrives switched off. A guard that blocks ordinary work gets uninstalled by Friday.
- There is no curl-piped-to-shell installer, because the guard blocks that pattern by default.