Skip to content

Releases

v2.27.1

Choose a tag to compare

@JackUait JackUait released this 22 Sep 19:39

Features

  • Refresh the picker's models from inside the router
  • Refresh stale model lists in the background
  • Build the picker from the cached model lists
  • Cache each source's model list on disk
  • Read a source's live model list
  • Pick the newest model per family from a listing
  • Offer a DeepSeek API key as a subscription
  • Offer the models the GLM Coding Plan actually serves

Bug Fixes

  • Never follow a model-list redirect with the key
  • Write the profile through a unique temp file
  • Stop an unchanged model list from rewriting the profile
  • Give the router the default login's tag file
  • Stop probing ps with a pid list
  • Refresh a borrowed login's OAuth token instead of 401ing
  • Keep every subagent on the row the session picked
  • Keep Explore subagents on the row the session picked
  • Stop sending the one tool schema DeepSeek refuses
  • Stamp the tool denial only on a provider the profile really names
  • Stop sending the one tool schema z.ai refuses

Other Changes

  • Perf(allin): stop fetching every subscription's quota at launch

v2.27.0

Choose a tag to compare

@JackUait JackUait released this 08 Sep 13:50

Features

  • Show what each subscription has left, and drop the spent rows
  • Choose which picker rows the All-In profile offers
  • Admit ChatGPT, served by a lazily started Codex bridge
  • A lazily started ChatGPT bridge a router can own
  • Re-admit Featherless by delegating to rolefix's own handler
  • Create the profile the moment a second subscription connects
  • Create and refresh the All-In profile on every install
  • Launch the All-In profile through the router
  • Wrap a launch in the cross-subscription router
  • Generate and refresh the All-In profile's picker
  • Route each turn to its own endpoint and credential
  • Resolve each row's endpoint and credential
  • Build picker rows from every login and ready provider
  • Parse a picker row into its source, model and 1M marker

Bug Fixes

  • Paint nothing once a quit has been requested
  • Never sweep a lock whose age it could not read
  • Drop the "unmapped" label All-In can never shed
  • Make the All-In pane's usage bars follow the picked row
  • Label the Default login by its tag, and resolve wisp/ ids in the subagent line
  • Drop gpt-5.4, which no app-server serves
  • Honor disabled subscriptions and create the profile on a read
  • Disarm the stream watchdog when the profile is born, not swept
  • Refuse a checklist update that names no status
  • Declare Astra's real 272000 window, not 1050000
  • Let the switcher accept the router profile
  • Declare all four window keys, not just the 1M marker
  • Make the router refuse what the roster refuses, and fail closed
  • Trade the 1M row away, and drop the unused behavesAs field
  • Give the generated profile an identity, an endpoint, and a gate
  • Exclude Featherless from the roster, no repair proxy in the router
  • Rebuild the Codex thread when Claude rewrites its history
  • Use XDG config root and anchor the router gate
  • Share the loopback-launch shape with claude-rolefix
  • Fail loudly on an unreadable/corrupt profile, guard the refresh
  • Reject oversized/malformed routing inputs instead of failing open
  • De-duplicate KeychainService, assert the account config-dir join
  • Apply context window to self-hosted providers so the floor is enforced
  • Keep repainting on a skipped tick, only skip the Git build
  • Stop a long turn being aborted and replayed mid-compaction

Other Changes

  • Perf(keep-awake): build the holder path in the shell, not in a subshell
  • Perf(restore): ask tmux for every layout once, not once per session
  • Perf(statusline): walk the agent's process tree by level, not by process
  • Perf(attention): make a poll cost the tree it supervises, not the tree's size
  • Perf(attention): stop paying per process to read the process table
  • Perf(watcher): strip wc's padding with a builtin, not with tr
  • Perf(keep-awake): read the enable flag in the shell, not through grep
  • Perf(ledger): back the shell renderer off an unchanging repository too
  • Perf(ledger): stop polling Git at full speed for a repository nobody is changing
  • Perf(watcher): read a settings key in the shell, not through four processes
  • Perf(attention): read the process table once per tick, not twice
  • Perf(restore): parse a session's environment once, not once per field
  • Perf(ledger): build the popup backdrop for a user, not for a timer
  • Perf(statusline): run the ccstatusline binary instead of booting npx
  • Perf(keep-awake): probe every holder's liveness with one ps, not one each
  • Perf(attention): read the process table from the kernel, not from ps

v2.26.0

Choose a tag to compare

@JackUait JackUait released this 05 Sep 10:25

Features

  • Launch GPT panes on Astra instead of gpt-5.6-sol
  • Offer GPT-6 Astra in the ChatGPT model pool
  • Let the unreached part of the bar recede
  • Split the usage bar into countable sections
  • Drop the loader's frame and its floating particles
  • Show a tab cue when a session is in trouble
  • Run a Featherless pane behind the role-repair proxy
  • Repair the message roles a strict Anthropic endpoint rejects
  • Serve a stale catalog when the fetch fails
  • Guard the Anthropic route and the keep-alive with a live test
  • Pick a Featherless model during add and reuse the key
  • Add a searchable Featherless model picker
  • Route Featherless through the own-model save path
  • Cache the catalog with a TTL and rank search by model name
  • Fetch the catalog with a bearer credential
  • Parse the remote model catalog
  • Gate Featherless readiness on a picked model and window
  • Add Featherless as a remote-catalog provider
  • Let a self-hosted profile declare its model text-only
  • Keep the worktree list true while the menu is open
  • Add a Custom / self-hosted provider you configure yourself

Bug Fixes

  • Stop a here-document deadlocking on a 512-byte pipe
  • Hide the usage pill a backend can never fill
  • Draw the usage bar in cells the terminal owns
  • Repair the three things Featherless drops from a reply
  • Stop offering models too narrow to run Claude Code
  • Discard the agent worktrees git clean -f silently refuses
  • Repair the JSON contract Featherless accepts and ignores
  • Drop the thinking field that turns off tool calling
  • Reserve the reply's room inside a small context window
  • Price Fable 5.1 cache reads at its own $0.25/MTok rate
  • Render the picker as a card, not just its help line
  • Stop the model picker crashing the whole project menu
  • Track mcpfit, which a pushed commit already depends on
  • Propagate Claude's exit code instead of a cobra error banner
  • Report Codex's real token usage on a streamed turn
  • Drop a Featherless pick when its name prompt is abandoned
  • Stop retrying a model provider that is not running
  • Keep Claude compaction responsive
  • Enforce self-hosted context windows
  • Stop a bridged pane refusing edits as a read-only session
  • Stop a self-hosted pane reporting a thinking model as a dead network
  • Stop a symlinked node_modules from failing the whole refresh

v2.25.4

Choose a tag to compare

@JackUait JackUait released this 24 Aug 12:44

Features

  • Draw each tab as a filled card
  • Name each tab and report the turn running in it
  • Follow the agent into a worktree it creates mid-session
  • Show git's real clone progress instead of a spinner

Bug Fixes

  • Keep the SSE stream warm so a reasoning turn is not killed
  • Close stderr before opening the follow's inputs
  • Follow home when the agent's worktree is removed as it leaves
  • Keep the cold-start budget off the waits that follow it
  • Stop killing an app-server that is merely starting cold
  • Stop a broken restore chain from closing every new tab

v2.25.3

Choose a tag to compare

@JackUait JackUait released this 15 Aug 07:35

Bug Fixes

  • Stop 502ing turns over limits Codex controls
  • Split Claude history across app-server messages
  • Withhold TaskOutput, whose id dies before the model sees it

v2.25.2

Choose a tag to compare

@JackUait JackUait released this 13 Aug 11:21

Features

  • Mark a waiting tab as seen once the user has looked at it
  • Move the tab between git worktrees from the Switch modal

Bug Fixes

  • Declare each provider's real context window
  • Give a cold codex app-server time to start
  • Center the switcher card in the ledger pane
  • Let bridge own GPT window enforcement
  • Count semantic compaction input
  • Retire a tab's bell when the chat is cleared
  • Run a spare-pane status click through bash, not tmux's /bin/sh
  • Kill a closed tab's terminals instead of leaking them
  • Center the switcher card in the tmux window, not the agent pane
  • Purge the live Kimi key from the tests and guard the tree

v2.25.1

Choose a tag to compare

@JackUait JackUait released this 03 Aug 22:04

Features

  • Find codex and opencode wherever they're installed, like claude
  • Preview every popular image format, not just png/jpg/gif
  • Display model names the way their vendors write them
  • Show each subagent's model and context in the panel row
  • Color the push count apart from the branch

Bug Fixes

  • Follow a parked Claude turn to the background job running it
  • Survive a fresh install and find claude outside the bash -l PATH
  • Deliver the generated image instead of declaring it discarded
  • Report Codex's own image generation instead of 502ing the turn
  • Pin the Wisp status line over project settings

v2.25.0

Choose a tag to compare

@JackUait JackUait released this 26 Jul 17:34

Features

  • Give the in-menu update its own screen, and stop re-asking setup
  • Keep the push/pull counts for Codex panes
  • Move the push/pull counts next to the branch
  • Make the update notice a segmented pill
  • Tab-switch shortcuts work from the spare pane too
  • Keyboard shortcuts to cycle and jump between tabs
  • Drop the top header, move the changed-file stamp to the footer
  • Highlight Astro files via the HTML lexer
  • Draw the tab bar as the agent pane's top border
  • Float the account switcher as a card-sized popup over the agent pane
  • Per-tab session tabs via tmux windows
  • Rebuild the installed TUI binary on Go-touching commits
  • Bell emoji in tab title while session needs attention
  • Always-visible session bar with + button; bar survives status off
  • Re-picking an open project adds a session to its existing tab
  • Wrapper consolidation, request claim, stack-aware cleanup
  • Wrapper env stamp, reaper, stack keybinds; drop exit-unattached
  • Owner-pid orphan reaper
  • Adoption handoff and stack-aware owner teardown
  • One-shot new-session request write/claim
  • Cycle and close-current session helpers
  • Session bar chips and per-session repaint
  • Stack registry and per-session file cleanup
  • Detect live sessions of a project
  • Move branch name from ledger header to Claude statusline
  • Refuse to disable the last enabled managed subscription
  • Refuse to disable the last enabled AI tool
  • Refuse to disable the last enabled AI tool
  • Subscription help shows 'x enable' on a disabled focused profile
  • AI tools help shows 'x enable' on a disabled focused tool

Bug Fixes

  • Keep checklist work resumable
  • Restore check_for_update, dropped by a bad file rewrite
  • Fall back to a flagless install when --update is rejected
  • Make the update chip a plain rectangle
  • Draw the update chip's caps in the container's border color
  • Soften the update chip's ends to a thin curve
  • Square off the update chip's ends
  • Move the update chip onto the wordmark's row
  • Quiet the update chip into the menu's own material
  • Price Kimi coding models
  • Report Codex web searches to Claude
  • Remove usage source hint
  • Answer Anthropic's web_search server tool instead of 400-ing it
  • Route Kimi coding keys to the gateway that accepts them
  • Translate reserved MCP tool names
  • Keep compaction prompt fresh
  • Preserve mixed continuation input
  • Accept held-control shortcuts
  • Stop counting Codex replayed history, which inflated GPT usage 31x
  • Resolve the account pill every refresh, not once at startup
  • Make the preview correct for every script, not just Bengali
  • Measure the preview by grapheme cluster, not by rune
  • Show a "Starting …" indicator while the AI pane boots
  • Re-pick adds the session in the background, no view switch
  • Build prefix+S sessions in-place; never adopt pre-stacking sessions
  • Prune dead owners' stack registry files in the reaper
  • Rename zsh-special 'path' locals in cycle/close helpers
  • Shell-escape session name in stack keybinds
  • Build all three panes in the new-session batch, not across batches
  • Disabled AI tools show a gray bullet, not the green installed dot
  • Survive Codex incompatibilities instead of poisoning the session

Other Changes

  • Revert: remove per-project session stacking entirely
  • Perf(launch): boot the agent pane before the launch tail, drop idle-path spawns
  • Perf(switcher): open account choices in-process

v2.24.0

Choose a tag to compare

@JackUait JackUait released this 20 Jul 17:02

Features

  • Drop the branch title from the compact-view heading
  • Subscription panes show the model's REAL context usage
  • Pager can no longer die before paint — recover guards + torture net
  • Remove the Account row — logins live in the subscription modal
  • Branch name moves to the header's left; footer keeps push/pull counts
  • GPT tiers remap — fable=sol, opus=terra; new ChatGPT configs start on sol
  • Tint file rows with their section title's color
  • Real 7d/5h usage bars for subscription backends
  • One shared interface — logins fold into the subscription modal
  • Logins section inside the subscription modal
  • Identity-kind glyph on the account pill
  • Mutual avoidance between login and subscription hues
  • Per-subscription identity colors
  • Move the subscription off the header onto the account pill
  • Remove the subscription switcher from the main page
  • Add Moonshot Kimi subscription provider
  • Show active subscription on the account pill
  • Stamp launch subscription + show pill for subscriptions
  • Switch Claude subscription from the account popup
  • Subscription rows in the Switch agent popup
  • Wire Codex login client
  • Add ChatGPT sign-in action
  • Track ChatGPT login state
  • Expose ChatGPT auth flow
  • Inject sound preview capability
  • Manage subscription profile lifecycle
  • Edit and activate subscription profiles
  • Render subscription settings overlay
  • Open subscription management modal
  • Initialize provider profiles
  • Launch with ChatGPT subscription
  • Serve local Anthropic API
  • Preserve Claude tool turns
  • Translate Codex response streams
  • Translate Anthropic requests
  • Add Codex app-server client
  • Expose OpenAI GPT subscription
  • Add ChatGPT auth provider
  • Dress the clean-tree wisp like the splash ghost
  • Draw a mascot placeholder for a clean tree
  • Supervise silent native TUI
  • Add native attention observer
  • Remove the Projects folder setting
  • Folder browser adds the project immediately on choose
  • Add-project opens folder-browser overlay modal
  • Floating folder-browser card rendering
  • DirBrowserModel directory navigation core
  • Filter private OSC 9 notifications
  • Inline add-worktree button on zero-worktree project rows
  • Polish the add-project form
  • Surface the GitHub-URL option in the add-project form
  • Add projects by pasting a GitHub repo URL
  • Ingest usage history at startup
  • Make local journal history authoritative
  • Persist mirrored append-only history
  • Add checksummed usage history replay
  • Create random-name worktree with one key
  • Activate native renderer
  • Preserve session controls
  • Expose native command
  • Preserve discard workflow
  • Keep refresh off input loop
  • Load snapshots asynchronously
  • Parse git records safely
  • Add indexed snapshots
  • Observe attention protocol
  • Publish semantic attention
  • Reduce semantic events
  • Monitor background jobs
  • Track semantic attention
  • Consume semantic state
  • Fence launch generations
  • Add state protocol
  • Label image size deltas KB/MB (MB above 1024 KB)
  • Show image files' byte-size change, not +0/-0 line counts
  • Paint every full-screen view on a pitch-black canvas
  • Open the About card as a centered overlay modal
  • Show the installed wisp-deck version in the About card
  • Show pending update under the wordmark with a U/click Update button
  • [ Open in Preview ] button opens the image in the macOS Preview app
  • Real-pixel image previews via kitty graphics
  • Fit image previews to the popup box on any aspect ratio
  • Preview images in the diff popup instead of a binary diff

Bug Fixes

  • Don't demand the capability boundary of pre-2.23.1 releases
  • Context overflow is 'prompt is too long', never a retryable 502
  • ContextCompaction is a lifecycle item, not a Codex-owned tool
  • Merge mixed final user content instead of 400-wedging the session
  • Itoa panicked on counts ≥ 10000, killing the popup for big files
  • Recover replayed tool continuations from history instead of 400
  • Don't expire live tool turns mid-run; stale continuations are 400
  • Fall back to WISP_DECK_PLAN for the subscription pill
  • Move ChatGPT sign-in into actions
  • Suppress unavailable connector warning
  • Disable Claude connectors for ChatGPT
  • Sanitize tmux client marker
  • Require host-effect boundary
  • Use token-only Claude auth
  • Route shell through guarded owner
  • Preserve Skill continuation
  • Accept inline system messages
  • Add non-redacted test sentinel
  • Make login recovery automatic
  • Add global test boundary
  • Reap browser opener
  • Login signed-out ChatGPT users
  • Harden preview boundary
  • Wire interactive sound previews
  • Navigate subscription submenus
  • Make sound cycling silent
  • Highlight focused subscription
  • Make subscription back clickable
  • Return to subscription list
  • Show standard profile actions
  • Navigate profile actions
  • Keep profile actions inline
  • Enter subscription details with right arrow
  • Prune stale Codex identities
  • Constrain identity file paths
  • Keep restore identity current
  • Complete subscription modal navigation
  • Harden subscription modal interactions
  • Avoid zsh path rebinding
  • Wire per-session restore identity
  • Snapshot active tool identity
  • Fail closed into resume picker
  • Persist durable session identity
  • Preserve GPT pricing rates
  • Recognize storm launches by the build stamp; publish queue before the marker
  • Builder pre-acquires the pop lock so storm launches cannot starve it
  • Kill the stuck single-pane tab, wrong-tab restores, and pre-attach stalls
  • Put the clean-tree wisp to sleep
  • Shrink and mute the clean-tree mascot
  • Reveal completed session layout
  • Restore status-line execution
  • Retire legacy plugins in zsh
  • Preserve attach exit status
  • Close observer attempt context
  • Make Wisp sole agent sound owner
  • Filter terminal notifications
  • Disable lifecycle hooks
  • Disable launch hooks
  • Restore hover and status styling
  • Disable app-server notifier
  • Disable external notifier commands
  • Preserve rejected terminal controls
  • Consume notifications before terminal
  • Disable native notification sound
  • Preserve one-hour cache writes
  • Stop refresh blink
  • Read sound preference in Go, not bash
  • Make Off a playback boundary
  • File list no longer freezes with many files — kill the O(N²) hover repaint and the per-file forks
  • Harden passive attention
  • Bound recovery reads
  • Harden semantic attention
  • Hydrate semantic state
  • Emit pane format tab
  • Preserve lock exclusion
  • Harden runtime lifecycle
  • Expose in-memory identity
  • Reject stale dedupe writes
  • Remove worktrees off the UI event loop so deletes never freeze the interface
  • Purge zsh-special variable names; guard the whole class
  • Stop image size delta showing ±0 under the zsh pane
  • Stop a mid-session tool change from steering future launches
  • Close the last two jobs that could print into the AI tool's UI
  • Close the other half of the channel into the AI tool's UI
  • Stop background jobs painting stderr into the AI tool's UI
  • Dim the overlay backdrop under the app's real renderer
  • Stop random gibberish during image load — transmit via kitty file medium
  • Stop background jobs writing to the AI tool's terminal
  • Repair a broken install instead of declaring it up to date
  • Stop the opencode switch test depending on a locally installed claude
  • Stop the reap race printing into the AI tool's input box
  • Never let a bad download replace a working install
  • Don't fatal the zsh ledger loop opening an image preview

Refactoring

  • Centralize host effects
  • Retire appended subscription panel
  • Share notification filter
  • Extract overlayCard compositor from overlayAbout

Other Changes

  • Perf(ledger): open files off input loop
  • Perf(diff): show popup before input loads
  • Perf(ledger): virtualize native rendering
  • Perf(ledger): bound interaction work
  • Perf(launch): stop probing npx for OpenCode before the picker paints
  • Perf(image-preview): cut hi-res first paint from ~750ms to ~50ms without quality loss

v2.23.0

Choose a tag to compare

@JackUait JackUait released this 11 Jul 14:25

Features

  • Preserve every agent's session + shared cross-agent pool
  • Move author credit behind 'a' About popup
  • Show author credit line
  • Slim left padding, deeper nesting for login rows
  • Drop the bottom padding so the help footer hugs the border
  • Move the title onto the card border, rows up to the top
  • Gray out rows that are neither active nor under the cursor
  • Use the starburst flare glyph for Claude instead of the crab
  • Per-tool icons instead of the generic robot glyph
  • Group Claude logins under a Claude subgroup header
  • Offer ALL agents in the mid-session switcher, not just Claude logins

Bug Fixes

  • Ship wisp-deck-config and defaults so the CLI isn't a dead symlink
  • Widen layout-watch horizon and stand down on user pane drags
  • Replay pane layout while session is alive and after pty settles
  • Prefer cached npx install over uninstallable @latest
  • Make cross-agent handoff actually work end-to-end
  • Indent the cursor bar with nested login rows