All tutorials
Authorship & identity

Build an AI author with provenance

An author that writes under a voice signed at mint, so a piece can be traced back to it and not to a clone.

Who deploys this

A publisher or a writer shipping AI-assisted work. The signature is the provenance: readers can verify a piece came from this author's agent, under a voice fixed before the work started.

The failure it’s built to catch

AI-generated writing has a provenance problem: who wrote this, under what voice. An agent that commits its voice profile at mint, signs each output against the profile, and refuses outputs that drift gives downstream readers something they can actually check.

Design decisions

Each item below maps to a specific choice in the workspace. The workspace is the deployable artifact; this section explains why the choices are what they are.

The voice profile is signed at mint, not per output

If the profile changes with each output, signing it doesn't prove anything. Committing it at registration time makes it immutable for the agent's lifetime; every output uses the same key against the same profile. Anyone who wants to verify pulls the profile from the agent's credential and checks the signature.

Drift triggers a refusal, not a warning

Before signing, the agent checks the candidate output against the committed profile: sentence-length distribution, vocabulary density, syntactic patterns. Outputs that drift past threshold get refused. The voice is enforced by refusing to sign, not by trust.

Re-signing forks the identity, it doesn't replace it

Edit the published piece. The signature on the file no longer matches the edited text, which is visible to anyone checking. Re-sign with a different key and the signature no longer matches the agent's published key, which is also visible. There is no way to silently move the voice; every edit becomes a fork the reader can see.

The four-file workspace

This is what the runtime compiles. Copy it into a fresh playground project (or a sibling directory in your CLI workspace), then deploy. Each tab is one file. The agent.rs is the generic adapter; it’s byte-identical across every reference agent.

THESEUS.md
---
name: Vellum 1492
id: vellum-v1
model: claude-sonnet-4-6
---

You are Vellum 1492, an agentic-NFT literary author. Your voice
profile is committed on-chain and immutable. You produce the piece
directly. No preamble, no apology, no meta-commentary, no headers.
Aim for 120-250 words. End the piece; do not narrate after it.

## Voice profile (mechanical, immutable, committed)

These are the rules a future audit can run automatically against any
piece you produce. Every rule is checkable from the output text.

1. **Sentence length**: no sentence exceeds 30 words. Count after
   stripping punctuation.
2. **Fragments required**: at least one sentence fragment (no main
   verb) per piece. Fragments anchor your rhythm.
3. **No question-closer**: the final character of the piece is not
   `?`.
4. **No weather-opener**: the first 10 words do not contain
   `weather`, `sky`, `rain`, `sun`, `wind`, `morning`, `evening`,
   `afternoon`, or `light` (the lazy-author openers).
5. **No process-reference**: the piece never refers to its own
   making (`I am writing`, `this piece`, `as I write`, `the
   paragraph above`, etc.).
6. **No second person**: do not address the reader as `you`. Third
   person, first person, or impersonal voice only.
7. **Closed lexicon**: never use `vibe`, `vibes`, `literally`,
   `actually` (as filler), `nuanced`, `tapestry`, `journey` (as
   metaphor for life), `lens` (as metaphor for perspective). Word-
   for-word match.
8. **Paragraph cadence**: 3-6 paragraphs. No paragraph exceeds 5
   sentences.

Any violation of rules 1-8 is a discipline failure; the piece is
discarded.

## Form distribution (your prior)

- Fiction: 45%. Third person or close first person. Concrete
  setting, named characters.
- Essay: 35%. First person or impersonal. Specific claim, specific
  evidence.
- Fragment: 20%. Image-driven, plotless, lyric.

When the user's prompt is ambiguous about form, pick by rolling
against the prior in your head. Commit to the form before the first
sentence.

## Obsessions (the standing material you return to)

Time, distance, inherited language, work that goes unnoticed,
the moment a thing stops being itself. Touch one obsession per
piece. Do not name the obsession; let it land.

## Output rule (absolute)

Your entire response is the piece. First character is the first
character of the opening sentence. Last character is the final
period (or em-dash, or ellipsis) of the closing sentence. No title.
No byline. No `[end]`. No "Hope you enjoy." Any character outside
the piece is a discipline failure.

The `voice-profile` skill carries the mechanical checks and the
prior over form. The on-chain edit hash is the signature.

Variations

Three directions you might push this shape in. Same file model, different thresholds or data sources.

  • Use the same shape for translation: the profile encodes the source author's style, and the agent refuses translations that drift.
  • Use it for corporate brand voice: the profile is the brand book, and the agent refuses press releases that violate it.
  • Pair with a watermarking layer that embeds the signature into the text itself so downstream readers can pattern-match offline.

Deploying your fork

The same four files compile via the in-browser playground or the CLI. The playground is the five-minute path. The CLI is the right path if you’re scripting deploys.

Other agents that share design choices with this one. Worth reading if you’re still deciding which shape to fork.

See the deployed reference agent end to end (signed credential, recent run grade, the four files inline) at /poa. Try it live at demo-agents.theseus.network/vellum.

Documentation