PorkiCoder's built-in terminal supports up to 6 concurrent sessions — perfect for running multiple Claude Code instances, dev servers, and build tools side by side.
Lightweight terminal restore in 2.17.70
Restored local terminals initialize one at a time, and a saved living-card layout is enabled only after those sessions are ready. This prevents PTYs, xterm renderers, card images, telemetry, and animation from all starting in the same burst.
Snapshot tracking is activity-driven. Terminal output schedules at most one refresh per eight seconds, terminal and directory changes are debounced, and app quit still performs a final capture. An idle terminal performs no recurring process-table or lsof scan. Turning living-card view off explicitly parks Grok's sprite loop.
A detected PorkiConsult row now produces one flash burst lasting at most 12 seconds. Repeated scans of the same row do not re-arm it; the row must disappear before a later consult can start a new burst. The existing restore limits remain: Grok can resume a recovered local conversation, other local CLIs reopen as shells, and remote-Mac tabs plus scrollback are not restored. All inspection stays on-device and adds no network request, model call, data collection, or approval authority.
Cthulhu flashes on the live consult tool in 2.17.69
The Grok Cthulhu living card loops its flash animation while porkiconsult is transmitting. Grok Build 1.0.5 paints a collapsed MCP consult as title-cased Porkicoder-consult Consult Kimi3 (same form for Codex, Claude Code, Gemini, Gpt5, Grok Build, and Kimi3 Baseten). That header is the live signal. Legacy wire ids at the start of a row — consult_codex, porkicoder-consult__consult_*, mcp__porkicoder-consult__consult_*, or those ids immediately after Call/Using/Used — still count.
Mid-line hits in file dumps, markdown lists, and shell source do not flash. Search / Searching / Searched is discovery, not transmission. Composer and queued #N wraps that merely mention those names do not flash, and the word porkicoder alone never does. A completed consult header still in the scan still flashes; when that row leaves the scan, flash stops. The change is local TUI parsing and renderer animation; it adds no data collection, model call, network request, or approval authority.
Terminals restore after restart in 2.17.68
Local terminal tabs reopen after you quit PorkiCoder. Each tab returns to the directory it was using, and a tab that was running Grok Build relaunches with grok --resume <session-id> so the same conversation continues. Manual names, tab colors, and the active tab carry over.
PorkiCoder reads the session id from Grok's open files under ~/.grok/sessions. If that id cannot be recovered, it falls back to grok --continue for the directory. Claude Code and Codex tabs restore as shells in their last directory. Remote-Mac tabs and scrollback are not restored; Grok redraws its own conversation on resume. Snapshot writes pause while empty shells are spawned so a crash during restore cannot replace the Grok session list with blank terminals.
Reliable Living Card delivery in 2.17.61
Claude and Codex card prompts use an awaited bracketed paste followed by a separate Enter. Grok keeps one atomic prompt-plus-Enter write because its live TUI interpreted a split paste as a clipboard-image action. An unknown shell is refused rather than receiving guessed provider bytes.
The draft remains recoverable while delivery is pending. The card reports SENDING, DELIVERED, SEND FAILED — RETRY, or NOT STARTED — PRESS ENTER OR RETRY; a failed write or missing fresh output/start signal restores the draft. Duplicate clicks and rapid Enter presses collapse into one in-flight delivery. Grok's busy queue and empty-Enter send-now behavior remain intact.
Cthulhu consult-transmission flash in 2.17.57
The Grok Cthulhu living card loops its flash animation while porkiconsult is in flight. A current Grok scan row naming consult_codex, consult_claude_code, consult_kimi, consult_gemini, consult_gpt, consult_grok, consult_kimi3, or the MCP ids porkicoder-consult__consult_* / mcp__porkicoder-consult__consult_* counts as transmission. Gutter-pipe Call rows and wrapped tool-id rows count; a diamond is not required. Composer and queued #N wraps that merely mention those names do not flash, and the word porkicoder alone never does. When the consult row leaves the scan, flash stops.
Codex 0.149 living cards keep context from the matching session jsonl when the composer footer no longer paints percent context left, and Overlord still matches Allow Codex to run exec overlays. The change is local TUI parsing, renderer animation, and on-device approval matching; it adds no data collection, model call, network request, or approval authority.
Image paste, growing composer, and Cmd+P in 2.17.56
A living-card composer now grows with the prompt. Paste a clipboard image with Ctrl+V in Codex (the OS clipboard) or Cmd+V in other CLIs (a temporary PNG path under PorkiCoder's app-data directory). Temp images are pruned; they are not uploaded by PorkiCoder.
Cmd+P (Command only, not Control-P) toggles the focused pane between its living card and the raw terminal. The hog-sphere now opens living agent cards; the eclipse now belongs to Terminal Overlord. The change is local clipboard, renderer layout, and toolbar icons; it adds no data collection, model call, network request, or approval authority.
Per-pane living cards and raw CLI in 2.17.55
The eclipse still opens AI panels for every local terminal at once. After that, each living card has a >_ control at the left of its composer that shows only that pane's raw terminal. A raw pane in the same grid shows a CARD chip at the top-left to restore only that pane's living card. Two cards and one CLI can stay visible together.
Clicking the eclipse while some panes are raw restores every local pane to a card without collapsing the grid. Clicking it while every local pane is already a card still closes AI panels and returns to one tabbed terminal. Remote terminals never grow a card or a CARD chip. The change is local renderer layout; it adds no data collection, model call, network request, or approval authority.
Codex context continuity in 2.17.54
Codex's percentage footer now merges with partial process telemetry instead of requiring an all-or-nothing stats response. The renderer also keeps the recently verified Codex identity through a brief foreground-stat miss, so a normal TUI repaint no longer empties the living card's context-left bar or CONTEXT stat.
Exact used/window token totals still take precedence when Codex exposes them. Percentage and status rows remain interface chrome rather than narration, and this local telemetry repair sends no terminal content to a model or service.
Codex card context and first-send repair in 2.17.53
Codex's percentage-only context left footer and expanded Context % used status now drive the living card's context-left bar and CONTEXT stat. If exact used/window token totals are also visible, those remain the more precise source. Context and status footers are treated as Codex interface chrome, so they do not become bot narration or a new answer title.
Pressing Enter once in a Codex card now writes the prompt as one explicit bracketed paste and sends Enter only after that PTY write lands. This avoids Codex consuming the same Enter to finish its paste buffer. The terminal observer keeps the pasted text as one logical prompt, ignores the transport markers, and preserves exact /overlord routing. This changes no provider interrupt policy and adds no data collection, model call, network request, or approval authority.
Separate AI Panels and Overlord controls in 2.17.52
The terminal header now has two distinct pixel-art controls. A neon eclipse opens and closes AI panels and living Agent Cards. HOGSPHERE belongs to Terminal Overlord and toggles supervision for the active local terminal. The Overlord state follows the button, /overlord, and STOP as you switch tabs; its button is disabled for remote terminals. Both terminal-header implementations carry the same controls.
The eclipse shimmer becomes still when reduced motion is requested. These controls add no data collection, model call, network request, or approval authority; existing Overlord privacy and safety boundaries are unchanged.
Updater-visible Grok card ship in 2.17.51
2.17.51 is the same Grok living-card work as public 2.17.50, published under a new version so Macs that already showed 2.17.50 from a same-day local install will update. The chip ticks, queued #N prompts show on the card, empty Enter force-sends, the hog-sphere orb lets go of the keyboard, idle flaps, and PorkiCoder consult wait flashes.
Prompts, titles, and cards stay on this Mac.
Grok card timer, queue send, and consult flash in 2.17.50
Grok, Codex, and OpenCode cards tick WORKING and IDLE from the card clock. Claude still uses its session stamp. Grok #N queue rows show as a count plus the first words of the prompt. Empty Enter or Send force-sends that queue into the same PTY, like Grok Build send-now.
Switching to raw terminal blurs the hog-sphere orb and focuses the PTY so you can type immediately. Idle flaps the flying wing pair only. A current PorkiCoder consult tool row plays the flashy dissolve. Working Grok stays on the still. If the session exits, the composer restarts it.
Prompts, titles, and cards stay on this Mac.
In-card composer and no pop-out in 2.17.49
Each living card has a composer that types into the same PTY already running under the hidden xterm. Enter sends the line. Shift+Enter wraps in the box and still sends as one line so Grok and Codex alt-screen composers do not take an early Enter. Esc clears the draft. An empty Ctrl-C sends interrupt. /overlord still toggles HOGSPHERE. PorkiCoder never starts a new agent session from the card.
While cards are on, the hidden xterm cannot receive keystrokes. Focus is the composer. If the terminal is not ready, the draft stays. The hog-sphere orb now lights the sprite's own eyes, keeps a hairline ring at rest, and uses aria-pressed as the on state. Floating pop-out terminals cannot be opened.
Prompts, titles, and cards stay on this Mac.
Pig orb, three buttons, and per-agent naming in 2.17.48
The hog-sphere portrait is an icon-only control that opens living agent cards. The terminal header keeps three buttons: new tab, pig cards, and fullscreen. Pop-out, header close, the remote-workspace pig, and the Overlord shield leave the chrome. Type /overlord or press STOP in the HUD to supervise a local agent. Research sync status moved to Settings.
Claude Code, Grok Build, and Codex each have their own card-naming ruleset. Grok's title bar, pager, Dashboard, and composer footer are chrome. Codex •-status is chrome; •-tools stay. Repeated titles such as Mode Mode are rejected. The name plate follows the latest named activity instead of freezing on the first prompt.
Titles, cards, and sync status stay on this Mac.
Living Agent Cards as a first-class view in 2.17.47
The split-layout toolbar glyph is now a hog-sphere orb that turns living agent cards on and off. Fresh installs still open terminal-first; last layout and last card/raw view are remembered. SYN, New OpenCode, Export to chat, and Clear are gone from the toolbar; Reattach and floating stay. The floating window runs the same cards. Grok Build's session title bar (the generated title plus [Dashboard]) is chrome, so the name plate follows PorkiCoder's on-device tab namer instead of freezing on MAIN PROJECT. PorkiCoder also ships a native Grok managed_config.toml layer.
Version 2.17.49 adds the in-card composer and removes floating pop-out terminals. Titles, cards, and the managed Grok file stay on this Mac.
Agent Cards state, work log, and STALL in 2.17.46
The card now reads Claude Code's session registry for busy / waiting / shell / idle and shows that as a ring, eye glow, and a WORKING / YOUR TURN / IDLE / SHELL chip with a stopwatch. Agents without a registry fall back to streamed text or recent terminal output. A claimed busy with no terminal output for 45 seconds becomes STALLED. On panels about 560px and wider a work log lists the current and last five emissions; a landed message can be paged back with the buttons or the wheel. OpenCode has its own bot. Grok's "Writing file…" preparing spinner is chrome, not an answer, so it no longer flips the name plate.
State, log, and titles stay on this Mac.
Agent Cards redesign in 2.17.45
The multi-panel card is now borderless - the pane's own tab-colour ring is the only frame - and reads top to bottom as a trading card: the name plate, a speech bubble with its tail pointing down at the bot, the bot itself, and a stat band. Claude, Codex, and Grok each have their own bot in the same pixel-art family as the overlord pig; other agents and plain shells keep the pig.
The bubble types the agent's words in like a Game Boy textbox: character by character with beats on punctuation, a caret trailing the text, a full page held behind a ▼ and then wiped out. It follows the live stream - appends keep typing, rewrites erase only the changed tail, a finished message always rests on a real last page, and a stream that outruns the typing jumps to the freshest words. The stat band shows the HP-style context bar, the agent's flavor line, and CONTEXT / OUTPUT / TURNS cells that roll and flash as telemetry lands. Reduced-motion turns all of that motion off; hidden panels park the typewriter and a resized pane re-pages what is on screen. Nothing new leaves this Mac.
Agent Cards in 2.17.44
Flip the terminal to multi-panel (the panel button) and every pane running a supported agent becomes a card: a HOGSPHERE pig-bot portrait, an uppercase title the local namer gives the current answer, a context-left bar, a per-agent flavor line, and a bubble with a small snippet of the live stream. The card sits over the terminal — there is no way to type into it — while the real session keeps running underneath as the text source.
Titles use the same on-device Title-SFT FLAN flat1e4 model as tab naming, so narrating a stream costs no API calls. Claude's context and token totals come from its local session transcript; Grok and Codex report context parsed from their own terminal UIs. Emission text and titles never leave this Mac.
Title-SFT FLAN Tab Titles in 2.17.43
The private local namer is now Title-SFT FLAN flat1e4. Every eligible submitted shell command or human agent prompt can request a new private title. App start pre-warms the unconstrained greedy ONNX worker, and verified runtime assets are hashed and loaded in one pass so the first rename does not wait on a cold session. Slash commands, bare agent launches, and startup confirmations still stay unnamed.
The 77M encoder-decoder writes a raw title. There is no Hybrid A glue and no centroid fill. Titles remain one to three ASCII words and 32 characters. The task and title still stay on this Mac.
Millisecond 6t Tab Titles in 2.17.42
Every eligible submitted shell command or human agent prompt can request a new private title. The 10-word skip from 2.17.41 is gone. App start pre-warms the local 6t argmax + centroid worker, and verified runtime assets are hashed and loaded in one pass so the first rename does not wait on a cold ONNX session. After warmup, a title request settles in about 10 ms on this Mac. Slash commands, bare agent launches, and startup confirmations still stay unnamed.
The 35M encoder-decoder still uses constrained Beam 4 over two visible source words, Hybrid A glue, and the frozen centroid v2 table. The task and title still stay on this Mac.
6t Argmax Tab Titles in 2.17.41
The private local namer became 6t argmax + centroid. The 35M encoder-decoder still uses constrained Beam 4 over two visible source words, Hybrid A glue, and the frozen centroid v2 table. Only the namer weights changed. In 2.17.41 a submitted shell command or human agent prompt needed at least ten technical tokens (A-Za-z0-9+#) after the usual first-paragraph, 400-code-point preprocess; shorter prompts kept the current title and did not reuse a previous first-shell privacy verdict. 2.17.42 removes that skip.
On this Mac the INT8 worker produced 1,000 valid labels in 1,000 reusable tasks, with 19.1 ms warm median latency, 26.0 ms p95, and 535.6 ms one-time initialization. Terminal-board research scored the 6t stack +0.193 versus the previous B-9500 pin at n=1,000. The task and title still stay on this Mac.
Prompt-only Tab Titles in 2.17.40
Eligible titles come only from submitted human input. A fresh ordinary shell can be named from its first eligible command after the privacy gate. After a supported interactive agent is identified, each eligible submitted human prompt can request a new title. Bare agent launches, startup confirmations, slash commands, streamed assistant output, status redraws, and tool-call markers do not request titles. The submitted task stays capped at 400 code points before the normal IPC validation.
Private Beam 4 Tab Titles in 2.17.35
A fresh local terminal can use the bundled Mid GSG Beam 4 + trained centroid v2 runtime to name one eligible ordinary shell task. The scratch-trained B/9500 35M encoder-decoder has the same weights as 2.17.34, but constrained four-beam search now compares complete, distinct source-word pairs instead of committing greedily. Every generated word must map to a visible source occurrence; the frozen centroid may add only one whole source word. Technical words may retain + and #, but punctuation-only labels are rejected.
Open Settings and choose Off, Shadow (evaluate only), or On (show titles) under Experimental Local Terminal Titles. On is the default when no preference exists; an invalid stored value fails closed to Off. Shadow performs the same local evaluation but leaves the directory-only label on screen. On displays folder · title. Generated titles are restricted to one to three ASCII words and 32 characters, and the full working directory remains available in the tab tooltip.
The first eligible printable shell edit can wait briefly for a bounded, main-process privacy check before its bytes are forwarded unchanged and in order. Naming proceeds only when the foreground shell owns the TTY in a normal editing state; canonical no-echo password and token prompts fail closed. Supported-agent observations separately require that agent to be the foreground process-group leader. The submitted human task is capped at 400 code points before the normal IPC validation.
The task and title stay on this Mac: no model provider, API key, project-file read, chat history, or naming log is involved. The runtime considers at most the first 96 source words and 160 tokenizer positions; decoding stops after eight tokens, and one FIFO worker runs one inference at a time with bounded queue, timeout, and restart behavior. A manual rename or launch-preset name always wins, remote terminals are excluded, and detach or reattach transfers only validated title state. Timeout, invalid output, worker failure, stale ownership, or an unsafe input context simply leaves the directory label in place.
On the new blinded 1,000-task product packet, the exact shipped INT8 path produced 1,000 valid labels, matched the FP32 bounded title on 951 rows, and scored 6.187 versus bounded FLAN's 5.516. Across three target-Mac runs, warm median latency was 19.95–20.73 ms, p95 was 26.0–34.5 ms, and one-time initialization was 513.7–521.2 ms. The bundled rarity data still contains only aggregate public-corpus word counts, not source task rows, and the model weights did not change. The sealed final 1,000-task split remains unopened.
Settled Terminal Resizing in 2.17.30
Zoom applies the new font metrics immediately, then waits 120 ms for the final layout before fitting xterm and resizing the PTY. Window drags, fullscreen changes, and zoom bursts coalesce toward the latest dimensions; PTY resize acknowledgements remain serialized, including an A-to-B-to-A size sequence.
PorkiCoder restores the pre-resize row anchor only if the user has not expressed newer scroll intent. Mouse-wheel scrolling, Shift+Page Up/Down, Shift+Home/End, and jump-to-live actions all supersede the older anchor. This changes terminal geometry only: it does not restart the shell, signal the user's process, or alter copied terminal bytes.
Direct-to-relay recovery and detached-session controls in 2.17.54
A remote session can still choose the authenticated direct LAN path first. If that direct socket fails, reconnect attempts now bypass the rediscovered nearby endpoint and use PorkiCoder's existing end-to-end encrypted cloud relay. A synchronous input-send failure closes the unusable encrypted channel, preserves the unsent sequence number, and reports reconnecting instead of exposing a raw socket write error.
The Settings button shows the combined active and detached remote-session count. Open Settings to end every remote session immediately. A disconnected shell remains available for reattach for 15 minutes, then the host ends it automatically; the previous 12-hour detached lifetime is retired. This limits ghost work without changing the 24-hour ceiling for a connected session.
Relay Disconnect Recovery in 2.17.20
If the relay WebSocket goes offline while the host terminal is producing output, PorkiCoder now contains the failed send instead of letting it become an uncaught main-process exception. The output chunk is already in the bounded replay buffer, the unusable connection is detached, and local relay and encrypted-session cleanup completes even when the socket cannot carry a final close notification.
The controller moves to reconnecting and can attach through an available Direct or Relay route. Sequence acknowledgements prevent duplicate terminal output when the buffered data is replayed. Reconnection still verifies the signed-in device identity, pinned keys, Noise session, and directional grant; replay remains limited to 3 MiB, and version 2.17.54 ends an unclaimed detached session after 15 minutes.
Host-side Controller Visibility in 2.17.19
Remote Workspaces now has two directional lists: Macs allowed to control this Mac shows controllers authorized to reach the current host, while Macs this Mac can control shows hosts available from the current controller. An inbound controller reports whether it is connected over Direct or Relay transport, its active and detached session counts, and any repositories in use. In current builds, the Settings button carries the live session-count badge and status tooltip even while the dialog is closed.
The host can revoke an individual controller or end every remote session immediately. These controls do not reduce the authority granted while a session is running: the remote process is a full shell running as the logged-in macOS user, and navigation roots are starting choices rather than a sandbox. Pair only Macs you trust.
Fullscreen Keyboard Focus in 2.17.12
After the fullscreen terminal layout finishes fitting, PorkiCoder returns keyboard focus to the active initialized terminal so typing resumes immediately. If the terminal panel was hidden during that relayout, focus is left alone instead of being moved into a hidden shell.
Relay-only Paired Macs in 2.17.18
A Mac paired through a manual invitation now appears in an always-visible Paired Macs section even when nearby discovery is unavailable. On the controller Mac, open Remote Workspaces, select the host's Connect button, choose a starting workspace and an installed launch preset, then open the remote terminal. Nearby Macs remains a separate opt-in list for unpaired local-network candidates.
Pairing is directional: pairing Work to Home allows Work to control Home, but does not automatically grant Home control of Work. Repeat pairing in the opposite direction only if that access is wanted. Navigation roots organize the starting-workspace picker; they do not confine the resulting shell. The remote process runs with the full authority of the logged-in macOS user.
Nearby Macs Preview in 2.17.17 (Opt-in)
PorkiCoder 2.17.17 can discover another signed-in Mac automatically, request one host approval, and open its remote terminal over an authenticated direct connection when the devices can reach each other. Signed directory identity, pinned keys, Noise, and a directional grant protect both direct and relayed sessions; only a reachability failure may fall back to the existing end-to-end encrypted relay. Direct discovery uses validated private or link-local IPv4/IPv6 endpoints rather than a hardcoded consumer address, while Macs on different networks continue through the relay.
The preview remains off by default in packaged builds. For the two-Mac validation run, quit PorkiCoder on both Macs and launch each installed app with open -a PorkiCoder --args --enable-nearby-transport-spike. Local terminals retain the emerald palette; remote terminals use white on black and show whether the active path is direct or relayed.
Nearby Transport Foundation in 2.17.16 (Internal)
PorkiCoder 2.17.16 packages a privacy-preserving Bonjour discovery and bounded local reachability spike for future Nearby Remote Workspaces validation. It is off by default in packaged builds and does not enable nearby pairing, direct terminal traffic, a Noise session, a directional grant, file access, or a PTY. Existing Remote Workspaces continues to use its end-to-end encrypted relay; the separately controlled internal flag exposes validation state only and never selects the LAN for terminal traffic.
Remote Workspace Dialog Visibility in 2.17.11
The linked-device pig, pairing invitation links, and incoming host-approval prompts open the Remote Workspaces dialog above terminal-first and fullscreen terminals. Opening it does not change the running terminal or workspace-view state.
Multi-Session Management
Each terminal session gets its own tab with a cyberpunk color palette (6 auto-assigned colors) and a colored left border strip for quick visual identification.
Activity indicators — Background tabs show a pulsing green dot when receiving output; turns amber 2 seconds after output stops; clears when the tab is focused.
Remote Workspaces beta — Open Settings and choose Remote Workspaces to pair another signed-in Mac and open one of its terminal workspaces. Hosting is off by default. On the host, enable hosting, choose one or more navigation roots for the starting-workspace picker, then create an invitation. Scan its QR code, open its porkicoder:// link, or enter it manually on the controller; compare the short phrase and approve on the host. The grant works only from that controller to that host. The dialog separates Macs allowed to control this Mac from Macs this Mac can control; the Settings badge reports active plus detached sessions and its release control can end them all immediately.
Encrypted reconnect and host controls — Terminal input and output are end-to-end encrypted between the paired devices; the relay routes opaque frames. A direct LAN connection that fails reconnects through the cloud relay and replays up to 3 MiB of recent output. A detached session remains reattachable for 15 minutes before automatic termination. Connected sessions keep a 24-hour ceiling and an eight-session per-device limit. Remote tabs have a fixed remote palette and connection state, while the host can end all sessions or revoke any device or grant. A remote terminal is a full shell running as the logged-in macOS user; navigation roots are starting choices, not a sandbox, so pair only devices you trust.
Ownership-checked terminal sessions — Every local and remote shell is routed through the main-process session broker. Each terminal handle belongs to one renderer window, and write, resize, close, and directory requests are schema- and size-checked.
Reliable tab close — Click a tab's close button and confirm to end that shell, clear its terminal output, and remove the tab. If other sessions remain, PorkiCoder activates a neighboring tab; closing the last one hides the terminal panel. Version 2.17.7 repairs a cleanup regression that could leave the tab and shell open. Closing is local and sends no path, output, or model request to a provider.
Live directory-named tabs — A new terminal tab starts with the basename of its authoritative launch directory, then follows the active shell's working directory after cd. It requires no provider request and remains the fallback. When local task titles are enabled, the bundled 77M-parameter model may add a short label; tabs that launch with a preset name are left alone.
Manual rename — Double-click any tab title to inline-edit the name. Only manual renames persist across sessions — automatic directory labels are recalculated, while a manual name always wins even as the shell changes directory.
Detection and limits — PorkiCoder reads the local shell's directory through bounded OS process inspection on macOS and Linux and accepts sanitized local OSC 7 reports from compatible shells. A nested or remote shell that does not report its directory may keep the last known local label. Lookup failures never change the shell's directory or terminal restart path; they affect only the tab label.
Quick Claude Code launch — Cmd+Shift+C creates a new named "claude" tab and starts the CLI automatically.
Quick OpenCode launch — The terminal button (Cmd+Shift+O) creates a new named "opencode" tab and starts the OpenCode TUI automatically.
Split View & Chat Bridge
Multi-Panel Split View — Toggle the split view button to show all terminals in a CSS grid (up to 3 columns). The active terminal is highlighted with its tab color. Click any panel to focus it.
Send to Chat — Captures the active terminal's recent output (or current selection) and pre-fills it as a code block in the chat input.
@terminal mention — Type @terminal in the chat input for autocomplete that injects the terminal buffer as inline context to the LLM.
Living card toggle — Press Cmd+P to switch the focused pane between its living card and raw terminal while the same PTY keeps running.
Terminal Keyboard Shortcuts
Cmd+P — Toggle the focused pane between its living agent card and the raw terminal (Command only; Control-P is not bound).
Ctrl+V — Paste a clipboard image into Codex.
Cmd+V — Paste a clipboard image into other CLIs (card mode inserts a temp path).
Cmd+1-9 — Switch to terminal tab 1–9 when the terminal is focused.
Cmd+Shift+[ / Cmd+Shift+] — Cycle to previous / next terminal tab.
Cmd+Shift+C — Quick-launch a new Claude Code session.
Cmd+Shift+O — Quick-launch a new OpenCode session.
Cmd+Shift+. toggles between the fullscreen terminal (terminal-first) and the classic workspace layout.
Editor — Cmd+K Inline Edit UPDATED in v2.17.63
Select code in the editor, press Cmd+K, describe the change in plain English, and AGENT HOG streams the replacement in place using its fast Gemini 3.7 Flash profile. Esc mid-stream restores the original; Cmd+Z after the edit completes reverts the whole thing in one keystroke.
Settings → Cmd+K Inline Edit lets you choose live-replace or diff-modal review and set a line cap that auto-switches large selections to the diff modal. There is no separate model picker, and retired model preferences cannot change the active profile.
Rock-Solid Lifecycle NEW in v1.5.8
A full reliability pass closed every race and leak we could find in the terminal controller: destroy now serializes with in-flight init/restart so closing a tab mid-startup can't crash or leak a PTY, restart preserves the original cwd after a project switch, the detached-window activity dot correctly decays from green to amber to idle, and the xterm readiness/cleanup paths no longer leak listeners on a destroy-during-init. If you ever saw a terminal freeze, spawn in the wrong folder, or leak when you closed a tab fast — that should all be gone.