Crit In Force
ASecurityGenerate IN-FORCE.md — the law in force of an agent: one line per rule that binds it, read from the Carries blocks of the live entries of its two logs, grouped by lane, with the tier and the detector of each. The boot reads it instead of the logs whole; a log is the chronicle, opened at an id this file names. Use it at every round-close that touched a DECISIONS or LESSONS-LEARNED entry (--check tells you if it is stale), when a skill needs a lane's view (--lane), or to see what binds a domain...
- 3 stars
- 0 votes
- 0 copies
- 0 views
- Added November 12, 2026
Security analysis
100/100Pro scans all 2 files and shows the line behind each finding
npx -y skills add CritosAI/critos --skill crit-in-force --agent claude-codeAre you the author of Crit In Force?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/critosai-crit-in-force)---
name: crit-in-force
description: >-
Generate IN-FORCE.md — the law in force of an agent: one line per rule that binds it, read
from the Carries blocks of the live entries of its two logs, grouped by lane, with the tier
and the detector of each. The boot reads it instead of the logs whole; a log is the
chronicle, opened at an id this file names. Use it at every round-close that touched a
DECISIONS or LESSONS-LEARNED entry (--check tells you if it is stale), when a skill needs a
lane's view (--lane), or to see what binds a domain right now. Generated, never hand-edited;
it holds the rules in force only — a settled rule resolves through the atlas.
---
<!-- SPDX-License-Identifier: Apache-2.0 · Copyright 2026 Criticaldrop Entertainment s.r.l. -->
# crit-in-force
The law in force of one agent, derived from its logs (`contract-memory § 2`, `§ 6`).
## How to run
```
bash ~/.claude/skills/crit-in-force/in-force.sh --own a4 # rewrite YOUR IN-FORCE.md (a4's), when it changed
bash ~/.claude/skills/crit-in-force/in-force.sh --check --own a4 # fresh? yours from the tree, the others as committed
bash ~/.claude/skills/crit-in-force/in-force.sh --lane onboarding .critos/memory/a4 # also the lane's view
```
**Who writes.** A generator reads a folder it does not own as committed, and writes only in the
folders its runner owns (`contract-memory § 6`): `--own a<N>` (repeatable; a folder argument counts
as one) names yours — read from the working tree and the only ones written; every other memory
folder is read at HEAD and never written, so your run cannot carry a neighbour's uncommitted
state, and a neighbour's run cannot dirty your index. Without a name nothing is written and every
folder is read at HEAD — a verification's run, nobody's. An index whose content did not change is
not rewritten (`unchanged`), so its stamp says when the law last changed. A folder argument that
is none, a bare name where a folder is expected (`a4` is `--own`'s word; the argument is
`.critos/memory/a4`), or an `--own` naming no folder is answered with one line and exit 2 — in
every mode, `--check` included: never a skip, never a silent zero.
## What it reads
Inside a live entry of `DECISIONS.md` or `LESSONS-LEARNED.md`, under a line that is exactly
`**Carries.**`, one list line per id:
```
- `<id>` · <the rule in one imperative line> · binds: <lane>[ · tier N[ — <detector>]]
- `<id>` · <the rule in one imperative line> · settled: <state>[ — <why>]
```
- An entry carries **at least its own id's line**; an entry that consolidates carries one line
per id it absorbs — that line is the archived id's live carrier.
- `binds: <lane>` — the rule is in force; the lane is the owner's word (`code`, `onboarding/config`).
A tier on the line wins; absent, the entry's `**Enforcement:** tier N` field; absent both, `?` —
a finding of `/crit-doc-lint [26]` (UNTIERED), counted in the header. The field's detector is
lent to a line only with its tier: a line with its own tier and no detector prints the tier alone.
- `settled: <state>` — the rule binds nothing: `done` · `superseded by <id>` · `consolidated in <id>`,
then an optional ` — <why>`. Settled lines are not in the index.
- A line outside the two shapes is a `CARRIES-FORM` finding of `/crit-doc-lint [26]`.
## What it writes
`.critos/memory/a<N>/IN-FORCE.md` — a header, then one section per lane, one line per rule:
`` - `<id>` · <rule> · tier N — <detector> ``. Derived: a hand-edit disappears at the next run.
The header counts what was read and names what it cannot summarise: `**Carried:** k of N live
entries` and, when k < N, an `**Uncarried:**` line per log with the ids of the entries that
carry nothing — the boot opens those whole; and, when any rule line prints `tier ?`, an
`**Untiered:** u of N rule lines` line — the debt where the boot reads it. The none-line is
written only when every live entry carries its rule: an index never reads as *no rule binds
you* while an entry it could not read exists.
**Budget 300 lines** (`.claude/doc-lint-in-force-lines` overrides): past it `--check` prints a
`BUDGET` warning — the law in force of one agent is read at every boot, so a long index is the
signal to consolidate, not to read faster.
`--lane <prefix>` also writes `IN-FORCE.<prefix>.md`: the rules whose lane is `<prefix>` or
starts with `<prefix>/`, one section per sub-lane under a stable anchor (`#config`), so a skill
can send a reader to one phase of a procedure. A view, once present, is regenerated with the
index.
## When
- **At the round-close** that appended or changed an entry (`contract-session § 2`), beside the
atlas. `/crit-doc-lint [27]` reports a stale or missing index.
- **At boot**, `contract-session § 1` step 8 reads it in place of the logs whole, and opens the
entries its head names as uncarried.
- Never cite it: cite the entry it points at.
Files in this skill
- SKILL.md
- in-force.sh
Attribution
Related skills
View all in development →Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.