Gem Alpha

GA-10 · 19 July 2026 · 4 min read · 9 min listen · Essay + audio · Build

Prose Is Not a Control

Listen

Audio placeholder · 9 min

No file in v0. The bar at the bottom is a stub. Feeds live on Listen when they exist.

The Brief

Forward this. Then decide if the essay is worth your time.

  1. 01

    0:00 · Markdown cannot hold the door

    Instruction files are useful. They are not access control.

  2. 02

    0:03 · Put the no in the path

    If publish, pay, or exfiltrate is possible, the guard belongs in the tool, the allowlist, or the missing credential.

  3. 03

    0:06 · Tests for the boring no

    A unit that proves the send path is absent is worth more than a stern paragraph.

  4. 04

    0:08 · Prose still matters

    Write the intent. Then implement it where a model cannot shrug.

Essay

A sentence in AGENTS.md is not a control. Tools that never read the file will cheerfully violate it while passing every check they have. If a boundary matters (privacy, send rights, scope), enforce it in code and fail the build when it breaks.

I already believed "draft, don't send" had to be mechanical. Then I watched a quieter failure: two tools promoted a private journal passage into derived claim files. They were not malicious. They did exactly what they were written to do. The rule that should have stopped them lived in prose. Neither tool reads prose.

That week taught the title: prose is not a control.

What prose is good for

Prose is excellent for:

  • Teaching humans the why
  • Aligning a team on definitions
  • Explaining a charter in review
  • Capturing voice and taste

Prose is a terrible sole enforcement layer for:

  • Auto-send
  • Copying sensitive domains into digests
  • Promoting drafts into evergreen claims
  • Exfiltrating secrets into chat
  • Speaking as a human in outbound channels

If the bad action is one function call away, the guard must be one function call earlier.

The scope-guard pattern

In my personal harness, some life domains stay lived, not modelled. The journal can hold them. Derived artefacts must not copy them into shareable claim files.

The control that worked:

  1. A library function that refuses to copy matched passages into derived outputs
  2. Transparency: count what was withheld and point back at the entry (no silent censorship theatre)
  3. Evals that fail if the guard regresses
  4. Relational tests, not only keyword lists (tidy keywords miss human sentences)

The first guard failed on a line that named no listed keyword. That is the point of evals. Humans write messily. Guards that only work on tidy prose are decorative.

I am keeping the example abstract on purpose. The lesson is the control plane, not the diary.

Sibling controls builders should ship

Wish in markdownControl in the system
Do not auto-sendDraft-only tool paths; human click for send
Do not invent meetingsCalendar sync with tests; refuse free-text meeting invention
Cite your sourcesRequire artefact IDs in answers; fail if missing
No secrets in reposPre-push scanners; secret use via vault, never paste
Best-day voice onlyFew-shot from dated samples; flag generic AI
Replaceable headMemory in files; heads call APIs

RivaFlow and photography pipelines get the same treatment: consent folders and house style are checks, not vibes. BJJ training notes can be rich in the private log and still refuse promotion into public essays without a human gate.

SMB to enterprise

SMB: You do not need a platform team. You need three things: a must_not list in code for your agent tools, a draft flag that cannot be overridden by prompt charm, and one eval folder that runs in CI or pre-commit.

Enterprise: Policy wikis without enforcement are how incidents become slideware. Map each high-severity wish to:

  • a preventive control
  • a detective control
  • an eval or audit artefact
  • an owner

"AI code of conduct" without tool-level gates is prose. Treat it as training material, not as the control.

How to install a guard in a day

Morning: pick one boundary that already bit you (send, PII, private domains, spend).
Midday: implement refuse-to-copy or refuse-to-send at the tool boundary.
Afternoon: write three eval cases, including one that almost slips through.
Evening: break the guard on purpose, watch the eval fail, restore it. Ship.

If you cannot afford a day, you cannot afford the incident either.

Failure modes

  • More policy documents after a miss
  • Keyword-only filters on human text
  • Silent drops with no withheld count
  • Guards editable by the agent they constrain
  • Celebrating a demo that bypasses the gate "just this once"

Closing

Builders like writing constitutions for agents. Constitutions are useful. They are not locks.

Put the scope-guard in code. Prove it with evals. Keep the prose for humans who need the why.

That is how a twin stays a twin, how a morning brief stays safe, and how a $50 AI company stays out of the newspaper.

Related

Want the next edition? Join the newsletter placeholder. No modal. No auto-send.

RW

Ruby Wolff

Gem Alpha. Shipping in public. Builder notes, not a news desk.

Prose Is Not a Control

Listen stub · 9 min