essays7 min read
Builder · Applied AI

Seeing like a model

Anthropic cut Claude Code's system prompt by 80 percent for the Claude 5 models and told everyone to simplify. So I audited the 66,792 bytes my own agents auto-load, atom by atom. The doctrine's cut came out to 1.3 percent, and the difference is the point: the new rules delete distrust, and my file is mostly maps.

Anthropic published a post this month saying they cut Claude Code's system prompt by more than 80 percent for the Claude 5 generation models, because the newer models do better with judgment than with rules. Most reactions read it as prompt-slimming tips. I read it as a vendor discovering, empirically, something political scientists documented about states and maps decades ago. Then I did what this site does: I took the doctrine to my own repo, measured every byte my agents load before touching a file, and classified all of it. The cut the doctrine prescribes came out to 1.3 percent, and the reason it is not 80 is the most useful thing in this post.

What the post actually says

The post is short and worth your time. The argument: earlier models needed worst-case-proofing, so prompts accumulated absolute rules, repeated warnings, and canned examples. Claude 5 models resolve ambiguity with judgment, so most of that scaffolding now subtracts capability instead of adding safety. Anthropic names six shifts (rules to judgment, examples to interface design, upfront context to progressive disclosure, repetition to simple descriptions, manual memory to auto-memory, simple specs to rich references) and recommends a four-layer stack: a system prompt you rarely touch, a lightweight CLAUDE.md of repository gotchas, skills that encode opinions, and references that carry the depth.

All of that matches my experience running these models. The part that goes unexamined is the 80 percent number itself, because what you can cut depends entirely on what your instructions were made of in the first place.

A prompt is a cadastral map

James C. Scott's Seeing Like a State is about what happens when an administration needs the world legible: it surveys, standardizes, and writes rules, and the rules work until they meet a reality that only local judgment handles. Scott's name for that judgment is metis. The high-modernist failure mode is not that the maps are wrong; it is that the mapmaker starts trusting the map over the territory and legislates accordingly.

An agent instructions file is a cadastral map of a codebase. It exists to make a repo legible to a stranger who arrives with enormous general capability and zero local knowledge. The rules era of prompt writing was high modernism in miniature: enumerate the worst cases, prohibit them in capital letters, repeat the prohibition anywhere the agent might look. You can carbon-date a prompt by its capitalization. What Anthropic announced is the correction Scott would have predicted: past a threshold of competence, codified rules underperform the judgment they were protecting against. Their word for it is unhobbling. Scott's word is metis.

June: the map deformed the territory

This repo already lived one chapter of that story. By June the agent guide here had grown to 225 KB and roughly 55,000 tokens, and it had become the number one merge hotspot in the repo. Every session paid the whole file at startup and paid it again at every context compaction; every feature PR appended a section, so unrelated PRs collided in it on adjacent lines. The map was no longer describing the territory; it was the largest obstacle in it.

The fix moved two dozen deep dives into per-surface docs loaded on demand and cut the always-loaded core by about 90 percent. Keep that number in mind. It rhymes with Anthropic's, and it is a different operation entirely, which is where the audit comes in. (The wider system that keeps several concurrent sessions from rotting this repo is its own post.)

The audit

The doctrine deserved a real test, so I gave it the corpus it would govern here: the four files every Claude Code session auto-loads in this repo. CLAUDE.md plus three rules files, 66,792 bytes, roughly 16,300 tokens, every session, before its first edit. (Weigh your own file with the token counter; it runs in the browser.)

I split the corpus into 39 instruction atoms, where an atom is a block that does one job, measured each atom's bytes from the live files, and classified every one into five kinds. Geography: facts about this repo that no amount of model intelligence can infer, like which Supabase project is which. Policy: choices the owner made, like the red lines and the page-experience bar. Pointers: references that load deeper docs on demand. Judgment: guidance already phrased the way the doctrine wants. Distrust: hedges, repetitions, and anti-pattern lists that restate rules stated elsewhere. One flag on top: scar, for atoms that trace to a documented incident.

the audit board · every auto-loaded byte, classified · measured 2026-07-27
16,291 tokens loaded · every session, before its first edit
The domain map: 98 route rows
Route by route, what lives there, who may see it, which tables it reads. The gazetteer. Nearly three quarters of the whole constitution by weight.
CLAUDE.md · Domain map
39,773 B · 59.5%
GEOGRAPHY
The Docs column
Every row ends in a pointer to its deep-dive under docs/surfaces/. The load-on-demand half of the table.
CLAUDE.md · Domain map
3,184 B · 4.8%
POINTERS
The command inventory
dev, lint, test, build, seeders, audits, per-surface release builders. The repo's verbs.
CLAUDE.md · Run / test / build
2,027 B · 3.0%
GEOGRAPHY
One interaction that makes a reader stop
Flagships owe a bespoke moment, reduced-motion safe and accessible by construction.
.claude/rules/page-experience.md · Signature interaction standard
1,988 B · 3.0%
POLICY
Link-heavy, multimedia-rich, audio-friendly, visual
Every page audited against four pillars before it is done. The house bar, ratified.
.claude/rules/page-experience.md · Page experience standard
1,857 B · 2.8%
POLICY
The two-rung games QA harness
A nightly LLM smoke and a deterministic per-PR gate, both at a mobile viewport with software WebGL.
CLAUDE.md · Playtest
1,819 B · 2.7%
GEOGRAPHY
One send path, per-surface From identitiesSCAR
Every email resolves its From line from a tested registry so no surface's brand leaks onto another's mail.A court display name in the global EMAIL_FROM once branded every site email "City of Josephine, TX."
CLAUDE.md · Auth (NextAuth v5)
1,608 B · 2.4%
GEOGRAPHY
Content is invisible until seededSCAR
The App Router reads Supabase, not the repo's seed files; the auto-seed workflow and the read fallback exist because content once silently failed to ship.Merged PRs edited seed JSON and the live site did not change; two safety nets now guard the gap.
CLAUDE.md · Run / test / build
1,532 B · 2.3%
GEOGRAPHY
The four red lines
What never leaves the site through any channel, and the module that enforces it on every outbound path. Values, wired.
.claude/rules/red-lines.md · whole file
1,320 B · 2.0%
POLICY
The auth config split
Edge-safe config for middleware, full config for handlers, JWT sessions, adapter schema. Pure wiring facts.
CLAUDE.md · Auth (NextAuth v5)
1,099 B · 1.6%
GEOGRAPHY
Behind main is physics, not failureSCAR
Merge once before the PR, never loop rebases, registry conflicts resolve keep-both. Written as judgment, not prohibition.Sessions once treated "behind main" as an emergency and burned tokens re-rebasing into the same conflict.
CLAUDE.md · Concurrent sessions & branch hygiene
1,062 B · 1.6%
JUDGMENT
The five enrichment sub-agents
Auditor, blog, content, linker, metadata, and the shared client infra they run on.
CLAUDE.md · Enrichment pipeline
717 B · 1.1%
GEOGRAPHY
The data seams
Which module is the service-role client, which is anon, and that new tables get an accessor module.
.claude/rules/nextjs-react19-conventions.md · Data layer
699 B · 1.0%
GEOGRAPHY
Server-component-first
Push "use client" to leaves, fetch at request time, metadata via exports. House patterns.
.claude/rules/nextjs-react19-conventions.md · App Router
669 B · 1.0%
POLICY
Pointers to the deeper rulebooks
Coding conventions, the page-experience standard, theme and schema skills: named, not inlined.
CLAUDE.md · Conventions pointers
592 B · 0.9%
POINTERS
The anti-pattern list
Six items, every one restating a rule already stated elsewhere in the corpus. The purest distrust-era block in the repo: the doctrine deletes it on sight.
.claude/rules/nextjs-react19-conventions.md · Anti-patterns to flag
576 B · 0.9%
DISTRUST
The ops harness, and the pkill warningSCAR
Start and stop the prod server only via the PID-file scripts; kill-by-name kills the agent's own shell.Sessions self-killed with exit 144 by pkill-ing the dev server they shared a process group with.
CLAUDE.md · Run / test / build
538 B · 0.8%
GEOGRAPHY
The Tailwind rule, a third time
Bauhaus tokens by default, Tailwind in its scoped routes, no CSS modules. The canonical statement of a rule the corpus makes three times.
.claude/rules/nextjs-react19-conventions.md · Styling
497 B · 0.7%
POLICY
JSX, not TypeScript
The build is not configured for .ts and the tooling assumes JS. A fact about this repo, not a hedge.
.claude/rules/nextjs-react19-conventions.md · Language
443 B · 0.7%
GEOGRAPHY
The two-database map
Main project for site content, a separate one for exam prep: refs, wiring, which scripts touch which.
CLAUDE.md · Two Supabase projects
439 B · 0.7%
GEOGRAPHY
The oracle the gate judges against
Nothing overlays the dock, the board fills the viewport, 3D actually drew, the console is clean. A standard, chosen.
CLAUDE.md · Playtest
405 B · 0.6%
POLICY
Where Tailwind may live
Utilities scoped to games, research, weather; Bauhaus tokens everywhere else. A design choice, stated as one.
CLAUDE.md · Stack
366 B · 0.5%
POLICY
Where the theme lives
CSS variables in globals.css, JS tokens in tokens.js, dark mode via a data attribute.
CLAUDE.md · Bauhaus theme
348 B · 0.5%
GEOGRAPHY
Where components live
layout/, sections/, custom/, or co-located with the route.
.claude/rules/nextjs-react19-conventions.md · Component organization
342 B · 0.5%
GEOGRAPHY
What the pre-commit hook does
Essay-site sync, drift checks, a Tailwind leak check. Plus one hedge: "don't bypass it."
CLAUDE.md · Run / test / build
320 B
GEOGRAPHY
next/image and inline SVG
Raster through next/image, icons as themable inline SVG.
.claude/rules/nextjs-react19-conventions.md · Images
300 B
POLICY
Vitest, co-located
Where tests live and how they run.
.claude/rules/nextjs-react19-conventions.md · Tests
267 B
GEOGRAPHY
American English everywhere
color, favorite, gray, -ize. The owner is from Chicago; the site sounds like it.
CLAUDE.md · Conventions pointers
263 B
POLICY
Read the surface doc first
Posture, schemas, and trust invariants live in docs/surfaces/<name>.md, loaded when you touch that surface.
CLAUDE.md · Surface docs
259 B
POINTERS
New surfaces document themselves elsewhereSCAR
A new surface gets a new doc file plus one table row; never append large sections to CLAUDE.md.The file once grew to 225 KB and became the repo's number-one merge hotspot; the convention is the fix.
CLAUDE.md · Surface docs
256 B
POLICY
Env vars live in docs/ENV.md
The full table loads on demand instead of riding along in every session.
CLAUDE.md · Auth (NextAuth v5)
224 B
POINTERS
The stack, in five bullets
Next.js 15, React 19, no TypeScript, Supabase, Vitest. Facts a fresh session needs before its first edit.
CLAUDE.md · Stack
209 B
GEOGRAPHY
The synced essay dirs are build artifacts
Two public/ trees are written by the sync script; edits there are silently overwritten. Edit the sources.
CLAUDE.md · What not to touch
204 B
GEOGRAPHY
The Tailwind rule, stated again
The same scoping rule already stated in Stack, restated with a "Don't." Repetition is the distrust-era tell.
CLAUDE.md · Bauhaus theme
168 B
DISTRUST
"Never write to one... (read this twice)"
The hedge on top of the map. The map is geography; the all-caps energy around it is distrust of the reader.
CLAUDE.md · Two Supabase projects
135 B
DISTRUST
.claude/rules auto-loads
Anything placed there is paid for by every session. A fact about the machinery, not a preference.
CLAUDE.md · Surface docs
100 B
GEOGRAPHY
docs/heddle is parsed by a drift check
App docs placed there break the issue-mirror gate. Machinery, again.
CLAUDE.md · Surface docs
100 B
GEOGRAPHY
The git hook is managed
npm prepare owns .git/hooks/pre-commit.
CLAUDE.md · What not to touch
53 B
GEOGRAPHY
The title line
Names the file an agent guide.
CLAUDE.md · title
34 B
GEOGRAPHY
Byte counts measured from the live files; per-file sums reconcile exactly and re-verify in CI (src/lib/context-audit). A left bar marks scar tissue: an instruction that exists because something documented once went wrong.
The audit board. Filter by kind or scar tissue, then apply the Claude 5 doctrine and watch what a real repo constitution actually loses.

What 1.3 percent means

Geography is 78.9 percent of the corpus. The domain map alone, 98 rows of what lives at every route, weighs 43 KB, nearly three quarters of the constitution. Policy is 11.9 percent, pointers are 6.4, judgment is 1.6. Distrust, the one kind the doctrine deletes, totals 879 bytes: one "never write to the wrong database" hedge, one rule restated a second time, and one anti-pattern list whose six items all appear elsewhere in the corpus. Press the doctrine button on the board and that is all that dims. About 214 tokens out of 16,300.

The 80 percent number is real; it just describes a different kind of document. A product system prompt ships to every repo on earth, so it can contain almost no geography. It is nearly all instruction, and instruction is exactly what better judgment makes redundant. A repo guide inverts the ratio. Mine is a gazetteer with a thin legal code stapled to it.

The new rules delete distrust. They do not delete maps.

Their four layers, a month early

Judgment can replace a rule. It cannot replace the fact that this repo has two Supabase projects, or that blog content is invisible until a seeder runs, or that kill-by-name takes down the agent's own shell. A model that gets smarter does not learn my database layout; it just fails at it more confidently.

Which is why the June diet, done a month before the post existed, converged on the post's recommended architecture layer for layer: an untouched harness prompt, a slim core with a domain map, auto-loaded rules that encode opinions, and 102 per-surface deep dives, about 1.2 MB, that a session reads only when it touches that surface. The always-loaded tier is 66.8 KB; the on-demand tier is eighteen times heavier. Progressive disclosure arrived here the hard way, as the only survivable response to six concurrent sessions each paying a 55,000-token toll.

their four layers · what this repo converged on in June
System prompt
product-owned, rarely modified
The harness prompt
Claude Code's own; this repo never touches it
CLAUDE.md
lightweight, repository-specific gotchas
The 340-line core + domain map57.8 KB auto-loaded
stack, commands, guardrails, 98 route rows
Skills
opinions, loaded when relevant
.claude rules + skills9.0 KB auto-loaded
red lines, page-experience bar, conventions
References
in-depth specs, code over descriptions
docs/surfaces + docs/ENV.md~1.2 MB on demand
102 per-surface deep dives, read on touch
The June diet (PR #944) landed this shape a month before the post named it. The always-loaded tier is 66.8 KB; the on-demand tier is eighteen times heavier.
The four layers the post recommends, next to what this repo's June diet had already landed on, with the measured weight of each local tier.

Every rule is a scar

Bowker and Star's Sorting Things Out argues that classification systems are frozen organizational memory. Reading my own constitution atom by atom, the clearest pattern was not distrust. It was scar tissue: 7.5 percent of the corpus exists because something specific once went wrong. The email identity registry is documented at length because a court's display name once branded every outgoing site email "City of Josephine, TX." The seeding section is loud because merged content once silently failed to reach the live site. The branch-hygiene section exists because sessions once treated "behind main" as an emergency and burned tokens looping rebases into the same conflict.

The doctrine forecasts that hedges age out as models improve, and they do. Scars behave differently. When my file went on its diet, almost nothing was deleted; the bytes migrated down a layer, out of the constitution and into the surface docs, still written down but no longer taxing every session. Deletion is for distrust. Everything else migrates.

When the 80 percent cut is real

If your CLAUDE.md is full of tone policing, output-format examples, and the same warning three ways, the doctrine applies to you at close to full strength: delete it, and the model gets better. And I am not exempt. The audit surfaced my file's actual disease, which the doctrine's taxonomy has no name for: fat geography. Domain map rows that should be one line and a pointer have grown into 500-byte capsule reviews, which is the 225 KB failure mode regrowing inside the table that was built to prevent it. The cut my file needs is a map diet, not a distrust purge, and no increase in model capability will perform it for me.

There is also a risk in over-deleting. Judgment without geography is how an agent confidently does the safe-looking wrong thing. The purest distrust atom in my audit, the hedge about never writing to the wrong database, costs 33 tokens; the failure it prevents costs an evening. I am keeping it. Not every insurance policy should be canceled the day the actuarial table improves.

Thread two

This audit is observational. The doctrine's claim is causal: the slim file performs as well as the fat one. That is testable here, and the shape of the test is obvious. Freeze the current constitution, write the doctrine-compliant minimum, run the same standardized task set against both, publish the diffs and the protocol before the runs. This site already keeps claims that re-verify themselves; an experiment on its own constitution is the natural next entry. The protocol is now locked: hypotheses, both frozen hash-verified arms (the doctrine-minimal constitution is a 90.7 percent cut), the ten-task battery, and the pre-specified analysis are committed as an in-repo pre-registration before any session runs. When it runs, that will be thread two. The ledger below is thread one.

Experience it yourselfRead the audit ledger, atom by atom
ShareXLinkedInHacker NewsEmail

Get the next one

An occasional note when something genuinely new ships here — essays, free tools, projects. No schedule, no filler, easy out.

Need something like this built?

I design and ship AI tools, full-stack apps, and data pipelines — end to end, to production. Tell me the problem in a sentence; I'll give you an honest read on fit within a day.

Work with me →