changelog
4.3.15 2026-10-16
Extension release: a reworked sidebar, agent mode that can be steered while it works, and better handling of small local models.
- The sidebar reads like VS Code. Replies, labels, buttons and settings use VS Code's own UI font. Code blocks, inline
code, file paths, commands, model names and tool steps stay in the editor's monospace, so code stands out from the prose around it. Lowercase text has no extra letter-spacing, and headings in replies are no longer forced into lowercase. - A quieter transcript. Your messages keep a rule down their left edge, replies run flush beneath them, and whitespace separates the turns instead of a line under every message. The "you" and "twinny" labels are gone, and their row with them; they remain for screen readers. The copy, edit and regenerate actions appear on hover: on your message just above it, and on a reply at the end of its footer line. The footer stays on one line, with the token count moved into the speed figure's tooltip. The input is a framed field lined up with the provider and model row beneath it.
- Greyscale throughout. Primary buttons, the active provider, running tool steps, a waiting command, the selected mention and the sliders no longer use the theme's blue; they use the foreground greys. Provider logos in the preset gallery are greyscale too. Focus outlines keep VS Code's focus colour.
- Fixed: code highlighting in light themes. Code in replies and tool steps was coloured for a dark background whatever the theme, so parts of it nearly vanished on a light one. Highlighting now follows the active theme, switches with it without a reload, and treats high-contrast themes by their background.
- Fixed:
/in the Review tab. Branch names and other values with a/showed as HTML entities. - Fixed: history titles cut off mid-letter. Long titles end in an ellipsis and use the row's full width. A preview that only repeats the title is left out.
- Tidier tabs. The team cards in Providers have padding and outlined buttons, provider cards show their test, edit, copy and delete buttons on hover or keyboard focus, the template checkboxes sit closer together, the jump-to-latest arrow floats centred over the transcript, and English labels use sentence case and the lowercase "twinny".
- Steer the agent mid-reply. A message you send while an agent reply is working is read by the model at its next step, rather than waiting until the reply ends. In the queue above the composer it shows as next step. Once the model has read it, it appears in the reply's steps as you at the point where it was read, and later turns remember it. If the model finishes first, the message goes as your next turn, as before. A message with
@mentions or images still waits for its own turn, where those are added. - 30 tool steps per reply by default, up from 12. A change across a few files (search, read each, edit each, check) takes 15 to 25 steps, so 12 ran out halfway. A model going round in circles is now stopped after three repeats, long before the cap. The agent settings offer 12, 20, 30 and 40 (
twinny.chatToolsMaxSteps, 4 to 40). A number you already set is kept. - Continue after running out of steps. A reply that used every tool step (
twinny.chatToolsMaxSteps) is marked out of steps in its footer, with a Continue button. Continue sends the agent back to the task with a fresh set of steps and what its tools found so far, rather than asking it to finish a sentence. - Edit misses show the nearest lines. When
edit_file'sfindis not in the file because a line or two was remembered wrong, the model gets the closest lines as they are now, numbered, and the first line that differs, so its next try lands without reading the file again. A block that only looks alike, such as a sibling function, is not offered as the place to edit. Every miss also says how to add new code: anchor on existing lines infindand repeat them with the new code inreplace. Small models often put the new code itself infind. In live runs, gemma3:4b went from 1 in 5 to 4 in 6 on a two-function file, and qwen3-coder stayed at 7 of 7 on the edit tasks. - Tool calls written loosely are mended. Line breaks and tabs left raw inside strings (a whole file's content), escapes like
\d, keys without quotes and trailing commas are fixed before a call is refused. This covers text-mode calls and native arguments passed on as written (llama.cpp, vLLM). A call that still cannot be read is quoted back to the model with the parser's message. - No more going round in circles. A read-only call (read, search, list, git, references) repeated with nothing changed since is not run again; the model is pointed at the result it already has. After three such repeats, or three unreadable calls in a row, the agent is asked for its answer instead of spending the rest of its steps.