Otto is Kengyew's AI teammate — one identity with two jobs: shepherding code changes until they're live, and turning customer feature requests into paid, delivered work. This page explains every part of Otto, what each part does and remembers, and how the parts add up to an agent that works around the clock and learns from its own mistakes.
Everything Otto does is one loop. The last step is what makes it different from a script: mistakes change how the next cycle runs.
Capture every message and event on the watched work — including the ones nobody tags Otto in.
Read the whole conversation history, never just the latest message.
Safe things proceed; risky things are drafted and escalated to a human.
Reply, fix code, file tickets — then read back proof the action actually landed.
Independent AI skeptics attack every claim before an engineer acts on it.
Every caught mistake becomes a permanent rule that future checks test against.
Otto runs in two modes that share one memory and one name. Think of it as senses that never sleep, and hands that come online for the heavy work.
Watches every pull request, ticket and thread on the registered work. Answers reviewers, fixes what they flag, resolves conflicts, and drives each change until it's genuinely live — never claiming "done" before the platform proves it.
Listens to the #pay-for-fr channel. Filters real, funded requests; asks plain-language questions until the request is specific and testable; drafts the requirements document; and — only on explicit human approval — files the ticket.
Twelve parts. For each: what it does, how it processes, and what it stores. Everything is a plain file on disk — auditable, versioned, and readable by a human.
feed.ndjson · seen-ids in seen.json (saved before marked, so a crash can't lose one) · sensor health in health.jsonshadow/records.ndjson · held drafts for the session hands to reviewposted_ledger.jsonthread-log/*.md · superseded work carries its predecessor's history forwardwatch.json — with a live-verified status note per itemclarify_state.json · answered messages in responded.json · money stages per ticketdm_inbox.ndjson · last-known state in heartbeat_state.jsonescalations.d/ · the permanent record in escalations.logRUN_MODE: shadow / escalate_only / paused / live) · confinement attestations per AI versionlessons.ndjson · human-readable LESSONS.md · the caught-by scoreboardself-audit-DATE.md · trend numbers in metrics.ndjson, including the caught-by scoreboard over timeWhat's on deck and what decisions Kengyew owes — computed from live queues, every open ask repeated with its age until resolved.
The listener sweeps every watched surface plus the whole organisation for new related work. New items flow to the drafting actor; safe replies queue, hard calls escalate. The FR pipeline reads #pay-for-fr the same way and advances its clarify threads and money clocks. Kengyew's DM is read for new instructions.
Check-in: what moved this morning, what's aging.
Otto loads its state, drains everything the background body queued, executes the escalated work — code fixes, verifications, corrections — and logs it all back to the shared ledgers.
What actually moved today — with proof, not optimism.
A production break, an angry engineer, a dead sensor — critical escalations reach Kengyew's DM the moment they happen, not at the next heartbeat.
The self-audit re-checks a week of Otto's claims against reality and files its findings — including about itself.
Otto's defining discovery about itself: it cannot catch its own mistakes by re-reading its own work. So learning was made structural — mistakes are captured as data, and the data changes how every future action is checked.
By a verifier, an audit, or a human — anywhere, any size.
Recorded immediately with its failure class and the rule that would have prevented it.
The ledger generates the list of every way Otto has ever been wrong.
Every future claim is tested against every past failure class before it ships.
The self-audit measures whether records still match reality, and the scoreboard tracks who catches what.