Agent chats
The chat surface beside the terminal, the session panel with its Trace, file paths that open in the editor, the question dock above its composer, closed chats, and the native path Claude Code takes.
Every agent Sirio supports runs two ways in a worktree: in a terminal, exactly as its own CLI draws itself, or in a chat tab that Sirio renders. A chat receives the turns, the tool calls and the questions as structured events rather than as text on a screen, mostly over the Agent Client Protocol (ACP). OpenCode and Oh-My-Pi speak it through their own acp subcommand, Codex and Pi through an adapter from the ACP registry, and Claude Code takes a native path of its own, described below.
Open one from New Chat in the tab strip’s + menu, or from the Chat tile of an empty pane, which lists the agents that can start a chat. Right-click a worktree in the sidebar and its New Chat offers the same agents, with Other agents… leading to Settings → Agents. A new chat opens in the left pane, and the Chat row of the right panel’s Open view opens one straight into the right pane.
The transcript and the composer
What you write sits in a quiet bubble on the right. The agent’s answer is plain text on the left, under the agent’s own mark, with its thinking, its tool calls, its plans and its subagents in cards of their own. While the agent works, the Thinking line shows the animated orb. A chat does not fold older turns by itself. Click a turn’s footer to fold it.
The prompt is a card, with attached files as chips, the queue, and one button that sends or stops. Enter sends, or queues the message while the agent works, and Shift+Enter starts a new line. Enter does not send text an input method is still composing. Model, mode, thinking, effort, history and the other pickers open as one kind of menu: the arrow keys move through it, and Escape closes it and returns to the composer. The row under the composer names the agent and its model.
The composer wears the theme’s colours, on the same surface as the other cards.
What a chat shows
- Plans. A plan the agent works through appears as a card in the transcript, listing its steps and ticking them off as they complete.
- Tool calls. A tool call opens to show its output, which you can select and copy: drag to select, double-click for one segment of a path, triple-click for the whole line, then
Ctrl+C, orCmd+Con macOS. - The context meter. A ring labelled Context, at the end of the composer’s controls after the model and its effort, fills as the context window fills and turns red past 80%. Click it for the exact figure. An agent that never reports its usage, Pi among them, leaves the ring empty, and the popover says the agent has not reported context usage yet.
- The model, and the effort it runs at. Effort sits next to the model as its own label. Click it and the levels are a track you drag, with the level you are on named above it and “Use the model’s default” below the track.
Answering a question
When the agent asks for permission to run a command or touch a file, asks you to pick one of a few answers, or wants a plan approved, the question opens in the question dock, a panel directly above the composer. A small caption names the question: Permission requested, Plan approval, or the question’s own header, so Claude Code’s questions show their own titles. The dock shows the whole question, and a long command scrolls inside the dock instead of pushing the composer away.
Each answer sits on its own numbered row:
↑and↓move between answers.Enterpicks the selected answer, and1to9pick one by number.Escapewithdraws the question.
Where the agent accepts an answer of your own, a last row takes typed text. Enter sends it, and ↑ goes back to the listed answers.
For half a second after a question appears, its answers ignore keys and clicks, so a keystroke meant for the composer cannot answer a question you have not read yet. The dock takes the keyboard when the question arrives while you are working in that chat. While a question waits, the composer takes no input and reads “Waiting for permission response…”. With several questions open, the dock shows the first, and the next one appears once you answer it.
The transcript keeps a record of each question where the agent asked it, and the plan card keeps its plan. While the dock is open, the record says it waits for your answer below. Afterwards it shows the answer you gave, or that the question went unanswered.
The session panel
The button after the composer’s attach button opens a column beside the chat. It shows cards for the session, and each card opens and folds. Every card but Environment starts folded.
- Environment: the project, the chat’s own folder and its branch.
- Context: what fills the context window, grouped by where it comes from (memory files, plugins and skills, MCP tools, the conversation), heaviest first. A memory file opens in a tab, so you can see what to trim.
- Connectors: the Claude session’s MCP servers and their state, with Sign in and Reconnect.
- Trace: how the current turn is going, described under Trace. Claude Code chats have it.
- Change request: the pull or merge request of the chat’s branch. Click it to open its tab. A forge you are not signed in to reads “Not signed in to” and its host, and Sirio asks
ghandglabnothing to decide whether the card appears.
On a narrow chat the column lies over the transcript instead of beside it. Sirio remembers per chat whether the panel is open. For other agents the panel shows only the context’s total.
Trace
The Trace card of a Claude Code chat answers how the current turn is going: which agents run, which one waits for you, what failed, how long each step took and what the turn cost. Other agents do not report their subagents in a way Sirio can draw, so their chats have no Trace card.
Folded, the card is one line: Live, Waiting for you, Done, Interrupted or Failed, with the time and, when Sirio knows it, the cost. Unfolded, it shows one lane per agent on a shared time axis, subagents included. A failed call is red and a wait for your answer is amber. Click a lane or a wait to scroll the transcript to that row.
A Trace tab in the right half shows the whole turn as a tree beside its timeline. Step back through earlier turns or follow the latest one, move through it with the arrow keys, and press Enter to show a row in the chat. A chat has one Trace tab, and it closes with its chat. Nothing moves once the turn has ended, or while the card or the tab is out of sight.
Background agents
When Claude Code sends agents to work in the background, the Trace follows them until they finish, instead of stopping when the main thread answers. The turn stays Live while its agents run, and their lanes keep filling. The cost reads ≥ $x until the last agent is done, then it shows the exact amount. The short turns Claude Code starts by itself after each agent count in that cost, and the Trace does not draw them as turns of their own. The timeline draws the wait for a model’s first token as part of its call, so no gap shows between a tool and the next model call.
Bypass permissions
The mode picker of a Claude Code chat offers Bypass permissions. It asks for confirmation first. Nothing else switches a chat to it, and Always allow never does.
File paths in an answer
When an agent writes the path of a file in its answer, the path is a link, and a click opens the file in Sirio’s editor. It works in the agent’s prose, in inline code and in Markdown links, for relative and absolute paths and for ~/…. A path that starts with / but exists only inside the worktree is found there too.
A line number comes along: path:42, path:42:7, path:42-50 and path#L42 open the file at that line. A Markdown file opened at a line shows its source, since the preview has no lines. A click reuses a tab that is already open, and dragging across a path selects text and opens nothing.
Only paths to files that exist become links, so versions, dates and missing files stay plain text. Your own messages, tool cards and code blocks stay as they are. See The editor.
Links in an answer
An agent’s text can be steered by what it reads, so Sirio limits the links in an answer to what is safe to follow. Only two kinds of link work in a chat response: a web link (http, https or mailto) opens in the browser, and a file that exists opens in the editor. Every other link stays plain text. A local picture shows only when it is an existing file of up to 10 MB. Otherwise you see its description.
Effort levels
The list comes from the session, per model, rather than from a table inside Sirio. A model offering five levels shows five, a model offering three shows three, and a model with no effort setting shows no control at all.
Claude’s own five read Low, Medium, High, Extra high and Max. Ultracode sits beside them: the same effort as Extra high, with Claude’s multi-agent orchestration standing for the whole session.
Claude Code runs natively
When the claude on your PATH is new enough for the protocol this build speaks, Sirio launches it directly, and uses the claude-acp adapter from the ACP registry only when it cannot. Sirio decides by itself: it reads the binary’s version, and Settings → Agents shows the transport it chose, with the reason in a sentence when it falls back.
Driving the process directly is what lets a chat report honestly. Permissions, questions and plan approvals come from Claude itself, the context meter reads Claude’s own count of its context, and a chat can ask the agent to restore files to an earlier turn or resume the exact session a restored chat recorded.
Moving a chat between panes
A chat can sit in either centre pane, just as a terminal can. Right-click its tab and choose Move to Right Pane or Move to Left Pane, which works on every platform. You can also drag the tab onto the other pane’s tab strip, where a bar marks where it will land, or onto the other pane’s body. On Linux and macOS, Ctrl+Shift+M moves the tab you are working in and takes the focus with it, and the command palette lists it as Move Tab to Other Pane.
A moved chat keeps its conversation, and a restart puts it back in the pane you left it in. Tabs and splits covers the two panes.
Closing a chat
Closing a chat tab archives the chat. The sidebar’s Sessions tab lists it under Closed, most recently closed first. Click it to reopen it in its worktree with its conversation. A Claude Code chat running natively also resumes its own session, as long as Resume agent sessions on launch stays on in Settings → General, as it does by default.
The trash icon on a closed chat deletes it for good once you click it a second time to confirm. Sirio keeps at most 50 closed chats, none older than 30 days. Sidebar and Sessions has the rest.
When an agent goes away
An agent that dies in the middle of a turn names the cause: the exit code the process reported or the signal that killed it, the agent’s own last words from its error output, and, when Sirio’s inactivity watchdog ended it, that it was the watchdog and after how long. Time spent waiting for you never counts towards that watchdog.
Sending code to a chat
“Add to Agent Thread” in the editor’s right-click menu adds the selected lines to the end of the message you are writing in the chat open in the worktree the file belongs to, and you choose when to send it. The lines come as a located reference, the path and the line range first and then the code in a fenced block, with Sirio stripping the shared indent on the way and leaving a blank line between them and your own text. It goes to a chat only, because text pasted into a busy agent’s terminal prompt would get in the way of its work.