Skip to content

Releases: j35dev/Ari

Ari v0.3.3

Choose a tag to compare

@j35dev j35dev released this 28 Sep 07:22
c280fd7

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:blank load. Redirects to file: 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/skills and <workspace>/.agents/skills. Project skills stay off until that workspace is trusted.
  • User stdio MCP servers from mcp-servers.json mount 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 bash tool 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

Choose a tag to compare

@j35dev j35dev released this 15 Sep 15:00
63cb877

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). Missing gh or auth failures show as copy in the list, not a blank page.
  • GUI launches now resolve gh even 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:port and 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.cmd on 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/.exe instead 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, avoiding EINVAL. 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:port and 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

Choose a tag to compare

@j35dev j35dev released this 12 Sep 23:54
c6d9411

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+Arrow move 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, and Ctrl+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 ImageGen files are loaded, size-checked, and shown once. Relative markdown echoes like ![Generated image](images/2.jpg) are 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 AskUserQuestion oneOf 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

Choose a tag to compare

@github-actions github-actions released this 10 Sep 07:20
ac60925

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

Choose a tag to compare

@github-actions github-actions released this 07 Sep 14:03
66ca05e

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 ari CLI + skill. The desktop app injects a private ari onto each provider process PATH. No global PATH or agent config is modified. ari skill install is optional and only copies the skill into that agent's user config.
  • Explicit integration. Nothing is auto-merged, committed, or pushed. session diff records a snapshot; session integrate three-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 stop keeps 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 dev now runs as Ari Dev with its own profile (%APPDATA%\Ari Dev on 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

Choose a tag to compare

@j35dev j35dev released this 05 Sep 15:35
9d9762f

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

Choose a tag to compare

@github-actions github-actions released this 03 Sep 18:37
fbddc41

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-After wins 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

Choose a tag to compare

@github-actions github-actions released this 02 Sep 22:39
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

Ari v0.2.4

Choose a tag to compare

@j35dev j35dev released this 02 Sep 16:14
5c18095

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_permission still 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 (codex Yolo, claude bypassPermissions, opencode build) 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. ask still 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_MS still 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

Choose a tag to compare

@j35dev j35dev released this 01 Sep 23:46
48fa52f

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 in v0.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 / elicitation parks 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_mode answers as JSON-RPC success (approved / cancelled / abandoned), and plan review opens a markdown rail beside the transcript.
  • session/load replay is no longer folded into the follow-up assistant message, so a resumed turn stops reprinting history. session/resume is preferred when the agent advertises it.
  • The effort chip is real now: it reads each harness's advertised thought level (or effort / thinking aliases, or pi-style thinking modes) and hides when a harness has none. Grok gets minimal–xhigh, including --effort on spawn; Ari Core sends reasoning_effort on 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 /var vs /private/var worktree 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.