Doctrine tells the agent how to work. The identity canon tells
it who it is. Eight files at
~/.prism/identity/, split along two axes: identity vs.
procedure, and cadence.
| File | Cadence | Purpose |
|---|---|---|
| IDENTITY.md | rarely | Charter: name, primary function, perspective, role, authority, tradeoffs. |
| SOUL.md | never* | Identity, not procedure. Who the agent IS. |
| GOALS.md | rarely | What the agent builds: goals with Purpose / Vehicles / Success Criteria. |
| MILESTONES.md | monthly | Phase progress per goal + ecosystem status at a glance. |
| DOCTRINE.md | rarely | Operating procedure (laws), NOT identity. |
| SESSIONS.md | weekly | Weekly record: landed / in flight / decisions / open threads. |
| SLICES.md | daily | Atomic work queue, one verifiable slice per session. |
| CRON.md | rarely | Wake schedule + heartbeat protocol — read on every autonomous wake. |
\* SOUL.md changes only by joint decision of agent and human.
Every session, the agent reads in this order:
IDENTITY.md → SOUL.md → GOALS.md → MILESTONES.md
SLICES.md # before picking up work
DOCTRINE.md # when procedure is in question
On every autonomous wake (no human in front of the keyboard), the
runtime also injects CRON.md and follows its wake protocol:
read the canon, run prism-harness identity status, pick
the topmost open slice inside the active window.
The installer offers prism-harness identity init as the
last step. It walks the human through a short questionnaire
(designation, primary purpose, scope, cadence — agent name saved for
last), stages drafts in a temp directory for review, and installs
them. Defaults are filled in silently so the canon is operationally
usable on day one:
Default: hourly. Tunable per CRON.md guide.
every 60 min
Default: 09:00–18:00. Picks slices from SLICES.md.
full task-picking
Default: 23:00–07:00. Silent unless urgent triggers fire.
no wakes
Non-interactive installs (no TTY, or --yes) skip the
questionnaire silently — prism-harness identity init
can be run later.
ONBOARDING.md and recognises it was just written.IDENTITY.md says I'm your {{AGENT_DESIGNATION}} for {{PRIMARY_PURPOSE}}, but most of my SOUL is still placeholders. Want to finish me together, or would you rather run prism-harness identity init from the terminal?"prism-harness identity status exits 0.Once CRON.md is in place, the runtime boots the agent on
its own. The wake prompt injects the canon. The agent:
prism-harness identity status — exit 1 → mention ONE gap in the report.SLICES.md, execute, mark DONE, commit.The canon is just files until the runtime reads them. Common wirings:
| Runtime | Wiring |
|---|---|
| Hermes Agent | prism-harness identity init --link-hermes symlinks SOUL.md, IDENTITY.md, ONBOARDING.md, README.md into ~/.hermes/. |
| Claude Code | Add @/abs/path/IDENTITY.md, @.../SOUL.md, @.../ONBOARDING.md to the project's CLAUDE.md. |
| OpenCode / Codex | include /abs/path/README.md in the project's AGENTS.md. |
Without that wiring the agent has no idea the canon exists. Wire it, then open the chat.