Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Classifies and enforces constraints via soft vows, hard vows, and Nen Court layers. Use when designing or auditing enforcement mechanisms for project rules.
.claude/skills/athola-vow-enforcement/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 95% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 72% | 0% |
> Rules that depend on willpower fail under pressure. > Enforcement earns trust by making the right path the > only path.
ODCV-Bench found that agents break self-imposed constraints 30-50% of the time when goals conflict. Practitioner consensus confirms: past 150 soft rules, compliance drops for ALL rules, not just the new ones.
The core insight: "settings.json is a firewall; CLAUDE.md is an employee handbook." Handbooks work for guidance. Firewalls work for enforcement. Mixing them up creates a false sense of security.
| Layer | Mechanism | Compliance | Examples | |-------|-----------|------------|---------| | Soft Vow | Skill instructions, CLAUDE.md rules | ~80% | "Write tests first", "Keep commits small" | | Hard Vow | Hooks (PreToolUse/PostToolUse), settings.json permissions | ~100% | Block --no-verify, enforce file size limits | | Nen Court | External validator agents checking output | Deterministic | Lint checks, test runs, constraint audits |
Soft Vows rely on model compliance. Cheap to add and easy to iterate, but unreliable under goal conflict. Use when the constraint requires judgment, violation is annoying but not dangerous, or you are still learning what the right rule is.
Hard Vows block forbidden actions before they execute via hooks and settings.json permissions. Use when the constraint is binary, violation causes real damage, or the soft vow version was violated repeatedly.
Nen Court spawns external validator agents that audit output after a phase completes. Use when the constraint requires analysis (not pattern matching), a hook cannot express the rule, or the check needs codebase context.
When adding a new constraint, follow this sequence:
Add the rule to the relevant skill or CLAUDE.md. This is the cheapest path: zero cost, minutes to deploy, ~80% compliance.
Track violations via execution logs, post-hoc audits (imbue:justify reports), user complaints, and Nen Court findings from related audits.
If violation rate exceeds 20% over a 30-day window:
positives exceed 10%, move to Nen Court.
Current classification of existing constraints:
| Constraint | Current Layer | Target Layer | Notes | |------------|--------------|--------------|-------| | Iron Law (no impl without failing test) | Nen Court | Nen Court | validators/iron_law.py audits commit order (#406) | | No --no-verify | Hard | Hard | Already hook-enforceable | | Scope-guard worthiness scoring | Soft | Soft | Requires judgment, not binary | | Proof-of-work evidence | Nen Court | Nen Court | validators/proof_of_work.py checks [Ex] refs and status (#406) | | Bounded discovery reads | Hard | Hard | vow_bounded_reads.py with fcntl.flock for parallel safety (#418) | | No AI attribution in commits | Hard | Hard | Hook pattern-matches git commit command | | Markdown line wrapping at 80 chars | Nen Court | Nen Court | validators/markdown_wrap.py flags >80-char prose lines (#406) | | No emojis in commits | Hard | Hard | Hook pattern-matches git commit command |
The three Nen Court validators are standalone scripts under plugins/imbue/validators/. Each reads JSON on stdin and writes a verdict JSON on stdout, using exit codes 0 (pass), 1 (violation), and 2 (inconclusive). Examples:
bash# Markdown wrap audit on a list of files echo '{"files": ["README.md", "docs/guide.md"]}' \ | python plugins/imbue/validators/markdown_wrap.py # Iron Law audit on an explicit commit log echo '{"commits": [ {"sha": "abc", "ts": 100, "files": ["tests/test_x.py"]}, {"sha": "def", "ts": 200, "files": ["src/x.py"]} ]}' | python plugins/imbue/validators/iron_law.py # Proof-of-work audit on agent output echo '{"text": "Tested foo [E1] [E2] [E3]. Status: PASS.", "min_evidence": 3}' \ | python plugins/imbue/validators/proof_of_work.py
Mission orchestrator integration: dispatch the appropriate validator at each phase boundary (see Nen Court Protocol below) and treat exit code 1 as a blocking gate, exit code 2 as advisory.
A vow graduates when any of these conditions hold:
data loss, or broken CI
enforcement ("make it impossible to X")
soft vow
Hard Vows can be demoted back to Soft if:
legitimate work)
Nen Court runs at phase boundaries in the mission orchestrator lifecycle:
specify: validate spec completenessplan: validate plan feasibilityexecute: validate Iron Law, additive bias,proof-of-work
pr-prep: final compliance audityamlvalidator: name: iron-law-court constraint: "Tests must drive implementation" inputs: - git log with timestamps - diff of test files vs implementation files checks: - test file modified before implementation file - no test assertions changed to match output - coverage did not decrease output: verdict: pass | violation | inconclusive evidence: [list of specific findings] recommendation: [action if violation]
| Verdict | Meaning | Action | |---------|---------|--------| | pass | Constraint satisfied | Phase advances | | violation | Constraint broken with evidence | Phase blocked until fixed or user overrides | | inconclusive | Cannot determine compliance | Flag for human review, do not block |
The user can override any Nen Court verdict:
the constraint needs revision, not more enforcement
imbue:scope-guard: Soft vow layer. Worthinessscoring is a judgment call that belongs in skills.
imbue:proof-of-work: Mixed enforcement.Evidence rules are soft; evidence content can be verified by a Nen Court validator.
imbue:justify: Post-hoc Nen Court audit.Already functions as a validator agent for additive bias, Iron Law, and test mutations.
Court checkpoints between phases as gates:
specify -> [Nen Court: spec review] -> plan
plan -> [Nen Court: plan review] -> execute
execute -> [Nen Court: justify] -> pr-prepPhase advances only when Nen Court returns pass or the user provides an explicit override.
working
learning
imbue:karpathy-principles - the discursive layerthis skill governs (vow-enforcement decides which principles graduate from skills to hooks)
imbue:scope-guard, imbue:proof-of-work,leyline:additive-bias-defense - example soft vows that vow-enforcement classifies and may promote
docs/quality-gates.md#skill-level-quality-gate-compositionfor the federation this skill governs
enforcement layer (Soft Vow, Hard Vow, or Nen Court) with the classification rationale recorded
violations in 30 days: binary constraints graduate to Hard Vow, judgment constraints graduate to Nen Court
of three verdicts (pass, violation, inconclusive) via exit codes 0, 1, 2; exit code 1 blocks phase advancement unless the user provides an explicit override
the false positive rate (>10%) or the specific concern that no longer applies
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→pass | 35,749 | 19,913 | -44% | 1 | 1 | 0% | 5,709 | 5,604 | -2% | 0 | 0 | — |
case-04 | fail→pass | 12,895 | 6,580 | -49% | 1 | 1 | 0% | 1,972 | 3,418 | +73% | 0 | 0 | — |
case-01 | fail→fail | 26,890 | 13,619 | -49% | 1 | 1 | 0% | 4,072 | 4,515 | +11% | 0 | 0 | — |
case-02 | fail→pass | 31,553 | 14,871 | -53% | 1 | 1 | 0% | 2,618 | 5,095 | +95% | 0 | 0 | — |
case-05 | fail→pass | 13,865 | 6,500 | -53% | 1 | 1 | 0% | 2,241 | 3,507 | +56% | 0 | 0 | — |
case-06 | fail→pass | 10,362 | 2,692 | -74% | 1 | 1 | 0% | 1,657 | 2,844 | +72% | 0 | 0 | — |
case-07 | fail→pass | 14,120 | 3,416 | -76% | 1 | 1 | 0% | 2,237 | 2,940 | +31% | 0 | 0 | — |
case-08 | fail→pass | 13,371 | 7,502 | -44% | 1 | 1 | 0% | 2,099 | 3,642 | +74% | 0 | 0 | — |
case-17 | fail→pass | 8,060 | 2,107 | -74% | 1 | 1 | 0% | 1,201 | 2,685 | +124% | 0 | 0 | — |
case-09 | pass→pass | 10,305 | 2,890 | -72% | 1 | 1 | 0% | 1,571 | 2,876 | +83% | 0 | 0 | — |
case-10 | fail→pass | 14,087 | 3,206 | -77% | 1 | 1 | 0% | 2,359 | 2,898 | +23% | 0 | 0 | — |
case-11 | fail→pass | 13,403 | 6,475 | -52% | 1 | 1 | 0% | 2,153 | 3,532 | +64% | 0 | 0 | — |
case-12 | fail→pass | 11,032 | 2,999 | -73% | 1 | 1 | 0% | 1,687 | 2,883 | +71% | 0 | 0 | — |
case-18 | pass→pass | 15,003 | 3,788 | -75% | 1 | 1 | 0% | 2,280 | 2,968 | +30% | 0 | 0 | — |
case-13 | fail→pass | 12,762 | 2,584 | -80% | 1 | 1 | 0% | 2,165 | 2,902 | +34% | 0 | 0 | — |
case-14 | fail→pass | 13,208 | 5,354 | -59% | 1 | 1 | 0% | 2,214 | 3,302 | +49% | 0 | 0 | — |
case-15 | fail→pass | 11,105 | 4,941 | -56% | 1 | 1 | 0% | 1,618 | 3,142 | +94% | 0 | 0 | — |
case-16 | fail→pass | 15,133 | 6,996 | -54% | 1 | 1 | 0% | 2,389 | 3,653 | +53% | 0 | 0 | — |
case-19 | pass→pass | 10,483 | 3,140 | -70% | 1 | 1 | 0% | 1,563 | 2,853 | +83% | 0 | 0 | — |
case-20 | pass→pass | 16,592 | 15,794 | -5% | 1 | 1 | 0% | 2,751 | 5,178 | +88% | 0 | 0 | — |
case-21 | pass→pass | 15,180 | 12,293 | -19% | 1 | 1 | 0% | 2,970 | 5,012 | +69% | 0 | 0 | — |
case-22 | pass→pass | 7,006 | 4,926 | -30% | 1 | 1 | 0% | 1,349 | 3,254 | +141% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +68 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.