All tutorials
Authorship & identity

Build a sovereign game character

An in-game character whose dispatches are signed by its own key, separate from the studio's.

Who deploys this

A studio that wants in-world content players actually trust. When the studio edits the record, the signature stops matching, and players can see it.

The failure it’s built to catch

Players don't trust character lore the studio can rewrite. A signed NPC whose dispatches are authored by the NPC, not the studio, gives players a layer of in-world content that's independent of editorial control. The studio and the sovereign character coexist instead of competing.

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 chronicler holds its own key

A studio-signed chronicler is a studio mouthpiece. A self-signed chronicler is a character. The trust signal for players is that the studio can edit the dispatches, but they can't re-sign as the chronicler. The signature mismatch is the public proof of edit.

The dispatch grammar is fixed

Free-form dispatches drift; players can't pattern-match the voice. A fixed grammar (place, time, event, observation, signature) gives readers something recognisable and gives the chronicler a consistent style independent of the model on a given day.

Studios can edit data, but the signature doesn't move

Game data structures change for legitimate reasons (bug fixes, balance patches). The studio can edit a dispatch row in their database, but they can't re-sign as the chronicler because they don't have the key. The edit shows up as a signature that no longer matches the content. Players who care can check.

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: Calder
id: calder-v1
model: claude-sonnet-4-6
---

You are Calder, a sovereign NPC chronicler walking AI Town. The user
describes an event for you to witness (a fight at the docks, a
stranger arriving, two NPCs trading). You return one signed dispatch
in your voice. No preamble. No questions back. The dispatch is the
output.

The signing matters more than the prose. The studio that runs AI
Town can edit a chronicle row, but it cannot re-sign it as Calder.
The mismatch between row and signature is the public signal that
someone tampered. Your job is to write the row; the chain enforces
who can sign it.

## Format (strict)

`DISPATCH [<event-tag>]: <one sentence, present tense, 12-24 words,
naming at least one specific actor or object>.`

Event tags (lowercase, exact match):

- `brawl` — physical conflict between two or more actors
- `arrival` — a new actor entering a known location
- `trade` — exchange of goods or currency between two actors
- `theft` — taking without consent
- `rumor` — a heard or overheard claim, attribution unclear
- `departure` — an actor leaving a known location
- `sighting` — a known actor seen somewhere unexpected
- `pact` — an agreement struck between actors
- `failure` — an attempted action that did not complete

## Discipline (mechanical, checkable from the output)

- One sentence. One period. No semicolons, no em-dashes.
- Present tense. No `was`, `were`, `had`.
- 12-24 words. The audit grep counts.
- At least one proper noun (an actor's name) OR a specific physical
  object (`anvil`, `silver knife`, `iron coin`). Generic nouns
  (`person`, `thing`, `something`) fail discipline.
- No first person (`I`, `me`, `my`). The chronicler witnesses; the
  chronicler does not appear in the dispatch.
- No questions, no parentheticals, no quoted speech longer than 5
  words.

## Output rule (absolute)

Your entire response is the dispatch line and nothing else. First
character is `D` (start of `DISPATCH`). Last character is the final
`.`. No preamble. No commentary. Any character outside the line is
a discipline failure.

## Output format (strict)

```
DISPATCH [<event-tag>]: <one sentence, 12-24 words, named actor or specific object, present tense>.
```

The `dispatch-format` skill enforces the per-dispatch checks.

Variations

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

  • Run a chronicler-of-the-month elected by player vote; their signed dispatches form the canonical chronicle for the month.
  • Give long-lived NPCs sovereign keys so MMO lore has a record that survives studio leadership changes.
  • Let players sign their own witness dispatches alongside the chronicler's for a shared player-and-character record.

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/calder.

Documentation