You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Integrated terminal drawer scoped to the thread worktree #147
T3 Code ships server-side terminals as a first-class feature (terminal.attach, mod+g to toggle) for running tests/linters without leaving the app (docs). Synara puts terminals one pane from the conversation and lets a terminal selection be sent into the composer as context (docs). Superset, Emdash, Orca and Crystal all embed a real terminal scoped to the agent worktree.
Solenta today
No PTY anywhere: no node-pty/xterm in package.json, no terminal component in src/components/. The dev servers panel only spawns detected dev/start/serve scripts (electron/devservers.js:7). PRODUCT-SPEC excludes an embedded terminal as primary UX, but a secondary drawer is a narrower thing.
Why it matters
The most common reason to leave the app is "run the test suite / tail a log / nudge a stalled command" in the thread worktree. A drawer that opens already cd'd into the worktree keeps the observe-fix loop in one window, and piping terminal output into the composer (Synara-style) removes copy-paste.
Scope suggestion
A collapsible drawer per thread (xterm.js + node-pty in main), cwd locked to the thread worktree, plus a "send selection to composer" action. Not a multi-pane terminal multiplexer.
Deep-dive detail (Conductor): the terminal drawer doubles as the harness escape hatch — a full-center terminal tab with per-agent launch presets, so ANY CLI agent works before a native integration exists. Cheap insurance for the multi-harness promise.
Round 22: do not wait on this drawer for one-shot commands. Filed #470 — composer `!` shell mode (Claude/Grok/Kimi). A persistent PTY is still the right home for `pnpm dev`. `!` is `gh auth login` / `npm test -- foo` without a model turn. They share a cwd and a sandbox; they are not the same UI.
Claude Code Desktop shipped this drawer almost exactly as scoped here, plus two details worth adopting (docs):
Same environment as the agent, not just the same cwd: "commands like npm test or git status see the same files Claude is editing." That matters for Solenta specifically because of Propagate the user's real shell environment into agent sessions #320 — if the drawer inherits the user's real shell env and the agent does not, the drawer becomes the tool that proves the agent's environment is wrong.
Tabs, opened contextually: + in the pane header, and right-clicking a folder in the chat offers Open in terminal there. That is the cheap version of the multiplexer this issue rules out — no splits, no layout, just a tab strip — and Codex 26.415 landed the same thing ("multiple terminal tabs support parallel builds and tests scoped to projects").
Local sessions only; `Ctrl+`` toggles.
Tabs pair with #492 (clickable paths) and #552 (pane shell): the terminal becomes a pane type, and "open in terminal" is a right-click on any path in the transcript.
Scope correction from the thread: a pane, not a drawer. Terminal was already a registered pane type in the #552 shell (PANE_REGISTRY, shipped: false, rendering a placeholder), so it became shipped: true plus a horizontal split — it opens beside the focused pane exactly like Git, and drags/closes/resizes with the same chrome. No drawer, no toggle, no new layout concept.
Pipes, not a PTY.node-pty is a native module and scripts/package-app.sh hand-copies prod deps with no electron-rebuild step, so a real tty costs the release pipeline more than the feature is worth today. One long-lived shell per thread (electron/terminal.js), cwd at the worktree, so cd and exports persist between commands. Ceiling is in the file header: interactive prompts (gh auth login) hang, no curses apps, no per-command exit code, and Ctrl-C is spelled Restart. Upgrade path is node-pty + xterm.js behind the same four IPC calls.
Also landed, from the same message: opening any second pane collapses the agents rail so the panes get the width. Keyed on the open action (Views menu, Git open path), not on leaves(layout).length > 1 — the layout-shaped version also fired for a restored split on every thread switch, and agentsCollapsed persists to localStorage.
Still open against the original scope: tabs, "send selection to composer", and right-click → Open in terminal on a path.
Suites: renderer 1501/1501, electron 1985/1985, typecheck clean.
Activity
currentbits commentedon Aug 17, 2026
Deep-dive detail (Conductor): the terminal drawer doubles as the harness escape hatch — a full-center terminal tab with per-agent launch presets, so ANY CLI agent works before a native integration exists. Cheap insurance for the multi-harness promise.
currentbits commentedon Aug 18, 2026
Round 22: do not wait on this drawer for one-shot commands. Filed #470 — composer `!` shell mode (Claude/Grok/Kimi). A persistent PTY is still the right home for `pnpm dev`. `!` is `gh auth login` / `npm test -- foo` without a model turn. They share a cwd and a sandbox; they are not the same UI.
currentbits commentedon Aug 19, 2026
Claude Code Desktop shipped this drawer almost exactly as scoped here, plus two details worth adopting (docs):
npm testorgit statussee the same files Claude is editing." That matters for Solenta specifically because of Propagate the user's real shell environment into agent sessions #320 — if the drawer inherits the user's real shell env and the agent does not, the drawer becomes the tool that proves the agent's environment is wrong.+in the pane header, and right-clicking a folder in the chat offers Open in terminal there. That is the cheap version of the multiplexer this issue rules out — no splits, no layout, just a tab strip — and Codex 26.415 landed the same thing ("multiple terminal tabs support parallel builds and tests scoped to projects").Tabs pair with #492 (clickable paths) and #552 (pane shell): the terminal becomes a pane type, and "open in terminal" is a right-click on any path in the transcript.
currentbits commentedon Aug 23, 2026
Scope correction from the thread: a pane, not a drawer. Terminal was already a registered pane type in the #552 shell (
PANE_REGISTRY,shipped: false, rendering a placeholder), so it becameshipped: trueplus a horizontal split — it opens beside the focused pane exactly like Git, and drags/closes/resizes with the same chrome. No drawer, no toggle, no new layout concept.Pipes, not a PTY.
node-ptyis a native module andscripts/package-app.shhand-copies prod deps with no electron-rebuild step, so a real tty costs the release pipeline more than the feature is worth today. One long-lived shell per thread (electron/terminal.js), cwd at the worktree, socdand exports persist between commands. Ceiling is in the file header: interactive prompts (gh auth login) hang, no curses apps, no per-command exit code, and Ctrl-C is spelled Restart. Upgrade path is node-pty + xterm.js behind the same four IPC calls.Also landed, from the same message: opening any second pane collapses the agents rail so the panes get the width. Keyed on the open action (Views menu, Git open path), not on
leaves(layout).length > 1— the layout-shaped version also fired for a restored split on every thread switch, andagentsCollapsedpersists to localStorage.Still open against the original scope: tabs, "send selection to composer", and right-click → Open in terminal on a path.
Suites: renderer 1501/1501, electron 1985/1985, typecheck clean.
currentbits commentedon Aug 23, 2026
Landed from Solenta thread "Integrated terminal drawer scoped to the thread worktree". Closed on merge.