GPU-native · Rust · Linux · on the v1 doorstep

terminal delight

Agentic Forward

The terminal you watch your fleet of agents through — a real, fast Linux terminal with a read-only agent-monitoring layer built in.

Run a wall of coding agents (Claude, Codex). terminal-delight reads each one's own transcript and shows you, at a glance, who's working, who's blocked on you, who errored, and what every agent is spending — without ever writing to a shell.

the agent wall — every agent's project · model · effort · live task · token spend
the terminal-delight agent wall: a CRT scoreboard of agent cards grouped by project, each card showing the model, effort, what the agent is doing right now, and live token spend, with working/blocked/error/done states colour-coded
▶ The in-app wall, live on the web — open the kiosk ↗. Read-only; staged demo data, never real prompts.
What it is — start here, unroll for more

The whole thing, simply.

The one big idea first, then everything else. Click any row to unroll it — each links to its full feature doc.

Watch your whole agent fleeta read-only MCP surface monitors every agent's transcript & state
This is the headline. An orchestrator — or the in-app wall — sees who's running where, what each agent is doing right now, its token spend, and whether it's blocked on you. The data comes from each agent's own on-disk transcript, pushed live, and nothing can ever write to a shell. The deep dive ↓ · full doc ↗
The agent dashboarda living scoreboard — grouped cards, live state, needs-you first
One themed card per agent, grouped by project: model, effort, the live action, Δ/Σ token spend, and a state you scan in a glance (working · blocked · error · done · idle). Blocked and errored agents are surfaced first, so your attention goes where it's needed. Open the live wall ↗ · full doc ↗
🪦The agent graveyardfind dead sessions on disk and one-click resurrect them
Closed a terminal, rebooted, or a session crashed? The conversation isn't gone — the transcript is still on disk. The graveyard finds those, shows each one's task summary and age, and resurrects any of them into a fresh pane that resumes exactly where it left off. full doc ↗
</>Plugins & LeanCTXthe wall is extensible — token-savings, context harvest, your own
terminal-delight is an MCP client too: plugins light up surfaces on the wall. The flagship is LeanCTX — it shows, live, how many tokens lean-ctx saved by compressing each agent's context. Plus context-delight: harvest a session into a portable .cdx package. full doc ↗
The look is the brandtrue GPU barrel-warp CRT, the 👓 FOCUS reader, per-pane themes
A real fullscreen GPU post-process — barrel warp, scanlines, phosphor, glare, text-crawl — that adds ≤1 ms of frame time and zero input latency. The 👓 FOCUS reader mirrors a pane big over a GPU frosted blur. Hot-reloadable, per-pane themes. visuals doc ↗ · themes doc ↗
A real, fast terminal firstPTY + full VT, tiling, session restore — Alacritty-class latency
Before any agent magic, it's a genuine terminal: real PTYs, full VT (vim/htop/tmux/git unmodified), tiling splits, tabs, find, selection, crash-safe session restore — at key→photon p50 ≈ 121 µs, in Alacritty's class. full doc ↗
🌐Nine languagesthe whole UI, compiler-checked, in 9 languages
Every piece of chrome is translated into English, Español, Deutsch, Français, Русский, 中文, 日本語, 한국어, हिन्दी — with completeness enforced by the compiler, so a release can never ship half-translated. full doc ↗
Every feature, in detail

The full surface — 85+ features

The pillars above are the tour. The complete, evidence-backed catalog — every feature with its source file and ship status — lives in docs/features/. A quick index is below.

✦ …and about a million more — click for the full feature list

Panes & tabs

  • True tiling-tree splits (divide only the focused pane)
  • Browser-style tab groups — colour band, handle chip, collapse pill
  • Drag a sub-tab to split / move / tear off into a new window
  • Drag mother-bar tabs to reorder · grid wrap when they overflow
  • Rich rename (caret, selection, word-nav) · always-confirm close
  • Pop-out scratch window · single-instance aware boot

Look & theme

  • 4 built-in themes + a live-editable custom TOML slot
  • Per-pane theme & grade groups, each with a "follow outer" toggle
  • 3-marker colour wheel (seed · text · complement) + lightness axis
  • Texture × colour-set model (field-command / tactical-overdrive …)
  • Monitor-OSD grade: brightness, contrast, colour, text, bg, gamma
  • Menu-bar size scrubber (ctrl+scroll / bezel) sizes the whole cabinet

CRT & effects

  • GPU barrel warp — a 0→1.5 dial, per-theme, per-pane
  • Scanlines · vignette · glow · phosphor · tracking band (roll/speed/size)
  • Frame jiggle · the whole thing composes in one CRT post-pass
  • Text-crawl mode — perspective recede, angle + depth dials
  • 🎰 GAMBA slot-machine theme while an agent "thinks"

Agents

  • claude / codex detection · jump between your messages (Alt+↑/↓)
  • Your-turn input colour · agent-done bell with a per-pane sound
  • 👓 FOCUS reader — mirror a pane big over a frosted blur
  • Crash/quit → session restore (resumes the exact conversation)
  • MCP read-only control surface + live push notifications

Terminal core

  • Real PTY + full VT (vim, top, tmux) · 16/256/truecolor
  • Scrollback · mouse selection · bracketed paste · live resize
  • Shift/Ctrl-click a URL or path · right-click Copy/Paste/Open/Clear
  • Keyboard selection extend (shift+arrows / +ctrl for words)

Window

  • Frameless client-side decorations — the cabinet is the chrome
  • Ctrl+Alt+T global hotkey → a quick scratch window
  • MIT one-file AppImage · X11 & Wayland
▲ the big one · the agent control surface

Your terminal, as mission control for a fleet of agents.

Agentic coding means a wall of agents — claude here, codex there, three more in tabs — and the hard part isn't running them, it's knowing what they're doing without babysitting every pane. terminal-delight already knows, per pane, who is running (claude / codex / shell), where (cwd), and which conversation. So we turned that into a read-only MCP server: an orchestrating agent connects over stdio and watches the whole wall.

The use case. An orchestrator launches terminal-delight as the wall, then over MCP it can list_panes (who's running where) and, with the feed on, gets pushed a notification the instant any agent calls a tool, appears, or goes quiet — so it can react: route the next task, ping you when a long build finishes, flag an agent that just ran something destructive, or restart one that wandered off. No polling. No scraping the screen — events come from each agent's own structured transcript.

an orchestrator watching the wall over MCP — read-only
# the orchestrator asks who's on the wall
→ list_panes
  tab 0 · build    · CLAUDE · ~/proj      · claude --resume a1b2…
  tab 1 · tests    · CODEX  · ~/proj/api  · codex resume 9f0e…
  tab 2 · shell    · SHELL  · ~           (excluded — agents-only)

# …then the server PUSHES, the moment it happens:
notifications/message {
  "data": { "event": "tool_call", "pane": "build",
            "tool": "Bash", "summary": "cargo test --release" } }
notifications/message {
  "data": { "event": "agent_vanished", "pane": "tests" } }
Read-only by construction — nothing here can write to a terminal. Locked off by default; when on, agents-only (a plain shell is never exposed). stdio JSON-RPC, never a network port.

It ships behind a 🤖 robot button on the mother bar that opens an MCP CONTROL — READ ONLY panel: a master switch, an expose policy (agents-only / all), an events toggle, and a live list of every pane with a per-pane exposed dot. The danger in any agent-control surface is the write path (bytes into a shell = arbitrary code execution); that path simply does not exist here — the observe plane shipped first, alone.

And it's centred into a scoreboard — the agent wall. Every pane becomes a row: its tab group (colour-banded by project), model & effort, and a one-line read of what that agent is doing right now — with a live turn timer, accruing token spend, and a state you can scan in a glance: working, blocked on you, errored, or done. A rollup header totals the fleet's spend.

the terminal-delight agent wall: a green-phosphor CRT scoreboard titled AGENT WALL with a rollup of working/blocked/error/done counts and total token spend, over colour-banded rows — each showing a tab group, the CLAUDE model and effort gauge, and a live one-line summary of what that agent is currently doing, with a turn timer and token totals on the right
The agent wall — tab group › tab · model · effort · what it's doing now · live tokens. Open the live kiosk ↗
🎰 limited-time jackpot · the GAMBA theme

🎰 WIN BIG TODAY!!! 🎰

They keep saying agentic coding is basically gambling. Fine. So we cut out the middleman and turned your terminal into a SLOT MACHINE. 🪙

Flip on the GAMBA theme and the second your AI agent starts "thinking," a 3×3 grid SPINS — reels clunking in left-to-right with that sweet last-reel tease — and it RE-ROLLS EVERY 10 SECONDS, all turn long. Line it up — a row, an X, a full blackout — and the whole terminal ERUPTS: coins spray everywhere, glitter bombs, a full 3-second RUMBLE. 💥

🔥 Payouts up to 1000✦ — redeemable for ABSOLUTELY NOTHING! No skill. No edge. No tokens back. Just you, the house, and that esc to interrupt dopamine. PULL THE LEVER. FEED THE MACHINE. SHIP NOTHING. The house always wins — and so does your cloud bill. (Results not guaranteed. Zero is guaranteed.)

🔴 LIVE — your agent is "thinking" · the reels never stop · the work never starts
🎰 Real, unedited capture — the machine rerolls every 10s while the agent cooks. Spoiler: the payout is zero.
GAMBA — four agents thinking · four jackpots · zero work done
terminal-delight on the GAMBA theme: four tiled terminal panes, each spinning a 3×3 slot-machine board of AI-slop emoji, with gold coins spraying across every pane as the agents think
Four panes. Four rigged jackpots. Coins everywhere. Pure satire on AI vibe-coding.
▲ new in this build · the TEXT CRAWL mode

A long time ago, in a terminal far, far away…

Flip text crawl on for any pane and every line of the terminal renders in the iconic News-Gothic crawl face and recedes into the distance — centred, tapering toward the top, exactly like the opening crawl you're picturing.

It isn't a video or an overlay. The crawl perspective is a real GPU pre-map baked into the same CRT post-pass that already curves the glass, so it composes for free with the barrel warp, screen jiggle, tracking band, glare and phosphor — and costs one extra pow per pixel, no second render. Two dials in the DISPLAY tray, per-pane like everything else: angle (2–30°, how hard the sides converge) and depth (0.05–15×, the bottom-to-top text-size ratio). Open the 👓 FOCUS reader on a crawling pane and it inherits the look too.

🔴 real capture — the live crawl receding into the curved CRT
▶ Unedited screen capture of the real app — every line is centred and perspective-warped on the GPU, composing live with the barrel warp, screen jiggle, glare and phosphor. No video overlay; it's the CRT post-pass doing the perspective.
text-crawl mode — centred crawl font, perspective recede, all inside the curved CRT
terminal-delight in text-crawl mode: centred yellow News-Gothic text receding into the distance inside a curved, glare-lit CRT screen, a staged opening crawl
Real capture, staged demo text. Every terminal line is centred and perspective-warped on the GPU — jiggle, tracking, glare and phosphor ride right along.
👓 FOCUS on a crawling pane — it inherits the crawl font & centring
the FOCUS reading modal opened over a text-crawl pane: the mirrored terminal text shows in the centred crawl font, big and readable, over a frosted-glass blurred backdrop of the crawling screen behind it
Open the 👓 reader on a crawling pane and it inherits the attributes — same crawl font, same centring — flattened for readability over the frosted backdrop.
Run it

It's a real native terminal — run the real thing.

No web demo, on purpose.

terminal-delight renders on the GPU through gpui/wgpu — it isn't a webpage and a browser shell wouldn't be the real engine. So instead of a fake terminal, grab the source and run the actual app on your Linux box. The gallery above is all real captures; a recorded clip of the live warp is coming to the hero.

Vision

2 · 5 · 20 terminals, one window.

The goal: 2-to-20 real terminals in a single window — native-snappy, web-app polished, themeable at will, open source. A terminal you keep open because it's nice, not just because you have to.

  • Native speed, never a webview.
  • Aesthetics as data — share a theme as a TOML file.
  • Tiling that gets out of your way.

Read the build plan ↗

Honesty

MIT binary. Linux-only. On purpose.

terminal-delight is MIT — and so is the prebuilt AppImage. The pinned Zed/gpui graph would have linked GPL-3.0 crates into the binary, so we sever that edge at build time (docs/patches/0002); cargo deny passes with no GPL exceptions, so a redistributed binary carries no copyleft. Download it, or build from source — your choice.

It targets the freedesktop Linux desktop (X11 & Wayland) via gpui's wgpu renderer. Not macOS or Windows.

How the binary stays MIT, in detail ↗

Build & run

From source, in three commands

# deps (Ubuntu): Vulkan + build libs
bash scripts/setup-deps.sh
# clone the pinned Zed checkout + apply the td-crt-pass renderer patch
bash scripts/prepare-gpui.sh
# run it
cd app && cargo run

gpui is consumed from a pinned Zed checkout carrying the td-crt-pass renderer patch (the per-pane barrel warp) — set up as a sibling zed-upstream/ directory, same as CI. Full instructions, the CI bar, and the clean-room rule are in CONTRIBUTING.md ↗.