Sean Egan

Systems / AGENT · LIVE SINCE JULY 2026

Bob, a personal agent for four deployed people

An agent with a curated memory, a phone line, and a low-bandwidth mode, built so four service members could stay a family across deployments.

14K+
atoms in his memory, typed facts that are never deleted2026-09-30
10
memories at most, pulled into each turn by a dense scan with no tool calls2026-09-30
0 / 352
leaks in the grounding evaluation, no model on the verdict path2026-08-30
2
Bobs: this one, and a fine-tuned Qwen running 24/7 in a government cloud behind a CAC2026
116
thinking routines in seven families, counted in his census2026-09-22
21
nightly jobs that curate his memory and mood2026-09
262.8M
tokens through the gateway in the last 30 days, measured2026-09-30
2K
calls a day to the Sparks for his thinking, averaged from the ledgers his calls write2026-09-24 → 09-29
278
watchdogs in the census2026-09-20

Four of us are in the military, spread across time zones and bad connections, and Bob is the agent we built to stay a family anyway. He has a memory rebuilt nightly from the record of our conversations, a phone line in my cloned voice, a page that works from a ship, and rules about when he's allowed to reach out. His memory passed 352 grounding checks with zero leaks, and the one gate that mostly fails, a check that stands over the messages he sends, is published as failing.

chat calls Memory store curated nightly Frontier models talking 235B · two DGX Sparks thinking and judgment Four people the users Voice phone · cloned voice LITE low bandwidth Bob gateway chat calls Memory store curated nightly Frontier models talking 235B on two DGX Sparks thinking and judgment Four people the users Voice · phone cloned voice LITE low bandwidth Bob gateway
The problem

Four of us are in the military and close enough to call each other brothers. We're also spread across time zones, and often somewhere with a bad connection and no way to call. If Derek is in the Red Sea and needs to tell Taylor something, Taylor is asleep. Group chats don't remember anything. Nobody's assistant knows who we are to each other.

The brief I wrote at the start says the emotional piece is not a feature, it is the primary function: Bob remembers how each of us is doing, notices when that changes, and asks. Everything else is secondary.

What I built

Bob started as OpenClaw, an existing agent gateway. It wasn't good enough for what we needed, so we took it apart, kept what worked, and built the rest on top. The biggest change was his memory. Chopped-up text chunks lose who said what and how sure they were, so Bob's memory is a database of atoms, small typed facts tied to a person and a source, and every choice about how he reads it, from the embedding model to the reranker, was settled by a bake-off.

Surfaces. A web client, a phone line, SMS, and two low-bandwidth pages. The smallest one has no framework, no fonts, no images, no polling; it sends state transitions and an eight-byte heartbeat, nothing else, so it works on a ship. The phone line answers in my cloned voice, so when Dave calls while I'm gone he hears me.

Memory. Every eligible turn is captured, redacted, and stored before any model judges whether it matters. An atomizer turns turns into typed, person-linked facts. On every turn a dense scan pulls up to ten of the most relevant memories in from a worker thread, no tool calls. Overnight, twenty-one jobs re-curate: a distiller condenses long conversations, a projector regenerates each person's durable claims from the record instead of appending to them, and a "now" block per person (where, health, carrying, ahead) is rebuilt from scratch every night with zero model calls, each line stamped with its source. An empty slot is shown as a dated gap, so silence can't be mistaken for calm.

Models, by tier. Frontier models for conversation (GPT-6 on the web, Grok on the phone and SMS). Qwen3-235B on the two DGX Sparks carries his thinking loop, his inner thoughts and his judgment lanes, the routines that weigh what he's told, for the price of electricity. Until 21 September a 35B model on the two GPUs in my house ran his inner thoughts, and it is retired now. Bob started life on Claude Opus; I moved him off on 2026-07-22 because he was eating the plan quota Claude Code shares. That's in the record too.

Care, with rules. A nightly pass writes at most one care item per person, from things that person said, expiring in 72 hours, delivered once in a conversation they start. A separate initiative lane can message first, on dials that can only ever widen the spacing. A curiosity lane keeps a ledger of what Bob doesn't know and why it matters, and asks at most one question per conversation, two per person per day, never to someone in visible distress. Questions without a purpose are discarded.

Personality. This Bob, the one on the open internet, gets his voice from a persona stack and per-person "voice register" cards, tuned by editing prose.

The other Bob. A second Bob runs around the clock in a government-approved cloud space, behind a CAC, as a proof of concept funded by Naval Information Forces: can an agent like this deliver forecast products where no commercial API can be reached? With nothing to call, we had to make a model that could live there. We took Qwen and fine-tuned it on DoD supercomputing (HPCMP), with a LoRA, on two things: how we talk, and meteorology itself. A model that can't look anything up needs the background built in, so he went through many rounds of answering forecasting questions and being corrected until he could handle real ones. Then we moved the checkpoint in. He was developed with Ask Sage, which is what everyone there uses day to day; whether the Navy hosts a Bob of its own is the question the proof of concept exists to answer. That is as much as I'll say about him.

Access. Passkeys, roles per credential, a roster that is the single source of truth for who counts as crew, and a spoken challenge on the phone before any memory is touched. Caller ID is a hint, never proof.

How it’s checked

The disease I was most afraid of was derivation without provenance: a memory that says "Sean finished X" when he said he'd started it. So the doctrine has three invariants, enforced at code seams, not by asking a model nicely: provenance or it isn't evidence; re-ground before acting; the modality of a claim (asked, suspected, hypothetical, reported) survives every hop.

A nightly job checks entailment with a deterministic lexicon and a capped number of model calls, at most 40 a night. The class evaluation authored 32 sealed scenarios: twelve ways a qualifier can flip (staged→done, asked→answered, suspected→confirmed, past→present, and so on) times two, plus eight inverse controls, run through the real jobs with no model reachable from the verdict path. Result: 0 leaks in 352 verdicts, 88 controls clean, zero delta on re-run. The completion gate held only 5 of 24 authored flips.*

That gate stands over the messages Bob sends. The memory he answers from has its own guards on the write side: a stored claim must appear word for word in the turn, a care item that says something is done needs support in the record, and every digest line must carry the id of its source.

And this is what I’m working on right now.

How Bob thinks

Bob keeps thinking when nobody is talking to him. Every ten minutes a job called the think tick takes up his unfinished thoughts about the four of us and argues each one out on the Sparks, two computers in my house, and code decides which conclusions he keeps. A census on 22 September 2026 counted 116 of these thinking routines, or lanes, in seven families, each with its own schedule, model and output.

IN A CONVERSATION BETWEEN CONVERSATIONS LANES THAT SHARE HIS MEMORY Four people chat, phone, text Bob replies frontier model Side thinker questions after a reply Sparks at home frontier model code, no model His memory facts and open threads Gate in code keeps what quotes one of us Think tick every ten minutes Probes and judges yes-or-no reads three judges must agree Mood Inner thoughts Pacing Pattern Prediction ledger Rehearsal Sleep on it Specialist critique Relationship graph Curiosity Ledgers every model call and every skip, with real token counts Sparks at home frontier model code, no model IN A CONVERSATION Four people chat, phone, text Bob replies frontier model Side thinker after each reply BETWEEN CONVERSATIONS His memory facts and open threads Think tick every ten minutes Gate in code keeps a conclusion only if it quotes one of us Probes and judges yes-or-no reads three judges must agree LANES THAT SHARE HIS MEMORY Mood Inner thoughts Pacing Pattern Prediction ledger Rehearsal Sleep on it Specialist critique Relationship graph Curiosity Ledgers every model call and skip, with token counts
His thinking loop and where each part runs, as of 30 September 2026.
While someone is talking20 routines

These run inside a conversation: the turn radar that pulls memories into each turn, the context curator that prepares his notes on the person, the curiosity lanes, mood, the gut check and the side thinker, which asks quick questions about each reply. More than half of them use no model at all, and the ones that do are capped per turn or per day.

Between conversations11 routines

Timers inside the gateway keep him going while nobody is talking: inner thoughts on a five-minute clock, the situations he is following, memory strength that fades unless a memory is used, and the pacing director. The pacing director is plain arithmetic, and it can only widen the spacing of the messages he starts.

Reflection on the server21 routines

Scheduled jobs on the server include the think tick, a sentinel that quarantines a thought it finds false or misfiled, a consolidator that retires dead threads, and the research director, which reviews my research programs each night. The Sparks carry nine of them, and the rest use plain code or a frontier model.

The night at home32 routines

From about 11 at night to 8 in the morning, Eastern time, jobs on a server in my house take turns rebuilding his memory: transcripts, digests, rollups, his dream, his predictions, the relationship graph and the grounding check. From 1 October 2026 the lanes that run the grounding check, distill transcripts and write the digests and rollups ask the Sparks first, with a frontier model as the fallback. The ones that write for the four of us, his dream and the journal he keeps on each one, stay on a frontier model by design.

What reaches one of us8 routines

Only these routines send anything to a person: his own first messages, the morning brief, the weekly preview, the courier between us, reminders, the errand sweep, new tactics for a stuck task, and Bob’s Corner, a page for the four of us. Everything else feeds another routine, a store or a page in the operator console.

Probes that watch his thinking17 routines

Scheduled probes test the thinking itself: recall and multi-step recall against known answers, a privacy-leak test, a check for drift in how he talks, and a watchdog over every lane. Their results go to the operator console, which flags a lane that has gone quiet.

The desk7 routines

These look after email, tasks and the calendar: a steward sweeps the inbox four times a day, a monitor looks for important mail every half hour, and smaller lanes keep appointments, travel and finished tasks in step. One of the seven was still being planned on the day of the census.

How his thinking grew

His thinking grew in waves. The biggest added fifteen lanes over three nights, 30 August to 1 September 2026. Among them were mood, inner thoughts, the pacing director, the pattern lane, the prediction ledger, rehearsal, sleep on it, specialist critique, judge ensembles and the relationship graph. The rule for that wave was that none of the fifteen acts on its own: each one adds to what Bob sees, and code makes any decision. The pattern lane may not count a stretch of time its own guesses influenced as confirmation, and through 27 September it had found no patterns.

What the Sparks do for him

The Sparks are two NVIDIA DGX Spark computers in my house running Qwen3-235B, an open model, at no cost per call. From 24 to 29 September 2026 they answered between 1,627 and 2,733 of Bob’s calls a day. The calls came from the think tick, the side thinker, the yes-or-no probes, the research director and the distillers that turn conversations into memory.

Calls a day, by lane

Counted from each lane’s ledger, 24 to 29 September 2026.

LaneCalls a day
Think tick458–562
Yes-or-no probes that grade his thoughts334–362
Turning each turn of a conversation into memory107–408
Side thinker85–605
Research director80–360
Night jobs that ask the Sparks first227–354
Judgment lanes moved on 24 September83–297
Thought sentinel60
Distilling my coding sessions0–39
Consolidator3–14
Other small lanes0–9
All of his calls to the Sparks1,627–2,733

On 24 September 2026 four judgment lanes moved to the Sparks first: the context curator, the judge that weighs one person’s account of another, the check that a quoted line appears in the record, and the nightly curiosity job. Each keeps its old cloud models as the fallback.

From 1 October 2026 the nightly memory lanes, which run the grounding check, distill transcripts and write the digests and rollups, ask the Sparks first, with a frontier model as the fallback. They reach the Sparks through a carrier that never lets a request be aborted.

Long writing for the four of us, such as his dreams and the journal he keeps on each one, stays on a frontier model by design, because it needs the deeper reasoning.

Deterministic first, model second

Around each model call sits ordinary code that decides what to ask, limits how often, checks the answer and records the call. On 30 September 2026 the grounding check, which compares what his night jobs wrote with the sources they cite, read 368 lines, settled all but four with a fixed word list, and asked a model about the four.

How the code wraps each model call

The grounding check runs each morning after the night jobs. A fixed word list compares each line those jobs wrote with the source it cites, handles negation so that “not published” never counts as “published,” and files what it finds without a model. A line the list cannot settle gets one yes-or-no question to a model, at most 40 a night. The model can add a finding and can never clear one, and an unsure answer counts as silence.

When a model writes one of the console’s reports, such as the day’s health digest, code has counted the numbers first. A number in the model’s text that is not among them, within 2 percent, sends the text back once, and a second miss throws the text away.

The memory doctrine is enforced in code where data moves. A claim pulled out of a conversation is stored only if its words appear in the turn, on the side of the person it names. A digest line must carry the id of its source.

Every model call writes a row to a ledger, a log that is only ever added to, with the real token counts from the response and the cost when there is one. A skipped call writes a row too, so a quiet lane and a stopped lane look different in the console.

No caller ever cuts off a request to the Sparks while it is running. A cancelled request took their model server down on 19 September 2026. Since then every caller waits against a generous deadline and walks away when it passes, and the request finishes on the Sparks with its tokens still counted. Callers keep answers short with small output limits instead of tight timeouts, and they never retry in a loop.

Built on OpenClaw, custom to the core

OpenClaw, the agent gateway Bob started on, still runs underneath him and handles sessions, tool calls, connections to model providers and channels such as Discord. Everything that makes him think is ours: the thinking loop, the lanes, the memory doctrine, the judges and the ledgers. Most of it lives in a plugin that had about 440 source files, 318,000 lines and more than 470 test files on 30 September 2026.

What happened

He's used every day. On a spot count one of us had 278 conversations with him. He passes word between us when we can't. He has noticed when one of us was carrying something and asked. Taylor once told him he sounded like a suicide-prevention training video; the fix was prose, and the incident report says so.

The control plane

The console. Bob has an operator console of 18 pages: live machine meters for five machines sampled twice a second, network and storage, backups, traffic, every model and lane with its calls and tokens, a census of 278 watchdogs with an open-complaint queue, people and credentials, and an access ledger of every sign-in. On the day the model page shipped it showed 6,887 calls and 63 million tokens in 24 hours, 32% of them on my own hardware.

Dials with rules. Bob's behavior is tuned from a page of 33 settings in five groups. Every change needs a named person and a reason, and gets a receipt and an undo. Out-of-range values are refused, never clamped. Making him more careful is always allowed; less careful only within preset bounds. "Tune with Bob" asks six plain questions and proposes changes as a diff, re-validated against the live configuration at the moment you click.

Signing in. Passkeys are the front door. Password plus a hardware token is kept on purpose for places a phone can't go, and it is the only way into the low-bandwidth page. Three roles: one administers, one sees everything and changes nothing, one is refused on every read. On the phone, caller ID is treated as a hint; system-level requests need a one-time code and a countersign, and the countersign is stored as a digest Bob cannot forge.

The web client. I built the client myself. Attached documents go into a short-lived corpus bound to the owner and session, and are kept out of the prompt; a two-megabyte file was processed with no raw text reaching the model. Images can be edited by painting a mask, on a phone. Documents open as windows, keep version history, and Bob works in them as a co-writer whose edits arrive as tracked suggestions to accept or reject.

Media, on demand. For image, video, and audio, Bob can start a GPU workstation in the cloud. It is pre-warmed: the twelve model files, 57.5 GB, are staged on block storage in the same region rather than pulled from object storage at launch, so a start downloads nothing. Bob has five actions (advise, start, status, run, end) and a controller he cannot override owns the lifecycle and the spend, under a $50 monthly budget. The first paid render cost 87 cents.

Judgment, in code. A lane that infers patterns about us must exclude any period its own inference influenced, and on the real record it minted zero patterns. The skill reviewer proposes and has no way to apply: there is no button and no route, and a test fails the build if one appears. Three judges with different framings must agree before anything acts; a split acts on nothing.