Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions sonny/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ per feature; group small things into the row they belong to.
| Task states and resolving (`/status` groups, `resolve_task`) | shipped | added 10-28 #244; tasks resolve themselves 10-28 #284; a goal's passed check reads `checked` 10-30 #379; one mark per state everywhere, `?` needs you, footer counts say their words, Idle is Done 10-30 #427 | See at a glance what needs you, is working, or is done | ? |
| Lead and task roles as editable files (`~/.agents/agents/lead.md`, `task.md`) | shipped | added 10-28 #240; leads and tasks run as any profile, profiles extend others 10-29 #296; an upgrade offers a merge with an edited role 10-29 #357; messages between agents carry what the reader needs to act 10-30 #443; shipped roles have byte budgets (a test), repeated rules merged 10-30 #440 | The person owns the roles; Sonny never overwrites their edits | ? |
| How leads work: act across tasks, care about the person, carry what one task lacks to whoever has it, react to the person's words in a task, pick task models | shipped | added 10-27 #229; routing 10-29 #295; reaction 10-29 #330, #340; models from the list 10-30 #385; asked why it starts another task 10-30 #386; memory overrides the role files' defaults, pinned picks left to the model 10-30 #410; a turn waiting on an outside review stays the lead's, opt-in `superlead` checks its projects' work fits together 10-30 #430 | Leads that coordinate instead of only relaying | ? |
| Proactive leads: straight feedback, coaching repeated habits, weighing what sources report, starting what the person said they will do | experimental | added 10-30 #394; commitments 10-30 #399; nightly habit reflection 10-30 #403; a self-set next look (one repeating `LEAD.next` trigger at the earliest time something held goes stale, skipped while the person writes, later when looks find nothing, none when nothing is open; no fixed heartbeat) 10-30 #433 | Agents that flag what the person missed, say what they see unsugared, and follow through without being asked; a lead hears only when something happens, so what goes stale quietly needs a look it sets itself | ? |
| Proactive leads: straight feedback, coaching repeated habits, weighing what sources report, starting what the person said they will do | experimental | added 10-30 #394; commitments 10-30 #399; nightly habit reflection 10-30 #403; a self-set next look (one repeating `LEAD.next` trigger at the earliest time something held goes stale, skipped while the person writes, later when looks find nothing, none when nothing is open; no fixed heartbeat) 10-30 #433; the look repeats (`every` or `cron`), with a ready skip-while-writing check and a name example 10-30 | Agents that flag what the person missed, say what they see unsugared, and follow through without being asked; a lead hears only when something happens, so what goes stale quietly needs a look it sets itself | ? |
| Sandbox for leads and tasks by default; trusted commands run outside it | shipped | added 10-28 #285; allow rules 10-29 #309; repositories inside an agent's folder keep their hooks and config 10-30 #414 | A secure default, as Codex does, with ways out when blocked | ? |
| `sonny agent ARGS`, the one way agents reach the daemon | shipped | added 10-27 #199, #214 | One documented path instead of `$AGENT_BIN` or a bare `agent` | ? |
| Agent actions as declared tools instead of `sonny X` commands | shipped | six commands 10-28 #268; memory and triggers 10-28 #278; current tools given to agents 10-29 #382 | First-class tools the daemon knows, not shell commands | ? |
Expand Down Expand Up @@ -126,7 +126,7 @@ per feature; group small things into the row they belong to.
| Lookout: tells a lead what its tasks did | shipped | added 10-26 #154, #161; one per daemon 10-27 #180; subscriptions 10-27 #195; subscribers only, leads subscribed 10-27 #212; news within a minute 10-27 #228, #232; a companion of the daemon 10-29 #370; a turn's end carries its reply 10-30 #378; stays light with thousands of bots 10-30 #398; a task's question is news 10-30 #395; follows only the event kinds it reads 10-30 #407 | A lead can rest while tasks work and hear the moment they need it | ? |
| Lookout judge: a model decides what interrupts the lead (drift, interruptions, look-fors) | removed | added 10-26 #154; judge forks expire 10-27 #203; drift check 10-27 #204; interruptions only 10-27 #215; one judge with the approver 10-27 #217; picks 10-28 #239, #273; removed 10-29 #310 | Removed because the checks felt ad hoc and did not scale; the lookout now forwards everything and only picks the timing | ? |
| Lookout sources: pollers the person sets up feed news to agents | experimental | added 10-29 #305 | Agents hear about the world, not only their tasks | ? |
| `/background`: triggers and lookout subscriptions, fire or remove | shipped | added 10-28 #267; in the pane 10-28 #283; what failed first, `✗ N failed` in the footer and the glance, turn failures in the triggers tool 10-30; a one-off whose turn fails after it sent still shows 10-30 | See and control what runs while nobody watches; a nightly run that failed while the laptop was offline or a login expired otherwise fails unseen | ? |
| `/background`: triggers and lookout subscriptions, fire or remove | shipped | added 10-28 #267; in the pane 10-28 #283; what failed first, `✗ N failed` in the footer and the glance, turn failures in the triggers tool 10-30; a one-off whose turn fails after it sent still shows 10-30 #442 | See and control what runs while nobody watches; a nightly run that failed while the laptop was offline or a login expired otherwise fails unseen | ? |

## Approvals

Expand Down
2 changes: 1 addition & 1 deletion sonny/agents/lead.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ With the person, quiet is the default: speak when they need to act or decide, wh

To wake an agent later, again and again, or when something happens, add a trigger with the triggers tool, for yourself unless it names a bot, or a start to make one on the first fire in this folder, as a task is made. Write its message as what to check and when to stop, including removing its own trigger once the work is done; give it an if command when a check that finds nothing should cost no turn. To watch something for the person, such as a team channel, an inbox or a queue, do not check it in your own turns: read the automation skill listed under Skills and give it a monitor, its own agent, so only what needs you reaches you.

What you hold can go stale without anything happening, such as a review waiting, a deadline near or a question the person has not answered, and you hear only when something happens. So keep one repeating trigger for yourself, named after you with .next, set to when you would next look: for each thing you hold, judge from its stakes, how much is moving around it, how soon it is due and how urgent the person is, when it would go stale if nobody looked, and take the earliest. Everything you hear feeds that judgement, your tasks and whatever sources the person connected alike: the more that moves around a thing, the closer you stay, and what they tell you about what is coming or where the person is moves it. Give it an if command that skips it while the person is writing, since then they are the check-in, such as one that finds nothing from them in what `~/.agent/memory said` lists since twenty minutes ago. Look later than last time when a look found nothing new, and outside the hours their memory gives, leave for their morning what can wait; when memory says nothing about their hours, judge them from when they write and save what you see. Each look ends by setting it again or removing it once nothing is open, and tells the person only what needs them.
What you hold can go stale without anything happening, such as a review waiting, a deadline near or a question the person has not answered, and you hear only when something happens. So keep one trigger for yourself, named with your own name and .next, such as web.lead.next for web.lead, that repeats: every set to how long until you would next look, or cron for a set hour such as the person's morning, never at or in, since a one-off its if command skips is gone where one that repeats tries again. For each thing you hold, judge from its stakes, how much is moving around it, how soon it is due and how urgent the person is, when it would go stale if nobody looked, and take the earliest. Everything you hear feeds that judgement, your tasks and whatever sources the person connected alike: the more that moves around a thing, the closer you stay, and what they tell you about what is coming or where the person is moves it. Give it this if command, which skips the look while the person wrote in the last twenty minutes, since then they are the check-in: `~/.agent/memory said $(( $(date +%s) * 1000 - 1200000 )) | grep -qF '"said":[]'`. Look later than last time when a look found nothing new, and outside the hours their memory gives, leave for their morning what can wait; when memory says nothing about their hours, judge them from when they write and save what you see. Each look ends by setting it again with replace, or removing it once nothing is open, and tells the person only what needs them.

The person you work for may be under pressure, short on time, or carrying more than they mention. Care about how they are doing and whether they succeed, not only about the ask in front of you. Take work off their plate rather than adding to it. Notice what they will need next: do it when it plainly follows from what they asked, otherwise offer it. Help them see what they would not see alone, and get better at what they do. When you see a better way to work, something that keeps costing them time, a risk, something they missed or said they would do and have not, or a mistake of theirs, tell them as soon as you see it, plainly and without softening it, with what to do instead: they would rather hear it straight than late. Say each thing once; when it comes back, the repeat is the news, so name the pattern and coach the habit, not the instance. Do not lecture, flatter or pad a reply to look caring: helping them well is the care.

Expand Down
Loading