Releases: emullernl/abundio
Release list
Abundio v1.8.0
✨ Features
-
Your
.envfiles can leave the project folder. A Workspace can now own named Environment Bundles — sets of variables sealed with AES-256-GCM under a master key kept in the OS credential store. A stolen copy ofabundio.db, a stray backup or a Time Machine snapshot yields ciphertext and nothing else, which is rather the point: commodity infostealer malware globs for.envand.env.productionsitting in plain sight. One bundle is injected into every terminal at spawn; the rest stay on disk and unread until something asks for them through the newabundio-envhelper. Variable names are plaintext (they're needed to build a shell environment without prompting your keychain), and anything running in an injected pane can still readenv— the honest threat model lives in ADR-0024. (#155) -
abundio-env, for the bundles you don't want injected.abundio-env run <bundle> -- <command>applies a bundle to a child process and execs, so the values never touch disk, never appear inps, and never go neareval. Use it in place ofdocker compose --env-file, which quietly reads a process substitution as empty — no error, just blank variables. (#155) -
The status bar now tells you which environment you're in. A green pill names the injected bundle and its variable count, which matters most in exactly the Workspace that owns both a
devand aproductionbundle. It's read-only — the status bar reports what's true; changing it belongs next to the bundles themselves. It counts rows without opening a single value, so switching workspace never triggers a keychain prompt. (#156) -
Injecting nothing is now a real choice. The separate Inject button and per-tab bolt badge collapse into one toggle at the end of the bundle row: green
⚡ Injected, or neutralInject. Turning it off leaves your bundles saved and still reachable viaabundio-env, and running terminals keep the environment they started with until restarted. A linked worktree that opts out stays opted out, even when its main worktree later injects something else. (#156)
🐛 Bug Fixes
-
abundio-envexplains itself instead of forwarding curl's homework. Asking for a bundle that doesn't exist used to producecurl: (22) The requested URL returned error: 404— a line mentioning neither bundles, nor workspaces, nor what to type instead. The helper now translates: a missing bundle names itself and lists the bundles you do have, a locked credential store says so and tells you how to retry, and an unreachable app reads as an unreachable app.runstill refuses toexecon failure, and now says which command it declined to run. (#157) -
Pane reset restores your scrollback again. A latent bug surfaced while wiring bundle changes through to open terminals:
resetTerminalnever cleared its startup buffer, so the pane menu's Reset brought back no history and never relaunched a stamped agent. (#155)
⚠️ Upgrade note
Back up abundio.db before installing. This release moves versioned state into a new data epoch at <data>/abundio/v2/ — the database, PTY logs, shell-integration scripts and window state — and migration 013 drops a column that older builds still read. Your existing data is imported automatically on first launch, and a co-installed older build keeps its own database, but there are no down-migrations and pointing an old binary at the v2 database will fail. Migration 013 was verified against a copy of a real 27-workspace database: integrity_check ok, counts unchanged, no foreign-key violations.
Abundio v1.7.9
🐛 Bug Fixes
-
Grok Build panes no longer sit on Waiting for the whole turn in auto-approve mode. The previous fix assumed Grok asks permission before running a tool. It's the other way round: Grok fires
PreToolUsefirst, then the permission notification — so the "resume" signal arrived before the Waiting did, and nothing was left to clear it. Grok's hooks now carry the permission mode, and a permission prompt in auto or bypass mode is treated as "carry on working" rather than "blocked on you." Ask and plan modes still show Waiting exactly as before. (#153) -
Dragging a workspace to reorder it in the sidebar now actually sticks. The drop indicator moved, the database happily recorded the new order, and then the list re-sorted itself straight back to how it was — the reorder only surfaced after a restart. The sidebar sorts by each workspace's saved position, which local state forgot to update; it now agrees with what the backend writes. (#154)
-
Panes with long-running background subagents stop declaring victory early. A safety net that pruned subagents presumed lost after 30 minutes was also catching ones that were simply taking their time, flipping the pane to Ready while the work was still in flight. That window is now two hours — plenty of room for genuinely long jobs, while session end, PTY exit, ESC, and your next prompt still clear things instantly. (#152)
Abundio v1.7.8
🐛 Fixes
- Grok Build panes no longer get stuck on Waiting while Grok is happily working away. Grok runs its permission pipeline for every tool call and emits a "waiting for permission" notification even for prompts that resolve themselves in milliseconds — always-approve mode, remembered grants, relay approvals. Abundio dutifully flipped the pane to Waiting… and since Grok has no permission-granted event, it stayed there for the rest of the turn. The status icon now uses Grok's
PreToolUsehook as the authoritative "not blocked" signal: a tool only ever runs after its permission resolves, so the pane lifts back to Working the moment the next tool executes — while genuinely pending prompts still show Waiting, and the subagent-aware Ready hold stays intact. Existing installs self-heal on next launch, no reconfiguration needed. (#151)
Abundio v1.7.7
✨ Improvements
-
Two more coding agents join the roster: Kimi Code and Grok Build. Both get PATH detection, their official brand icons, and full hook-driven pane status — so their spinner, Ready check, and Waiting glyph behave exactly like the agents you already use. Kimi (Moonshot AI,
kimi) reads its hooks from a user-ownedconfig.toml, so Abundio does format- and comment-preserving surgical edits rather than clobbering your file, and maps a real user-interrupt to Idle rather than a false "done". Grok Build (xAI,grok) branches its singleStopevent by reason — finished turns go Ready, cancelled ones go Idle, errored ones keep the Error icon instead of being papered over. (#149, #150) -
Pane status now waits for background subagents to finish before flipping to Ready. Previously, when an agent kicked off delegated work and its turn-finished hook fired, the pane went Ready while those subagents were still churning away. Abundio now tracks subagent lifecycles itself: the pane holds Working until the last one drains, then releases. Wired up across Claude Code, Codex, Copilot, Qwen, OpenCode, and the two new agents — and along the way it fixed Qwen's status hooks (silently dead until now) and OpenCode's mid-turn "Ready flash." (#148)
-
Agent hooks now self-heal on launch. "Provisioned" used to mean "a marker exists"; it now means "current." Launching an agent upgrades any stale or drifted hook config to exactly what this build expects — so an install where startup provisioning didn't quite take repairs itself the next time you start that agent, instead of quietly running on outdated hooks. (#148)
Abundio v1.7.6
✨ Improvements
- The Git changes tab grew an "Open File" button. Hovering a row now reveals an icon that jumps straight to the plain-text editor, and the diff viewer's header got a matching one — no more detour through the Explorer just to see a file without its diff markup. It's hidden for deleted files, since there's nothing on disk to open. (#147)
🐛 Bug Fixes
- New file and diff tabs now grab focus the instant they open, instead of never. Monaco loads asynchronously, and a tab's "I'm active now" moment fired before the editor had actually mounted — so the one-shot focus effect had already come and gone by the time there was anything to focus. Diff tabs had the same problem, plus a background that didn't match the code editor's. Both now focus correctly and share the same transparent backdrop. (#146)
- Closing a tab with the mouse stopped skipping the "are you sure?" prompt. Cmd+W already checked whether an agent or command was still running before closing a tab; clicking the tab's × button took a shortcut around that check entirely, so an in-flight agent could get its terminal yanked out from under it with no warning. Both paths now go through the same confirmation. (#144)
- Cmd/Ctrl+click on a terminal hyperlink works again in Claude Code panes. A heuristic that suppresses link-opening for CLIs with their own hyperlink handling (like Copilot CLI) started misfiring once Claude Code CLI began enabling that same mouse-tracking flag without actually handling clicks itself — so links just went dead. Force-click now bypasses the heuristic. (#144)
Abundio v1.7.5
✨ Improvements
- The pane status icons got a brain transplant. Those little colour-coded status icons that tell you what each pane is up to — Idle, Working, Waiting, Ready, Error — used to be an emergent guess, stitched together from logic scattered across half a dozen files that each had their own opinion. They're now driven by a single, pure status machine: one place that decides every transition, pinned down by ~45 tests. Same icons, same colours, far less room for them to quietly disagree with reality — and it dissolved a long-standing race where a pane exiting at just the wrong moment could leave its indicator telling fibs. (#141)
🐛 Bug Fixes
-
Your edit turns stop getting marked
+0 −0for a full day's honest labour. The Statistics overlay used to grade each turn as a net delta against the base branch — so reverts got floored to nothing, re-edits of lines an earlier turn already touched counted for zilch, and add/remove churn quietly cancelled itself into oblivion. It now measures each turn as a real before-and-after diff of your working tree: in-place edits, reverts, refactors, and brand-new files all finally get credit, while your staging area doesn't feel a thing. The "Net lines" card has also dropped the false modesty and now reads "Lines changed." (#142) -
GitHub Copilot stopped ghosting the logbook. The shiny new status machine (above) shipped with one rough edge: it left Copilot recording a grand total of zero turns. Copilot's dramatic full-screen entrance floods the terminal on launch, the activity detector assumed work was already underway, and so its very first turn never got the chance to clock in. Patched in the same release — Copilot's back on the timesheet, right alongside every other agent. (#142)
Abundio v1.7.4
✨ New Features & Improvements
-
Abundio now asks before yanking a workspace out from under live work. Unloading a workspace that still has a busy agent or running command pops a confirm first, instead of cheerfully terminating it mid-thought. (#133)
-
Refresh icons spin while they're actually refreshing. The git and PR refresh buttons now rotate until the data lands, so you can tell they're working and not just quietly ignoring you. (#132)
-
Giant stat counts get the K/M treatment. The Statistics overlay no longer tries to wedge
1,234,567into a tiny chip — counts at/above 10K now shrink to tidy12.3K/1.2M. Smaller numbers stay exact. (#138) -
Clicking into a pane clears a waiting agent's dot. A waiting agent's sky-blue dot used to only clear on a keystroke; now a click inside the terminal also counts as "yes, I've got it." (Title-bar clicks and tab switches leave it lit, as before.) (#140)
🐛 Bug Fixes
-
Agents survive a terminal restart — and stay dead when you actually kill them. Panes now remember which agent they were running and relaunch it after a restart. But if you exit an agent yourself (
/exit,Ctrl+C), it stays exited instead of stubbornly rising from the grave on the next launch. (#136) -
Adding a worktree no longer eats your agent and setup commands. A race between the in-app
git worktree addand the disk watcher could leave you staring at a plain terminal — your chosen "Launch with" agent and setup commands quietly swept off the floor. macOS was especially fond of winning this race (slower file checkouts). The worktree now gets properly seeded regardless of who crosses the line first. (#137, #139) -
"Skip" and "Later" on update prompts finally mean it. Skipping an update version now actually sticks across windows and restarts, and "Later" snoozes the nag for a full 24h instead of bouncing back at the next check. (#135)
-
Friendlier messages when GitHub is out of reach. Offline or stuck behind a captive portal, the PR panel used to greet you with a raw Go transport error and your entire echoed GraphQL query. Now it's one calm human line — "Can't reach GitHub — check your internet connection." — and responses it can't parse get "Couldn't read GitHub's response — try refreshing." (#130, #131)
Abundio v1.7.3
🐛 Bug Fixes
- Custom bash prompts (e.g. nerdps1) now apply inside panes on Linux. A user's configured prompt stayed the distro default (
user@host:~/dir$) instead of their own; macOS/zsh was unaffected. The bash shell-integration wrapper sourced~/.bashrctwice — once indirectly (Debian's~/.profile/~/.bash_profileruns. ~/.bashrc) and once directly via the wrapper's finalsource ~/.bashrc. That's harmless for idempotent configs, but it breaks re-source-guarded prompt tools: on the first pass nerdps1 loads fully and setsps1_loaded=1, then the second pass re-applies the defaultPS1and nerdps1's guard ([ "$ps1_loaded" ] && return 0) early-returns — so the system default prompt sticks. The wrapper now temporarily wrapssource/.while sourcing the login profile files to detect whether they already pulled in~/.bashrc, and only sources it itself if they didn't, so~/.bashrcruns exactly once regardless of the profile layout. System-wide files (/etc/profile,/etc/bash.bashrc) are still sourced first. Verified against a guarded nerdps1 stand-in across Debian-style, no-profile, and profile-without-bashrc layouts. (#129)
Abundio v1.7.2
🔧 Under the Hood
- macOS microphone permission plumbing + a startup diagnostic probe. This lays the OS-level foundation for voice input — it does not yet add a user-facing voice feature. The app bundle now ships
NSMicrophoneUsageDescription(the TCC consent string, without which macOS kills the process the instant it touches the mic) and thecom.apple.security.device.audio-inputentitlement (required under the hardened runtime for the signed/notarized release artifacts the updater ships). A one-time startup probe — main window only, so the Settings window doesn't double-prompt — callsgetUserMedia({ audio: true })to surface the macOS permission prompt and log exactly which layer fails, distinguishing an outright denial from a non-secure-context webview wherenavigator.mediaDevicesis unavailable. All probe output is prefixed[mic-probe]. (#128)
Abundio v1.7.1
🐛 Bug Fixes
-
Agents installed via interactive-shell config (e.g. Claude Code) are now detected in Settings. PATH was resolved with a login, non-interactive shell (
zsh -l -c), so.zshrcwas never sourced — tools whose installer only adds them to PATH from interactive config (Claude Code at~/.local/bin, etc.) showed as "not installed", even though they run fine inside a pane. Detection now spawns the shell with-l -ito match the PTY spawn flags, so Settings and the real shell agree. The probe is hardened too: its stdin is nulled so a sourcedreadgets EOF instead of blocking, and the call is bound by a 5s timeout that kills a slow/wedged rc file (compinit, nvm, network plugins) and falls through to the Homebrew fallback. (#126) -
Overview bar agent/shell counts stay accurate after closing tabs, panes, and workspaces. The live counts are derived from PTY activity, but closing a tab or pane never purged the closed pane's entries, and deleting a workspace from the sidebar leaked them. A background tracker started on unmount was also never stopped, so its exit handler could re-create entries and intermittently inflate the Error tiles. Every permanent-close path now routes through a single teardown that stops the tracker, disposes the terminal without re-tracking, kills the PTY, purges its activity entries, and clears persisted scrollback logs. See ADR-0020. (#127)