-
v1.8.7 Stable
released this
2026-09-24 08:56:00 +00:00 | 158 commits to main since this releaseSplit panes on one lane, edit files in place, and review changes hunk by hunk.
- Split panes stay on the lane you picked. In 2- and 4-pane view every pane shows the selected lane, each with its own terminal session, and a pane's Active runs no longer lists a terminal another pane is already showing.
- Edit a file right in the Changes panel. Open a file, press Edit, then Save (or Ctrl/Cmd+S). If the agent changed the file while you were editing, the save is refused and your draft is kept, so nothing is overwritten. A file that cannot be edited (binary, or over 1 MB) now says why.
- Review one change at a time. Each hunk gets a small bar under its last changed line with previous/next arrows, "n of N", Undo and Keep. The arrows now move to the next and previous change reliably.
- See what changed in the file tree. The Files tab lists new untracked files and colours entries by status: modified in amber (M), untracked in green (U), plus A/D/R, and folders holding changes get a dot.
- Unstage all. Sits on the same single row as the commit box and Stage all.
- Simpler panel sizes. The Changes panel steps Narrow → Medium → Full screen → closed.
- Less clutter. The "Claude needs your permission" banner is gone from the lane card; the lane strip still shows it.
- Tests no longer kill your terminals. Running the server tests (including on every commit) used to close real lane tmux sessions; they now run on a private tmux server.
Downloads
-
v1.8.6 Stable
released this
2026-09-24 07:40:32 +00:00 | 161 commits to main since this releaseA safer, steadier lane git surface.
- Prompt suggestions are back. Typing
/in the run form lists the lane's commands and skills (plus the CLI's built-ins) and@lists its files; Enter picks the highlighted one. - Active runs shows this lane only. The run list no longer mixes in every other lane's runs and sessions.
- No empty box. The lane-detail area no longer shows an empty frame when the lane has nothing extra to report.
- Git lives beside the diff. The branch line, the uncommitted-files hover list and the Fetch/Pull/Push/Branch actions moved from the lane card to the top of the Changes panel — one compact row, with the panel's tabs and range on a second — and they refresh together: a stage, discard or commit updates the counts at once, and a pull re-reads the diff. The git bar no longer commits — the panel's staged-only box is the one way to commit, so nothing sweeps in files you did not stage.
- Review hunk by hunk. In Review (and the single-file view) every
@@section has its own Stage and Undo — undo one section instead of the whole file; Undo asks twice. Each file's name stays pinned at the top while you scroll through it, with the file's own Stage/Unstage/Discard beside it. - Changes panel, roomier. A fourth width step shows Changes full-width; Stage all stages every unstaged file in one click; the commit box sits at the top and, like the Files finder, stays in view while you scroll; Expand all folders is one request instead of one per folder, so it is instant on large repos.
- Lanes stay inside their folder. A lane that is a subfolder of its repo now lists and acts on only its own files — reads, stage/unstage/discard, commit and the file list. A commit is refused (
400 ESTAGEDOUTSIDE) while something outside the lane is staged, so it can never sweep in another lane's work. - The router key is never shown. Any
settings.local.json(where a lane's AI Router key lives) is refused with403 ESECRET, on disk and in history, including through symlinks. - File names are file names. Git calls treat paths literally (no glob surprises) and parse odd names correctly.
- Push and errors. Push picks the branch's own remote (or the only one), with a clear message when there is none; a git refusal (rejected push, bad credentials, diverged pull) is reported as
409 EGITwith git's own text instead of a server error. Unstaging a rename unstages both halves. Git writes from two lanes sharing one repo no longer race onindex.lock. - Changes panel. Switching lanes, or typing fast in quick-open, can no longer paint another lane's or an older search's results; Enter on a file path opens it; a pending discard is disarmed on lane switch.
- Large diffs. Diffs over 500 rows render only what is on screen, so very large files stay smooth; side-by-side columns stay in step.
- Git bar & tooltips. No "in sync" without real counts, the branch list refreshes after a switch, no stale facts after switching lanes, and tooltips no longer flicker or vanish on unrelated scrolling.
Downloads
- Prompt suggestions are back. Typing
-
v1.8.5 Stable
released this
2026-09-24 03:30:33 +00:00 | 167 commits to main since this releaseEvery screen follows the theme you picked.
- Terminal follows the theme. The lane terminal uses the palette of your selected dark theme (it stays dark in light mode) and repaints the moment you switch themes.
- Charts follow the theme. Dashboard and Workflows charts draw grid lines, axes, labels and tooltips from the theme instead of fixed dark colours, and the activity heatmap now ramps from the page colour to the accent, so it no longer turns near-black on light themes.
- Readable text in light mode. Status and label colours that were only legible on a dark background (sessions, conversations, workflows, config, settings) get a darker shade in light mode. Chart category colours are unchanged.
- Sidebar language buttons fixed. The EN / VI buttons beside the three theme buttons (Dark / Light / System) are full width again, with their labels centred instead of squeezed off to one side.
Downloads
-
v1.8.4 Stable
released this
2026-09-24 02:48:17 +00:00 | 170 commits to main since this releasePick your own look, and Add lane no longer does nothing.
- Appearance settings. Settings → Appearance picks Dark / Light / System (System follows the OS, live) and a named theme per mode — dark: Default, Darcula, Apple Dark; light: Default, Apple Light, IntelliJ Light, Canvas. Each mode remembers its own theme, so the sidebar's quick toggle (now with a System button) swaps between the two. Stored per browser.
- No colour flash on reload. The chosen mode and theme are applied before the first paint.
- Clearer diffs. Added/removed rows in the Changes panel carry a stronger tint, a coloured bar on the left edge and a bold +/- marker, and the changed-word highlight is visible on light themes too.
- Add lane works for a folder inside another lane (#42). Adding a lane in Repo mode (or "Current branch") for a folder nested inside an existing lane's folder used to quietly return the parent lane: the dialog closed and no new card appeared. The folder now gets its own lane, and if that exact folder already has one, the dialog says which lane it is instead of closing. (
POST /api/lanes/ensuregained an optionalexact: true.)
Downloads
-
v1.8.3 Stable
released this
2026-09-23 09:46:40 +00:00 | 172 commits to main since this releaseTwo fixes.
- Health Score no longer penalises a healthy server. The V8 Heap bar and the Health Score's heap component divided by the heap's current size, which reads 70-90% on a perfectly healthy process. They now divide by the heap's real limit (
server.memory.heapLimit, new inGET /api/settings/info). - Update now works on older Claude Code. An older
claudehas no-yonplugin install|updateand failed withunknown option '-y', stopping Update now, Update all, the plugin buttons and the automatic superpowers install. Each now retries without the flag when, and only when, the CLI rejects it;/agenthub-updatefalls back the same way. An install that is stuck on this error today can recover withclaude plugin marketplace update <marketplace> && claude plugin update agenthub@<marketplace>.
Downloads
- Health Score no longer penalises a healthy server. The V8 Heap bar and the Health Score's heap component divided by the heap's current size, which reads 70-90% on a perfectly healthy process. They now divide by the heap's real limit (
-
v1.8.2 Stable
released this
2026-09-23 06:23:40 +00:00 | 175 commits to main since this releaseA calmer light mode, and a lane console that no longer dead-ends on a busy lane.
- Warm light theme. Light mode moves off cool near-white onto a warm ivory/terracotta family, one notch below full brightness and with no pure-white surface, so large panels stop glaring. Cards sit brighter than the page and every hover lifts. Dark mode is unchanged.
- Status colours are the same everywhere. Success/warning/danger chips and alert strips are pre-mixed instead of translucent, so one status no longer renders as a different colour on every surface, and every label clears 4.5:1 on its own chip. Code highlighting has a dedicated light-mode palette.
- Enter sends the prompt. Shift+Enter inserts a newline, Ctrl/Cmd+Enter still works, and typing Vietnamese/CJK with an input method never sends by accident.
- A busy lane attaches instead of failing. Starting or resuming a session on a lane that still holds a live run now attaches to that run with a notice, instead of showing a raw 409 error.
- Kill from Active runs. Live dashboard-started sessions get a two-click Kill, the way to free a lane when the previous session really should go.
Downloads
-
v1.8.1 Stable
released this
2026-09-23 02:18:31 +00:00 | 178 commits to main since this releaseA git view for every lane, right on the dashboard — read files and review code changes without opening a terminal.
- Changes card (#34, #35). Sits beside the lane detail with five modes: Files (directory tree), an overview of changed files, Review (the whole diff, each file collapsible), a single file, and the commit history. One header control steps its width narrow → 50/50 → 70/30 → closed.
- VS Code-style diff viewer. Unified or side-by-side; the two columns scroll independently on both axes (no more text painted over itself), context lines expand and collapse, syntax highlighting and intra-line emphasis, whole-file view.
- Commit exactly what you picked. The commit box commits the staged files only, not everything. Git actions (fetch / pull
--ff-only/ push / stage / unstage / discard / commit / switch / branch create·delete) are guarded server-side: a per-file action only accepts pathsgit statusreports as changed, anddiscardrequires an explicit confirm. - Add lane knows about branches. New or existing branch, Current branch (the lane is the repo itself), the list of worktrees already in use, source repos offered in the path field, and New lane here straight from a lane's git bar.
- Tooltips redesigned. Every native
titlein the app is now a compact, anchored, themed bubble; chart and info popovers use theme tokens.
Fix:
- Timeline rows no longer appear twice. When AgentHub's hooks were registered twice (plugin + a leftover checkout install), every event was stored twice. Ingest now drops a byte-identical redelivery of the session's latest event. Still worth removing the extra hook registration —
/agenthub-doctorreports it.
Downloads
-
v1.7.0 Stable
released this
2026-09-21 10:10:13 +00:00 | 181 commits to main since this releaseThe lane console, fixed where it was actually being used.
- Torn text when scrolling a pane (#33). xterm ran with
convertEol, which rewrites every bare LF as CR+LF — i.e. forces the cursor to column 0. tmux scrolls a pane by emitting a bare LF and then keeps drawing at the column it was on, so that draw landed at the left margin and stamped a line's first characters into the rows below. xterm's own docs say not to use that option on a PTY. Two related fixes ride along: the attach now carries the terminal's real size (/ws-pty/:runId?cols=&rows=) instead of spawningtmux attach-sessionat a hardcoded 80x24 on every attach and lettingclauderedraw its whole UI at 80 columns, and the terminal takes the keyboard on mount so typing reaches tmux without clicking the pane first. - "No image found in clipboard". The dashboard normally runs as a systemd user service, which has no
DISPLAY/WAYLAND_DISPLAY— so neither did any pane it started, andclaudein one could not read the clipboard while the same CLI pasted fine in a terminal. The graphical session's four relevant variables are now forwarded into the pane (server/lib/desktop-env.js). An already-running pane keeps the environment it was started with — restart it to get a clipboard. - A dead pane returns to the setup form. A double Ctrl+C out of
claude(orexit, or a crash) used to leave a dead terminal on screen until you found the "New run" button. - Models follow the CLI instead of this list. The model picker sends
fable/opus/sonnet/haiku— aliasesclaude --modelresolves to the latest model itself — so Fable 5.1 and every release after it arrive with a CLI update, not a code edit. Cost maths is unchanged: pricing keys off the resolved id the transcript reports. autois a permission mode, and the default. The CLI's own classifier mode: it asks only for what it reads as risky.- No prompt is sent that you did not type. Picking a pipeline no longer pre-fills its driving slash command into the prompt box, and resuming a session sends no prompt at all — whatever was left in the box used to fire an extra turn into the session being resumed.
- Notifications that landed nowhere now fall back (#29 follow-up).
POST /api/push/sendanswers 200 with{native:false,pushed:0}when this browser has no push subscription; the client counted that as delivered. A notification also carries the lane that raised it, so clicking one lands on that lane. - Account switching on macOS writes the Keychain. The
claudeCLI keepsclaudeAiOauthin the login Keychain itemClaude Code-credentialson darwin, so a switch used to rewrite a file nothing reads and the CLI kept running as the previous account. - Create/update readme file moved from the Add-lane modal into the lane's Tools menu, and the Workspace's no-lane state is a real banner instead of a dashed tile beside a stray sentence.
Downloads
- Torn text when scrolling a pane (#33). xterm ran with
-
v1.6.17 Stable
released this
2026-09-18 09:55:17 +00:00 | 184 commits to main since this releaseThree counting bugs that all read as "the dashboard's numbers are wrong".
- Tokens/cost: Claude Code writes one JSONL line per content block of an assistant message, each repeating the same
usage. Both parsers summed them, so a tool-heavy session ran 1.5–2x high ($45.82 stored vs $27.72 real on a 4h session). Each message is now counted once. - Turns: every
TurnDurationrow was stamped NOW while its dedup guard matched the transcript timestamp, so each hook re-inserted the whole turn history — 587k rows, 75% of a real events table. Same class of bug in the session metadata counters (thinking_blocks,turn_count), which are now assigned rather than accumulated. - Events: leftover checkout hook entries double every event and every subagent row.
stripLegacyHooksonly ran in the bootstrap's full pass, which a healthy install skips —hasLegacyHooksnow blocks the fast path.
A one-time repair runs at the first start after upgrading (
user_version3): it deletes the duplicatedTurnDurationrows and re-parses every transcript with exact writes (the high-water baselines make a downward correction impossible otherwise).Also: switching a lane's AI Router while a pane is live now reports
restart_requiredand offers a Restart, because Claude Code keeps the model it resolved at startup and the old router's model name would reach the new endpoint. Notification types for "Claude needs confirmation" and "Claude finished a turn" (#29), both on by default. Sidebar brand is the SmartGift wordmark with a matching favicon.Downloads
- Tokens/cost: Claude Code writes one JSONL line per content block of an assistant message, each repeating the same
-
v1.6.14 Stable
released this
2026-09-18 03:40:24 +00:00 | 186 commits to main since this releaseCloses #24 — the workflow skills, from brainstorming through implementation and review.
The review node ran nothing. Both pipeline templates declared
/superpowers:requesting-code-review— the skill about how to HAND OVER a review, not one that reviews anything — soagenthub lanes node reviewperformed no review at all. They now declare the bare/code-review, Claude Code's own. It carries noplugin:prefix, sorequiredSkillPluginsskips it and/agenthub-doctor's required-plugin row is unchanged.ship-featuregains four sections it never had:- Right-size the run. The pipeline is not free — every dispatching phase costs a model call and minutes, and the fix-loop pays it again on each lap. A typo does not enter the pipeline at all; a small single-layer change skips the plan-debate, independent-test and gate agents and lets the user's acceptance be the gate; medium/large runs everything. Sizing is a claim made out loud, and a task that grows re-sizes upward.
- Dispatching a judgement. The fresh-context / FOREGROUND / never-
fork/ hand-only-verifiable-artifacts / one-parseable-final-line contract, written once instead of re-argued in three phases — plus the rule that was missing entirely: never dispatch what a command answers. An agent is for judgement, not for typing. - Resuming after a compaction. Long runs outlive the context window; the lane skill had this and this one did not. Re-derive position from the declared stage and the diff, and treat a phase whose evidence you cannot find as one that did not happen.
- A
Leave when:line on every phase. Objective exit criteria are what stop both the silent skip and the endless polish: intake leaves when the answers are in hand, review leaves when the latest pass over the CURRENT diff is clean, the gate leaves when verification really ran AND the user said yes.
Narrower, same span: intake asks only what the repo cannot answer (a question the code could have answered spends the user's one round and earns a worse answer); implement works the approved plan task by task, re-checks each acceptance criterion, heartbeats on long work, and treats a plan that turns out wrong as a return to
planrather than a quiet substitution; tests runs the suite the diff needs rather than both by reflex.Builds on v1.6.13, which added the three stops themselves (mandatory brainstorm asked with
AskUserQuestion, plan approval before any code, and the user's acceptance at the gate with a NO-GO that re-enters by size).Downloads