Skip to content

Sonny: task updates in a row gather into one row; /status opens the agent clicked; margin_opens - #384

Merged
lydakis merged 6 commits into
mainfrom
claude/project-thread-z1a7qa
Oct 30, 2026
Merged

lydakis merged 6 commits into
mainfrom
claude/project-thread-z1a7qa

Conversation

@lydakis

@lydakis lydakis commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

Requested by George · project thread

What changes

A lead that hears from many tasks built up a stack of ↳ Task updates rows, each with the lead's own coordination calls (a steer, a memory save) drawn under it. The agent's words are what matter, so the rest now collapses. This follows how Codex groups adjacent activity into one cell (Explored, its activity groups keep details between calls without breaking the group) and how Claude Code collapses consecutive reads. Claude Code's collapse drew complaints once it stopped naming the files, so the row here still says whose news it holds.

  • Messages between agents in a row gather into one row. Task updates, messages from other agents and source news that come one after another, with nothing the agent said between them, become ↳ 3 task updates · calc.add, calc.neg, calc.div ▸. A click lists them, one row each. A click on one opens it. A single message still draws as itself.
  • What the agent did about a message, while saying nothing, goes under that message. For example, a steer or a memory save the lead made in its quiet turn on a task update shows when that update is opened, instead of as a row of its own. Starting or forking an agent still stands out. /verbose draws every call as before.
  • Quiet rows one after another sit together. Folded calls, margin note markers and these rows no longer have a blank row between each pair, the way GitHub's timeline draws minor events compactly.
  • Task update glances read in a few words: calc.neg noted, calc.neg took a note away, calc.neg needs you, calc.neg quiet. Before, a margin note line spilled its whole sentence.
  • A click on an agent's name in /status opens it in the pane. Names are in the agents' blue. ‹ (or Ctrl+[ from the conversation) goes back to /status, which is still read while you are away from it. The footer counter already opened /status (Sonny: a lead shows its tasks' margin notes, and the footer counts agents at work #367). It works in this run too.
  • The margin never closes by itself, and [sonny] margin_opens says when a note opens it. Before, it closed once it held nothing. That included a margin the person had just opened to look at, which was annoying. Now, emptied or opened empty, it stays until Esc or /margin. By default (always), a note the agent puts up or changes opens it again even after Esc closed it, under whatever is open over it. This is how VS Code's reveal setting shows a task's output. unless-closed keeps the old rule: closed with Esc, it stays closed until /margin. never opens it only with /margin, and notes are drawn in the conversation until then. /config steps through the three values.
  • Prompts.
    • The margin tool asks for when a note was last checked where currency matters, in the person's time zone, and none where it doesn't.
    • Instead of "never put anything the person must answer in a note", it now says never ask a question only in a note.
    • lead.md: the margin doubles as the person's list of open items. Each item gets one note under a stable id, kept current in place and removed once done, and the reply becomes a one-line pointer.
    • lead.md: a cleanup covers every lead of the folder, not only yours.
    • lead.md: check what is written down (code, docs, tickets, chat history) before asking anyone, and say what was checked.

Not changed: the Worked for … line. Codex ends every turn with it.

Screenshots

Three task updates gathered (a real daemon, a scripted model, Sonny in kitty, clicks through X):

gathered

A click lists them:

listed

A click on one opens it, with the steer the lead sent about it:

opened

neg clicked in /status, opened in the pane with ‹ back to /status:

status

The lead took its only note away, and the margin stays open:

stays

Closed with /margin, then a new note: it opens again:

again

Tests

cargo test -p sonny passes (468), cargo test -p agent-client passes, cargo clippy -p sonny -p agent-client --all-targets -- -D warnings and cargo fmt --check are clean. New and changed tests cover the following:

  • gathering messages, opening the list and opening a single message, with an absorbed steer
  • a reply ending the gathering
  • the kind counts and names on the row
  • indenting wrapped rows
  • the new task-update glances
  • /status links on every agent except this window's own
  • folded rows that stack
  • the margin under each margin_opens value: staying once emptied, reopening after Esc, /margin in never, and parsing the key

Generated by Claude Code

@lydakis lydakis self-assigned this Oct 29, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-30T00:19:01.023609Z ffacfe1 New commits
🔒 Security Review ✅ Completed 2026-10-30T00:20:08.726525Z ffacfe1 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4cac240770

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread sonny/src/main.rs Resolved
Comment thread sonny/src/main.rs Resolved
…tus opens the agent clicked

Messages between agents that come one after another, with nothing the
agent said between them, are one row that counts them (3 task updates);
a click lists them and a click on one opens it, with what the agent did
about it while saying nothing (a steer, a memory save) under it rather
than a row of its own. Quiet rows one after another sit together, a reply
right under its message has no Worked-for line, and task updates name a
margin note, an approval wait or a quiet task in a few words.

A click on an agent in /status opens it in the pane, and back returns to
/status, still read.

The margin tool asks for a date where currency matters and keeps
questions out of notes only as the sole place they are asked; the lead
keeps one note per open item, cleans up across the folder's leads, and
checks what is written down before asking anyone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jkdGEQoLgfchzWVjvsAVP
… news it holds

Codex ends every turn with its Worked-for line, so it stays. Claude Code's
collapsed read groups drew complaints once they stopped naming files, so
the row gathering messages between agents names the agents too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jkdGEQoLgfchzWVjvsAVP
…ning an agent

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jkdGEQoLgfchzWVjvsAVP
…luster drawn

/status rows carry the agent's bot, so another lead of the folder (shown
as "first lead" or "lead NAME") opens by its name, and a named lead's
own row is the one left unlinked. A message a page drawn again put in a
newer cluster resolves to the cluster whose rows are drawn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jkdGEQoLgfchzWVjvsAVP
… opens it

A note the agent puts up or changes opens the margin again even after
Esc closed it, by default, under whatever is open over it, as VS Code's
task reveal shows a task's output. "unless-closed" leaves it closed after
Esc until /margin, and "never" opens it only with /margin. Emptied, or
opened to look at with nothing in it, the margin stays until Esc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jkdGEQoLgfchzWVjvsAVP
@lydakis
lydakis force-pushed the claude/project-thread-z1a7qa branch from 317cf81 to 11a3249 Compare October 30, 2026 00:10
… new note

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jkdGEQoLgfchzWVjvsAVP
@lydakis lydakis changed the title Sonny: task updates in a row gather into one row; /status opens the agent clicked Sonny: task updates in a row gather into one row; /status opens the agent clicked; margin_opens Oct 30, 2026
@lydakis
lydakis merged commit 9337070 into main Oct 30, 2026
4 checks passed
@lydakis lydakis mentioned this pull request Oct 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants