v0.15.1Última
Instant startup and welcome screen
Instant startup and a welcome screen
Paneflow 0.15.1 opens straight into the workspace. The "Paneflow" splash and its 900 ms floor are gone, and the two synchronous stalls that followed it, the singleton guard's named-pipe retries on Windows and the which walk over seventeen agent binaries on the render thread, are off the critical path. On the reference Windows machine the first presented frame moves from about 1.5 s to 0.3 s.
With nothing to restore, that first frame is now a welcome screen instead of a workspace fabricated from the launch directory: open a folder, clone a repository, or reach every action through a new command palette on secondary-shift-p. The file tree colors its rows by git status, a toast announces each update with a link to its release notes, Ctrl+V pastes into terminals on Windows and Linux, and Muse Code and DeepSeek Harness join the built-in agents with live sidebar state.
No configuration key is removed and none changes meaning. The session format, the terminal engine (libghostty on every target), the packaging contract, the IPC and MCP method names, and the paneflow CLI are unchanged. One habit changes: paneflow launched from a terminal inside a project opens the welcome screen, not that project.
Behavior changes
The window opens in under a third of a second
Three fixes, each measured with the new startup probe (release build, medians of 10 launches on a seeded home, Windows 11):
| Scenario | Splash removed only | 0.15.1 |
|---|---|---|
| Welcome screen (empty session) | 448 ms | 292 ms |
| Restored session, 3 workspaces with one terminal each | 450 ms | 299 ms |
Add the 900 ms splash floor to the left column for what 0.14.0 shipped.
- On Windows the singleton guard paid three connect attempts and two 70 ms sleeps on every launch when no other instance was running. A missing named pipe now returns at once; the retry loop stays for the rebind race it was written for.
is_installedfor the seventeen agent CLIs walkedPATHon the render thread every 2 s, from the welcome screen, the pane palette, the launch pad, and the Agents settings. The boot warms that cache off-thread and a stale cache refreshes on its own thread, so reads never block. The welcome screen reads "Looking for agent CLIs on this machine." while the first scan runs.- The splash is removed and the app mounts as the window root.
PANEFLOW_STARTUP_TRACE=<file> makes a release build write its mark timeline at the first presented frame and quit; scripts/bench-startup.sh (or .ps1) runs that probe against two seeded homes and compares with bench/startup-baseline.json. What remains is inside GPUI's Windows platform init (D3D11CreateDevice, about 148 ms, and the system font collection scan, about 70 ms), tracked upstream.
paneflow from a project directory opens the welcome screen
0.14.0 fabricated a workspace from the directory Paneflow was launched in, so a first run looked like a session that had always existed. 0.15.1 opens the welcome screen when there is no session to restore. To open the project you are standing in, pick it from Get started > Open folder, or from the recent workspaces once it has been opened once. A restored session is unaffected.
Ctrl+V pastes into the terminal on Windows and Linux
Ctrl+V now invokes paste in terminal panes instead of reaching the shell or the TUI, so tools that finish dictation by simulating Ctrl+V (Superwhisper and the like) land their text in the pane. Ctrl+Shift+V keeps working on every platform, Cmd+V stays the macOS binding, and Ctrl+C still reaches the shell. Settings shows the native shortcut and falls back to Ctrl+Shift+V when it is disabled or reassigned. To hand Ctrl+V back to the program in the pane:
{
"shortcuts": { "ctrl-v": "none" }
}
Added
Welcome screen, recent workspaces, and an always-usable surface
With no session to restore, Paneflow opens a welcome screen on the pane card surface: a Get started section (Open folder, Clone repository, Command palette), then the recent workspaces or a Configure section, then one line naming the agent CLIs found on the machine. Recent workspaces answer secondary-1 to secondary-5, live in ~/.paneflow/recents.json, cap at eight, and drop folders that no longer exist. An empty Workspaces rail states the same choice in 192 px.
A workspace with no pane installs the pane palette on the tab it already owns, so a new workspace lands on a usable surface rather than a blank panel; the palette cannot be closed while it is the workspace's only surface.
Command palette
secondary-shift-p opens a palette listing every action that needs no key context, with its Settings description and its binding, filtered on whole words.
Clone repository
A quick pick under Get started. A repository URL typed in becomes a Clone <url> row; Clone from GitHub lists the repositories gh repo list returns, filtered as you type. A GitHub target (a github.com URL, an owner/name shorthand, or a row of that list) clones through gh repo clone, which carries gh's credentials for private repositories and adds an upstream remote on a fork. When gh is missing or signed out, Paneflow falls back to git clone and expands the shorthand to an HTTPS remote; every other host clones with git. While a clone runs the modal shows the target, a percentage, git's phase, and its throughput.
Clone URLs that start with a dash or use the ext:: transport are refused, the URL is passed after --, and the destination name rejects ., .., and empty tails.
The file tree is colored by git status
Ported from Zed's project panel. The row label takes the version control hue in Zed's order: conflict, then deleted, then modified, then created for a staged addition or an untracked path. A file shows a status letter at the right of the row: ! for a conflict, U for untracked, D and M for the worktree side before the same two for the index, A for a staged addition. A directory shows a dot summing every descendant, so a collapsed tree still tells where the changes are. Colors come from the vc_* roles of the active theme, so the decoration follows all eight bundled themes.
The status read runs on the files worker thread at the existing scan debounce, never on the render thread, and the worker now watches the resolved git directory, so a git add, a commit, or a checkout run by an agent in another pane recolors the tree.
Release notes toast after an update
The first launch of a newer version raises a toast in the bottom right: "Updated to Paneflow 0.15.1", a View release notes button, and a close button. The button, or a click anywhere on the surface, opens https://paneflow.dev/docs/changelog/v0.15.1 in the default browser. It is the one toast that never auto-closes; only the close button, the surface click, or another queued toast removes it. Detection compares a version marker at <paneflow home>/cache/last-launched-version with the running version, so it covers every update path: in-app self-update, DMG, AppImage, tar.gz, and the apt, rpm, and Homebrew packages. Nothing shows on a first install or a downgrade.
Muse Code and DeepSeek Harness
Two more built-in agents with live state. The Muse Code tab-bar button runs muse, muse_button_visible controls it, and the shim wraps muse so the sidebar spins while a turn runs, names the active tool, shows the approval wait, and settles on Done or Error. Muse Code runs its hooks with a cleared environment, so the shim registers a Paneflow-owned hook file through managed_hooks_path in ~/.config/muse/settings.json and forwards the PANEFLOW_* variables through managed_hooks_env_vars; both entries are removed when the last session exits, and a settings file that already points managed_hooks_path elsewhere is left untouched. Muse Code 1.2 does not run its Stop hook on the Meta provider, so the turn end is also taken from PostLLMCall.
The DeepSeek Harness button runs dsh --profile tui, deepseek_harness_button_visible controls it, and the shim boots dsh through a patch overlay that mounts the harness's own @deepseek-ai/dsh-hooks-claude-code bridge. The overlay and its hook config live under the harness home and are removed when the last session exits; dsh plugin, --help, --version, and the config dumps reach dsh untouched. A harness install without the bridge package falls back to start, exit code, and end.
Fixed
- Agent profile environment variables are readable and expand shell-style names. The Environment variables control in Settings > Agents takes the full width of the editor, and the remove button sits beside the value instead of over its last characters. A value can use
$NAME,${NAME}, or%NAME%alongside the leading~, each resolved against Paneflow's own environment, with the resolved value shown under the row as you type. A name your environment does not define is refused on save instead of silently pointing the agent at a junk path. Note thatterminal.envstill passes values verbatim; the expansion applies toagent_profiles.*.env. - On Windows, "Open in File Explorer" opens the workspace directory, including paths with spaces; it used to pass Explorer a combined
/select,<path>argument. Editor and folder launches run detached from Paneflow's process job and standard streams, off the UI thread, and the log records the resolved editor, arguments, PID, and exit status, with a toast on a failed launcher. - Worktree paths reported by
git worktree listare translated back onto the Paneflow root they belong to. A worktrees root reached through a symlink (/varto/private/varon macOS) or a Windows 8.3 short name (RUNNER~1) used to make Paneflow plan a duplicate checkout for a branch it had created a moment earlier, trip the "exists but holds another branch" guard, and lose track of a managed worktree on session restore. - The update toast spells Paneflow with a lowercase f.
0.15.1 is the first published build of this line: the v0.15.0 tag stopped at the Windows MSI smoke test, which launched a fresh install and waited for a terminal backend diagnostic that the new welcome screen never emits. The smoke test now seeds a one-terminal session before launching. No application code differs between the two tags apart from the version string.
Upgrade notes
- Two configuration keys are added, both default
true:muse_button_visibleanddeepseek_harness_button_visible. No key is removed or renamed. - Ctrl+V is now bound to paste on Windows and Linux. Restore the previous behavior with
"shortcuts": { "ctrl-v": "none" }. ~/.paneflow/recents.jsonand~/.paneflow/cache/last-launched-versionare new files under the Paneflow home. A 0.14.0 build ignores both.- The session schema, the terminal engine, the packaging contract, the IPC and MCP method names, and the
paneflowCLI are unchanged. Downgrading to 0.14.0 works.
Install and validation
Download the signed artifacts from this release or use the installation instructions.
Every primary artifact carries a .sha256 sidecar and a minisign .minisig; each AppImage also ships an .AppImage.zsync for delta updates. 35 assets in total.
Pipeline: run 34786328605.
Legs that passed:
- Build:
x86_64-unknown-linux-gnu,aarch64-unknown-linux-gnu,aarch64-apple-darwin,x86_64-pc-windows-msvc - Release test gate on Linux x86_64:
cargo fmt --check,cargo clippy --workspace --locked -- -D warnings,cargo test --workspace --locked - Package smoke tests: Debian 12 and Ubuntu 22.04 (
.debpostinst), Fedora 40 and openSUSE Tumbleweed (.rpmpostinst), Arch Linux (tar.gzbinary), Windows MSI install and relay - Auto-update end to end on Linux x86_64
Full Changelog: https://github.com/arthjean/paneflow/compare/v0.14.0...v0.15.1