Codewhale is the public product from Shannon Labs. The
codewhale
command, npm package, and release-asset names remain lowercase technical
identifiers. The legacy npm packagedeepseek-tuiis deprecated and
receives no further releases. Users coming from v0.8.x legacydeepseek/
deepseek-tuinames should migrate withdocs/REBRAND.md.
Install
Recommended — npm (one command, all three entrypoints)
npm install -g codewhaleThe wrapper downloads the matched codewhale, codew, and codewhale-tui
binaries from this Release and places them in the same directory.
Docker / GHCR
docker run --rm -it \
-e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
-v codewhale-home:/home/codewhale/.codewhale \
ghcr.io/hmbown/codewhale:v0.9.1The image ships the codewhale dispatcher, codew shim, and codewhale-tui runtime. The latest tag is also updated on release.
Cargo (Linux / macOS)
cargo install codewhale-cli codewhale-tui --lockedBoth crates are required — codewhale-cli produces the codewhale dispatcher and codew shim, while codewhale-tui produces the interactive runtime that the dispatcher delegates to. Installing only one crate will fail at runtime with a MISSING_COMPANION_BINARY error.
Manual download — platform archives (recommended)
Each archive below contains the codewhale dispatcher, codew shim, and codewhale-tui runtime, plus an install script:
| Platform | Archive | Install script |
|---|---|---|
| Linux x64 | codewhale-linux-x64.tar.gz
| install.sh
|
| Linux ARM64 | codewhale-linux-arm64.tar.gz
| install.sh
|
| Android ARM64 (Termux) | codewhale-android-arm64.tar.gz
| install.sh
|
| macOS x64 | codewhale-macos-x64.tar.gz
| install.sh
|
| macOS ARM | codewhale-macos-arm64.tar.gz
| install.sh
|
| Windows x64 (installer) | CodeWhaleSetup.exe
| NSIS setup |
| Windows x64 | codewhale-windows-x64.zip
| install.bat
|
| Windows x64 (portable) | codewhale-windows-x64-portable.zip
| — |
| Windows ARM64 | codewhale-windows-arm64.zip
| install.bat
|
| Windows ARM64 (portable) | codewhale-windows-arm64-portable.zip
| — |
Unix (Linux / macOS):
tar xzf codewhale-<platform>.tar.gz
cd codewhale-<platform>
./install.shWindows:
- For the installer path, run
CodeWhaleSetup.exe; it installscodewhale.exe,codew.exe, andcodewhale-tui.exeunder%LOCALAPPDATA%\Programs\CodeWhale\binand adds that directory to the current-user PATH. - Extract the archive for your machine:
codewhale-windows-x64.zipor
codewhale-windows-arm64.zip - Run
install.bat(copies to%USERPROFILE%\bin) - Add
%USERPROFILE%\binto your PATH
The portable Windows archive skips the install script — extract and run from any directory. The NSIS installer is currently unsigned and may trigger Windows SmartScreen until a signing certificate is wired into the release pipeline.
Each platform also has bare, unarchived binaries attached below (codewhale-<platform>, codew-<platform>, and codewhale-tui-<platform>) — the npm wrapper and the in-app codewhale update download the matched runtime binaries, whereas the .tar.gz / .zip archives above are the recommended manual download and additionally bundle an install script. The legacy npm package deepseek-tui is deprecated and is not republished. For migration from v0.8.x legacy binary names, see docs/REBRAND.md.
Verify (recommended)
Download the checksum manifests from this Release and verify:
# Linux — archive bundles
sha256sum -c codewhale-bundles-sha256.txt --ignore-missing
# Linux — individual binaries
sha256sum -c codewhale-artifacts-sha256.txt --ignore-missing
# macOS
shasum -a 256 -c codewhale-bundles-sha256.txt --ignore-missing
shasum -a 256 -c codewhale-artifacts-sha256.txt --ignore-missingWhat's in v0.9.1
Dogfood follow-ups (2026-07-24)
Added
-
/compact [focus]: the manual compaction command now accepts an
optional focus argument that is injected into the summary prompt, and
the compaction summary itself becomes a structured nine-section
successor briefing (primary intent, key concepts, files and code,
errors and fixes, problem solving, user messages, pending tasks,
current work, next step) that carries earlier compaction summaries
forward and explicitly forbids tool use — replacing the free-form
"under N words" instruction. Codewhale's pin/working-set and
V4 prefix-cache-aligned machinery are unchanged. -
Saved workflows become slash commands:
*.workflow.jsfiles under
<workspace>/.codewhale/workflows/and~/.codewhale/workflows/are
discovered as/namecommands that accept custom arguments (forwarded
to the run'sargs), launch through theworkflowtool in the
background, and report their run id. Hand-written.mdcommands with
the same name always win. The workflow tool'ssource_pathnow also
accepts the user-global~/.codewhale/workflows/store, and every
settled run leaves a durable synthesized report under
.codewhale/reports/<run_id>.md(status, goal, gates, progress,
result, verification).
Fixed
- Disambiguate the two Kimi K3 model-picker rows, which read as an
unexplained duplicate: barek3is now labeled "Kimi Code plan route"
with its default 262K window annotated as the plan-tier floor (raisable
via the providercontext_windowsetting for plans that include 1M),
andkimi-k3is labeled "Moonshot direct route" with its 1M window.
Both remain distinct, valid routes for the same underlying model. - Close the model-facing
agenttool role schema: thetypeproperty now
publishes the canonical JSON Schema enum["worker", "scout", "planner", "reviewer", "builder", "verifier", "custom"]instead of describing the
accepted values in prose. Legacy aliases are no longer advertised to
models; they remain accepted only at replay/deserialization boundaries.
Provider schema sanitizers (Chat Completions, strict mode, Anthropic
Messages / OpenAI Responses, Moonshot/Kimi) are pinned by test to
preserve the closed enum.
Changed
-
Rework the ambient idle ocean: the water now holds exactly one loose
wedge school of fish, jellyfish, bubbles, and the rare whale cameo —
seaweed and bio-dust are removed. Fish swim on a wrap-around path and
always face the way they move (direction can only change while the
school is off-screen); the lead fish carries an eye (><o>).
Jellyfish become a pulsing bell with a lagging swaying tentacle. All
ambient marks now glow via background→ink color lerp: a travelling
sin² wave through the school, a floor-bounded pulse for jellyfish,
and occasional raised-cosine glints on bubbles, with deliberately
non-matching periods so nothing strobes in sync. -
Consolidate Anthropic Messages and OpenAI Responses stream opening
through the sharedclient/stream_entry.rstransport seam already used
by Chat Completions: one bounded response-header wait, shared
dual/HTTP-1.1 client policy selection, at most one HTTP/1.1 fallback
retry on a classified HTTP/2 header stall (never after a stream body
has begun), and the shared idle-timeout diagnostics format. Both
adapters gain the bounded open wait andCODEWHALE_FORCE_HTTP1
H1 pinning; wire-specific headers, authentication, endpoints, and
stream decoding stay at the adapter edge, and the Responses provider
retry loop for rate limits / transient upstream errors is preserved. -
Rename the internal delegated-worker role type from
SubAgentTypeto
FleetRolewith canonical variants (Worker,Scout,Planner,
Reviewer,Builder,Verifier,Custom) matching the public Fleet
vocabulary one-to-one. Wire behavior is unchanged: serialization emits
canonical Fleet values only, and persistedagent_typefields plus
documented legacy spellings (general,explore,plan,review,
implementer, …) continue to load at deserialization/parse boundaries;
unknown role tokens still fail closed with the canonical vocabulary in
the error.
The Codewhale v0.9.1 source candidate includes a first-class local web client over the Runtime API,
first-class OpenCode Go and TelecomJS TokenHub providers and restored xAI device login,
calendar-correct hourly automations, a buildable OpenHarmony workflow-js
target, and hardening for Auto routing, remote-terminal clipboard transport,
restart recovery, and a coherent TUI, Work, evidence, and public release
surface.
Added
- Add
codewhale web [--port 7878], a first-class loopback-only browser
client over the canonical Runtime API. The dependency-free embedded shell
supports thread lifecycle, snapshot-then-SSE transcripts, turn start/steer/
interrupt, approvals, and user questions, including pending-request recovery
across tab reloads, while leaving unsupported managed,
files, PTY, model-selection, and Fleet controls absent. Browser auth uses a
short-lived one-time loopback capability exchanged for an opaque, bounded,
process-local HttpOnly, SameSite=Strict session cookie with a same-origin
mutation guard; Runtime tokens never enter URLs, HTML, browser storage, logs,
or browser-launch arguments (#4423). - Add OpenCode Go as a first-class, subscription-backed Chat Completions
provider with[providers.opencode_go],OPENCODE_GO_API_KEY, and the eight
models currently documented on its/v1/chat/completionsendpoint. Models
served only through OpenCode Go's Anthropic/messagesendpoint remain out
of this narrow route until Codewhale supports per-model wire selection
(#1481 by @seanthefuturegorilla; implementation harvested from PR #773 by
@zhangweiii and PR #1050 by @sternelee). - Add TelecomJS TokenHub as a first-class Chat Completions provider with
[providers.telecomjs],TELECOMJS_API_KEY, and a key-scoped live
/v1/modelsrefresh. Models.dev and provider-specific catalogs remain in
separate source partitions so either refresh order preserves both; refreshes
do not delete the other source's rows, matching model ids from unrelated
providers do not fabricate metadata, and chat requests omit unsupported
reasoning fields (PR #4370 by @baendlorel; harvested with co-authorship). - Prepare native Windows ARM64
codewhale,codew, andcodewhale-tui
binaries, npm selection, updater support, and standard/portable release
archives. Build and smoke them on GitHub's native Windows 11 ARM runner,
and move Linux ARM64 release builds to the native Ubuntu ARM runner to
remove the slower multi-arch cross-link setup (#4267 by @w1w218). load_skilltool now supports listing: omitnameor pass"list"to
see all available skills without loading one (#4651).- Add a unified
/skillsmanager with one precedence-aware root catalog,
bounded duplicate/shadow/conflict auditing, package provenance, and
validated install, update, remove, and trust mutations (PR #4679 by
@SamhandsomeLee). - Add a safe Agent Details view and bounded, structured
current_activityto
the single Work projection, sourced from worker events instead of renderer
string inference. Rows stay compact, exact evidence is opt-in, and raw child
output never enters the parent transcript (#2889 and #4636; design direction
by @aboimpinto, preserved from #2694). - Make exact results and delegated coordination durable: non-inline tool output
becomes immutable session-owned evidence behind bounded receipts; File
mutations add configurable success-only diffs; and decisions and write
contention survive restart with typed neutral-fan-in records (#4619, #4636,
#4647). - Runtime API provider registry and atomic provider-switch endpoints
(GET /v1/providers,GET /v1/providers/{id}/models,
POST /v1/providers/{id}/switch) so the web GUI renders a dynamic
provider/model picker without the setConfig+reload clobber (#4658). - Typed filter (
/) in the Fleet setup wizard's Model step: substring
match over provider id, display label, and model id keeps
OpenRouter-scale catalogs navigable (#4639). [auto.router]config: explicit provider/model/thinking for the Auto
mode classifier route; unset keeps the DeepSeek flash default, and
missing credentials fall back to the local heuristic.
Changed
- Keep the top activity bar literal and actionable: active To-dos appear first,
followed by Sub-agents, while generic operations and coordination stay in
the detail surface. Completed-only bars auto-hide, and top/side layouts can
be resized by dragging their divider and retain the chosen size (#4700,
#4702). - Use each theme's semantic colors for composer mode and permission rails, and
show a larger inline reasoning preview with clearer local/full expansion
affordances (#4699, #4701). - Simplify the model-facing runtime around stable action tools (
File,Git,
Run, deferredWeb, and durable task and automation families), with legacy
spellings hidden for replay. Fresh sessions no longer reserve a Work surface
before real work exists (PR #4675). - Give the terminal shell one deliberate visual language: cool Plan → Act →
Operate and warm Ask → Auto-Review → Full Access ramps match between header
and split composer edges; transcript rhythm groups related activity; a
refined whale keeps the empty state calm; and one-cell live motion with
truthful labels distinguishes reasoning, reading, tool use, and verification
without exposing private reasoning text. Reduced-motion and animation-off
settings freeze it, while ASCII-safe terminals retain the signal (#4676,
#4677). - Unified shell tool: the model now sees a single
Bashtool with anaction
parameter (run/wait/interact/cancel). Legacyexec_shell*names remain as
hidden compat aliases for transcript replay, and the tool-search catalog
keepsBashactive by default (#4625). - Tool output inline preview increased from 6 to 12 lines (4 head + 4 tail)
before the fold indicator; full pager (vkey) unchanged (#4603). - Mode changes (
/mode agent|plan|operate) now persist tosettings.toml
and restore across sessions (#4628). - Billing provenance: every outgoing API request carries an
x-codewhale-provenanceheader with client version and provider (#4324). - The
/modelpicker's typed search now ranks results: provider-name
matches first (drill-down), then exact id, then id-prefix, then the
active provider's rows (#4639). - System prompt text consolidated into a single
prompts/text.rs
module (byte-exact constants replacing 17 layered files);
composition order, constitution-first binding, and locale/personality
variants unchanged. - Ask, Auto-Review, Full Access, and Never resolve through one permission
contract:resolve_tool_permissionin the engine and
resolve_approval_request_dispositionin the UI share one truth table for
session grants/denials, non-bypassable policy holds, and modal prompts
(#4412). - Collapsed multi-struct tool families into single action-dispatched tools
(AutomationTool,TasksTool,GithubTool,RlmTool) while keeping
legacy tool names as hidden compatibility aliases for transcript replay. - Operate-mode children default to leaf depth (
max_depth=0) unless the
caller explicitly grants a deeper budget (#4598).
Fixed
- Restore
uwutheme config round-tripping and keep header permission colors
and authored idle-whale geometry aligned with the selected theme (#4696). - Default canonical
Bashruns with no explicitcwdto the active
ToolContext.workspace, including an isolated sub-agent worktree, instead of
falling through to the shared shell manager's parent workspace. The regression
test detects the selected workspace through marker files so it remains
meaningful across PowerShell path spellings (#4674, PR #4673 by @fleitz). - Generate QuickJS bindings for
aarch64-unknown-linux-ohoswith the native
SDK's libclang and sysroot, carry the OHOS target and sysroot through final
linking, and keep unsupported persistent PTY dependencies out of the target
while retaining non-PTYexec_shellsupport (#4470 by @shenjackyuanjie;
original bindgen approach in #4384 by @shenyongqing). - Honor
[auto] cost_saving = truein provider-aware heuristic and classifier
routing, using only validated same-provider fast siblings and deriving
fallback candidates from their actual provider so Auto cannot invent a
cross-provider model. Providers without a known fast sibling stay on the
active model (#4486; partial #4405). - Make terminal-client clipboard behavior truthful over SSH: use OSC 52
outside tmux, stocktmux load-buffer -winside tmux, and bracketed paste
for client-to-remote text. Graphical text and image access now requires
credible forwarding or an explicit override, transport failures no longer
claim success, and help distinguishes terminal text paste from graphical
image attachment (#4484). - Keep a fresh TUI Work surface from rendering prior-session worker snapshots
or durable-task terminal receipts whose creation or completion predates the
current app start. Active durable tasks remain visible, and shared history
stays available through/tasksand archived agent views (#4488; partial
#4416). - Make doctor and setup output distinguish static configuration, command
availability, MCP protocol readiness, and backend health instead of
presenting configured routes as live-healthy. Ordinary doctor runs no
longer wake loopback/self-hosted providers unless--probe-localis
explicitly requested (#4485; partial #4406). - Serialize test-only configuration-path readers with temporary environment
redirects so the Windows provider-persistence matrix cannot observe another
test's transientCODEWHALE_HOMEor config path (#4483, closing #4463). - Restore direct Moonshot
kimi-k3to its documented 1,048,576-token
context window and 131,072-token output limit instead of treating the live
model as an unknown legacy 128K route. The existing Kimi Code tieredk3
route and credential reuse remain unchanged (#4481). - Keep read-before-edit snapshots in the engine session so a file read remains
valid across turns and context compaction, while a new session still starts
with an empty tracker (#4475 by @Angel-Hair). - Make
apply_patchexpose the canonicalreplaceoperation while continuing
to accept deprecatedchangespayloads through one validation path. Mixed
patch, replace, and compatibility modes now fail before any write (#4476 by
@Angel-Hair). - Show the prompt-cache hit rate in the phase strip when the Cache status item
is enabled, using overflow-safe rounded integer math and leaving compact or
disabled status layouts unchanged (#4474 by @dmitri-0). - Preserve Solarized Light's canonical Base3 (
#fdf6e3) shell background
instead of tinting it green-grey through the default underwater Ombre
treatment, while retaining foreground ambient life (#4457 by
@AiurArtanis; PR #4471 by @nightt5879). - Register
/slopand/canzhaas compatibility aliases of/debt, while
keeping user-command ownership truthful across dispatch, help, slash
completion, alias copy, and typo suggestions (PR #4680 by @nightt5879). - Fail closed on legacy Kimi CLI credential imports: remove Codewhale's
hard-coded first-party-client impersonation and refresh request, never
auto-enable or rewrite imported credentials, and label the compatibility
route as a read-only imported token. An explicitly configured, still-valid
access token remains usable until expiry; missing, malformed, and expired
imports recover through the supported Kimi Code API-key route while
first-class OAuth awaits Codewhale's own vendor registration (#4417,
partially addressed). - Restore xAI/Grok device-code OAuth login against the live xAI OIDC
contract: discovery with issuer/endpoint validation and documented
fallbacks, user-principal scope set, RFC 8628slow_downbackoff capped at
code expiry, bounded, sanitized error reporting for denial, expiry, and
malformed responses, and a shared blocking-worker boundary for both CLI and
TUI login so reqwest's blocking client never creates or drops its private
runtime inside Codewhale's Tokio runtime (#4410). - Anchor
FREQ=HOURLYautomations withBYHOUR/BYMINUTEto persisted
local-calendar slots so intervals keep their wall-clock phase across DST,
restart, resume, RRULE updates, duplicate-slot recovery, and post-run
advancement. Nonexistent clock slots are skipped and ambiguous slots run at
their first occurrence (#4381 by @h3c-hexin). - Give content-watch drafts canonical identities: the link and semantic-drift
watchers now write and dedup through one canonical draft-storage key with
deterministic hash-suffixed IDs, validate and bound model drift output
before any KV writes, and show truthful admin draft labels, so unchanged
findings dedup and changed findings re-draft instead of colliding (#4453). - Make model-policy JSON repair consider object and array payloads in source
order, matching nested delimiters across quoted strings and escapes and
returning the earliest balanced candidate that parses, instead of letting
an unmatched opening delimiter or object-first preference corrupt array
payloads (#4430). - Convert persisted sub-agent completion and still-running control events into
concise, non-authoritative resume checkpoints, keeping their raw runtime
envelopes, sentinels, and retry instructions out of restored model and TUI
conversation state (#4409). - Deliver failed, stopped, and stale sub-agent outcomes exactly once to the
awaiting parent, lifecycle mailbox, and TUI before closing their runtime
state. Restart now reconciles orphaned queued/model/tool-wait worker records
to interrupted while preserving checkpoints, and cancelled workers no
longer read as completed in the TUI (#4408). - Give host applications a cancellation boundary for MCP OAuth login so a
stalled or abandoned provider login no longer hangs the calling session
(#4380). - Avoid blocked reader joins after Windows process kills so terminated shell
sessions cannot hang their readers (#4383). - Give stdin-less observer hooks immediate EOF and contain timed-out hook
process trees so descendants and pipe readers cannot leak after the parent
shell exits (#4489 by @luismateusvargas). - Preserve the full unsigned Windows PTY process status instead of collapsing
every high-bit exception or NTSTATUS to2147483647, including decimal and
hexadecimal diagnostic metadata for device retests (#4100 by
@redjade75723). - Keep the Hotbar Setup action list synchronized with keyboard focus when the
selection moves beyond the visible rows, including Down past/export
(#4418). - Route Windows OpenHarmony Cargo links through the repository's target-aware
clang launcher so the final Rust link keeps its target, sysroot, and MUSL
flags, and extend the no-SDK release guard to protect that contract. This
completes @shenjackyuanjie's PR #4470
setup alongside @shenyongqing's original
bindgen approach in PR #4384. - Reconcile the website roadmap with reality: the retired share-link
direction is now an explicit non-goal, Workrooms is the considered
direction, and the local web client appears as underway, in English and
Chinese (#3418). - System-prompt skills block and skill-load warnings no longer embed absolute
home/workspace paths; entries render workspace-relative or~/…so the
byte-stable prompt prefix never leaks private paths. A new invariant test
guards absolute paths, API keys, and workspace paths in the prefix (#4632). - Mode/permission baseline unit tests no longer read the developer's live
settings.toml; they isolate config I/O to a temp directory (#4628). - Enter no longer freezes the composer on send: dispatch splits into a
sync prepare phase (instant history + spinner) and a spawned async
phase (auto-route, preflight, engine send), with submits gated while
a dispatch is in flight (#4605). - Self-hosted routes keep explicit per-model output limits for unknown
wire aliases instead of the generic 4K fallback (#4655 by @h3c-hexin;
PR #4656). - Chat Completions idle-timeout errors now include received-byte and
timing telemetry, distinguishing prefill stalls from mid-stream
stalls with truncated tool-call arguments (#4657 by @h3c-hexin). set_configprovider writes now keep the in-memory route in step,
so a following model write lands in the new provider's table instead
of clobbering the previous provider's root default_text_model (#4658
by @gaord, with a follow-up route-sync fix).
Security
- Restrict cross-origin Runtime API browser preflights to the documented
authentication and content headers, explicitly allowingAuthorization
instead of relying on a wildcard (#4454).
Security
- Harden the public community-site boundary: scheduled review drafts now use
one canonical freshness namespace, admin discard is restricted to validated
draft objects, public feed requests cannot spend the server-held GitHub
token, and maintainer login bodies are type- and size-bounded before parsing.
Contributors
Thank you to the contributors whose code, reports, and reviews shaped v0.9.1:
- @h3c-hexin — calendar-anchored hourly
automation recurrence (PR #4381), the MCP OAuth cancellation report
(#4380), explicit limits for unknown local models (PR #4656 / #4655),
and idle-timeout progress telemetry (PR #4657). - @gaord — Runtime API provider registry and
atomic provider-switch endpoints (PR #4658). - @SamhandsomeLee — the unified
/skills
root catalog, audit/provenance model, validated mutations, manager UI, and
acceptance coverage (PR #4679), plus Enter-send lag diagnosis and fix
direction for #4605 (PR #4654; landed via the release-lane async-dispatch
split). - @aboimpinto — the Layer 5.1 user-command
registry boundary from PR #3278; the exact authored evidence commit from PR
#4046, preserved intact in the integration graph; and the #2870 follow-up
audit whose metadata and malformed-sibling gaps shaped the final corrections.
Paulo also provided the structured, redacted Agent Details and
current_activitydirection preserved from #2694/#2889 and the real-PTY
lifecycle acceptance direction from #2886. - @baendlorel — TelecomJS TokenHub provider
support and key-scoped live-catalog direction from PR #4370, harvested into
the current provider architecture with co-authorship preserved. - @zhangweiii and
@sternelee — the original first-class
OpenCode Go implementations (PRs #773 and #1050), harvested into the
current provider architecture. - @seanthefuturegorilla — the
canonical OpenCode Go/Zen provider request and acceptance direction
(#1481). - @nightt5879 —
/debtcompatibility aliases
with dispatch-consistent user-command shadowing across discovery surfaces
(PR #4680), plus the Solarized Light background preservation fix (PR #4471). - @AiurArtanis — the Solarized Light
regression report and reproduction (#4457). - @shenjackyuanjie — the HarmonyOS
workflow-js bindgen, portable-pty gating, and SDK environment work
(PR #4470). - @shenyongqing — the original HarmonyOS
bindgen approach (PR #4384), carried into the landed implementation. - @luismateusvargas — the Windows hook
process-leak reproduction, process-tree analysis, and EOF fix direction
(#4489). - @redjade75723 — the persistent Windows PTY
report that exposed lossy high-bit process-status handling (#4100). - @w1w218 — the Windows ARM64 release request and
real-device motivation (#4267). - @Angel-Hair — session-owned read-before-edit
tracking and the explicit, backwards-compatibleapply_patchreplacement
contract (PRs #4475 and #4476). - @dmitri-0 — configurable cache-hit visibility
in the phase strip (PR #4474). - @fleitz — the canonical
Bashno-cwd
workspace fix and regression test that keep isolated sub-agent commands in
their own worktree (PR #4673, closing #4674). - @SparkofSpike — the Windows Ctrl+O
reproduction that exposed pre-pager result truncation and conflicting composer
shortcut routing (#4482), and the exact Vim-space regression reproduction
verifying the v0.9.1 input path already contains the needed global binding
(PR #4477).
See CHANGELOG.md for full notes and docs/CHANGELOG_ARCHIVE.md for older releases.