‹ all releases
The terminal in the desktop app got the round of work it needed. It renders on the GPU, it can find text, it can hand a selection straight to the chat, and — most importantly — it stopped doing two things it should never have done: spitting escape-sequence garbage at your prompt when you opened a tab, and leaving processes alive after you closed it. Alongside that, the embedded browser no longer hangs on screen while a window closes, and the model picker can no longer hide the model you're actually running.
The terminal stops fighting you- No more junk at the prompt. When you opened a terminal tab, the replayed scrollback could contain escape sequences that ask the terminal a question. xterm dutifully answered them — into your shell's standard input, where the answers landed as garbage at the prompt. Those queries are stripped from the replay now, and the backlog is trimmed at a line boundary instead of halfway through an escape sequence.
- Closing a terminal actually closes it. The whole process group is taken down on close — SIGTERM, then SIGKILL if needed, and
taskkillon Windows — so a shell with background children doesn't leave them running. - Your shell gets a clean environment. On Linux, the AppImage runtime was leaking its own mount paths into your shell, so tools resolved against the app bundle instead of your system. That's scrubbed, and Empryo's own control variables (
ELECTRON_RUN_AS_NODE,EMPRYO_*,VITE_*) no longer show up in your shell either.
- GPU rendering. The terminal draws through WebGL, with bounded recovery if the graphics context is lost and careful teardown so contexts can't leak as you open and close tabs.
- Emoji and CJK line up. Character widths follow Unicode 11, so powerline prompts stop drifting out of alignment.
- Find with Cmd/Ctrl+F. A find bar over the terminal buffer.
- Selection to chat with Cmd/Ctrl+Shift+A. Highlight output, send it straight to the composer.
- Tabs tell you what's running. Each tab shows its current command with a busy dot while it's working.
- The black band at the bottom is gone. xterm hardcodes a black viewport, and fitting the terminal to the pane left an unpainted remainder below the last row.
- Closing a window no longer leaves the browser floating on top. Native views are detached before the renderer tears down, so the embedded browser goes away with everything else.
- Reopening a window brings the browser back. After closing and reopening a window on macOS, the browser could come back invisible.
- Links from the terminal go somewhere sensible. Localhost and workspace files open in the in-app browser; public links go to your system browser when the embedded one is scoped to local-only.
file:navigation is limited to real files inside the workspace you have open.
- The picker can't hide the model you're running. A custom provider's declared models stay in the list even when its API key is missing, and if no provider claims your current model — a deleted provider, a renamed model, an unresolved listing — it's surfaced under "Running now" instead of vanishing from the picker.
- Per-tab routing overrides survive a reload. The drawer said "Tab routing updated" and then quietly dropped it on restart. It persists now.
