Skip to content

Ari v0.2.5

Choose a tag to compare

@github-actions github-actions released this 02 Sep 22:39
· 337 commits to main since this release
1a5bd5d

Patch release over 0.2.4. The terminal moves into the right rail beside the transcript instead of taking over the page, agent turns stop being relocated into hidden git worktrees, and custom-endpoint turns stop dying at twelve tool rounds.

Changed

  • The terminal docks to the right rail. Clicking Terminal (or Ctrl+` ) no longer replaces the page — it opens the machine's own shell beside the transcript, spawned in the active project's folder. Same ptys as before (PowerShell/zsh/bash through @lydell/node-pty), but tabs replace the split tree, since a 520px rail has no use for one. Closing the rail parks the shells instead of killing them (only a tab's × kills its pty) and reopening re-adopts them, with background tabs kept mounted so output keeps flowing. The rail is now drag-resizable (320–900px, persisted on its own key), its heading names what it shows instead of always saying "Changes", and switching sessions no longer closes it — a running shell should outlive a chat switch. (#125)
  • Settings Back moved to the sidebar header. The footer Back row spent a bordered strip at the bottom of the settings sidebar on one control. It is now a 24px icon button leading the Settings title, matching the sidebar header's own affordances and clearing the macOS traffic lights. (#128)

Fixed

  • Agent work was being built inside a hidden worktree. A user asked an agent to build something and found it built in .ari/worktrees/<sessionId> on branch ari/<sessionId> instead of the project folder they opened; asked why, the agent said it was part of its workflow — it wasn't, Ari had put it there. Every project session in a git repo silently got a linked checkout on its first turn, and nothing surfaced it: the Changes rail, per-turn diffs and the terminal all read the project path, so the work was invisible in the UI while untracked checkouts piled up. Deciding to branch or isolate belongs to the agent you prompt directly, so the mechanism is removed rather than made switchable. A turn's working directory is now exactly the registered project folder (home directory for ad-hoc sessions), which is also what checkpoints and revert operate on. Leftover .ari/worktrees/<id> checkouts from earlier versions are untouched — work in them sits on ari/<sessionId>. (#126)
  • A turn failed at the twelfth tool round. Turn failed — round budget exhausted (12) ended turns on some custom endpoints with the work already done. The cap was one round per tool round-trip, set in the agent loop's first commit and never revisited, so any task needing a 13th call died as a failure. It only bit some endpoints because models that batch tool calls finish inside 12 while models taking one small step per reply do not. The round ceiling is now unset by default: a turn ends when the model stops asking for tools. Runaway loops are caught by behaviour instead of by counting — identical tool calls three rounds running are answered with an explanation rather than executed, which usually breaks the model out, and only a second run of identical rounds ends the turn. Call signatures canonicalize argument key order and sort the call set, so shuffled JSON or a reordered parallel batch cannot slip past. Both stop messages now say the work is kept and another message continues from there, and the failure banner no longer renders Turn failed — Turn failed. when it can't classify a message. (#127)
  • Custom-endpoint turns that thought for ages and never edited anything. The same endpoint felt far slower under Ari Core than under other harnesses. The context budget was a flat 120,000 characters — roughly 30k tokens — for every endpoint regardless of the model's real window, with compaction firing at 75% of it, while a single read can return 50KB: two file reads crossed the threshold and a real coding task compacted every few rounds. Each compaction spent an extra model call the UI could not show (that's the blank spinner), often produced nothing because the call still advertised the full tool set and coding models answered it with tool calls instead of prose, and meanwhile the oldest tool results were trimmed — taking away the file contents the model had just read, so it read them again instead of editing. The budget is now derived from a 500k-token window (× 4 chars/token), so compaction engages near 375k tokens rather than ~22k. Ari Core only; CLI-backed agents manage their own context. (#127)
  • Terminal text looked "stacked". The pane passed its font as a CSS variable, and xterm sizes the character cell by assigning ctx.font on an offscreen canvas, where var() cannot resolve — the assignment was rejected outright, so cells were measured against canvas's default 10px sans-serif while rows rendered in Geist Mono at 12px. The token is now resolved before it reaches xterm, with line height 1.3 (xterm defaults to 1.0, which reads as one solid block), size 13, numeric weights so the variable font doesn't bloom on dark, roomier host padding, and a re-measure once the bundled webfont loads. (#125)

Known gap in this build

Raising the context budget means a model whose real window is smaller than the budget now hits the provider's own limit first, and in 0.2.5 that arrives as empty response (3 attempts) because an HTTP error round was counted as an empty one. 0.2.7 fixes this: overflow is recognised and reported as Conversation too long.

Installers

  • Windows: Ari-Setup-0.2.5.exe
  • macOS: Ari-0.2.5-universal.dmg (unsigned — right-click → Open on first launch)
  • Linux: Ari-0.2.5.AppImage, Ari-0.2.5.deb

0.2.x installs on Windows and AppImage pick updates up automatically on next launch; the download happens in the background and installs on quit.

Contributors

@j35dev