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.
Clickable links
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.
Related
- Keyboard shortcuts: driving terminals and tabs from the keyboard.
- Sandbox overview: how drag-and-drop and network behave when caged.
- Themes & appearance: terminal color and font settings.