Repository navigation
Version 0.6.0 - #372
Merged
Merged
Version 0.6.0#372
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jkdGEK7HMibaxgHFDtGXA
lydakis
force-pushed
the
claude/project-thread-t35u1m
branch
from
October 29, 2026 09:53
a621b4a to
ffcea95
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by George · project thread
This bumps agent, agent-client and sonny from 0.5.2 to 0.6.0 (Cargo.toml and Cargo.lock only), and adds a note to
/usagein sonny/README.md that it reads retained history, as the outside review asked. Once it merges,v0.6.0is tagged on the merge commit. The release notes follow and become the GitHub release text.Everything since v0.5.2: Sonny is full screen, with a margin where agents
keep notes beside the conversation, several leads per folder, and goals
that keep an agent working until a check passes; it reaches your MCP
servers through one
execscript tool, draws pictures, diagrams, HTML andfolder trees in the side pane, guesses your next message, shows
/usage,and runs as a T3 Code provider and in cmux. The daemon keeps companions
running for as long as it runs, and Sonny's lookout and approver are now
two of them. Bots fetch pages on every provider, type into running
programs, search their own history, run trusted commands outside the
sandbox, and go to a fallback model when a request is declined. Triggers
work on Linux, the lookout hears sources you set up, and long histories
open, scroll and find faster.
Before you update
23 (was 21), for declared tools that take free-form text (Declared tools may take free-form text, as apply_patch does (protocol 22) #307) and the
usageread (Sonny /usage: tokens spent over time, by agent and by model #302).fallbacksflagwith its
fallbackmodel; What a declined request added goes to later requests as a note naming the refusal #361 addsdeclined; Daemon companions: commands the daemon keeps running for as long as it runs #370 adds companions).The 0.6.0 daemon migrates the store on first start, and 0.5.2 can't open
it after that, so copy
~/.agent/state.sqlitewhile the old daemon isstopped if you may go back.
git worktree, and outside git they work in the lead's folder;
/copies,--copies, thecopiessetting andsonny task changesare removed, asare
/status's "On Errand" section and theerrandskill.another bot or a named client sent reaches the model with a part naming
its sender.
--hide-senders, orsenders = "hidden"in~/.agent/config.toml, keeps the words alone.~/.agent/config.toml(Sonny: /config, chime and view in config.toml, and a side chat that can fork with every tool #315), as[sonny] chimeandverbose. The same keys in~/.agent/sonny/settings.jsonare no longer read./fullscreenare gone.
name,tasks_of,botsandsources;ask,look_for,context,onandupdatesare gone, as aresonny lookout --judgeand--replay.[judge]stays for the approver.Sonny
/fullscreenare gone;/status,/background,/sideand/mcpopenin the pane. Calls of one kind in a row fold into one row, a question's
options are buttons, messages between agents and task updates are one dim
row a click opens, and reactions sit under the message they answer. Tasks
the lead starts show as a roster with live states, and a click opens a
task's own Sonny in the pane. Ctrl+[ and Ctrl+] go back and forward
through what the pane showed, and Ctrl+\ moves the keys between the
conversation and the pane. Colors use the terminal's 16, each with one
meaning, and the context count turns yellow at 100k tokens and red at
200k.
queueing for or waiting on an agent reads as one short row saying what
happened, such as
• Steered calc.neg ▸; another agent's message reads↳ From calc.neg ▸, and a click opens the details.margintool: a diagram, a results table, the file being discussed, drawnwith the same Markdown, Mermaid, HTML and pictures as the pane. The plan
sits at the top, a glance line shows tasks, what needs you and context,
and × takes a note away. It shows by itself from about 141 columns; in a
narrower window the footer counts the notes, Tab shows the margin, and
each note is drawn inline where it was posted. A lead can show its tasks'
notes in its own margin (the lookout tells it when a task puts one up),
and a counter under the composer shows agents at work and what needs you;
a click opens
/status(Sonny: a lead shows its tasks' margin notes, and the footer counts agents at work #367).exectool (Sonny: agents reach the person's MCP servers through one exec script tool #321, Sonny:sonny mcp tool, and scripts' saved files kept a week #327, Sonny: four exec scripts run at once in the lookout, the rest wait #334).[sonny.mcp_servers.NAME]in~/.agent/config.tomltakes Codex's keys;sonny mcp add|remove|listkeeps them and/mcpshows them. Agents getone gated
exectool with Codex's code mode: JavaScript in QuickJS, eachMCP tool as
tools.mcp__SERVER__TOOL. The lookout hosts one connectionper server for every agent, stops idle servers after ten minutes, and runs
four scripts at once.
and HTML files are drawn pane-tall, and a click on one in the chat opens
it there;
\[ \]and\( \)math reads like$$; a folder opens as atree with git's state per file; ‹ › go back and forward. One Markdown
renderer now draws every surface, decision cards and
/statusincluded(Sonny: one Markdown renderer for every surface #325).
well, the empty composer shows a dim guess; Tab takes it in, unsent.
[sonny] suggest = falseturns it off./config(Sonny: /config, chime and view in config.toml, and a side chat that can fork with every tool #315) lists every keyconfig.tomltakes, with its valueor default, and writes a change right away, keeping your comments.
[sonny] side_chat = "fork"makes/sidea copy that keeps every tool./usage(Sonny /usage: tokens spent over time, by agent and by model #302) draws token usage from retained history over the lastday, week or month, by agent and by model;
agent usageprints the same.profile/threads_profile, or[sonny] lead_profile/task_profile, pick the profile leads and tasksrun as. Profiles can
extendsanother and carryskills. An opt-insuperleadprofile ships, used only when a project sets it.sonny acpfor T3 Code, and cmux's Automation mode in the cmux skill #323, sonny acp: read the person's words out of each block T3 Code sends #337, sonny acp: T3 Code's model picker lists your models and switches the lead #339, sonny acp: a task opens as the lead thread's child in T3 Code #352, T3 Code opens Sonny threads again: the model option carriesid#358, T3 Code: models as /model lists them, an effort picker, and a new thread leaves the lead's model alone #363).sonny acpmakes Sonny a T3 Code provider: a thread is its folder's lead,each task opens as its own thread, approvals are asked in T3, and T3's
model picker lists your models as
/modellists them, with an effortpicker, and a new thread leaves the lead's model alone (T3 Code: models as /model lists them, an effort picker, and a new thread leaves the lead's model alone #363); a task's
thread opens as the lead thread's child (sonny acp: a task opens as the lead thread's child in T3 Code #352). Run in a cmux tab, Sonny
lays its tasks out as cmux tabs and workspaces, and agents get a
cmux-tabsskill.whoever has it, splits a message of several asks into a task per goal, and
reacts in a task when it routes the person's words elsewhere. A task knows
its lead.
sonnyopens the lead you last wroteto in a folder;
/leadlists the folder's leads,/lead NAMEswitches,and
/lead new [NAME]makes one (sonny --lead NAME,sonny --new-lead). Leads are peers, and each window and/statusshowsits own lead's tasks. In T3 Code a new thread is a new lead named after
its first words.
with the same CLI, tool and fires as on a Mac.
on every message someone else writes in the agents a lead watches, and
each finished turn with the task's own reply, marked as the task's words.
The person's words in a task cut into a busy lead at once; the rest waits
until the lead rests.
[sonny.sources.NAME]runs a command youwrite (for example a Slack poller); each line it prints is an event, and
agents subscribe by name. Every event is told; one marked urgent steers a
busy subscriber.
[sonny] unsandboxed = ["mcpx"]letsthose command prefixes run outside a lead's or task's sandbox without
asking, when a script runs nothing else. In
fullmode tasks now rununconfined, as their lead does.
loads a page at a time above the view, at a steady cost, and every turn
can be reached; pages far from the view let go and are drawn again as it
nears them, so a 2,000-turn history holds 62 MB instead of 232 MB, and
/verboseor a theme switch repaints in 0.45 s instead of 12 s; codecolours about three times faster with Oniguruma; pictures go to the
terminal only when first shown; Ctrl+F costs about 8 ms a key on 12,000
rows instead of 130. With nothing typed, Home goes to the first turn in
about a second on 2,000 turns and End comes back, and Ctrl+F also finds
matches in pages the screen had let go (Sonny: Home goes to the first turn, and Ctrl+F finds what pages let go hold #364).
read NAME,counted in each scope's
.reads; the nightly cleanup is told of factsunread for 30 days, and removes one only when something newer shows it no
longer holds. A fact saved after a web read, a fetched page or an MCP call
is marked
externaland read as a lead to check, never an instruction;the cleanup also reads what you wrote since its last run and saves what a
later agent would otherwise ask again (Memory marks facts saved after outside content, and the nightly cleanup saves what the person said #356).
goaltool sets a check command for an agent or oneof its tasks; each time a turn ends, the lookout runs the check and, while
it fails, gives the agent another turn with its output. The goal ends when
the check exits 0, the token budget runs out, two turns in a row call no
tool, or the agent says it is blocked. Its lead hears only how it ended.
Sonny has new text for a
lead.md,task.mdor skill you edited, itwrites the new text beside yours and the next agent you open offers to
bring its changes in, keeping yours.
(Sonny composer: Shift-Enter starts a line; mouse selection to type over or delete #297); an idle window starts no programs (Sonny: stop starting programs while a window sits idle #311); a first run sets itself
up, and Linux gets an install script (Sonny: the welcome heads every lead's history, as Claude Code's does #320); the welcome heads every
lead's history (Sonny: the welcome heads every lead's history, as Claude Code's does #320); a lead made for a subfolder reads its own project's
memory (Sonny: a lead made for a subfolder reads its own project's memory #298).
Runtime
web_fetchfor every provider (Add web_fetch for every provider, and AI_AGENT for every command #306), Bedrock Claude included, gatedand judged like other tools. Shell commands get
AI_AGENT=agent.shellwithtty=trueruns in apseudo-terminal and returns a handle;
write_stdintypes into it, pollsit or kills it, as Codex's unified exec does.
apply_patchdoes:a custom tool on Responses, a one-string function elsewhere.
safety classifier declines can go to a fallback model for that request
alone, then the bot goes back to its own model (
--fallback, or[fallbacks]in~/.agent/config.toml). A request that is still declinedgoes to later requests as a short note naming the category, so the
conversation can go on; the original stays readable through the history
APIs, and
turn_finishedcounts what wasleft_out(What a declined request added goes to later requests as a note naming the refusal #361).agent companion add NAME -- COMMANDkeeps acommand running for as long as the daemon runs, started again if it exits
and stopped when the daemon stops;
rmandlsmanage them. Sonny'slookout and approver now run as companions (
sonny-lookout,approver-auto), added on Sonny's first open, so they live as long as thedaemon rather than the window that started them.
historysearches earlier turns for text (Let the history tool search earlier turns for text #299).unsandboxedbot setting (Run trusted commands outside the sandbox, as Codex's allow rules do #309): command prefixes that run outsidethe sandbox when a plain script runs nothing else;
agent run --unsandboxed CMD.cache for an hour; triggers tell their agent when a fire is missed; an
empty reply ends a turn; a cut write or edit still names its file for the
approver; a task that resolves itself still reports.
companion that exits has what it left running stopped before it starts
again (Stop exited companions’ descendants before restarting #371).
Docs and CI
builds; advisory for now.
concurrent tool calls have yet to show (Docs: the README's status names the sandbox, and EVIDENCE says concurrent tool calls are built #360); Sonny's README describes
T3's model and effort pickers (sonny README: T3 Code's pickers as #363 left them #366).
🤖 Generated with Claude Code
https://claude.ai/code/session_013jkdGEK7HMibaxgHFDtGXA