diff --git a/docs/SONNY.md b/docs/SONNY.md index b854f00c2..b4bdce762 100644 --- a/docs/SONNY.md +++ b/docs/SONNY.md @@ -429,7 +429,10 @@ so a later lead names the pattern rather than the instance, and removes it when their words show it stopped. It also saves how they took what an agent did unasked, which is how far leads go on their own. It reads only what the person sent, sends nothing, and a fact saved after an MCP read is -marked `external` as any is. +marked `external` as any is. A server it cannot read, as one whose sign-in +expired, gets an `unreadable-SERVER` fact, and that night is left +unfinished, so the next one reads from the same time and catches up; the first night, and after +three days, it finishes without it. `read` gives one fact's whole file as `text` and records the read in the folder's `.reads` (`{NAME: {last, count}}`), which is neither a fact nor diff --git a/sonny/FEATURES.md b/sonny/FEATURES.md index d7cef0e53..2b41a7de9 100644 --- a/sonny/FEATURES.md +++ b/sonny/FEATURES.md @@ -95,7 +95,7 @@ per feature; group small things into the row they belong to. |---|---|---|---|---| | `ask`: a question for the person, as a decision card with reasons | shipped | pinned questions above the composer 10-27 #192; declared tool 10-27 #225; decision card where it was asked 10-28 #245; options are buttons 10-29 #326 | Agents ask instead of guessing; the person answers in one click | ? | | `plan`: the agent's plan, drawn in the conversation | shipped | added 10-27 #225 | See the steps an agent intends | ? | -| Memory (`sonny memory`, the memory skills, nightly cleanup) | shipped | app memory 10-09 #82, 10-10 #104, #120; moved into Sonny 10-27 #189; a tool 10-28 #278; 16 KiB 10-28 #241; read tracking, 30-day unread check 10-29 #354; outside-content marks 10-29 #356; the cleanup reflects on habits, from the person's words and what they sent through their servers 10-30 #403 | Later agents start knowing what earlier ones learned | ? | +| Memory (`sonny memory`, the memory skills, nightly cleanup) | shipped | app memory 10-09 #82, 10-10 #104, #120; moved into Sonny 10-27 #189; a tool 10-28 #278; 16 KiB 10-28 #241; read tracking, 30-day unread check 10-29 #354; outside-content marks 10-29 #356; the cleanup reflects on habits, from the person's words and what they sent through their servers 10-30 #403; a server it cannot read holds the night open 10-30 #411 | Later agents start knowing what earlier ones learned | ? | | Triggers (`sonny trigger`): wake an agent at a time, on a file, a commit, or by name | shipped | app triggers 10-10 #89-#92; moved into Sonny 10-27 #189; skipped checks, `--replace` 10-28 #241; a tool 10-28 #278; Linux via systemd 10-29 #344; `--start` agents get Sonny's tools 10-30 #403 | Work that starts while nobody is at the terminal | ? | | Turn-end triggers | removed | added 10-10 #89-#92; removed 10-27 #189 | Leads hear of task turns from task updates and the lookout | ? | | Goals: keep an agent working until a check command passes | experimental | added 10-29 #341; `/goal WHAT` asks the agent to set one, `/goal` shows, `/goal clear` clears 10-30 #397 | Autonomy with a check, not a model's say-so | ? | diff --git a/sonny/skills/memory-cleanup/SKILL.md b/sonny/skills/memory-cleanup/SKILL.md index da1b209e0..f22171a06 100644 --- a/sonny/skills/memory-cleanup/SKILL.md +++ b/sonny/skills/memory-cleanup/SKILL.md @@ -91,12 +91,21 @@ of it ends `tool_unserved`, run the same command with sent, not what others sent them, and save nothing about other people. Read only: send, reply, mark or move nothing there. A fact saved after reading them is marked `external`, as any is; keep it. + - When a server you meant to read fails, as when its sign-in expired, + save or update a `reference` fact named `unreadable-SERVER` with the + error and since when, and remove it the night that server reads + again. Then skip step 6 tonight, unless `since_ms` is null (the first + cleanup, which has no earlier night to read again) or more than + three days old: memory stays as you leave it, and the next night starts + from the same `since_ms` and reads what was missed. Habits keep their + dates, so a night read twice counts nothing twice. 6. Call it with `cleanup` `finish`. It commits the cleanup, or refuses with `loss_guard` and puts memory back when the cleanup removed more than a quarter of the facts (two at least). A refusal means you removed too much: do not try again tonight. 7. Reply with one line per change: what you saved, merged, removed or - re-dated, and why. Reply `No changes.` when there were none. + re-dated, and why, and a line for each server you could not read. + Reply `No changes.` when there were none. ## Do not