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.