Log ·
Cursor asks before it acts, turns get summaries, and the window does less work
Most of the morning finished what yesterday started with Cursor. After that came a run of changes to how a turn reads: messages that wait their turn, grouped tool calls, and optional summaries written by a model on your own machine. The late afternoon went into performance, measured on a fixed test scene, and the numbers are below.
Cursor asks before it acts
Cursor sessions in Chat now talk to Cursor over ACP, the Agent Client Protocol, instead of starting a new background run for every message. One Cursor process stays up for the session, so there is no start-up wait per message and Stop cancels the turn cleanly.
The bigger change is that Cursor can now ask. A command outside your Cursor allowlist shows up in the window as a permission prompt with Cursor's own options, Allow once or Reject, just as Claude Code's prompts do. The default mode for Cursor sessions is now Ask before acting. When Cursor asks you a question, it gets the same question card as Claude Code. Models and their effort are set through the protocol, and images go in the prompt.
A Cursor session is now one chat whichever view you use. Cursor keeps chats started from its interface and chats started over ACP in two separate places, and neither could see the other, so Terminal would start an empty chat of its own. Keleuo now links the two so both views find the same conversation. It never deletes either copy: an empty duplicate is moved aside, and if both somehow hold a conversation, they're left alone with a note. The link works on Windows without administrator rights, and over SSH it is made on the machine Cursor runs on.
Over SSH, a reopened Cursor session asks Cursor to replay the chat, rather than copying a database that can run to hundreds of megabytes. Locally, the record is still read directly.
Summaries of each turn, from a model you run
Keleuo can now write a short summary at the end of each turn, using a language model server you point it at, such as LM Studio, Ollama or llama.cpp. It is off by default. Settings > Summaries has the server, the model (listed from the server), an optional key for servers that want one, and what to send.
What it sends is your message, what the agent said, and the paths of the files it changed. The tool lines are optional, and file contents and command output are never sent. The model answers in a fixed shape:
- a status: done, partly done, failed, or waiting on you
- a one-line headline
- what changed
- what was checked, each marked passed, failed, not run or unknown
- what needs you
The summary appears as a card at the end of the turn, with a spinner while it is being written, and the card names the model that wrote it. Its headline also shows in the session list, where Needs you shows in amber when something is waiting. Each item under Needs you links to the part of the reply it came from, and one that came from a ! command has a Run pill to run it.
The prompt is a Markdown file you can edit, with a Reset button. What the fields and outcomes mean is sent separately after your prompt, so editing the prompt can't change how the card reads them. Turning thinking off makes a summary take seconds instead of about half a minute.
Messages wait their turn
A message sent while the agent is working no longer goes straight in. It waits in a small panel tucked under the top of the message box, one row per message with its first line, any images, Send now and a remove button. When the turn ends, the first one goes, then the next after that turn, so the order in the chat is the order the agent got them. Stopping a turn holds the queue until you send something.
Send now puts the message into the running turn when the agent can read messages mid-turn, as Claude Code can in either view. When it can't, as with Cursor over ACP, Send now stops the turn and sends the message first.
The context meter, and what the agent is doing
The context meter could read "259% of context". It was adding up every request in a turn, so a turn with many tool calls counted the conversation many times. It now uses the turn's last request and says it plainly: "180k of 1M context", with the percentage on hover.
Later in the day it started taking the window's size from Claude Code itself and measuring against the point where Claude Code compacts, about 33k tokens short of the full window. From 70% of the way there the figure turns amber, in the header and in the session list, and from 90% it turns red and a Compact pill appears. The chat's menu has Compact the context at any time. Cursor over ACP has no compact command, so its sessions get neither. New session left the chat header too; Cmd+N and the session list still start one.
The blue bar across the chat while the agent works is gone. What the agent is doing now shows in grey at the foot of the conversation, the way a chat app shows someone typing: a spinner, then Thinking, Writing or the tool it is running ("Running cargo test", "Reading x.rs"), and how long it has been at it.
Did the agent get my message?
Your last message now shows whether the agent has it. Once the agent echoes it back, its prompt hook runs, or it starts working, the message gets a faint periwinkle edge, with Received by the agent on hover. If the turn fails or the agent exits before any of that, the edge is red and stays. It works the same way for every agent.
This went through a few versions during the evening, including a green check and a green tint. Green read as done, and received isn't done, so it ended up as the edge.
Background agents don't look finished
A turn that sends agents off to work in the background ends straight away, and until now it looked finished. Now, until the last agent reports back, a tinted bar above the message box says so ("3 agents are still working · 6m; Claude Code picks up when they report back") and lists each agent. The turn's summary says Agents working instead of Done, and the session keeps its dot in the list.
A window that does less
Keleuo used to redraw the whole window whenever anything in it changed, including a word streaming into a session you couldn't see or output in a hidden terminal. A run of changes stopped most of that. The session list redraws only a row that actually changed, terminals that aren't on screen stay still, and the text cursor stops blinking when Keleuo is in the background. On macOS the spinner while the agent thinks is drawn by the system, so turning it costs Keleuo nothing. Streamed text is drawn in the same frame it arrives in, and a fast stream draws at most ten times a second.
Measured on a fixed test scene with a scripted agent:
- Idle: from 1.9 frames a second to none, and CPU from 2.3% to 1.2%.
- A busy terminal in a hidden tab: from 16.3 frames a second to 0.1. A busy session you aren't looking at: from 18.3 to none.
- While the agent thinks: the chat is drawn once a second instead of 9.6 times, and CPU fell from about 10.5% to 2.5% over the afternoon's changes.
- A reply streaming a piece every 30 ms: from 26 to 34 frames a second down to 10.5, and CPU from 28 to 41% down to 20 to 28%.
Tool calls fold into groups
Any two or more tool calls in a row between bits of the agent's text now fold into one row, labelled by count, such as "2 commands, 2 reads". Failed calls and edits with a diff stay in view.
Each turn also stands apart more clearly. The message that starts a turn has three times the space above it as the items inside the turn, and items in a Markdown list have a little room between them.
Pictures
When the agent reads an image file, for example a screenshot it is checking, the image now shows under the tool call as a thumbnail. Before, it was dropped. Any image in the chat opens full size over the whole window, with a Close button, and Esc closes it from anywhere. Images you send now show above your message's text, the way they looked in the message box and the order the agent receives them.
Skills for Cursor
Cursor sessions have a Skills tab now, listing the skills Cursor reads, in the order it reads them: .cursor/skills, then the .claude, .codex, .grok and .agents skills folders, in the project and in your home folder, then Cursor's built-in skills, then the skills of installed Claude Code plugins. A skill you create in a Cursor session goes in the project's .cursor/skills.
The Skills tab also shows AGENTS.md when the agent reads it. For Cursor that is a group of the instruction and rule files it loads, including .cursorrules and .cursor/rules.
Install skills from git
The Skills tab can now install skills from a git repository. Paste a git URL, an owner/repo, or a link to a folder on GitHub, and Keleuo fetches it with your own git access. It lists every skill it finds, with its files (anything an agent could run is marked) and the whole SKILL.md to read before you choose. Install the ones you want for all projects or just this one. Each copy goes in the folder each agent reads first, and an agent that already reads another agent's copy is skipped, as Cursor reads Claude Code's. Nothing is run by installing, and existing folders are only replaced if you say so.
Keleuo remembers where each skill came from and which commit. Right-click an installed skill for Update, which fetches it again so you can read the new version before it replaces the old, or Remove, which deletes only the copies Keleuo made.
Your own skills can be renamed and removed too, from icons that appear on hover or from right-click. Renaming changes the folder and the name inside SKILL.md, and removing moves the skill to the Trash. New skill asks for a name first, and it and Install from GitHub are now labelled buttons at the top of the tab. Sessions and files got the same hover icons: rename and close for a session, rename and remove for a file, with open tabs following a renamed file. Over SSH, where there is no Trash, Keleuo says so before deleting.
A new look, being tried out
The window's look is being reworked, mostly in the light theme, and these changes are marked as prototypes in the commits. So far: one white work area with rounded corners where it meets the session list, the session list as a lighter inset panel with a Sessions heading, the chat fixed in the centre with files and terminals opening to its right, larger tool panel titles and lists, and a choice of tab styles in Settings > General > Tab style. The strip of icons beside the folded tool panels is gone; right-clicking the tool panels button in the title bar lists them instead.
Terminals also keep a minimum contrast, as Ghostty and iTerm2 do, so a program's dark-theme colours and faint text stay readable on a light background.
Smaller things
- Background subagents now show when they are stopped, when they are resumed, and when they end because the agent's process ended. Before, a stopped one could look busy forever.
- The send button stays round when the message box row gets crowded.
- Skills now docks beside Agent by default, and layouts saved before Cursor had skills get the tab back.
- An older build of Keleuo no longer throws away settings it doesn't know about, such as the summary settings, when it saves.
- Drawing the Run pill on Keleuo's own restart command could crash the app. It no longer does.