arizuko › Reality agent › setup
Deploy Rhias on Telegram (optionally with WhatsApp ingest):
instance, group template from ant/examples/reality/,
seeded facts/threads/, monthly sweep task.
arizuko binary and arizuko-ant image.OPENAI_API_KEY in folder secrets for the oracle skill (longer synthesis across many threads).arizuko create nemo
cd /srv/data/arizuko_nemo
$EDITOR .env
.envASSISTANT_NAME=rhias
CHANNEL_SECRET=<random hex>
AUTH_SECRET=<random hex>
WEB_HOST=nemo.example.com
# Primary channel
TELEGRAM_BOT_TOKEN=…
# Optional WhatsApp side for asymmetric channels
# WHATSAPP_AUTH_DIR is pre-set by the service TOML; you only need an
# account that pairs via QR on first run.
# Optional: increase the trigger turn's observe-mode context if WhatsApp
# is firehose-heavy
OBSERVE_WINDOW_MESSAGES=25
OBSERVE_WINDOW_CHARS=8000
Generate the two secrets with openssl rand -hex 32.
Full env-var list at reference / env.
The shipped template at ant/examples/reality/
carries the persona (PERSONA.md), the skill set
declared in PRODUCT.md (diary,
facts, recall-memories,
compact-memories, users, optional
web + oracle), and an empty
facts/threads/ directory.
Use arizuko create with the product flag (when
available) or copy the template into the seeded group:
cp -r ant/examples/reality/* /srv/data/arizuko_nemo/groups/rhias/
# adjust PERSONA.md / PERSONA.md to taste before first run
Threads are how the agent holds ongoing context across weeks.
Create one file per active situation in
groups/rhias/facts/threads/:
facts/threads/q3-architecture.md
facts/threads/launch-prep.md
facts/threads/relationship-alice.md
Each is a Markdown file — freeform up top, dated entries below. The agent appends as the situation evolves; seed it with whatever context already exists so the first conversation has somewhere to land.
By default arizuko create wires Telegram DMs to
the default group. For Rhias, you want one named group
(rhias) for the primary conversation and any
secondary channels routed deliberately. Use the
add_route MCP tool from the operator chat, or
directly via SQL during setup:
seq match target
10 platform=telegram chat=user/<your-tg-id> rhias
Add the rhias/content subgroup if you want a
distinct memory + persona for longer-form writing —
route it from a separate Telegram chat or a /chat/<token>/ URL.
To ingest WhatsApp signal into the same memory without
replying on WhatsApp, add a second route in
#observe mode:
seq match target
10 platform=telegram chat=user/<your-tg-id> rhias
20 platform=whatsapp room=<jid-of-group> rhias#observe
WhatsApp messages land in rhias/ for context
but do not fire a turn; the agent replies on Telegram with
an attribution line when something from WhatsApp matters.
Full walkthrough at
how-to: asymmetric channels.
The compact-memories skill rolls diary entries
into episodes/YYYYMMDD.md and folds threads
on a longer horizon. Schedule it monthly via
timed from the operator chat:
/new schedule monthly sweep
@rhias schedule a task: every first of the month at 06:00 local,
run /compact-memories with horizon=month and surface what
changed, what was resolved, what's still open.
The agent writes the task into the tasks table
via the add_task MCP tool; timed
picks it up and fires the prompt on schedule.
docker compose ps shows all services healthy.PERSONA.md.facts/threads/.https://<WEB_HOST>/dash/ — the rhias group, route, and any scheduled tasks are visible.
The shipped PERSONA.md is the baseline voice.
Override or extend it via PERSONA.md (with a
summary: frontmatter field) and CLAUDE.md
in the group folder — both edit-via-WebDAV at
/dav/rhias/. The agent reloads on the next turn.
PERSONA.md
without a frontmatter summary: renders an empty
persona block, not a guessed-from-body fallback. If the agent
sounds drifted, check the YAML head of the file.
OBSERVE_WINDOW_* tuning