arizukoReality agent › setup

Reality agent — setup

Deploy Rhias on Telegram (optionally with WhatsApp ingest): instance, group template from ant/examples/reality/, seeded facts/threads/, monthly sweep task.

prerequisites

1. seed the instance

arizuko create nemo
cd /srv/data/arizuko_nemo
$EDITOR .env

2. fill in .env

ASSISTANT_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.

3. lay down the reality group from the template

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

4. seed facts/threads

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.

5. configure routes

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.

6. asymmetric channels (optional WhatsApp)

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.

7. monthly autonomous sweep

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.

8. verify

9. tune the persona

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.

Strict frontmatter. 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.

go deeper