Skip to content

Server server2-20261029-01

Choose a tag to compare

@dualface dualface released this 29 Oct 14:30
· 2 commits to main since this release

Official server release from quicktui-mono@656ce3dd9b4fc4749ab43eb867be751800cc6724.

Server

Before you update

  • macOS: the server now needs macOS 13 Ventura or later, because it is now built with Go 1.27. Before, the server binary also ran on macOS 12 Monterey; the installer already needed macOS 13.

Changes

  • Grok: in leader mode, when you reject a Grok plan in the app with feedback, Grok now gets your feedback and revises the plan. Before, a rejection with feedback failed. When Grok wrote no plan, or its leader is older than 1.0.67, Grok drops the feedback, so an updated app shows no feedback field for that plan and rejects it without feedback. A Grok plan that waits in a terminal without leader mode now shows that it needs the plan, which you approve in the terminal (a approves, s asks for changes, q quits the plan).
  • The server now tells the app how to show each agent's tool calls and approval requests (the kind of tool, its file, command or query, the file changes, the answers to a question, and whether an approval asks for a permission), so the app no longer needs an update to show a new agent's tools. With an updated app: a dsh question you answered shows as an answer row in the conversation, as Claude's do, and every agent's tool icons and approval cards follow the same rules.
  • The server now tells the app how each agent takes answers to its questions and approvals, so the app no longer needs an update for a new agent. With an updated app: OpenCode, omp and dsh multiple-choice questions take your own answer together with the selected choices, as Claude's do. A dsh approval whose plugin channel is not available shows "Approve in terminal", and a Grok session that holds more requests than the server tracks shows "Answer in terminal" or "Approve in terminal", instead of disabled buttons.
  • OpenCode: when the OpenCode background service cannot be reached, a pending OpenCode question or permission request now shows "Answer in terminal" or "Approve in terminal" instead of disabled buttons; answer it in the OpenCode client that shows it.
  • The server now tells the app which agents can be started from chat: Claude, Codex, OpenCode, Grok, pi, Cursor and omp. With an updated app, New Session in Agent chat lists only these agents.
  • DeepSeek Harness (dsh): with the quicktui-dsh plugin installed in dsh, dsh sessions show up in the app with their status and conversation. Answer tool approvals (allow once or reject) and dsh questions, send prompts, and interrupt a turn from the app. Subagent sessions are not listed; their approvals and questions show on the parent session. Terminating a dsh session is not available.
  • dsh: a dsh approval or question whose text is too long to show in full now ends with [truncated] (a header ends with …), so you can see that the app shows only part of it. A dsh plan review whose plan is cut offers only "Keep planning" and your feedback in the app; approve such a plan in dsh. Updated quicktui-dsh plugins also report text they cut themselves; with an older plugin, only text the server cuts is marked.
  • dsh and OpenCode: in a request with several questions where some questions take only the listed choices (a dsh fixed-action question, or an OpenCode question that does not allow its own answer), the app no longer shows a typed-answer row for those questions. Before, the row showed there for OpenCode questions.
  • pairing devices list --json prints the paired devices as JSON (device_id, label, issued_at, last_seen_at, source), so a local program can see when a new device has paired. The output does not change with the interface language.
  • Windows: fixed service install, service uninstall, and service restart failing with "cannot verify image of process ...: A device attached to the system is not functioning." after the server was quit from the notification area menu. The server now treats a process that has already exited as stopped. It also identifies its own startup-entry process by process ID and start time, not by the executable path, so you can upgrade or uninstall with a binary in another folder, and the old process is still stopped when its folder was moved or deleted. A process ID reused by an unrelated process that you cannot stop no longer blocks these commands.
  • Luvus: new and closed workspaces, tabs and panes show up at once instead of after the next 2-second refresh. Workspaces and tabs open on the pane Luvus last focused in them, not the first one, and the phone layout follows the layout.mobile_width setting. Opening or creating a session starts the Luvus server when none is running; on Windows too, starting it returns in about a second.
  • Luvus: create, rename and close workspaces and tabs from the app, and zoom or close panes. A new workspace opens the folder you choose, and new tabs open in the workspace folder.
  • Luvus: launch agents in a new tab, see their status on tabs and in the agent list, rename and resume them, and answer approvals and chat from the app, as on tmux and Herdr. Text sent from the Input Bar now goes to the terminal's own pane even when another client changes the focus.
  • Luvus: when the same device reconnects within 5 minutes, the server reuses the terminal's Luvus client and shows its current screen right away instead of starting a new client. Set how long a released client is kept with luvus_client_retention (0 turns it off; not available on Windows). When you switch panes on your computer or another device, the terminal follows to the new pane instead of disconnecting, and switching tabs or panes in the same session no longer restarts the client.
  • Luvus: open a history snapshot from the terminal's top bar to see the last 300 lines of output, including lines that scrolled off the screen, with their colors, and select and copy text across them. Luvus has no copy mode; scrolling with the wheel and selecting on the screen still work as before.
  • Luvus: with the terminal theme, a terminal now starts with the app's terminal colors. Luvus asks for the host colors only when its client starts and waits about 50 ms, so the server now answers for the app from the colors the app reports. Apps that do not report colors keep the Luvus fallback colors, and the color queries no longer reach the terminal.
  • Herdr: the server now answers the Herdr client's questions about the terminal colors and the light or dark appearance, from the colors and appearance the app reports, and tells Herdr when you switch the app between light and dark. Before, the app answered over the network, so an answer could come late or get lost while the terminal switched screens. Apps that do not report colors still answer for themselves.
  • tmux: programs in a pane that ask for the terminal colors now get the app's terminal theme. The text color tmux uses for the pane is now the theme's own foreground instead of a light or dark color picked from the background. With tmux 3.6, palette color queries (OSC 4) are answered from the theme too; tmux 3.3 does not pass them on. Apps that do not report colors behave as before. When devices with different themes share a session, the device that changed its theme last sets the colors.
  • Built-in shell: programs that ask for the terminal colors now get the app's terminal theme from the server, and old color questions in the output shown when you open a session are no longer answered again. Questions asked while no app is connected are not answered. When devices with different themes share a session, the device that opened the session or typed last sets the colors. Apps that do not report colors behave as before.
  • Agent chat history: older messages of a session no longer stop loading at one bad record. A Codex command output that contains NUL characters now loads with those characters removed. A Codex item that cannot be read, and a record of a Claude, Grok, pi, omp, or dsh session that is too large to show, now shows as a placeholder, and the messages before it still load. Before, the history stopped at that record, and earlier messages could not be loaded. Codex sessions larger than 16384 items or 64 MiB now load too.
  • Codex: a session whose Codex process crashed or was killed in the middle of a turn no longer shows as running forever, in the cases that server2-20261026-01 did not fix. When the session has not written anything for 15 minutes and there is no sign that Codex still runs (a recent hook event, the Codex app-server, or the Codex process in its terminal pane), the app shows its status as unknown instead of running. A long command that prints nothing still shows as running while its Codex process runs.
  • Provider status now reports Codex as trust_required with detail hooks_disabled when you turned off any QuickTUI hook in Codex /hooks, and ab2ctl provider status codex names the disabled events. Before, it reported managed_current after any delivery. Turn the hooks back on in Codex /hooks.
  • Provider status for Grok, Cursor, pi, and omp no longer reports a delivery from before the last change to the QuickTUI hook config: the delivery status stays never_observed until the agent runs the new hooks.
  • Fixed messages from the app not reaching an agent after it switched sessions in the same terminal (Claude /clear or /resume, Codex /new, pi, Grok or omp /new). The new session now takes over the pane at its first session start or prompt, and the old session stops receiving them; a late hook of the old session no longer takes the pane back. This works in tmux and in Herdr panes whose agent does not report its session to Herdr.
  • Fixed an agent run by another agent's tool in the same pane (for example claude -p, grok -p, or codex exec) taking over the pane, so that messages from the app went to the nested run instead of the agent you see.
  • Cursor CLI: sessions in tmux and Herdr panes can now receive messages from the app on Linux and macOS. Before, its background worker process made the pane look like it ran two agents, and the session was never bound.
  • Agent sessions: an agent that waits at its prompt now stays idle instead of turning to an unknown status after 15 minutes without activity. A session that ends, or whose agent process exits, now shows as completed instead of staying unknown or running; it shows its live status again when you resume it. A Claude question that reaches the server as a permission request no longer shows as waiting for approval; server2-20261026-01 fixed this only for the other Claude questions.
  • Claude Code sessions: a finished turn now shows as idle within a few seconds instead of staying running for about a minute. A session whose turn has ended but still runs background tasks (background commands, monitors, or background agents) now shows as idle instead of running; a new prompt shows it as running again.
  • Fixed the app sometimes refusing to send messages to an agent. A question or approval the agent no longer shows no longer blocks sending: a Claude question left open by an ended, interrupted or killed turn, a Cursor question form that is gone, a Grok permission prompt of a cancelled turn or of a session that ended, and a pi or omp dialog of a process that exited or was replaced. A dialog the agent still shows keeps sending closed, as before. A session you terminated from the app now shows sending as unavailable instead of refusing the message, and sending works again once the session runs in a new agent process (or, for OpenCode 2.x, once the OpenCode service runs it again).
  • Claude and Grok: a subagent's tool calls no longer change the status of the session that started it. A Claude session whose turn ended while a background agent still runs now shows as idle instead of running. When a subagent asks for a permission, the parent session shows "waiting for approval", because the agent shows that prompt in the parent's terminal, and returns to its earlier status when the subagent's tool ends. For a Grok subagent this needs the server to have found the subagent's parent first (within about 30 seconds of the subagent's start).
  • ab2ctl content-gate audit|apply (also run as quicktui-server ab2ctl content-gate) now covers every agent that keeps sessions without conversation content out of the session list: Claude, Grok, OpenCode, pi, omp, and dsh. Choose agents with --provider (repeatable) or by setting their source flag: --claude-root, --grok-home, --opencode-db, --pi-session-dir, --omp-session-dir, or --dsh-sidecar-dir. An agent whose source flag is not set uses the location the server reads. Calls that set only --claude-root or --provider claude print the same output as before. Without --provider and without a source flag, the command now covers all six agents instead of only Claude, prints one result per agent (JSON results instead of result), and refuses --session-ids-file; add --provider claude to keep the old scope.

Install with:

curl -fsSL https://quicktui.ai/q.sh | sh -s -- install --channel server2

This command resolves the server from the live server2 channel in server-manifest.json; it is not a tag-pinned historical install.

Assets use these names:

quicktui-server-<platform>-<arch>
quicktui-server-windows-<arch>.exe
quicktui-server-<platform>-<arch>.sha256
quicktui-server-<platform>-<arch>.gz
quicktui-server-<platform>-<arch>.gz.sha256

Installer assets are not included in this server release. q.sh and installer assets are published independently from server2 releases.