arizuko › products › 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
- Host with Docker + built
arizukobinary andarizuko-antimage. - A Telegram bot token (@BotFather); optional WhatsApp Business account for the asymmetric-channel pattern.
- Anthropic API access. Optional
OPENAI_API_KEYin folder secrets for theoracleskill (longer synthesis across many threads).
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
sudo arizuko status nemoshows the stack up and the router reachable.- Send the bot a DM on Telegram — the agent replies in the persona declared in
PERSONA.md. - Ask "what threads do I have?" — the agent enumerates from
facts/threads/. - If you serve the web layer at
WEB_HOST, visithttps://<WEB_HOST>/dash/— therhiasgroup, its route, and any scheduled tasks show up there.
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.
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
- Reality agent — intro — what users experience
- how-to: asymmetric channels — the WhatsApp/Telegram split as a generic recipe
- routing — modes — fragment vocabulary on route targets
- env reference — including
OBSERVE_WINDOW_*tuning - Slack team agent — contrast: shared channel rather than single-user thread holder