termic.dev
Documentation menu

The terminal

Termic's terminals are real PTYs rendered with xterm.js and WebGL: OSC 52 clipboard, inline images and Sixel, Unicode 11 widths, find-in-terminal, drag-and-drop file paths, and configurable scrollback.


Every agent, every shell, every custom command in Termic runs in a real terminal: a PTY on the Rust side (the same portable-pty crate Wezterm uses) rendered by xterm.js with the WebGL addon. It’s not a chat box pretending to be a terminal; it’s a terminal that happens to have an agent in it. That means the things you expect from a serious terminal emulator are there.

Rendering

Terminals render through the WebGL addon, not the DOM or canvas renderer. This is a deliberate, performance-driven choice: the WebGL path was the only one without visible row gaps (“ribbons”) in full-screen TUI apps, and it keeps frame rates up under a firehose of output. Line height is pinned to exactly 1.0 for the same reason, anything else inflates cell height and reintroduces the ribbons.

If terminal text looks slightly lighter than macOS Terminal.app, that’s WKWebView’s glyph rasterization, and there’s a terminal font weight setting (in Appearance) that bumps it to Medium to close most of the gap.

Clipboard, even over SSH and in Docker

Terminals support the OSC 52 clipboard sequence. That’s what makes copy and paste work from inside a Docker container or over an SSH session, where the usual selection-based copy doesn’t reach the host clipboard. A program running three layers deep can put text on your Mac’s clipboard, and Termic honors it.

Copy on select

Selecting text with the mouse in any terminal copies it to the clipboard automatically, no extra keystroke needed. It’s on by default, and you can toggle it in Settings, General.

Inline images

Terminals render images inline using both the iTerm2 inline image protocol and Sixel. Tools that emit graphics (image previews, plots, timg-style utilities) show their output right in the terminal instead of a wall of escape codes.

Unicode widths

Termic uses Unicode 11 wide-character measurement, so CJK text and emoji take the correct cell width. Mis-measured wide characters are what smear a cursor and corrupt a TUI’s layout; getting the widths right keeps non-Latin text and emoji from breaking the display.

Find in terminal

Press ⌘F to search the terminal’s contents. Matches highlight live as you type, and Enter / Shift+Enter cycle forward and backward through them. This searches the visible buffer and scrollback of the focused terminal, handy for finding where in a long agent transcript something happened.

Drag and drop a file

Drag a file from Finder onto a terminal and its path is inserted at the prompt, escaped and ready, exactly like macOS Terminal and iTerm2. Drop a screenshot straight onto an agent and hand it off without typing the path.

Drag-and-drop is sandbox-aware. If you drop a file onto a sandboxed agent, the Seatbelt profile would normally block reads from Desktop or Downloads, so Termic asks how you want to share it: copy it into a temp folder the sandbox already allows (instant, no restart), or add its folder or the exact file to the task’s allowlist.

Links in terminal output behave like iTerm and Ghostty: the underline and pointer cursor appear only while you hold Cmd (or Ctrl), and Cmd-click opens the link in your system browser. This keeps URLs from being distracting underlined noise during normal reading.

Scrollback

Scrollback is configurable in Appearance settings, defaulting to 5,000 lines. The lightweight scratch shell keeps half that, to stay light. More scrollback means more memory per terminal, so tune it to your machine.

Still interactive after exit

When an agent or shell exits, or crashes, the terminal stays interactive so you can still select and copy its final output, for example an error message you need to paste somewhere. Instead of a blocking overlay, a restart banner appears at the top of the pane (just under the tab bar) with a button to relaunch.

Plain shells and splits

Not everything in a task is an agent. ⌘T can open a plain shell tab, and the bottom terminal panel docks a scratch shell under the main pane for the quick git status or npm run lint you don’t want to interrupt the agent for. See Keyboard shortcuts.

⌘J toggles the bottom panel: it opens and focuses a scratch shell, or hides it and returns focus to wherever you were. The toggle is three-state, so you stop closing it by accident: pressed from the agent it focuses the bottom terminal without hiding it, and only a second press hides it. ⇧⌘D also toggles the bottom panel as a fixed shortcut that keeps working even if you rebind ⌘J. If you close the bottom panel’s last shell, it stays closed across app restarts instead of reopening on its own.

Last reviewed: June 25, 2026