One .policyctl.yml, enforced inside Claude Code, Codex, and Cursor at tool-call time — and again as a hard gate in CI. Not prompt text. Not a vendor denylist.
$ policyctl check --from main
✓ PASS no-secrets-in-commits no secret patterns detected
⚠ WARN tests-for-source src/auth.ts changed without a test
✗ FAIL migrations-via-generator db/migrations/0004.sql lacks generator signature
2 blocking · 1 warning — build stopped
The CLI is local-first and offline. The hosted control plane (optional) adds cross-repo policy versioning and an audit trail.
Start from a template that encodes procedural rules, not opinions.
policyctl init --template fullWrite the exact glue for each provider — no hand-rolled per-model plugin.
policyctl gen claude
policyctl gen codex
policyctl gen cursorFail CI on violations and stream them to the dashboard feed.
policyctl check
policyctl check --reportA rule is a matcher set + an enforce level + a scope. Compose them, allowlist reviewed exceptions, and tag them. Hook-time and CI-time share the same engine.
Block any migration file that lacks the generator signature — at hook time and in CI.
Prevent agents from touching README, package.json, or any path you choose.
Regex-detect AWS keys, GitHub tokens, and OpenAI keys in the diff, then fail the build.
Warn when a src/ change ships without a matching test file.
One file, every agent, every repo. The CLI is free forever.