arizuko

arizukoproducts › Reality 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
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

arizuko create already generated AUTH_SECRET and SECRETS_KEY in .env. Full env-var list at reference / env.

3. create the rhias group from the template

The shipped template at ant/examples/reality/ carries the persona, the skill set declared in PRODUCT.md (diary, facts, recall-memories, compact-memories, users, optional web + oracle), and an empty facts/threads/ directory. One command creates the group, seeds it from the template, and routes your Telegram DM to it:

arizuko group nemo add 'telegram:user/<your-tg-id>' rhias --product reality
# adjust groups/rhias/PERSONA.md and CLAUDE.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. check the route

Step 3’s group add already wrote the primary route. Confirm with arizuko route nemo list; the row looks like:

seq  match                    target
0    room=user/<your-tg-id>   rhias

Secondary channels get routed deliberately — with arizuko route nemo add, the add_route MCP tool from arizuko chat nemo, or a manifest plus arizuko apply. Add a 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:

arizuko route nemo add 'platform=whatsapp room=<group-id>@g.us' 'rhias#observe' --seq 20

The table then reads:

seq  match                                     target
0    room=user/<your-tg-id>                    rhias
20   platform=whatsapp room=<group-id>@g.us    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 schedule_task MCP tool; timed picks it up and fires the prompt on schedule.

8. verify

9. tune the persona

The shipped PERSONA.md sets the baseline voice. Edit groups/rhias/PERSONA.md to change it, and add per-deployment rules in groups/rhias/CLAUDE.md — the CLAUDE.md layers on top without rewriting the persona. Keep a summary: field in the PERSONA.md frontmatter (see the callout below). The agent reloads on the next turn. To edit these files over the network instead of on the host, mount the workspace with WebDAV.

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