Reference
Every tool the channel exposes, every state file, and the schedules that run without being asked.
Live.
Tools
| Tool | What it does |
|---|---|
reply | send a message: text or voice, with optional files, buttons, priority and topic |
react | put an emoji reaction on one of their messages |
edit_message | rewrite a message Otto already sent, with no new notification |
read_history | read the conversation back from the history log |
download_attachment | pull a photo, document or voice note into the local inbox |
brief | the rolling snapshot of the day |
recall | search the notes store and durable memories together |
remember | write a note or a durable memory |
forget | delete a durable memory |
consolidate_memory | force the nightly distillation pass out of band |
create_trigger | arm a cron or email trigger |
update_trigger | change an armed trigger |
delete_trigger | disarm one |
list_triggers | what is armed, and when each next fires |
snooze | hold non-urgent messages until a time |
proactivity_report | per source: sent, engaged, silent streak |
set_email_state | move the email scan checkpoint |
Send parameters worth knowing
priority is urgent or normal. Normal may be held; urgent never is.
topic is a stable slug naming what a message is about. Two proactive sends under
one topic within a few hours collapse to the first unless the content materially
changed. Omit it and the send is keyed by its trigger, which already catches the
restart burst.
voice overrides the channel's default for one send. Omit it and the channel
speaks whenever they last spoke.
Files
| File | Holds |
|---|---|
access.json | allowlist, quiet hours, voice policy, chunking |
triggers.json | armed triggers |
email-state.json | scan checkpoints |
notes.json | facts, loops, saved items, write log |
queue.json | held messages |
topics.json | what was said recently, per topic |
history.jsonl | both directions, with attribution |
runtime.json | session runtime state |
digests/, inbox/ | composed digests, downloaded attachments |
All of it is machine-local, mode 0600, written atomically. Durable memories are markdown under the Claude memory directories.
Schedules
| When | What |
|---|---|
| every hour | email scan, suppressed during quiet hours |
| 08:57 | morning brief |
| 04:00 | memory consolidation |
| short cycle | brief rebuild |
| on the hold lifting | queue flush, coalesced |
Conventions in the code
Decision logic is pure and tested; plumbing lives at the edges. Files are written to a temp path and renamed, so a crash mid-write cannot truncate state. A corrupt file is moved aside with a note on stderr, never deleted and never silently ignored. There are no external dependencies: Bun and the standard library only.
Tools added by the later waves
Beyond the core list above, the channel also exposes the substrate tools:
delegate and jobs for background work, record_money and spending,
record_trip and trips, note_contact and who, projects, body,
forge, self_edit_check, self_test, watchdog_report, capability_log
and revert_capability.
Scheduler ticks cover the rest: the calendar poll, the nightly repo scan, the repetition miner, the watchdog probes and the loop escalation sweep.