The mind

What Edward does when nobody is talking to him, and how you can tell.

Proactivity is noticing, not a schedule

An earlier Edward ran on a timetable: a morning briefing, meeting prep, nudges about open loops, a weekly pattern report. On the install this release comes from, almost none of it was read. What was valued were the catches: a deadline closing, two messages that disagreed, someone waiting only on its owner. So Edward now wakes for a reason, does what that reason needs, and otherwise stays quiet.

What wakes him

WakeWhenWhat it may do
Follow-throughA follow-up he scheduled, usually because he promised to check backThe checking, then tell you. A promise made in an iMessage chat is kept in that chat.
The nightly03:00, skipped when nothing happenedClose finished intentions, note what he learned, update his state page; on Sundays, review the week and run memory upkeep. Silent: at most one note, never a push or a message.
Free time13:00, once a dayWhatever he chooses for his screen and his own projects, about $0.50 at most. It reaches nobody.
Speaking upThe noticer found something worth a word (opt-in, below)Check it, then say it once.
The surfaces pulseEvery 15 minutes, only if something changedDecide what the widget and the screens show. See Widget, screen & hub.

A wake is an ordinary turn with the same 14 tools as a conversation; what it may do is set by its policy. A wake that reaches nobody can’t send or push however it tries, and a refused call comes back as an honest error the model can read. The mind route runs Sonnet 5.5, inside the daily spend cap and a $1 cap per turn.

@Edward pings are not wakes: they have their own runner, which answers each one within the limits in Listening & pings.

The thought journal

Edward needs no approval to act, but it must be obvious when he chooses to. A wake that does something outward (a message, a push, a note) or commits to something (scheduling, standing down) writes a journal entry:

  • Why I looked
  • What I noticed
  • What I did, one line per action, “sent” only when it was
  • Why

Each entry asks you: Right call? Yes / No. The next wake reads your verdicts. Entries lead Edward’s side of the chat sidebar, marked when he reached someone, and you can reply inside one to ask why: he answers from what he actually saw and did.

Noticing (opt-in)

With Listening on, Edward stores what arrives in your messages and mail. Whether he reads it for what matters is EDWARD_PROACTIVITY:

ValueWhat happens
off (default)Messages are stored, pings answered, promises kept, the nightly runs. Nothing is noticed.
shadowThe noticer and the gate run and record each decision, but he never speaks. Try this first.
noticeThe whole path.

The path:

  1. The noticer (a small model) reads each new batch of messages, with your own lines from every chat, and writes down private noticings: a deadline, a conflict between two facts, someone waiting only on you, a travel time closing, a password you pasted somewhere. Each must cite the messages it came from.
  2. The gate, plain code, decides: silent, hold, a note on Today, a push, or a reply in the thread. You are already on it? Silent. Just arrived? Wait 15 minutes. Said it before with nothing new? Silent. Only travel or household items closing within three hours may push, and quiet hours hold the rest until morning.
  3. The speaker, a wake, checks the noticing against the messages and says it once, through tell_owner.

Your own instructions bind the gate (“don’t push me about the soccer chat”). What he learns from being ignored only shapes his advice to himself; it never silences a category.

How he reaches you

Everything Edward says to you on his own goes through one door, tell_owner: quiet hours (22:00–07:00 by default) held in code, except care alerts and travel closing within three hours; at most one follow-up per subject; an offer phrased as an offer (“Want me to reply? Not sent.”); no secret on a lock screen. The channel is EDWARD_OWNER_CHANNEL: a push (the default), your iMessage self-chat, or Edward’s own Twilio number (with those two, an urgent word is a text). A wake never messages you any other way: send_message refuses to.

The late-dose alert is code, not a model: a timed pet medication on the hub left unlogged 45 minutes after its slot pushes once. It works with every other switch off and outside the spend cap.

Rules a wake keeps

  • A mention must be answered, unless one of your standing instructions says stay out.
  • He doesn’t start or join other people’s conversations unasked: messages go out from your number, so he tells you instead.
  • A wake can’t change or delete what you said, and is never given the tool that forgets.
  • A failed wake is retried only when the failure was transient, and never after it reached someone or committed to something.

Watching him think

  • GET /api/mind/now is his live state (what is running, his last and next wake); the app’s Edward reflects it.
  • Mind → Thoughts lists each wake, what it did, and your verdicts.
  • POST /api/mind/wake wakes him by hand (it answers 202 and runs in the background).

Before you leave him unattended

The repository has evaluation gates that run the real model over recorded situations on a test database, with every outward act a dry run: the judgement check (a mention, a standing instruction, a follow-through, the silent nightly; about $1–4), a ping check, and a noticer check to run before EDWARD_PROACTIVITY goes past off. See testing.md.


The long form: mind.md, noticing.md and push-and-notes.md.