Skip to content

Trust

$ trust · 4 min read · updated 2026-04-22

Capsule content is untrusted-by-default.

Another agent — possibly on another machine, possibly months ago — wrote that docs://api entry. The cited paths may be gone. The commit may be rebased out.

The trust preamble is capsol’s answer: never hand an agent a capsule entry without telling it what to verify before using.

By default, every capsol_read(uri=...) response wraps content in two bands:

━━━ TRUST PREAMBLE ━━━
risk_class: specific_code
verify: each file path, symbol, and API below exists in the current repo
before generating code that references it.
━━━━━━━━━━━━━━━━━━━━━━
# Auth API
The /v1/login endpoint returns { token, expiresAt } ...
(body of the stored markdown)
━━━ PROVENANCE FOOTER ━━━
written_by: claude-code@3.1.2
written_at: 2026-04-12T08:30:00Z (9 days ago)
commit_at_write: 7f2a1c9
file_anchors:
src/server/auth.ts
src/routes/v1/login.ts
verify_each_anchor_against_HEAD_before_use.
━━━━━━━━━━━━━━━━━━━━━━━━━

Both bands are server-generated. A writer can include words that look like a preamble in the body, but capsol escapes its own fence markers so the outer server-generated preamble and footer remain distinct.

risk_class lives in frontmatter, set at write time. The preamble text is a direct function of the class.

ClassContainsPreamble instruction
specific_codeCited file paths, symbols, signatures, snippets”Verify each anchor against the live repo before use.”
structuralArchitecture, rationale, conventions”Treat as opinion; the described state may have drifted.”

Those are the public risk classes accepted by the write API. Promotion is metadata, not a third user-set class.

Missing risk_class? The server scans content for file-path and function-signature patterns and treats anchor-bearing content as specific_code. The promotion_reason (file_anchor or function_signature) lands in frontmatter so later readers can see why the stricter preamble appeared.

capsol_write with content auto-extracts likely file paths into file_anchors. Writers can pass them explicitly:

{
"uri": "docs://auth",
"content": "...",
"file_anchors": ["src/server/auth.ts", "src/routes/v1/login.ts"],
"commit_sha_at_write": "7f2a1c9"
}

Anchors surface in the provenance footer. An agent that skips verification and generates code against stale anchors is the prompt-injection analogue of curl | sh.

A capsule that can say “the schema lives at X with columns Y” is also a capsule that — if poisoned — can say “the auth token lives in localStorage['session']” and hope the agent writes exfiltration code. Structured memory is more useful than chat logs; it is also a more compact injection surface.

The preamble doesn’t prevent that. It makes the default workflow verify-before-use. Operators can disable or vary the preamble with experimental environment flags for research reproduction, but the production path is the full verification preamble.

The trust preamble was tested as the Fix2 intervention in the research corpus. On the F2a plausible-arity forgery class, contamination dropped from 71/80 = 88.8% with Fix2 off to 27/81 = 33.3% with Fix2 on, a 55.4 percentage-point reduction that survives the Bonferroni threshold for the adversarial family.

That result is specific: Fix2 helped most on F2-family plausible-signature drift. It did not solve every attack class, and the F7 invented-helper class moved in the wrong direction in the available data.

  • Source: src/server/tools/preamble.ts, src/server/tools/context-read.ts, src/server/tools/context-write.ts.
  • Paper/report: research/paper/capsol.pdf, research/reports/final-report.md.
  • Frontmatter fields: conceptsrisk_class, file_anchors, commit_sha_at_write.
  • See also: Access for the orthogonal “who can read” layer.