AGENTS.md Map-Not-Encyclopedia Doctrine¶
Source ADR: ADR-0.0.54-agents-md-map-not-encyclopedia-doctrine
Rule file: .gzkit/rules/agents-md-map-doctrine.md (version 0.1.0)
Authored: OBPI-0.0.54-01
The failure pattern¶
The OpenAI Harness Engineering thesis (2026-02-11) names four predictable failure modes for monolithic instruction files:
"Context is a scarce resource. A giant instruction file crowds out the task, the code, and the relevant docs — so the agent either misses key constraints or starts optimizing for the wrong ones.
Too much guidance becomes non-guidance. When everything is 'important,' nothing is. Agents end up pattern-matching locally instead of navigating intentionally.
It rots instantly. A monolithic manual turns into a graveyard of stale rules. Agents can't tell what's still true, humans stop maintaining it, and the file quietly becomes an attractive nuisance.
It's hard to verify. A single blob doesn't lend itself to mechanical checks (coverage, freshness, ownership, cross-links), so drift is inevitable.
So instead of treating AGENTS.md as the encyclopedia, we treat it as the table of contents."
gzkit's AGENTS.md was exhibiting all four. At the doctrine's authoring (2026-05-19): 390 lines / 30,924 chars, containing both binding bullet lists AND multi-paragraph rationale prose, worked examples, anti-pattern catalogs, and "Why this is canon" coda paragraphs. The gz-context-diet skill existed as a reactive remedy; this doctrine makes the map shape the mechanical resting state.
The invariant¶
AGENTS.md MUST contain only:
- (a) Binding bullet rules — one bullet = one rule, ≤ 3 lines per bullet
- (b) Structured tables — Persona, Gate Covenant, OBPI kinds, canonical-invocations, defect-fix routing thresholds
- (c) Canonical-link references — See [text](docs/governance/…) links to deeper documentation at stable URLs
AGENTS.md MUST NOT contain: - (i) Multi-paragraph rationale prose — paragraph > 5 lines without a binding-bullet anchor - (ii) Worked examples or anti-pattern catalogs — subsections titled "Worked example", "Anti-patterns", "Example", or equivalent - (iii) "Why this is canon" coda blockquotes — blockquotes explaining why a rule exists - (iv) Narrative pedagogical sections — multi-paragraph explanations of how rules work - (v) Operative-claims expansions — prose blocks restating operative claims already stated in binding-bullet form
CLAUDE.md and .claude/rules/*.md inherit the same shape contract.
Port vs adapter framing¶
This doctrine authors a port: it declares the abstract shape AGENTS.md must satisfy. The specific section layout, per-section character targets, and choice of which subsections to lift first are adapters behind the port. The existing gz-context-diet skill becomes the operator-facing procedure against the port; gz validate --agents-md-map-conformance (OBPI-0.0.54-03) becomes the mechanical witness.
Budget targets¶
The operator selected "Moderate" (halve current weight; preserve binding-bullet density):
| File | Old budget | Target budget (doctrine destination — see the note below for which are also enforced) | Rationale |
|---|---|---|---|
AGENTS.md |
40,000 chars | a range: 15,000 chars ideal, 20,000 chars ceiling | Halves per-turn injection; preserves ~200 lines of binding bullets. Operator rulings 2026-09-19, verbatim: "make target 20k", then "state a range: 15K is ideal, 20K a ceiling" — see budget history |
CLAUDE.md |
40,000 chars | 4,000 chars | Already 1,378 chars; 4k provides 2.6k headroom for model-specific addenda |
.claude/rules/*.md |
16,000 chars/file | 16,000 chars/file | Unchanged; per-file shape audit deferred to OBPI-0.0.54-04 |
Budget is enforced by gz validate --instructions-files-budget reading data/instructions_files_budget.json — the single source of truth. The live enforced values are whatever that JSON carries. Since the 2026-09-19 third ruling, AGENTS.md's enforced budget is 20,000 chars — equal to its ceiling, so for that row the ceiling is a currently-enforced number and not only a destination, while the distance to the 15,000-char ideal stays destination work. CLAUDE.md and the .claude/rules/*.md glob remain above their targets and stay destinations, deferred to ADR-0.35.0-canon-entry-corpus-landing § Decision 3. (The intermediate hop through GHI #533 is retired — that issue closed 2026-09-01 superseded into this ADR.)
The 15,000–20,000-char range above is the doctrine destination: aim for the ideal, never pass the ceiling. Since the 2026-09-19 third ruling the enforced budget for
AGENTS.mdis the 20,000-char ceiling, so the ceiling is mechanical rather than prose and only the distance to the 15,000-char ideal is still destination work. The live enforced value is always whateverdata/instructions_files_budget.jsoncarries — the single source of truth — never a number duplicated into prose or tests.The predecessor pointer to
ADR-0.0.37is retired: that ADR went terminal 2026-07-18 (§ Terminal Disposition, "Split-and-Supersede") with its registry-spine OBPIs permanently withdrawn, so no weight-halving work can land there. The successor is corpus-shaped — sections declarecorpus-ownedorunowned, the generator materializes owned sections from the corpus, and the unowned byte total is held in a decrease-only ratchet.
Per-section targets (OBPI-02 lift guide)¶
The ADR-0.0.54 § Intent table records operator-reviewed per-section target sizes. These are Judgment class (not Mechanical — they require review of surviving text density). The table is the canonical reference; this doc does not duplicate it.
Summary action: each section's rationale prose lifts to a named target under docs/governance/; the surviving AGENTS.md bullet replaces the prose with a See [doc §anchor] link preserving the binding text verbatim.
Lift targets¶
| AGENTS.md section | Lift target | Status |
|---|---|---|
| Why this contract is not minimal | docs/governance/agent-contract-rationale.md § Why this contract is not minimal |
OBPI-02 |
| PRIME DIRECTIVE anti-rationalizations | docs/governance/prime-directive.md (new) |
OBPI-02 |
| DO IT RIGHT pedagogical examples | docs/governance/agent-contract-rationale.md § DO IT RIGHT worked examples |
OBPI-02 |
| ANTI-VIBING MANTRA blockquote | docs/governance/agent-contract-rationale.md § Anti-vibing mantra |
OBPI-02 |
| STDLIB-FIRST canonical applications | docs/governance/agent-contract-rationale.md § Stdlib-First doctrine |
OBPI-02 |
| OPERATOR ECONOMY anti-patterns | docs/governance/agent-contract-rationale.md § Operator economy |
OBPI-02 |
| Behavior Rules prose explanations | docs/governance/behavior-rules.md (new) |
OBPI-02 |
| Skills catalog | docs/governance/skills-catalog.md (new; auto-regenerated from manifest) |
OBPI-02 |
| Universal OBPI Attestation expansion | docs/governance/obpi-attestation.md (new) |
OBPI-02 |
Consequences¶
What changes (OBPI-02 outcome)¶
- AGENTS.md shrinks from ~31k chars toward the destination above — cutting per-turn context injection
- Every binding rule, operative claim, and behavior-rule item survives verbatim — at a stable URL under
docs/governance/rather than inline - The path of least resistance for rationale becomes the lift, not the in-place expansion
gz validate --agents-md-map-conformance(OBPI-03) surfaces any re-accretion at CI time
What does not change (scope boundary)¶
- The content of any binding bullet — only the location of rationale prose
- The existing
gz validate --instructions-files-budgetweight cap (additive, not replaced) - Lifted prose is preserved verbatim — no compression-by-summarization permitted
Reversibility¶
This is a deliberate one-way door at the file-shape level. Once AGENTS.md is lifted and the validator binds the shape, the binding-bullets-and-links structure is the contract. Justified by: the alternative is indefinite encyclopedia-style accretion, which the OpenAI thesis names as a four-pattern failure mode. Reversal requires an amendment ADR loosening the shape or a re-merge of lifted content.
Related¶
.gzkit/rules/agents-md-map-doctrine.md— the rule file (version0.1.0)docs/governance/agent-contract-rationale.md— existing encyclopedia; six sections previously lifted heredocs/governance/advisory-rules-audit.md— scorecard entry (row 58, Mechanical for shape)ADR-0.0.54-agents-md-map-not-encyclopedia-doctrine— parent ADR with full rationale, Q&A transcript, and per-OBPI decomposition.gzkit/skills/gz-context-diet/SKILL.md— the operator-facing remedy this doctrine makes the mechanical default