Releases: eqms/ai-workbench
Release list
AI Workbench v1.11.0
AI Workbench v1.11.0
What's Changed
Mouse clicks now reach the application running inside a pane.
Fixed
- [FIX] Clicks reach Claude Code and lazygit. Claude Code's "Jump to bottom
(click)" button did nothing in the workbench — and so did every other
clickable element in Claude Code and lazygit. v0.96.0 taught the workbench to
forward the mouse wheel to an inner application that enables mouse tracking,
but buttons were never forwarded: a left click was consumed locally for focus
and text selection, so theESC [ <0;col;row Mreport the application waits
for was never sent. Press, drag and release are now routed the same way the
wheel already was — if the inner application requested mouse tracking
(DECSET 1000/1002/1003), the event goes to it; otherwise nothing changes and
the local selection keeps working as before. The press captures the pane, so
a drag that leaves the pane still reports to the application that received it,
and the protocol mode is respected (no release reports to an X10-mode app, no
motion reports without 1002/1003).
Changed
- [CHG] In mouse-aware panes the mouse belongs to the application. Where an
inner application tracks the mouse, the workbench no longer starts its own
text selection — Claude Code marks text itself, and that selection was what
the workbench had been overriding all along. Panes without mouse tracking —
a plain shell, the preview pane — are untouched: click and drag still selects
and copies to the clipboard exactly as before.
Security
- [ADD] Self-update now verifies release signatures (SEC-01 Half 2 — finding
closed). Archives have been signed in CI since v1.6.0, but the client
installed whatever GitHub served: a compromised release asset would have
installed itself on every machine at the next auto-update.
src/update/install.rsnow embedssigning/ai-workbench-pub.binas
RELEASE_PUBLIC_KEYand passes it to bothUpdate::configure()chains, so
self_updaterejects any archive that is unsigned or signed with another
key. The published v1.10.1 asset was verified against the committed key
before enabling this, confirming binary and CI use the same key. Two
consequences: signing is now mandatory in the release workflow (missing
ZIPSIGN_PRIVATE_KEYfails the job instead of publishing an uninstallable
release), and--update-totargets must be v1.6.0 or newer, since
earlier releases predate signing. - [FIX]
SECURITY-NOTES.mdno longer reports two fixed issues as open.
"Shell Fallback in Dependency Probe" and "Predictable Temp File Path" were
still listed as(MEDIUM — open)although both were closed in v0.90.0 —
the shell fallback is gone fromdependency_checker.rs, and
pdf_export.rs:130usestempfile::Builder…tempfile_in()withO_EXCL.
Both moved to "Closed Findings" with the verifying evidence.
Internal
- [CHG]
portable-pty0.8.1 → 0.9.0, which drops theserialcrate
(unmaintained since 2017, RUSTSEC-2017-0008) in favour ofserial2and
pullsnixup to 0.28. No source change was required. Removes the only
cargo auditwarning that reached the project through a direct dependency. encode_mouse_button_event()andmode_reports()insrc/terminal.rs
(pure, unit-tested) next to the existingencode_wheel_event();
PseudoTerminal::send_mouse_button()writes them pastwrite_input()so the
scrollback position survives, assend_mouse_wheel()already did.App::forward_mouse_button()/App::pty_pane_rect()insrc/app/mouse.rs,
newApp::pty_mouse_capture: Option<PaneId>field.wheel_coords_in_pane()renamed topane_cell_coords()— it now serves
buttons as well as the wheel.- 267 unit + 3 CLI tests pass (+4).
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.
AI Workbench v1.10.1
AI Workbench v1.10.1
What's Changed
Follow-up review of the v1.10.0 security work. One functional regression, one
gap in the git hardening, and three parsing/robustness defects.
Fixed
- [FIX] Pulling is possible again. v1.10.0 turned
git.auto_fetchoff by
default, which also removed the only path togit pull: the pull dialog was
raised solely by the automatic remote check, so with the new default nothing
could reach it. TheGitConfig::auto_fetchdoc claimed "Manual pull (Ctrl+G)
is unaffected", but no such binding exists —gin the file menu is "Go to
path". There is now a real entry: F9 →p, which asks before pulling and
works regardless ofauto_fetch(that setting governs whether navigating
into a repository talks to the network, not whether you may ask it to). - [FIX]
git pullno longer runs the repository's hooks.git_command()
pinned six config keys but notcore.hooksPath, so confirming the pull dialog
in a tree you had only navigated into executed.git/hooks/post-merge. Clones
do not carry hooks, but an unpacked archive containing.git/does. Now
pointed at a path that is never a directory, verified against a real
post-mergehook. Hooks are disabled for our git calls only — the Terminal
and LazyGit panes run git unpinned. - [FIX] The trust check and the config load no longer read the file twice.
local_config_status()hashed one read of./config.yamland
load_config_checked()then parsed a second, so what was approved and what was
loaded could differ. Newread_and_classify_local_config()reads once and
hands the bytes to the caller;save_config()likewise pins the bytes it just
wrote instead of re-reading them. - [FIX] Paths with non-ASCII characters get their git color back.
core.quotePathwas left at its default, sogit status --porcelainreturned
"\303\234bung.txt"forÜbung.txt— a path that never matches anything on
disk, leaving the file rendered as clean. Now pinned tofalse. - [FIX] A localized git no longer turns a missing remote into an error. The
"no remote configured" branch matches on English stderr (Could not resolve);
under a German locale it fell through to the error path.git_command()now
setsLC_ALL=C. - [FIX] An unreadable-but-present
config.yamlis reported. When
canonicalize()failed,local_config_status()returnedAbsent, which
suppressed the "your config is being ignored" warning. It now returns
Untrusted— still fail-closed, but visible. Trusting and loading also agree
on UTF-8 handling now, so a file with invalid UTF-8 can no longer be approved
and then abort startup.
Changed
MenuBarindices are derived from a singleITEM_COUNTconstant with a
debug_assertagainst the rendered list; the wrap-around bounds were
duplicated magic numbers. 4 new unit tests (263 total).
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.
AI Workbench v1.10.0
AI Workbench v1.10.0
What's Changed
Security release. Two issues let a directory you merely open decide what code
ai-workbench runs. Both are fixed by making the dangerous behavior opt-in, so
this release changes defaults — see "Changed" for what you may need to re-enable.
Security
-
[FIX] A repository-local
config.yamlis no longer trusted automatically.
load_config()read./config.yamlfrom the working directory with the
highest priority and no provenance check. That file setspty.claude_command,
pty.lazygit_commandandterminal.shell_path, which are spawned as processes
at startup — so cloning an untrusted repository and starting the workbench in it
was enough to run attacker-chosen binaries in all three panes, silently.A repo-local config is now ignored until you approve it once:
ai-workbench --trust-local-config # review the file first, then approveThe approval is pinned to the file's exact content (SHA-256) and its
canonical path, recorded in~/.config/ai-workbench/trusted_configs.yaml
(mode 0600). Editing the file — or agit pullthat rewrites it — drops the
approval, so a config cannot be swapped out under an existing trust. When a
local config is skipped, startup prints a warning to stderr naming the file and
the command to approve it. Saving settings writes to the repo-local file only
while it is trusted, and re-pins the hash afterwards; otherwise settings go to
the XDG config as before. -
[FIX]
git fetchno longer runs automatically when browsing into a repository.
Entering a directory in the file browser triggered an immediate background
git fetch, which executes the target repository's own configuration.
remote.<name>.url = ext::sh -c '…',core.sshCommand,core.gitProxyand
credential.helperare all command-execution vectors, so navigation alone was
enough to run code chosen by the browsed tree. Git'ssafe.directoryguard does
not cover this: it only rejects repositories owned by a different user, and an
unpacked archive or fresh clone is owned by you.Auto-fetch is now off by default and opt-in per config:
git: auto_fetch: true # only for trees you control
Local git status colors and the branch indicator are unaffected — they never
needed the network. Manual pull (Ctrl+G) is unchanged. -
[FIX] All git invocations are hardened against repository-supplied config.
Everygitcall now pinscore.fsmonitor=false,core.sshCommand=ssh,
core.gitProxy=,core.pager=cat,credential.helper=and
protocol.ext.allow=neveron the command line, where repo config cannot
override them, plusGIT_TERMINAL_PROMPT=0/GIT_ASKPASS=/GIT_PAGER=cat
to keep git non-interactive. Verified against a repository configured to run a
core.fsmonitorhelper ongit statusand anext::sh -cremote: both execute
without the flags and are blocked with them.This shrinks the surface but does not close it —
.gitattributesplus a
filter.<name>.cleanentry can still run a command duringgit status, and git
offers no single switch to disable all filters. That residual risk is why
git.auto_fetchdefaults to off rather than relying on hardening alone.
Changed
- [CHG] Dependency advisories are now triaged in-repo.
.cargo/audit.tomland
the[advisories] ignorelist indeny.tomldocument twoquick-xmlDoS
advisories (RUSTSEC-2026-0194 / -0195) as unreachable, with the dependency paths
that make them so: typst's CSL bibliography parser, which never sees user input
because the Typst source is generated internally, and the build-time
wayland-scannerproc-macro. Neither is resolvable viacargo update
(citationbergpins^0.38,wayland-scannerpins^0.39). Re-verify with
cargo tree -i quick-xmlwhenever the lockfile changes. - [CHG]
timeout-minutesadded to theauditanddenyCI jobs, the two that
were missed in the v1.9.1 sweep. - New dependency:
sha20.10, used only for content-pinning the config trust
allowlist.
Fixed
- [FIX] The SSH image-paste setup instructions no longer assume a macOS client.
Wizard step "SSH Image Paste",--ssh-paste-diagand the USAGE.md sections told
every user to runbrew install shunmeicho/tap/cc-clip"on your Mac". The wizard
runs on the remote host and cannot know the client's OS, so Linux users were
handed a command that does not exist for them. The instructions now say "on your
local machine" and list both installs (brewfor macOS,cargo install cc-clip
for Linux). Text only — no behavior change; the helper detection, the port-9998
reachability check and the[m] mark as configuredflag are untouched. - [FIX] The remote export/preview transfer no longer calls the SSH client a Mac
either. The iTerm2 OSC 1337 file transfer works from any host running iTerm2
or WezTerm — WezTerm ships for Linux — but the footer flash,--open-diag
output and USAGE.md all said "your Mac". Now "your local machine" / "local
~/Downloads". Text only.
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.
AI Workbench v1.9.4
AI Workbench v1.9.4
What's Changed
Added
- [ADD] Two new AI backends:
ollama-opencodeandollama-pi. You can now launch OpenCode and Pi through Ollama directly from the workbench. Both appear as separate entries in the F8 backend menu ("OllamaOC" / "OllamaPi") and have their own dedicated Settings fields under Shift+F8 → Paths: "Ollama OpenCode Command" and "Ollama Pi Command". Defaults areollama launch opencodeandollama launch pi; add--model ...in Settings orconfig.yamlto target a specific model, e.g.:pty: ollama_opencode_command: ["ollama", "launch", "opencode", "--model", "kimi-k2.7-code:cloud"] ollama_pi_command: ["ollama", "launch", "pi", "--model", "qwen3.5:cloud"]
- The CLI accepts
ai-workbench ollama-opencodeandai-workbench ollama-pi; session persistence stores them asollama-opencode/ollama-pi. - The setup wizard now detects
ollama, lets you configure the Ollama path, and picks the new backends with keys5and6.
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.
AI Workbench v1.9.3
AI Workbench v1.9.3
What's Changed
Added
- [ADD] Settings text fields now support a real cursor, arrow navigation, and Command/Ctrl+V paste. Previously the Settings dialog (Shift+F8) used a plain append-only input buffer: Backspace always removed the last character, there was no cursor position, and paste only worked with
Ctrl+V. The editor now tracks a char-based cursor, renders the character at the cursor with a reversed-video block (or a trailing block cursor when at the end), and supports←/→,Home,End,Delete,Backspace, plusCtrl+VandCmd+Von macOS. This makes editing long command lines likeopencode --model kimi-k2.7-code:cloudorpi --model qwen3.5:cloudin F8 → Settings → Paths much less frustrating.
Changed
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.
AI Workbench v1.9.2
AI Workbench v1.9.2
What's Changed
Changed
- [CHG] Resolve all outstanding
cargo clippy -- -D warningsfailures. The project no longer builds with the strict clippy profile due to 11 lint errors in test modules and initialization patterns:items_after_test_module(src/browser/opener.rs,src/update/check.rs),field_reassign_with_defaultin five test helpers (src/config.rs,src/setup/wizard.rs,src/ui/settings.rs), anduseless_vecin semver-selection tests (src/update/check.rs). All affected code now uses struct-literal initialization with..Default::default(), places test modules at the end of their files, and replaces single-usevec!literals with arrays. No runtime behavior changed; this is a maintenance/CI-hardening release.
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.
AI Workbench v1.9.0
AI Workbench v1.9.0
What's Changed
Added
- [ADD] Immediate boot screen — no more black screen at startup. Previously the terminal went black for 3–5 seconds between launch and the intro animation:
ratatui::init()blanks the screen (alternate screen), and only afterwards ran the kitty-keyboard probe (up to ~2 s on unresponsive terminals) andApp::new()synchronously before the first frame. The newui::boot_screenmodule paints an instant frame right after terminal init — the "AI WORKBENCH" block wordmark in the intro's stabilized cyan style, version, and a status line ("probing terminal..." → "initializing panes...") — so startup shows immediate feedback and flows seamlessly into the intro animation.App::newduration is now logged toupdate.logfor startup profiling.
Changed
- [CHG] Startup dependency check moved off the critical path.
DependencyReport::check()(~12–20 sequential subprocess spawns probing git/claude/opencode/pi/codex/lazygit and shells) ran synchronously — and, due toWizardState's eagerDefault, effectively twice on every launch (three times on first run). It now runs once on a background thread via the existingJobStatepattern (check_async(), polled in the event loop);WizardState::default()no longer spawns any subprocesses, and only the first-run wizard performs a synchronous check when it actually opens. The Linux clipboard-helper warning banner is seeded when the background check completes.
Fixed
- [FIX] Intro animation no longer starts before it is visible.
IntroState's clock began mid-App::new(), so construction time silently consumed part of the ~4.5 s animation budget — the intro appeared to start partway through.App::runnow re-anchors the clock (IntroState::restart()) right before the first frame, so the full glitch → sweep → stabilize sequence plays from the moment it becomes visible.
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.
AI Workbench v1.8.0
AI Workbench v1.8.0
What's Changed
Added
- [ADD] Codex (OpenAI) as fourth AI backend. The AI pane can now run OpenAI's
codexCLI alongside Claude Code, OpenCode, and Pi: launch withai-workbench codex, or switch at runtime via the F8 backend menu (now 4 entries). Codex starts directly (like OpenCode/Pi — no startup dialog); its own flags (-ssandbox mode,-aapproval policy,-mmodel,--search) are configurable via the newpty.codex_commandconfig field, editable under F8-Settings → Paths → "Codex Command". The setup wizard gained a Codex CLI detection line, path field, backend choice4, and confirmation entry. The selected backend persists insession.yamlas before (last_backend: codex). NewAiBackend::Codexvariant flows through the existing data-driven F8 menu/footer/pane-title/respawn plumbing; Claude-specific paths (permission dialog, dailyclaude update) stay Claude-only viasupports_claude_flags(). New config field is serde-defaulted (["codex"]) — existing config.yaml files load unchanged. 1 new unit test plus extended backend/menu/wizard tests (240 total).
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.
AI Workbench v1.7.0
AI Workbench v1.7.0
What's Changed
Added
- [ADD] Shift+Enter inserts a newline in the AI pane (F4). The workbench now pushes the kitty keyboard protocol flag
DISAMBIGUATE_ESCAPE_CODESat startup (guarded bysupports_keyboard_enhancement(), popped inrestore_terminal()), so terminals that support the protocol (iTerm2 3.5+, Kitty, WezTerm, Ghostty, Alacritty ≥0.13) report Shift+Enter as a distinct key event.map_key_to_ptytranslates it toESC+CR, which Claude Code and OpenCode interpret as "insert newline" in legacy keyboard mode — the mode the inner PTY always runs in, since the vt100 parser never answers kitty-protocol queries. Scoped to the AI pane only (shell/LazyGit behavior unchanged). On terminals without protocol support (e.g. Terminal.app) nothing changes; the\+ Enter fallback keeps working everywhere. 6 new unit tests insrc/input.rs.
Fixed
- [FIX] Alt/Option+Enter now inserts a newline in the AI pane. Previously the ALT branch in
map_key_to_ptyonly handled word navigation (Left/Right); Alt+Enter fell through to plain\r, silently dropping the ESC prefix. It is now mapped toESC+CRin all PTY panes — this works even without kitty-protocol support.
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.
AI Workbench v1.6.0
AI Workbench v1.6.0
What's Changed
Added
- [ADD] Release archives are now cryptographically signed (zipsign, SEC-01 Half 1). The
release.ymlworkflow signs every.tar.gz/.zipwith an ed25519 key before publishing (signature embedded in the archive — no sidecar, signed archives still extract normally) and verifies each one against the committed public keysigning/ai-workbench-pub.binin CI. The private key lives only as theZIPSIGN_PRIVATE_KEYGitHub Actions secret. Client-side verification is intentionally NOT enabled yet — per the SECURITY-NOTES.md rollout order, the next 2–3 releases ship signed first so existing self-updates keep working; enablingself_update's.verifying_keys()(Half 2) will be a later major release.
Downloads
| Platform | Architecture | Download |
|---|---|---|
| Linux | x64 | ai-workbench-x86_64-unknown-linux-gnu.tar.gz |
| Linux | ARM64 | ai-workbench-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Apple Silicon (M1/M2/M3/M4) | ai-workbench-aarch64-apple-darwin.tar.gz |
| macOS | Intel | ai-workbench-x86_64-apple-darwin.tar.gz |
| Windows | x64 | ai-workbench-x86_64-pc-windows-msvc.zip |
| Windows | ARM64 | ai-workbench-aarch64-pc-windows-msvc.zip |
Installation
Homebrew (macOS / Linux):
brew install eqms/ai-workbench/ai-workbenchUnix (Linux/macOS):
# Download and extract
tar xzf ai-workbench-*.tar.gz
chmod +x ai-workbench
./ai-workbenchWindows:
# Extract zip and run
Expand-Archive ai-workbench-*.zip -DestinationPath .
.\ai-workbench.exeAuto-Update
AI Workbench includes built-in auto-update functionality. Updates are checked automatically on startup.
See README for full documentation.