Releases: j35dev/Ari
Release list
Ari v0.3.3
Ari v0.3.3
Ari 0.3.3 adds an in-app browser agents can drive, loads each agent's own skills and MCP, and makes queued follow-ups actually continue the same chat.
In-app browser
A visible browser inspector pane, shared with the agent.
- Open it from the pane. The page is a sandboxed Chromium guest on its own partition. Only http(s) and
about:blankload. Redirects tofile:or an OS protocol are cancelled, same as a direct navigation. - Agents reach it through a loopback MCP server. HTTP is sent only when the agent advertises
mcpCapabilities.http. Otherwise Ari sends the stdio proxy. Never both. - Pick an element on the page and the next message can refer to it.
Skills and MCP
- Claude, Codex, Grok, OpenCode, Pi, and Hermes keep their own skill and MCP loaders. Ari does not copy discovered disk MCP onto
session/new. - Ari Core hosts
~/.agents/skillsand<workspace>/.agents/skills. Project skills stay off until that workspace is trusted. - User stdio MCP servers from
mcp-servers.jsonmount beside the in-app browser.
Queue and steer
A message sent while a turn is running stays in the queue and runs after that turn, on every provider, the harness, and child chats.
- The composer shows a queue button next to Stop when the draft is non-empty.
- Steer is the action on a queued message. The harness inserts it before the next model round. Claude, Codex, and ACP inject it when they can. If they cannot, it stays queued.
- The follow-up resumes the same session, including Pi, Hermes, OpenCode, and Codex
exec.
Split panes and appearance
- Pane headers read
Project title - Session title. Unfiled sessions keep the session title alone. - Glass chrome is gone. Windows are opaque. Wallpaper compositing stays.
Reliability
- A silent model stream or ACP prompt is treated as stalled after 20 minutes, not 2 or 5, so a long think or a long shell command is not killed.
- The harness
bashtool defaults to 600 seconds and allows up to 1800.
Upgrade notes
Install over any 0.3.2 build. Existing sessions, splits, and settings load as before.
If you already have 0.3.2, the in-app update toast (or Advanced → Check for updates) will offer 0.3.3 once the installers finish building. You can also download the installer for your platform below.
Included pull requests
- #236 — remove glass chrome
- #237 — raise idle timeouts so long turns survive
- #238 — show the project title in pane headers
- #239 — in-app browser inspector, with redirect and MCP transport fixes
- #242 — load each agent's skills and MCP inside Ari
- #241 — queue follow-ups across providers and steer on demand
Downloads
Installers for Windows, macOS (universal), and Linux are attached by the release build.
| Platform | File |
|---|---|
| Windows | Ari-Setup-0.3.3.exe |
| macOS | Ari-0.3.3-universal.dmg (zip also attached for auto-update) |
| Linux | Ari-0.3.3.AppImage, Ari-0.3.3.deb |
Full changelog: v0.3.2...v0.3.3
Ari v0.3.2
Ari v0.3.2
Ari 0.3.2 is a workspace and reliability release. You can keep a terminal in a split pane, review a project's pull requests and issues without leaving the app, and trust the model picker and effort chip to follow what the running CLI actually offers.
Terminals in split panes
A split pane can now host a terminal, not only a session.
- Empty panes get Open terminal (button and pane menu). The shell still requires a registered project folder, same jail as the rail.
- The titlebar Terminal button still opens the rail. A terminal shown in a pane is hidden from the rail so the pty is never mounted twice.
- Closing the pane returns that tab to the dock; the pty keeps running.
- Dropping a session onto a terminal pane splits rather than replacing it. Assigning a session to that pane does replace the terminal, which reappears in the rail.
- Stacked terminal panes stay clipped under headers, menus stay on screen, and pane terminals remain reachable after a reload.
PRs and issues workspace
A dedicated PRs & issues surface, opened from the titlebar (left of Settings) or the command palette.
- Pick an Ari project in the sidebar; the main pane lists that project's GitHub pull requests or issues.
- Open / Closed / All, client-side filter, refresh, status badges, labels, markdown body, and Open on GitHub.
- Data comes from the GitHub CLI already used to create PRs (
gh pr list/gh issue list/gh view). Missingghor auth failures show as copy in the list, not a blank page. - GUI launches now resolve
gheven when it is only on the shell PATH, and the hub's shortcuts no longer collide with the rest of the app.
Models and effort
The picker now reflects the models this session's agent advertises, not a stale bundled list.
- If the live CLI has not reported its own models, the list is labelled as a fallback and can be refreshed. Choosing a model the agent does not offer shows a notice in the transcript instead of silently running the agent's default.
- OpenCode (and other ACP agents that advertise thought levels per model) re-query effort after a model switch. A saved effort is kept until that model's own levels have answered, including across a model change.
- Switching composer pickers (model, effort, permission mode) no longer collapses the plate.
Local endpoints and usage
- Local LLM endpoints accept a bare
host:portand do not require an API key. - The Claude usage pill parses the CLI's current plain-text usage output again.
Settings and agent control
- Child-session delegation controls on Permissions use the same switches, selects, and cards as the rest of Settings. Permission-mode cards are keyboard-navigable.
- The control-surface banner names a CLI path that actually resolves (including
ari.cmdon Windows) and states that Ari added it, so agents stop treating it as a prompt injection.
Reliability
- npm-installed CLIs on Windows (
opencode,codex, and the rest) report their real versions. Detection now uses the runnable.cmd/.exeinstead of the extensionless npm shim, and the version probe waits long enough for large single-file binaries. - A folder named like a CLI on PATH is no longer treated as an installed provider.
- PATH scanning continues after an unreadable entry instead of aborting and hiding later installs.
- On macOS the control socket binds outside
userData, avoidingEINVAL. If listen fails, the socket directory is removed and the server is closed cleanly.
Upgrade notes
Install over any 0.3.1 build. Existing sessions, splits, and terminals load as before.
If you already have 0.3.1, the in-app update toast (or Advanced → Check for updates) will offer 0.3.2. You can also download the installer for your platform below.
Included pull requests
- #222 — model picker reflects what the CLI actually accepts
- #224 — keep the composer expanded when switching picker popovers
- #225 — re-query effort options after a model switch
- #227 — control-surface banner points at a command that resolves
- #228 — detect npm-installed CLI versions on Windows
- #229 — bare
host:portand keyless local LLM endpoints - #230 — parse current Claude usage output
- #231 — restyle child delegation settings
- #232 — PRs and issues workspace
- #233 — terminals in split panes
- #234 — Windows detector tests for bare-name lookup
Downloads
Installers for Windows, macOS (universal), and Linux are attached below.
| Platform | File |
|---|---|
| Windows | Ari-Setup-0.3.2.exe |
| macOS | Ari-0.3.2-universal.dmg (zip also attached for auto-update) |
| Linux | Ari-0.3.2.AppImage, Ari-0.3.2.deb |
Full changelog: v0.3.1...v0.3.2
Ari v0.3.1
Ari v0.3.1
Ari 0.3.1 is the product follow-up to the slim 0.3.0 packaging rebuild. You can split the shell across several sessions, see generated images in the transcript, keep the composer out of the way while you read, and decide when an update actually installs.
Split view
Up to six sessions on screen at once, laid out as a binary tree of panes.
- Drag a session from the sidebar onto a pane. A translucent half-pane shows where it will land; the nearest edge both splits and fills.
- Right-click a session → Open in split right / Open in split below, or right-click a pane → Split right / Split down, Zoom pane, Close pane.
- Drag a pane header onto another pane to swap them. Drag a divider to resize; arrow keys nudge, double-click resets.
- Keyboard:
Mod+\split right,Mod+Shift+\split down,Mod+Shift+Arrowmove focus. The same commands live in the palette and in Settings → Keybindings. - The focused pane is the active session for workspace lookup, Changes,
Mod+1..9, andCtrl+Tab. Layout is restored on launch.
Generated images
Provider image tools used to drop their output before the transcript. Ari now stages those bytes and renders them inline.
- Codex, ACP, MCP/dynamic tools, and Anthropic-style results are normalized into image parts.
- Assistant images render at a useful preview size. Click one to open a full-size viewer with a filename-preserving download.
- Image generation gets its own progress card (elapsed time and prompt) instead of a generic tool call.
- Grok's local
ImageGenfiles are loaded, size-checked, and shown once. Relative markdown echoes likeare stripped so Chromium does not draw a broken-image glyph.
Sessions and sidebar
- New sessions always belong to a project. The New session button,
Mod+N, and the welcome screen pick a registered project first. With no projects, Ari opens the folder dialog instead of creating an Unfiled session against$HOME. - Archive from the session row, not only the context menu. Project groups support bulk select, archive, and delete, with a confirm step for destroy.
- The Archived shelf can restore everything or empty the archive (confirm first).
- Long titles no longer run under the row action icons.
Composer
The plate now rests whenever it is empty and unfocused — before a turn, during one, and after it finishes. A plate that sprang back open the moment the agent stopped was the jumpiness this state exists to remove. Click or focus anywhere on the plate to expand it; a draft, staged images, or docked attention UI still refuse to fold.
While a turn is running, queued messages can be steered into the live turn or removed. A refused send is toasted and the text is put back in the draft instead of vanishing.
Updates
Ari no longer downloads and installs a release on its own.
- A 6-hourly check announces what exists. You choose Update, then Restart.
- A downloaded build still installs on the next normal quit if you never restart into it.
- Advanced settings shows the real app version and an action that follows the phase: Check for updates, Update, or Restart.
- Shared UI package Tailwind utilities are now generated, so the update toast (and other UI-package-only classes) actually appear on screen.
Fixes
- Switching sessions pins the transcript to the latest message instead of leaving you mid-scroll in the previous thread.
- Activity-burst liveness is scoped to the turn, so a finished tool call does not keep the burst looking live.
- Codex model discovery stays under the ACP opt-out; current CLI models are discovered instead of a stale snapshot.
- ACP
AskUserQuestiononeOf choices are answered by schema key, including multi-select arrays. Escape no longer sticks the question panel. - Removing a project no longer strands its sessions: you can add that folder back and they reattach. The remove confirmation is inset so it does not cover session rows.
- The terminal rail only starts a shell where a registered project actually exists.
- Mid-turn messages the provider never accepted stay queued instead of being dropped.
Upgrade notes
Install over any 0.3.0 build. Existing Unfiled sessions still load; new sessions require a project.
If you already have 0.3.0, the in-app update toast (or Advanced → Check for updates) will offer 0.3.1. You can also download the installer for your platform below.
Included pull requests
- #202 — keep mid-turn messages, steer/remove the queue, surface refusals
- #203 — require a project for every new session
- #204 — discover current CLI models
- #205 — turn-scoped activity-burst liveness
- #206 — terminal only where a shell can run
- #207 — re-adding a removed project restores its sessions
- #208 — inset project-remove confirmation
- #209 — ACP AskUserQuestion oneOf answers
- #210 — offer updates instead of installing them silently
- #211 — repository URLs at j35dev/Ari
- #212 — tmux/herdr-style split view
- #213 — pin transcript to latest on session switch
- #214 — rest the composer while a turn is live
- #215 — render provider image output
- #216 — image viewer, download, generation progress
- #217 — Grok generated images
- #218 — keep the composer resting after the turn
- #219 — archive from the row and bulk-manage sessions
Downloads
Installers for Windows, macOS (universal), and Linux are attached below.
| Platform | File |
|---|---|
| Windows | Ari-Setup-0.3.1.exe |
| macOS | Ari-0.3.1-universal.dmg (zip also attached for auto-update) |
| Linux | Ari-0.3.1.AppImage, Ari-0.3.1.deb |
Full changelog: v0.3.0...v0.3.1
Ari v0.3.0
Ari v0.3.0
Ari 0.3.0 is a major packaging and reliability update that keeps the full ADE experience while returning downloads to practical sizes. This rebuilt release also includes Pi usage quotas and Ari's new application icon with native transparent corners.
Download size
| Platform | Artifact | Earlier 0.3.0 | Rebuilt 0.3.0 |
|---|---|---|---|
| macOS | Universal DMG | 1.25 GB | 239 MB |
| macOS | Universal ZIP | 1.26 GB | 235 MB |
| Windows | Setup EXE | 329 MB | 116 MB |
| Linux | AppImage | 1.06 GB | 143 MB |
| Linux | Debian package | 795 MB | 112 MB |
New in this release
New Ari application icon
The desktop application now uses the new dark Ari mark on Windows, macOS, and Linux. The source artwork was cropped for icon-safe framing and exported as a high-resolution RGBA master. Rounded corners are genuinely transparent rather than filled with black, and the Windows ICO contains native 16, 24, 32, 48, 64, 128, and 256-pixel variants for crisp display throughout the shell.
Pi subscription usage in the allowance pill
Ari can now display quota windows for providers authenticated through Pi:
- Reads Pi's locally stored Anthropic and Codex credentials.
- Fetches the available five-hour and seven-day subscription windows without starting a model turn.
- Displays the active quota in the existing provider usage pill.
- Supports the relevant Anthropic and Codex response variants and reset timestamps.
- Skips direct API keys, which do not expose subscription quota information.
- Isolates provider failures so one unavailable quota endpoint does not suppress another successful result.
Credentials remain local and are used only for the providers' own usage endpoints.
Lightweight packaging restored
Ari no longer embeds duplicate ACP installations, media stacks, every architecture's runtime, or broadly unpacked dependencies. Claude, Codex, and other agents continue to use their locally installed CLIs and native protocols, preserving the existing ADE behavior while removing hundreds of megabytes from every installer.
Packaged Focus Music playback fix
The production Content Security Policy now explicitly permits HTTPS media streams. Previously, development playback worked but packaged builds rejected the audio source in Chromium with “Playback failed in this browser.” The policy remains narrow: only self-hosted, HTTPS, and blob media are permitted.
Focus Music without bundled media binaries
The existing Focus Music interface remains intact, including playlists, timer integration, seeking, shuffle, and Quiet/Normal/Room volume modes. Playback now uses Chromium's native audio support plus a small per-platform helper fetched automatically on first use.
The helper download is:
- Selected for the current platform and architecture.
- SHA-256 verified before activation.
- Written through a temporary file and atomically promoted.
- Cached in application data for later sessions.
- Protected by manifest validation, rollback support, and isolated failures.
Expired media streams recover once while preserving position and whether playback was paused or playing. If a compatible runtime update is needed, Ari refreshes the manifest and retries once rather than entering a loop.
Agent and interface improvements
- Agent spawns now remain parked while delegation approval is pending, avoiding duplicate or orphaned child sessions.
- Added the Grok provider logo to the model selector.
- Collapsed activity headlines no longer surface tool errors as misleading burst errors.
- Project session counts fade cleanly beneath the sidebar hover menu.
- macOS tray artwork is normalized to menu-bar dimensions.
Upgrade notes
Install this build over any earlier Ari version. If you installed a previous 0.3.0 artifact, download and install the rebuilt artifact for your platform to receive the corrected packaging, Pi allowance support, and new icon.
The first use of Focus Music may briefly show Preparing Focus Music… while its verified helper is downloaded and cached. No manual dependency installation is required.
Included pull requests
- #191 — collapsed activity headline polish
- #192 — sidebar session-count hover behavior
- #193 — approval-pending spawn parking
- #195 — Grok provider logo
- #196 — macOS tray icon sizing
- #197 — slim packaging and on-demand Focus Music engine
- #198 — Pi provider usage quotas
- #199 — new Ari application artwork
- #200 — transparent icon corners and regenerated platform assets
Ari v0.2.9
Ari 0.2.9 is the first build that lets an agent running inside Ari spawn and coordinate other Ari sessions. That orchestration surface is early beta: it is on, it is usable, and it will change. Treat it as something to try, not something to bet a workflow on yet.
Thanks to @j35dev for the work in this release.
Agent-native orchestration (early beta)
An agent inside Ari can now create, prompt, inspect, wait on, integrate, stop, and destroy child Ari sessions. Ari stays the environment; the parent model chooses the strategy. (#162)
- Children are real sessions. They show up in the sidebar as a nested tree under the parent, with a branch mark on orchestrator rows. Activity for live children docks as a drop-up on the composer rather than filling the transcript.
- Isolated worktrees by default. Coding children start from a snapshot of the parent's workspace (staged, unstaged, and non-ignored untracked files) without touching the real index or HEAD. Shared-workspace children require an explicit opt-in and policy allowance.
- Bundled
ariCLI + skill. The desktop app injects a privatearionto each provider process PATH. No global PATH or agent config is modified.ari skill installis optional and only copies the skill into that agent's user config. - Explicit integration. Nothing is auto-merged, committed, or pushed.
session diffrecords a snapshot;session integratethree-way-merges that snapshot into the parent working tree and leaves conflicts untouched. - Subtree lifecycle. Deleting a parent (UI or
ari session destroy) stops live turns and removes the whole tree.session stopkeeps a child for follow-up; destroy removes it. - Policy and approvals. Delegation, child count, depth, recursive spawn, and shared-workspace opt-in are permission settings. The first request per root goes through the existing approval card. A child cannot gain more permission than its parent.
Early beta caveats. Expect rough edges around provider coverage, wait/timeouts, conflict handling, and how much of this each CLI actually uses without a skill install. Credentials rotate when the app restarts. This is an application authorization boundary, not an OS sandbox — tokens must not be printed or pasted into prompts.
Everyday use
- Live provider usage pill. The header shows remaining allowance for the current session (5-hour window first, weekly as fallback) and expands to a list of installed providers with reset times. Codex and Grok report live limits; Claude currently surfaces as unavailable because its adapter only returns token/cost totals. Failed refreshes keep the last reading and mark it stale. (#153)
- Drag to reorder projects. Project groups in the sidebar can be dragged by their header, or moved with Move up / Move down in the context menu. The stored order survives restarts and drives Mod+1..9 / Ctrl+Tab. Unfiled stays a trailing, non-draggable group. (#155)
- Ari Dev is a separate app.
pnpm devnow runs as Ari Dev with its own profile (%APPDATA%\Ari Devon Windows, OS equivalent elsewhere), so it can sit next to an installed Ari. Packaged installs are unchanged. Two unpackaged processes still collapse to one window. (#154) - Composer drafts survive session switches. Unsent prompt text is keyed per session. Switching away and back restores it; send and stash still clear it. (#158)
- Steered follow-ups stay in the transcript. A prompt sent while a turn is running used to vanish on providers that can steer mid-turn (Claude stdin, ACP). It is now journaled as a normal user message. Providers without steering still show the queued chip. (#159)
- Dead slash-command popup removed from the composer. (#161)
Docs and repo
- Clone URLs, release links, and README badges now point at
j35dev/Ari. (#156) - Human-facing
CONTRIBUTING.md, plus bug / feature / good-first-issue templates. (#157) - Internal planning docs are no longer in the public tree. (#160)
Downloads
Installers for Windows, macOS (universal), and Linux are attached below.
| Platform | File |
|---|---|
| Windows | Ari-Setup-0.2.9.exe |
| macOS | Ari-0.2.9-universal.dmg (zip also attached for auto-update) |
| Linux | Ari-0.2.9.AppImage, Ari-0.2.9.deb |
Full changelog: v0.2.8...v0.2.9
Ari v0.2.8
Ari 0.2.8 brings the latest Codex models into the picker and improves everyday terminal and sidebar use.
- Codex model discovery uses your installed CLI. Catalog reads retry stale or failed discovery, and the picker updates when live results arrive. New models do not need to be added to a hardcoded list. (#149)
- Codex reasoning-effort options appear when the background ACP probe finishes. (#147)
- Selecting terminal output copies it automatically. Clipboard text pastes with Ctrl+V, Ctrl+Shift+V, Cmd+V or Shift+Insert; Ctrl+C copies selected text and interrupts when there is no selection. Native CLI image paste remains available for text-free Ctrl+V. (#150)
- Session rows are indented beneath their projects for a clearer sidebar hierarchy. (#151)
- The system tray uses Ari's branded icon, including a multi-resolution Windows icon. (#148)
Thanks to @j35dev for the fixes and release.
Full changelog: v0.2.7...v0.2.8
Ari v0.2.7
Custom endpoints survive a flaky provider
A user's custom endpoint failed constantly under Ari Core while the same endpoint served other harnesses fine. The session journal settled it: four rounds of a turn succeeded, then three 500s landed inside 152 ms and the turn died claiming the model had returned an empty response. An earlier lone 500 in the same turn had been recovered from — so the request was never the problem. The endpoint flakes, and Ari had no HTTP retry anywhere in its request path.
- Retry with backoff. Every streaming transport now retries the connection attempt with exponential backoff and jitter — 5 attempts over roughly 8 seconds. Only congestion and upstream faults qualify (408/425/429/500/502/503/504/529); a status about the request itself, like a 401, fails straight away instead of burning your quota four more times. An endpoint's
Retry-Afterwins when it sends one, capped so a turn is never parked for a minute, and hitting interrupt ends the sequence rather than waiting out a backoff. - The endpoint's own error text is shown. Ari read no response body on a failure, so a gateway's explanation was discarded and every failure printed the same nine words. You now get the status, the attempt count and what the endpoint actually said.
- A broken stream is reported, not swallowed. A connection that died mid-response used to end the round as though the model had simply stopped, or crash the turn with a raw rejection. It now reports the break, keeps the content that arrived, and discards the half-parsed tool call it cut off.
- A transport failure is no longer blamed on the model. The empty-response guard fired instantly with no delay and could not tell a silent model from a dead socket, so it spent its whole budget inside one failure window. Hard endpoint failures now read as themselves, and the turn banner classifies them as Endpoint is failing with somewhere to go next.
- A silent endpoint no longer hangs the turn. A gateway that accepts the connection and then goes away used to leave the turn spinning until you noticed and interrupted by hand. There is now a 120-second silence budget between lines — generous on purpose, since a reasoning model behind a buffering proxy can be slow to its first token.
- An over-long conversation says so. A context overflow arrives as an ordinary
400, so it read as a malformed request. Ari recognises the phrasings endpoints actually use and tells you the transcript outgrew the model's window, with a Conversation too long banner.
Terminal works in packaged builds again
The prebuilt pty binaries now ship with the app on every platform, so the terminal opens to a working shell instead of a blinking cursor in an installed build. Packaging fails loudly if a binary ever goes missing again, rather than shipping a dead terminal — and the universal macOS build now carries both the Apple silicon and Intel addons, which it previously dropped.
Notes for this build
- Installers for Windows, macOS (universal) and Linux are attached below.
- If you point Ari Core at an Anthropic-compatible third-party endpoint rather than Anthropic itself, requests still carry
cache_control. Proxies that reject unknown fields will error; Anthropic's own API and most compatible proxies accept it.
Ari v0.2.5
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 branchari/<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 onari/<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 rendersTurn 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
readcan 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.fonton an offscreen canvas, wherevar()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
Ari v0.2.4
Patch release over 0.2.3. Recommended for anyone driving ACP agents — on 0.2.3 the permission modes were effectively advisory (every tool call still parked on you), and a turn could be failed as an authentication problem while it was legitimately waiting for your answer.
Fixed
- Full auto and Allow edits did not actually grant anything. The permission mode was sent to the agent as a mode selection, but Ari never acted on it locally: every
session/request_permissionstill parked as an approval card, so "Full auto" meant "ask me about everything, twice". Requests are now auto-answered against the active mode. Mode selection also resolves each harness's own advertised vocabulary — a bypass-flavored id (codexYolo, claudebypassPermissions, opencodebuild) is preferred over a classifier-based auto mode, since the classifier re-asks — and the permission chip lists the modes the connected agent actually offers instead of a hardcoded four.askstill refuses to guess, so an agent with an unrecognised vocabulary is never silently escalated to write access. (#121) - A turn that waited on you was killed as an auth failure. The prompt-stall watchdog failed any turn whose agent stayed silent for 120s, which caught two legitimate silences: a permission request or question parked on the user (taking more than two minutes to answer killed the turn), and Claude's adapter going quiet while it compacts a long session. The failure then read as an authentication problem, because the watchdog's message ends "waiting for login" and the renderer's error classifier matched the bare word "login" before the stall family. Outstanding server→client requests are now tracked, and the watchdog skips while one is parked; answering one resets the stall clock, so what gets measured is the agent's response to your answer, not the time you spent thinking. The default ceiling moves from 120s to 300s (
ARI_ACP_PROMPT_STALL_MSstill overrides) so compaction-length silences survive, and stall failures now classify as "Agent timed out". (#122) - A long draft slid the mention overlay off the prompt box. The mention-highlight mirror was absolutely positioned against the whole composer plate — attachment strip and foot row included — so once the text passed the field's max height the overlay bled about 40px past the textarea onto the send and stash controls, its scroll range desynced by roughly two lines at the bottom, and the textarea's scrollbar skewed wrap width by 16px against the overlay's, doubling lines. The textarea and its overlay now share their own positioning box, and both layers reserve the same scrollbar gutter, so clipping, scroll sync and wrapping match by construction. (#123)
Added
- Completion sound. A settling turn plays a soft synthesized cue — a rising fifth for completion, a muted falling third for failure. Web Audio, like the launch signature, so there is no audio asset. It fires for live settles only, never journal replay, so reopening a finished session stays silent. Toggle at Settings → Notifications → Completion sound (on by default). (#120)
Installers
- Windows:
Ari-Setup-0.2.4.exe - macOS:
Ari-0.2.4-universal.dmg(unsigned — right-click → Open on first launch) - Linux:
Ari-0.2.4.AppImage,Ari-0.2.4.deb
0.2.3 installs on Windows and AppImage pick this up automatically on next launch; the update downloads in the background and installs on quit.
Contributors
@tahacore
Ari v0.2.3
Feature release since 0.2.2. Ari Core can actually work a repository, you can sign into agents without a terminal, edit each agent's own config files from Settings, import existing Pi sessions — from Settings or from the project you're in — and answer an agent's questions or approve its plan without leaving Ari.
Contributors: @tahacore · @jdholst
Thank you @jdholst for the project-scoped Pi session import and the import UX pass (#113, #114) — that work ships in this build.
Numbering note. This drop was briefly published as
v0.3.0. That release has been withdrawn and renumbered so the app stays on the 0.2.x line. Everything that was in 0.3.0 is inv0.2.3, plus the fixes and the M34 work that landed after it. @jdholst's contributions and credit carry over unchanged.
Highlights
Ask the user, approve plans (M34) — @tahacore
An agent that wants to ask a question or have a plan signed off now gets a real UI instead of a dead reverse-RPC. Grok's ask_user_question was answered method-not-found, so questions vanished and plan mode read the refusal as a client disconnect.
ask_user_question/elicitationparks the turn as input requested for every ACP provider and Ari Core. Questions are a one-at-a-time interview: one prompt, full-width options, an Other field on every choice list, Back/Continue. Submitting drops the overlay immediately so a locked card cannot stick while the engine journals the answer.exit_plan_modeanswers as JSON-RPC success (approved/cancelled/abandoned), and plan review opens a markdown rail beside the transcript.session/loadreplay is no longer folded into the follow-up assistant message, so a resumed turn stops reprinting history.session/resumeis preferred when the agent advertises it.- The effort chip is real now: it reads each harness's advertised thought level (or
effort/thinkingaliases, or pi-style thinking modes) and hides when a harness has none. Grok getsminimal–xhigh, including--efforton spawn; Ari Core sendsreasoning_efforton its HTTP request and finally appears in the models catalog the chip reads from.
Ari Core, for real (M33) — @tahacore
The built-in harness could not previously work a repo: tools used names models are not trained on, read returned whole files, grep was literal-only, there was no ls, the prompt never named the working directory, and every turn started from an empty conversation. Custom endpoints held one hand-typed model id.
- Tools are now
read/write/edit/glob/grep/ls/bash, with pagination, real regex grep (ripgrep, JS fallback matching rg globs), and a timeout on bash. - Per-turn system prompt from the actual workspace (cwd, platform, git,
AGENTS.md/CLAUDE.md). - Conversation memory across turns (disk-backed per session), with older context summarized instead of dropped.
- Fetch every model an endpoint serves; pick a default; the key typed in the form is the one that is sent.
- Thinking (
reasoning_content,<think>) is not dumped as the assistant reply; leftover DSML tool calls are recovered.
Import existing Pi sessions (M32) — @tahacore · @jdholst
Replay a Pi session into Ari's own journal. Pi's file is only read, so the history stays resumable in Pi.
- Settings → Agents → Pi lists sessions with title, date, and folder; already-imported rows are marked.
- @jdholst (#113): a finished import shows up in the sidebar immediately; per-row error with Retry; busy/loading states so a slow replay cannot be double-clicked.
- @jdholst (#114): Import on each project menu, scoped to that project's Pi sessions; opaque candidate ids instead of renderer-controlled paths; macOS
/varvs/private/varworktree identity. - Provenance survives the first live Ari turn, so the original Pi file cannot be imported twice.
Configure an agent from Ari (M31) — @tahacore
Settings → Agents edits the vendor's own files (settings.json, SYSTEM.md, AGENTS.md, …) in a jailed editor. Ari stores what you type and only refuses JSON the agent could not load.
Sign-in without a terminal (M29) + ACP transport (M30) — @tahacore
ACP login is a button that runs the agent's own OAuth command. Auth walls no longer fall back to a CLI that cannot sign anyone in.
Also: do not mute Pi's thinking by writing the wrong mode; --no-install probes no longer download anyway; ACP shutdown uses the shared teardown ladder (Windows process leaks); context-window gauges are not summed as input tokens.
Tool cards and errors (M28) — @tahacore
Expanded tool steps brand as Ari Run / Edit / Read / Search. Result bodies get copy + show-more. Turn failures get a classified banner (auth, rate limit, spawn, timeout) instead of vanishing. Failed command dispatches toast.
Transcript scrolling — @tahacore
Long sessions no longer hitch, flash, or stick. Rows stay in document flow with content-visibility instead of being remounted by a virtualizer at estimated heights, so the wheel drives one continuous page. Wheel-up unpins immediately, the stick-to-bottom band only re-engages when you scroll back toward the tail, and measurement corrections wait out an in-flight gesture so Chromium does not cancel it (#104, #116).
Other
- Pi's ACP startup prelude is hidden instead of being printed as the session's first assistant message (#117).
- macOS titlebar wordmark no longer sits under the traffic lights (#103).
- A/B race mode and the unreachable ProjectsView settings task are gone (#105).
Commits
| Commit | Author | Change |
|---|---|---|
902f73e |
@tahacore | feat(ui): one-at-a-time questions and plan review rail |
40d060a |
@tahacore | fix(providers): show Ari Core effort chip |
b1714b3 |
@tahacore | fix(providers): show Grok and Ari Core effort levels |
e902aad |
@tahacore | feat(providers): import effort levels from ACP harnesses |
4e779d5 |
@tahacore | feat(providers): ask the user, approve plans, skip load replay |
1e6261c |
@tahacore | fix(providers): hide pi ACP startup prelude |
29d823f |
@tahacore | fix(ui): scroll the transcript as one native document |
68cfe34 |
@tahacore | fix(ui): stop long-session transcript scroll from sticking |
b176ebc |
@jdholst | feat(desktop): add project-scoped session import |
23c3a68 |
@jdholst | fix(engine): canonicalize worktree path identity |
600b7ed |
@jdholst | fix(providers): improve session import UX |
03f0344 |
@tahacore | fix(desktop): keep imported pi provenance after the first live turn |
ab2d2af |
@tahacore | feat(providers): import existing pi sessions into Ari (M32) |
92ea8d6 |
@tahacore | feat(providers): configure an agent's own config files from Ari (M31) |
59202c3 |
@tahacore | fix(providers): close the ACP transport gaps found reviewing pi (M30) |
5b0a402 |
@tahacore | Provider sign-in without a terminal (M29) |
7b58b97 |
@tahacore | feat(ari-core): rebuild built-in tool surface with real capabilities |
1c22498 |
@tahacore | feat(ari-core): discover endpoint models and store many per endpoint |
4edc26b |
@tahacore | feat(ui): manage many models per custom endpoint in settings |
cc6a0a4 |
@tahacore | feat(ari-core): give the harness memory across turns |
da57d85 |
@tahacore | feat(ari-core): summarize older context instead of dropping it |
21b3334 |
@tahacore | perf(ari-core): run read-only tool calls concurrently |
087d834 |
@tahacore | fix(ari-core): advertise tools on the request and recover DSML calls |
10febc3 |
@tahacore | fix(ari-core): keep model thinking out of the assistant reply |
a224c1d |
@tahacore | fix(ari-core): match ripgrep glob semantics in the JS grep fallback |
7a4555b |
@tahacore | fix(ui): send the endpoint key typed in the settings form |
698cea3 |
@tahacore | test(ari-core): exercise the harness end to end on a real workspace |
ad86232 |
@tahacore | feat(ui): brand tool steps as Ari tools with structured expanded views |
570bcf9 |
@tahacore | feat(ui): copy, show-more, and Shiki highlighting on tool result bodies |
46804d9 |
@tahacore | refactor(ui): remove dead ToolBlocks per-part renderer |
c64a262 |
@tahacore | feat(ui): style engine-injected failure text as in-transcript error notes |
4341063 |
@tahacore | feat(ui): turn error banner with classifier headlines, hints, and raw details |
e584085 |
@tahacore | feat(ui): toast on failed command dispatches instead of swallowing them |
28e37ed |
@tahacore | fix(ui): stop transcript flash from virtualizer scroll fight |
396a575 |
@tahacore | fix(ui): drop titlebar wordmark under macOS traffic lights |
82229db |
@tahacore | chore(ui): drop A/B race mode and the ProjectsView settings task |
bd8e0f4 |
@tahacore | docs: picture in README |
PRs: #103 · #104 · #105 · #106 · #107 · #108 · #109 · #110 · #111 · #113 · #114 · #116 · #117 · #118 · #119
Installers
- Windows:
Ari-Setup-0.2.3.exe - macOS:
Ari-0.2.3-universal.dmg(unsigned — right-click → Open on first launch) - Linux:
Ari-0.2.3.AppImage,Ari-0.2.3.deb
0.2.x installs on Windows and AppImage pick this up automatically on next launch; the update installs silently on quit. If you installed the withdrawn 0.3.0 build, it will not auto-update down to 0.2.3 — install from here once, and updates resume from the 0.2.x line.
Installer files attach when the release workflow finishes.