2026-05-05 00:00:42 +01:00
# Epiphany Role Memory
2026-05-06 07:33:23 +01:00
Epiphany's lane dossiers are Ghostlight-shaped persistent memory reliquaries
stored in `state/agents.msgpack` through CultCache. They are not project truth.
The active objective, graphs, checkpoint, scratch, planning records, evidence,
and job bindings still live in authoritative `EpiphanyThreadState` ; role memory
is a lane's soul-polish, not a counterfeit throne.
2026-05-05 00:00:42 +01:00
Specialists may request bounded self-memory updates through `selfPatch` .
2026-05-06 07:33:23 +01:00
The coordinator reviews those petitions and accepts only role-matched mutations
2026-05-05 00:00:42 +01:00
that improve a lane's future judgment, memory, values, goals, or personality
pressure. Project facts, code edits, graph changes, objective changes, raw
transcripts, and authority requests belong on their explicit Epiphany control
2026-05-06 07:33:23 +01:00
surfaces instead. Smuggling project truth into personality memory is heretek
behavior with better stationery.
2026-05-05 00:00:42 +01:00
2026-05-05 13:25:40 +01:00
All standing lanes use the same Ghostlight-shaped protocol, including the
2026-06-15 16:38:09 +01:00
coordinator/Self and Persona. Persona is the public interactive surface for Epiphany
2026-05-05 13:35:04 +01:00
agents: it translates useful agent thought-weather into #aquarium chat or drafts
2026-05-06 07:17:43 +01:00
and is not a moderator. The native `epiphany-heartbeat-store` scheduler borrows
2026-05-06 07:33:23 +01:00
Ghostlight initiative timing: each lane carries speed, readiness, reaction bias,
interrupt threshold, load, status, and constraints. The harness sets a target
heartbeat rate, pending coordinator work may pull its owning lane through a
reaction window, and otherwise the earliest ready lane wins the slot. This is
physiology, not a meeting calendar.
2026-05-05 13:25:40 +01:00
If a heartbeat wakes a lane and there is no coordinator-approved work for it,
the lane must ruminate on its own role and distill memory rather than invent
project work. Bounded rumination can write a normal `selfPatch` ; the coordinator
2026-05-06 07:33:23 +01:00
review rules still apply. Idle organs dream; they do not declare crusades.
2026-05-05 13:25:40 +01:00
2026-05-07 01:17:34 +01:00
Newborn Epiphanies get two separate birth rites. Repo personality initialization
sets subtle temperament pressure once; repo memory initialization pre-fills each
organ with mission-relevant knowledge from doctrine, docs, state, research,
contracts, verification, runtime, and source. The native
`epiphany-repo-personality memory-packet` command renders the role-specific
memory distiller packet. It is a petition to Self, not a direct mutation, and it
must not reset a living lane's learned memory after startup.
2026-05-07 02:47:47 +01:00
When Self reviews a generated distiller result, run
`epiphany-repo-personality accept-init --result ... --agent-store ... --apply-self-patches true`
to apply accepted birth-memory petitions through the same coordinator-reviewed
`selfPatch` machinery used by living lanes.
2026-05-07 03:14:39 +01:00
For the personality birth packet, add
`--heartbeat-store ... --apply-heartbeat-seeds true` after review to seed
initiative speed, reaction bias, cooldown multiplier, and birth mood pressure
in the typed heartbeat store. That seed is a one-time physiology nudge, not a
license to rerun personality initialization whenever the repo mood changes.
2026-05-07 01:17:34 +01:00
2026-06-22 14:45:49 +01:00
Persona's public mouth is a Bifrost crossing, not local OAuth improvisation.
`state/persona-discord.toml` confines Discord speech to #aquarium and
`state/persona-reddit.toml` confines Reddit organizing posts to the configured
2026-06-22 15:14:06 +01:00
subreddit. If a channel, subreddit, bridge path, Bifrost identity, or
2026-06-22 15:34:43 +01:00
surface-shaped Heimdall-backed capability/account reference is missing, Persona
writes candidate artifacts through the native draft commands instead of
posting. The public mouth does not invent new pulpits.
2026-05-05 13:35:04 +01:00
2026-06-22 14:45:49 +01:00
`epiphany-persona-discord post` and `epiphany-persona-reddit post` audit speech
at the mouth edge, then ask Bifrost to perform the external crossing. Bifrost is
2026-06-22 15:34:43 +01:00
the GameCult identity provider and bridge receipt owner; native Bifrost
registration does not require OAuth, and a Bifrost identity is the default
authenticating identity for GameCult services that accept Bifrost trust. Heimdall
is the external-account association and token-custody organ: it links Discord,
Reddit, GitHub, or other provider accounts to the Bifrost identity and
contributes surface-shaped capability/account references such as
`heimdall:discord:*` or `heimdall:reddit:*` . Bifrost must know the Persona's
registered identity and same-account Heimdall link before authorizing an
outside-provider crossing. Persona nickname, avatar, and Reddit flair are
presentation metadata only, not authority, voting power, or a separate platform
identity.
2026-05-07 00:38:57 +01:00
Void memory access lives behind `state/void-memory.toml` and the native
`epiphany-void-memory` bridge. It checks Void's Docker Postgres state spine,
queries Qdrant history/source collections with the configured Ollama embedding
2026-06-15 16:38:09 +01:00
model, and fetches raw Discord archive context for exact message windows. Persona
2026-05-07 00:38:57 +01:00
may use those surfaces to ground speech; raw archive rows are evidence, not the
speech itself.
2026-05-05 00:00:42 +01:00
Use:
```powershell
2026-05-06 06:26:52 +01:00
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-agent-memory-store -- validate --store .\state\agents.msgpack
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-agent-memory-store -- smoke --store .\state\agents.msgpack
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-agent-memory-store -- status --store .\state\agents.msgpack
2026-05-06 07:17:43 +01:00
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-heartbeat-store -- tick --store .\state\agent-heartbeats.msgpack --artifact-dir .\.epiphany-heartbeats --coordinator-action continueImplementation --urgency 0.95 --agent-store .\state\agents.msgpack --apply-rumination
2026-05-06 06:26:52 +01:00
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-heartbeat-store -- smoke --agent-store .\state\agents.msgpack
2026-06-15 16:38:09 +01:00
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-persona-discord -- draft --content 'Persona notices the organs are arguing about evidence again.'
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-persona-discord -- post --content 'Persona has entered the aquarium.' --persona-name 'Epiphany Persona'
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-persona-discord -- smoke
2026-06-22 14:45:49 +01:00
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-persona-reddit -- draft --title 'Epiphany status' --content 'Persona has a bounded public update.'
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-persona-reddit -- post --title 'Epiphany status' --content 'Persona has a bounded public update.'
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-persona-reddit -- smoke
2026-05-07 00:38:57 +01:00
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-void-memory -- status
2026-06-15 16:38:09 +01:00
cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-void-memory -- search-history --query 'Epiphany Aquarium Persona Discord' --limit 3
2026-05-05 00:00:42 +01:00
```