Log ·
Agents get a sandbox, sessions can message each other, and Cmd+F finds anything
A long day. The morning finished yesterday's performance work and added ways to find your way around a long conversation. The afternoon brought spell checking and a new New session screen. The evening changed what agents are allowed to do: they now work inside a sandbox, and they can talk to each other, with you deciding which messages go through.
Agents write only inside their folder
Agents that Keleuo starts now run in a sandbox. They can read anywhere, but they can only write inside the session's folder and a few places they need: the repository's shared git folder, temporary folders, tool caches, and the agent's own settings, such as ~/.claude for Claude Code or ~/.cursor for Cursor. On macOS this uses the system's own sandbox, and on Linux it uses bubblewrap when it's installed. Windows and sessions over SSH aren't covered yet, and agents there run as before.
When the sandbox stops a write, the tool's card says so, "Kept out of a folder", with an Allow… button. You can allow writes in that project or anywhere for this session, and the agent restarts to pick it up. The chat's menu has the same choices, lists the folders you've allowed so you can take one back, and lets you pick a folder to allow. Each session remembers its choices.
It's on by default. Settings > "Keep agents' writes inside the session folder" turns it off and says what your system supports. The commit checked it with a shell and with Claude Code itself: writes in the folder worked, and a write in the home folder was refused.
Sessions can talk to each other
Every agent Keleuo starts now gets three tools from Keleuo: one to list the open sessions, one to send another session a message, and one to ask another agent for a review. Nothing goes out on its own. A message appears in the sending session as a card you answer with Allow, Always for these two, or Deny. Even with Always, Keleuo asks again after eight messages between the same two sessions in ten minutes, so two agents can't keep each other going without you. The receiving session shows the message as coming from the other session, and its agent gets it as a new turn with a note on how to reply.
Asking for a review opens a new session of another agent in the same folder, called "Review for" and the session's name, without taking you away from the one you're in. The reviewer is read only: the sandbox keeps it from writing, and it asks before it acts. When it's done, its review comes back as a message. In the commit's own test, a Claude Code session asked for a review of a file, and the reviewer found both of the problems in it.
This works for Claude Code and for Cursor.
MCP servers, set up once
Settings has an MCP servers page. A server added there goes to every agent Keleuo starts, for the whole app or for one folder and the folders inside it. A server can be a local command or a remote address. Its secrets are kept in the macOS Keychain, or secret-tool on Linux, and never in the settings file. Claude Code's own servers can be imported. Local servers that need to write get their folders added to the sandbox.
Settings itself is no longer a separate window. Cmd+, or the new gear in the title bar opens it in place of the session, with the session list still beside it, and Escape or a click on a session goes back. Its pages are searchable.
Spelling in the message box
Misspelled words in the message box get the same row of small red dots that macOS text fields use, on top of the Markdown highlighting. The system decides what's misspelled: macOS's own checker, the Spell Checking API on Windows, and the installed Hunspell dictionary on Linux. Code, paths, file names, web addresses, slash commands, @mentions, flags, identifiers, words in capitals and paste pills are left alone, and so is the word you're still typing.
Right-click a flagged word for up to five suggestions, plus Learn Spelling and Ignore Spelling. Settings > Message box > Check spelling turns it off.
A new New session screen
The New session screen starts from folders now. On the left are your folders, with a filter that also takes a path, recent folders, Choose folder, and the folders inside the one you're looking at. On the right is a form for the selected folder: its full path and branch, an optional name, which agent to use, and Create in a new Git worktree, which shows what it will make before it does. Enter creates the session.
Below the form are the folder's previous sessions, searchable, each with Resume or Fork. Fork asks for the new session's name first. A session that's still running offers Fork here or Take over when it stops, and one that's already open offers Switch to it. Selecting a folder never opens a session by itself.
Find in the conversation
Cmd+F, or the search button over the chat, opens a find bar under the chat's header. It shows how many matches there are and which one you're on ("3 of 12"). Enter and Shift+Enter move between them, and Esc closes the bar. In a terminal, Ctrl+F still goes to the terminal.
Find searches the conversation itself, not just what's on screen. That covers every message, every tool call including its output, summaries and notes, and the older parts of a long session that haven't been loaded yet. Every match is marked faint amber and the current one stronger. If a match is inside something folded, like a group of tool calls, a tool's output, a subagent's messages or a long paste, Find opens it, and folds it again when you close the bar. Anything you had opened yourself stays open.
The latest messages stay in view
Scroll up far enough that the newest message is out of view, and a pane opens below the conversation showing the current turn, from your last message on, following it as it grows. Drag the line above the pane to change its height, and Keleuo keeps that with the layout. Scrolling over the pane scrolls the conversation above it. The Go to latest pill on the line takes you back to the end and closes the pane. It's on by default and can be turned off in Settings.
Docking with a compass
Dragging a panel over another group used to decide where it would land from how close the pointer was to an edge, with nothing on screen to show the zones. Now a large enough group shows a compass, as Visual Studio does: five targets around the centre, each a small window with the side it docks to filled in, or filled completely for a tab. Over a target, a placeholder shows where the panel will go. Let go away from the targets and nothing moves. Tab strips still take a panel as a tab, and groups too small for the compass keep the edge zones.
Terminals
Tab and Shift+Tab in a terminal now go to the program running in it. Before, the window took them to move focus to the next control, so Tab completion in the shell didn't work and neither did moving between fields in a full-screen program.
Each terminal zooms on its own with Cmd+= and Cmd+-, and Cmd+0 resets it (Ctrl on Windows). New shell terminals start at 11 pt instead of 12.5, so more fits before a line wraps. An agent's own interface in Terminal view is where you read and type, so it got its own size in Settings > Terminals, 12.5 pt by default. Zoom steps in quick succession resize the program inside only once, so an agent's interface redraws once instead of on every step.
Background work you can see
Claude Code's Workflow tool runs many agents in the background, and Keleuo used to see none of it: the chat looked finished while a dozen agents worked. A workflow now shows as a background agent, named after its description, and its card says how far along it is ("9 of 13 agents done").
Yesterday's tinted bar for background agents was too much, so it's gone. The working line at the foot of the chat now ends with a small box counting the agents at work ("2 agents"), with their names on hover and a click to open the first. Once the turn itself is over, the line says Waiting on background agents.
Faster again
- On macOS, the spinner on the working line is now Keleuo's own, an open circle in the theme's grey, still turned by the system so it costs almost nothing: 1.8% CPU while the agent thinks, against about 10% for a spinner Keleuo draws itself. Apple's spinner, used yesterday, didn't match the rest of the app.
- A long reply is now split into pieces of about 1.5 KB after paragraphs, so while it streams only the part on screen is laid out. Before, each frame cost more as the reply grew. Streaming a long reply now holds at about 10% CPU instead of climbing from 10.5% to 15%, and a fast, very long one runs at 4 to 10% instead of 18 to 24%.
- Keleuo uses one file watcher for the whole app instead of one per folder, and follows Claude Code's session file by change notices rather than looking ten times a second. Three sessions on one folder now use 12 threads instead of 18.
Windows
Hooks and the hand-over to an already open window now work on Windows, through named pipes. Until now they did nothing there. On macOS nothing changes. Keleuo also builds on Windows again after yesterday's performance tools, which had used calls only macOS has.
An installer for the Mac
Keleuo for Mac can now be packaged as a disk image for installing: the app and the Applications folder over a night sky with stars and rolling meadows, and an arrow between them. The names under the icons sit on soft pills so they read in light and dark mode, and the scene carries on past the window's edge, so a larger window shows more sky instead of a blank border. The image is signed and notarized when the release has the keys for it.