← Back to Terminal Champion

Features Guide

A complete walkthrough of Terminal Champion — every panel, menu, and workflow.

Quick start

  1. Install Terminal Champion. The full edition is available as a notarized direct download from terminalchampion.com; the SSH-only edition is on the Mac, iPhone, and iPad App Stores. (For the mobile editions, see SSH for iPhone and SSH for iPad below.)
  2. Launch it. The first tab opens your default shell in your home directory.
  3. Press ⌘T for a new tab; ⌘W to close (or detach, depending on your settings).
  4. Open the right panel (⌘⇧R) to discover agent commands and custom slash commands.
  5. Open the bottom panel (⌘⇧B) to see live state — Active Processes, PR status, test results.
  6. Right-click any tab for grouping, splitting, renaming, color, and Resume Commands.

That's enough to be productive. Everything below is for when you want more.

Core terminal experience

Terminal Champion wraps real PTYs using the same portable-pty library that powers native terminals. Rendering is xterm.js v5 with WebGL acceleration where available. This means:

  • Your existing $SHELL — zsh, bash, fish — runs unmodified. Your dotfiles, aliases, prompts, and plugins work as they always have.
  • Copy/paste, selection, scrollback, and resize behave like any native terminal.
  • Font family and size are configurable globally (Settings → Appearance → Font) or per-tab.
  • Tabs can be reordered by dragging — the order persists across launches.
  • Per-tab shell history: toggle Settings → Terminal → Per-tab HISTFILE so up-arrow recalls only that tab's history.
  • Wheel scrollback for tmux remotes. The mouse wheel synthesizes Ctrl-B + [ + arrows + q so scrolling up enters tmux copy-mode and scrolling down exits — no need to enable mouse mode in tmux. ⌘C and ⌘A still work for native copy/select-all.
  • Click-to-position cursor. Click anywhere in the prompt line and Terminal Champion synthesizes the arrow keystrokes that move the shell's cursor there. Works in zsh, bash, and most TUIs.

Identity & auto-detection

The identity bar sits below the tab bar and updates in real time for the active tab. It combines signals from the process tree, output buffer, git, lsof, and the environment to show:

  • Color + label. Your chosen identity for this tab. Tabs without an explicit label fall back to Tab A / Tab B / Tab C based on order.
  • Agent badge with color gradient. Six first-class coding agents are recognized: Claude Code (orange), Codex CLI (blue), Gemini CLI (purple), Aider (hot pink), Kimi Code CLI (gold), and Qwen Code CLI (cherry-blossom pink). Model name appears when the agent exposes it.
  • Multilingual agent detection. Qwen banners in Simplified Chinese (通义千问) or Traditional Chinese (通義千問) light the cherry-blossom-pink gradient just like the English brand. Kimi banners with 月之暗面 (Moonshot AI's company name) trigger the gold gradient.
  • Safety chip. LOCAL / DOCKER / SSH / PROD / STAGING / DEV / ROOT — color-coded so you always know which machine you're typing into.
  • Git state. Branch, dirty marker, uncommitted count, ahead/behind.
  • Framework chip. Next.js, Vite, Cargo, Django, etc., detected from project files.
  • Foreground command. What's actually running in the PTY, with a runtime counter.
  • GitHub PR row. Open PR for the current branch with CI status and review state, refreshed every 30 seconds via the host gh CLI.

Detection combines two signals: the process tree (primary, via sysinfo) and output-buffer inference (fallback, when argv can't be read — for example, docker argv on macOS, or any tab opened through the managed-SSH transport). A 5-minute latch prevents flicker when an agent transiently drops off the process tree.

Tab activity pulse

Every tab — active and background — shows a small live pulse indicator the moment its agent or shell starts producing output. Toggle in Settings → Interaction → Tab activity pulse.

Tabs, groups & workspace

Creating tabs

Click the + button or press ⌘T for a new local shell. The caret () next to + opens a picker with:

  • New local shell
  • Pinned connections — starred SSH hosts and Docker containers.
  • Recent connections — the last 20 connections you've opened.
  • Detached sessions — PTYs the daemon is still holding, available for reattach.

Labeling and color-coding

Click a tab's color dot to rename; long-press or use Settings to pick a color. Colors propagate to the identity bar, border decoration, and overview cards.

Auto-labeling

Tabs without an explicit label and without a detected project name are assigned Tab A, Tab B, Tab C… based on their position. No "username@host" fallback.

Groups

Right-click a tab → Add to group. Groups have their own name, color, and visual mode. Member tabs inherit a subtle tint. Useful for:

  • Broadcasting a command to every tab in the group (Group header → command input).
  • Generating a Group Briefing tab that summarizes every member's state.
  • Sharing context with @group: mentions.

Split view

Right-click a tab → Split view → 2, 3, 4, or 5 columns. Each column is a fully functional terminal. Press Esc (or use the close button) to collapse.

Workspace Overview

Open from the bottom panel → Overview (or ⌘⇧O). Every tab renders as a rich status card with activity glow, agent badge, branch, dirty marker, recent output preview, and time-since-activity. Fork families render as connected trees. A search box filters by tab name, branch, agent, or cwd.

Cross-tab orchestration

@tab: and @group: mention picker

Type @tab: in any terminal. A picker appears listing every other tab. Filter by typing; navigate with /; confirm with Enter. Terminal Champion injects a formatted block containing the target tab's identity, recent output, and activity summary into your current prompt — the agent sees it as pasted context.

@group: works the same but lists groups; selecting one injects a condensed briefing of every tab in that group.

Share to Group

In the Workspace Overview, each tab card has a Share button. One click broadcasts that tab's context to every other member of the same group.

Group Briefing

On the group header, click Briefing. Terminal Champion creates a new tab labeled Briefing: [GroupName] with a formatted situation report of every tab in the group — branches, dirty state, recent output, last activity. Useful for syncing a team of agents or catching up after lunch.

Fork orchestration

In any agent tab, type /fork (or /branch in Claude). Terminal Champion captures the resume token, creates a paired child tab, and resumes the conversation in both — they share the same starting point and diverge from there. Each agent gets the orchestration that best matches its TUI:

  • Claude Code — switcheroo flow. Parent stays in place; new tab resumes the prior session.
  • Codex CLI, Gemini CLI, Kimi Code CLI, Qwen Code CLI — right-side fork. The parent tab is renamed Original, a new Fork N tab opens to the right, and both resume the same conversation UUID. Double-Ctrl-C exit is automated where the agent supports it.

Bypass-permission flags propagate when documented (Claude's --dangerously-skip-permissions, Codex's --full-auto, Gemini's --yolo). When the parent tab has a friendly display name from the Connect dialog (e.g. "Dev Box"), the fork inherits it: Dev Box Original / Dev Box Fork 1.

Disabling the mention picker

If @-interception causes problems in a specific workflow, turn off Settings → Interaction → Mention picker.

Session persistence & resilience

Two mechanisms work together:

  • tc-daemon. A small background Rust process that owns the PTY file descriptors. It survives Terminal Champion quits, relaunches, and crashes — your processes keep running.
  • Local SQLite. Tab labels, colors, groups, settings, Resume Commands, and scrollback snapshots persist across launches.

When you quit Terminal Champion with tabs still running, a confirmation dialog appears. Answer Keep running to detach without killing child processes; answer Close all to terminate them.

Detach-on-close

Enable Settings → Terminal → Keep shell on tab close. After that, ⌘W detaches the tab instead of killing it. The shell continues running in the daemon, available for reattach.

Orphan recovery

Click the caret next to + → detached sessions appear with name, shell PID, and one-click recover.

SSH keepalive + tmux wrap

For remote tabs, Terminal Champion periodically sends harmless null-byte pings to prevent NAT/firewall idle timeouts. For Docker/SSH sessions, the Wrap tmux button on the identity bar wraps the remote session in tmux so a severed stream doesn't kill your running agent — reconnecting reattaches the tmux session.

Disconnect banner

If a DOCKER or SSH tab unexpectedly drops to LOCAL (container paused, SSH timeout), Terminal Champion shows a reconnect banner with a one-click resume.

Refresh terminal

If a TUI gets stuck (ink/Yogurt/full-screen app), click Refresh on the identity bar or right-click → Refresh. Terminal Champion sends a SIGWINCH (column nudge + refit) to force a repaint.

Connections

Recent and Pinned

Every ssh user@host and docker exec command you type is normalized and logged (with passwords scrubbed). The new-tab caret menu shows:

  • Pinned. Connections you've explicitly starred — never evict.
  • Recent. The 20 most recent unpinned — auto-populated, auto-evict.

Right-click any row for pin/unpin/remove.

Resume Commands

Right-click a command in a terminal or Activity Feed → Save as Resume Command. Terminal Champion auto-enriches it with:

  • cwd — replays in the right directory.
  • Environment — Docker container, SSH host, or local.
  • Bypass flags — agent permission flags if the original command used them.

Replay from Bottom Panel → Resume. Terminal Champion finds or creates a target tab matching the saved environment and runs the command. When you replay across environments — e.g. a saved local command into a Docker tab — the command is auto-wrapped (docker exec -it or ssh host) so it still reaches the right shell.

Saved SSH credentials (Keychain-backed)

Pin a connection in the Connect dialog and save its password (or private-key passphrase). Terminal Champion stores it in the platform-native credential store — macOS Keychain, Windows Credential Manager, or the Linux kernel keyring — via the cross-platform keyring Rust crate. On reconnect, credentials are read out and used to authenticate without prompting. You can verify and revoke entries any time in Keychain Access.app (service name com.terminalchampion.app). Prior versions used an obfuscated localStorage field; legacy entries are migrated automatically on first launch and the localStorage value is wiped.

Image paste

Copy an image to the clipboard, switch to a tab, press ⌘V. Terminal Champion writes the image to a temp file under ~/tc-images/ and then routes the path to the tab's environment:

  • LOCAL tabs: pastes the local path directly.
  • DOCKER tabs: copies via docker cp to /tmp/tc-images/ inside the container, pastes the in-container path.
  • Managed-SSH tabs: streams the image bytes through the russh exec channel (cat > /tmp/tc-images/<name>) and pastes the remote path. Works without scp, sftp, or ControlMaster setup.

Managed SSH transport

Saved Connect-dialog hosts use Terminal Champion's own pure-Rust SSH client (russh), not the external ssh binary. Tabs you open by typing ssh user@host still use OpenSSH; managed-SSH only kicks in for hosts you've saved with credentials. Engaging the russh transport unlocks several conveniences:

Public-key authentication

In the Connect dialog's saved-connection form, switch the auth method radio to Key and provide a path to your private key (e.g. ~/.ssh/id_ed25519) and an optional passphrase. The passphrase, if set, is stored in the same platform Keychain as passwords (under a separate keypass:<host> account). Supported key formats: OpenSSH PEM, encrypted or unencrypted, RSA / ECDSA / Ed25519.

Drag-and-drop file upload

Drag any file from Finder into a managed-SSH tab. Terminal Champion uploads it to /tmp/tc-files/<name> on the remote host and pastes the path at the prompt. The 100 MB cap on a single file keeps a misclick from filling a server's /tmp; filenames are sanitized before being written.

Port forwarding (-L and -R)

Click the Network icon in the identity bar of a managed-SSH tab to open the Port Forwards dialog. Add local-to-remote (-L) or remote-to-local (-R) forwards on the fly. Forwards are session-scoped — they live as long as the tab does. Local forward example: bind localhost:5432 on your Mac to 127.0.0.1:5432 on the remote, click Add, and your local Postgres client now talks to the remote database.

OSC 7 cwd capture

Modern shells (zsh, bash 5+, fish) emit an OSC 7 escape sequence (\033]7;file://host/path\033\\) on every prompt. Terminal Champion parses these and updates the identity bar's cwd in real time for the remote tab. If your remote shell doesn't emit OSC 7, add this one-liner to your ~/.bashrc or ~/.zshrc:

PROMPT_COMMAND='printf "\033]7;file://%s%s\033\\" "$HOSTNAME" "$PWD"'

Reconnect after drop

If a managed-SSH tab loses its connection (network blip, server restart, laptop sleep), Terminal Champion shows the disconnect banner with a one-click Reconnect. The reconnect re-authenticates with the saved credential, opens a fresh session, and swaps it in atomically — your tab survives the drop without the daemon having to re-spawn.

Safety & security

Environment badges

Every tab shows a safety tier in the identity bar: LOCAL, DOCKER, SSH, PROD, STAGING, DEV, ROOT. Colors are distinctive so you always know where a command is about to land.

Platform Keychain integration

Saved SSH passwords and private-key passphrases live in the operating system's native credential store: macOS Keychain (Security framework), Windows Credential Manager, or the Linux kernel keyring. Each platform's backend is wired in at build time via the cross-platform keyring Rust crate, so credentials never sit in plaintext on disk and never leave the system on which they were saved. You can audit and revoke entries directly in Keychain Access.app (look for the service com.terminalchampion.app). Earlier builds used an obfuscated localStorage field; that path was retired and existing entries migrate automatically on first launch of the new version.

Password scrubbing

A two-phase scrubber watches command input. Phase 1 detects password prompts in PTY output and drops the next submitted line entirely. Phase 2 regex-redacts inline secrets (mysql -psecret, --password=…, API_KEY=…) before they land in command history, Recent Connections, or activity events.

Zombie Sweep

Open from the bottom panel. Terminal Champion scans LOCAL and DOCKER environments for orphaned descendants of its tabs, groups them by process name, and lets you selectively kill.

  • Shell processes (bash, zsh, sh) and tmux are locked by default.
  • The active tab's foreground chain is tagged THIS TAB.
  • Other tabs' agents are tagged with their tab label and warn before killing.
  • Kill cascades: SIGTERM first, 3-second grace period, then SIGKILL.

Docker container cleanup

When you close the last tab on a given container, Terminal Champion runs a cleanup pass inside the container (pkill -TERM -f claude|codex|gemini|aider|kimi|qwen) plus an idle-bash sweep, so you don't accumulate orphan shells.

Panels & productivity

Right panel — Command Library (⌘⇧R)

A single searchable palette for every command across every agent you use.

  • Saved conversations. Resume Commands you saved from prior agent sessions, with per-entry descriptions and bypass toggles. One-click to inject and resume.
  • Agent commands. Official commands for Claude Code, Codex, Gemini, Aider, Kimi, and Qwen — pulled from each project's upstream README and curated to avoid prompt-injection-laundered instructions from third-party sources.
  • Custom slash commands. Discovered from .claude/commands/*.md, .codex/prompts/*.md, .gemini/commands/*.toml, .kimi/commands/*.md, and .qwen/commands/*.md.
  • Discovered subagents. Read from .claude/agents/*.md with YAML frontmatter parsing.

Click any row to inject the command into the active tab — you review it at the prompt, then press Enter.

Left panel — Activity Feed (⌘⇧L)

A running chronicle of what's been happening.

  • File-change events with timestamps.
  • Git operation timeline — commits, branch switches, merges.
  • Running processes tree with CPU and RAM.
  • Agent metrics where exposed — token count, cost, prompt count.
  • Recent commands history — password-scrubbed, ANSI-stripped, searchable across all tabs.

Bottom panel — Where I Left Off (⌘⇧B)

A live HUD strip.

  • Active Processes / Active Services strip. What's running right now in this tab, with live uptime counters. Draggable divider between the two sides.
  • Idle / build / test / streaming / waiting classification. Updated in real time.
  • Pending-prompt detection. Password prompts, yes/no prompts, "press enter" prompts — caught at the terminal tail.
  • Test result row. pytest, cargo test, jest, vitest footers parsed from output and color-coded.
  • GitHub PR row. Open PR for the current branch with title, CI rollup, and review decision. Refreshed every 30 seconds via gh.
  • Environment delta row. Version shifts (Node 20 → 22, Python 3.11 → 3.12) since your baseline.

Panel sizing

Drag any panel edge. Sizes persist per layout. Defaults: 224 px left/right, 160 px bottom; clamp 120–600 px.

Visual modes & borders

Six visual modes

Each mode combines a real background image (not just a palette), a terminal theme, an optional ANSI stream rewriter that recolors the agent's output to match, and an auto-paired border. All text in visual modes renders in bold regardless of WebGL acceleration so the styled glyphs stay legible against busy backgrounds.

  • Normal — your chosen background and text preset, no rewriting.
  • JARVISmaxxing — holographic cyan-blue HUD over a real chamfered-corner SVG border with an animated dial, progress bar, plateau ridges, and a slow pulse. The ANSI rewriter recolors Claude's dark prompt bars and tool-output blocks into the HUD's blue palette.
  • Coding Cowboy — warm wood-grain background, tooled-leather corner art, engraved text, and an ANSI rewriter that maps the agent's color tiers onto saloon-era browns and oxidized brass.
  • Marble Stone — carved marble background, ionic-column corner art, chiseled text, and a marble-toned ANSI rewriter.
  • Bubblegum Princess — pink dreamscape with rainbow border art and sparkle bursts when test runs pass.
  • Neon City — 1980s synthwave grid background, neon palm corners, magenta/cyan ANSI rewriter.

Each mode also adds a Refresh button on the identity bar — useful if the ANSI rewriter falls behind a long stretch of pre-existing scrollback.

Ten border decorations

Pair any border with any visual mode, or let Terminal Champion auto-match. Choices: None, Rose Vines, String Lights, Coding Cowboy, Ocean Waves, Stars, Ionic Columns, Unicorn Rainbow, Neon Palms, and Jarvismaxxing (the only border tied to a specific mode).

Borders are positioned image overlays — separate corner and edge PNGs with a magenta-key transparency pipeline. The corner art clip-path notches the terminal content polygon so the corners stay protected even when you set the border edge thinner than the corner sprite.

Toggle Settings → Appearance → Force mode borders off to decouple mode and border. The mode's auto-paired border is then a suggestion you can override per tab.

Per-tab vs group vs global

Visual mode and border can be set per tab, per group, or globally as a default. New tabs inherit the parent's appearance if Settings → Appearance → Inherit on new tab is on (default). Group-level visual modes propagate to every member tab unless that tab has explicitly overridden them — so you can set "Coding Cowboy" once on a group and every shell in it adopts the look.

Skins — Default, Browser, and 1992

Skins are app-chrome variants, independent of visual modes. Switch in Settings → Appearance → Skin.

Default

Clean dark chrome with an inline horizontal tab bar.

Browser

Left sidebar containing the tab list, search, New/Overview buttons. Always-expanded or hover-to-reveal — your choice.

Retro 1992

A skin so committed to 1992 System 7 that even the settings dialog looks like it shipped with the Macintosh LC. Charcoal window chrome, 3D bevels, pinstripe titlebars, monospace menu labels. Every component — tabs, buttons, alerts, confirms, settings — is re-rendered in period-correct style. The data-retro-exempt attribute is reserved for surfaces that must remain modern (rare).

Languages

Terminal Champion's interface is fully localized into seven languages. Switch in Settings → Language:

  • English
  • Spanish (Spain) / Español
  • French / Français
  • Russian / Русский
  • Arabic / العربية
  • Korean / 한국어
  • Chinese — Simplified (简体中文) and Traditional (繁體中文)

Setting the language also exports LANG to the spawned shell so terminal-side tools (man pages, system messages, locale-aware utilities) match.

Arabic mode flips the entire interface to right-to-left layout — panels, dialogs, settings, the tab bar — while keeping the terminal content itself pinned LTR (because shell output is written left-to-right regardless of the surrounding UI).

Light & dark theme

Terminal Champion ships a light theme alongside the dark default. Switch in Settings → Appearance → Theme. The light theme:

  • Re-skins every panel, dialog, menu, and identity bar element to a warm, paper-like palette.
  • Updates the native macOS titlebar via Window.setTheme() so the chrome matches.
  • Keeps the terminal content area dark, because shell output, agent UIs, and TUIs are all designed against a dark canvas — flipping that breaks readability and color schemes you've already tuned.

Visual modes layer on top of the theme — you can run, say, Bubblegum Princess on light theme for a brighter overall feel.

Updates

Terminal Champion checks for new releases through Tauri's built-in updater plugin. Open Settings → About → Check for Updates to query the manifest manually; if a new build is available, you'll see release notes and an Install & Restart button.

The check is opt-in: nothing is fetched in the background unless you click. The endpoint is updates.terminalchampion.com and the downloaded bundle is verified against an embedded minisign public key before it's applied — a tampered binary is rejected without running.

The Mac App Store edition (TC SSH) updates through the App Store, not this mechanism.

Privacy & local-first

Terminal Champion runs entirely on your Mac. Zero telemetry, zero analytics, no login required. State lives in ~/Library/Application Support/TerminalChampion/ and browser localStorage. The only outbound network call the app itself makes is the explicit Check for Updates request to updates.terminalchampion.com — and that only when you click the button. The host gh CLI is invoked for the optional GitHub PR row in the bottom panel; whatever it reports back stays local.

See the Privacy Policy for the full breakdown, the entitlement-by-entitlement justification, and the complete-deletion procedure.

Terminal Champion SSH for iPhone

The mobile edition brings the identity-first, multi-terminal workflow to your pocket. It's a real SSH client — a pure-Swift transport built on Citadel, rendering through the same xterm.js engine as the desktop — not a web shell or a relay. It keeps the Mac's idioms: a horizontal tab bar across the top and all three skins (Default, Vertical, 1992). One terminal is in front at a time; tap the tab bar to switch. Available on the App Store.

Connecting

Tap +New Connection. Enter host, port (default 22), username, and password, then Connect. Leave Save to Recents on to keep the host for next time — saved hosts come back under Pinned and Recents, one tap to reconnect.

  • First connect to a new host shows the server's key fingerprint (trust-on-first-use): Accept, Trust Always, or Reject. The safe default is reject — only accept a fingerprint you recognize.
  • Saved passwords are off by default. Turn on Settings → Productivity → Save passwords for saved hosts to store them in the iOS Keychain, and Auto-login via Face ID to gate auto-fill behind biometrics. Private-key sign-in is coming in a later update; this version authenticates by password.

Camera & photos → your AI

The signature mobile feature. Tap the camera icon in the keyboard accessory bar above the keyboard, and choose Take Photo, Pick from Photos, Paste from Clipboard, or Pick a File. Terminal Champion uploads the image over SFTP to the session's current directory and types the path at the prompt, so the coding agent running in that terminal — Claude Code, Codex, and the rest — can read it directly. No scp, sftp, or ControlMaster setup required, and it works over a plain SSH connection. Snap a whiteboard, an error on another screen, or a design mockup and hand it straight to the agent. First use prompts for camera and Photos access.

Voice input

Tap the microphone icon in the keyboard accessory bar and speak. Recognition runs on-device — nothing is sent to Apple's servers — and the live transcript appears as you talk. Tap Insert to prompt to drop the text at the terminal; you review it before pressing Enter, so a misheard word never runs on its own.

Highlight to explain (Apple Intelligence)

Long-press any terminal output to select it, then tap Explain in the selection menu. The phone's on-device model summarizes or explains the selection without spending a single agent token and without the text leaving your phone — useful for decoding a stack trace or an unfamiliar command mid-session. This uses Apple Intelligence and requires a supported device on iOS 26 or later; on other devices the option explains what it needs.

Pair with your Mac

Tap the menu → Pair with Mac…. The app discovers Macs running Terminal Champion on the same Wi-Fi over Bonjour; tap yours, enter the six-digit code shown on the Mac, and tap Pair. Once paired, the image picker and voice sheet each gain a Send to paired Mac option that drops the photo or dictated text into the Mac's focused terminal — your phone becomes a camera and microphone for the desktop. Handoff also surfaces the active session on the other device so you can pick up where you left off. The pairing token lives in the iOS Keychain; pair one Mac per phone, and long-press the Mac's name to unpair.

An optional safety gate: turn on Settings → Productivity → Require Face ID to run on Mac so any command you send and execute on the paired Mac asks for Face ID first. You decide what counts as destructive.

Glance — Dynamic Island & Lock Screen

Background the app while a session is live and Terminal Champion keeps you informed without opening it: the Dynamic Island and Lock Screen show connection state, elapsed time, and the most recent line of output. Toggle in Settings → Lock screen & Dynamic Island.

The full experience, in your pocket

  • Forking. Type /fork at an agent's prompt and the app spawns a paired tab, relabels the pair Original / Fork N, and types the resume command — the same orchestration as the desktop, for Claude Code, Codex, Kimi, Grok, and Antigravity.
  • Skins. Default (top tab bar), Vertical (sidebar), and 1992 Retro, all in Settings → Appearance → Skin, switching live.
  • Bookmarks. Long-press text → Bookmark; tap an icon on the right-edge strip to jump back to that line.
  • Port forwarding. menu → Port forwarding to add local (-L) or remote (-R) forwards on the active session.
  • Reconnect on return. iOS suspends background apps after a short while; bring Terminal Champion back to the foreground and it re-establishes the SSH session — and reattaches your tmux session if the host has one, so your agent keeps running.
  • Eight languages, live. Settings → Locale → Language switches the interface instantly across English, Spanish, French, Russian, Arabic, Korean, and Simplified/Traditional Chinese. Arabic flips the chrome right-to-left while the terminal itself stays left-to-right.

Terminal Champion SSH for iPad

Now available on the App Store. Get Terminal Champion SSH for iPad. This section walks through how the iPad edition's marquee features work.

The iPad edition is the cockpit, untethered. It shares the iPhone app's SSH core — so connecting, trust-on-first-use, /fork, and port forwarding behave exactly the same — and then removes the one-terminal limit and adds the input that only an iPad has: a Magic Keyboard, trackpad, Apple Pencil, and camera-based hand tracking.

Multi-pane cockpit

Run up to five SSH terminals side by side. Long-press a tab → Open in split to send it into a new pane, or press ⌘D to split the next tab out. Tap a pane to focus it, or use ⌘[ / ⌘] to cycle and ⌘1⌘5 to jump straight to a pane. Drag the divider between panes to resize; ⌘W closes the focused pane. On a 13" iPad you can watch three agents work at once.

iPad layout & context panel

All three skins ship — Default (top tab bar), Vertical (left sidebar), and 1992 Retro — switchable from the menu → Skin. A toggle in the tab bar slides in the inline Context panel (Activity, Commands, Summary) beside the terminals instead of over them, so live state and your shell are visible together. The app is multi-scene aware for Stage Manager and multiple windows.

Magic Keyboard & trackpad

Hardware shortcuts are wired throughout: ⌘T new connection, ⌘W close pane, ⌘D split, ⌘1⌘5 focus a pane, ⌘[ / ⌘] to move between them. With a trackpad, tap-and-hold a pane's button for its context menu — Paste, Visual Mode, Detach, Close.

Apple Pencil

  • Annotate & send. Pick or capture an image, mark it up on a PencilKit canvas — circle the bug, draw the arrow — then send the flattened image over SFTP to the focused pane for the agent to read.
  • Scribble. Tap the Pencil icon to open the handwriting overlay and write a command by hand; on-device recognition turns your strokes into terminal input.
  • Barrel actions. Double-tap the Pencil to toggle the context panel; squeeze a Pencil Pro to open the annotate sheet. Enable these in Settings → Apple Pencil.

Hands-free gesture control

Start gesture mode from the tab bar's hand icon. The front camera tracks your hand entirely on-device — nothing leaves the iPad — and a JARVIS-style HUD reticle appears. Swipe left/right to cycle tabs, move your hand up/down to scroll the scrollback, and spread or pinch two hands to grow or shrink the font. Make a fist to summon the radial menu (visual mode, split, add tab, paste, clear) and dwell on an item or drop your index finger to choose it. Tune mirroring, vertical inversion, and sensitivity in Settings → Gesture Control, and run the on-screen Calibration guide once so the thresholds fit your hand. It's the no-keyboard, no-touch way to drive the cockpit across the room.

Voice loop — speak and listen

The iPad reads agent responses back to you with on-device text-to-speech. Tap Speak last response, or enable auto-speak so it reads each agent reply once the output settles into a quiet moment. Prose only skips code blocks and redacts anything that looks like a secret before speaking. All in Settings → Speech.

Everything from the SSH core

Because the iPad shares the iPhone app's engine, the full SSH feature set comes along: the same connection flow and saved hosts, trust-on-first-use known-hosts, /fork orchestration, port forwarding, agent-colored tabs with live activity pulses, and the right-edge bookmark strip. Drag a file from Files or Safari onto a pane to upload it over SFTP and drop its path at the prompt.

Keyboard shortcuts

Default bindings (customizable in Settings → Keyboard):

  • ⌘T — New tab
  • ⌘W — Close tab
  • ⌘⇧[ / ⌘⇧] — Previous / Next tab
  • ⌘1⌘9 — Jump to tab N
  • ⌘D — Split view
  • Esc — Close split / dismiss picker
  • ⌘V — Paste (text or image)
  • ⌘K — Clear scrollback
  • ⌘⇧R — Toggle right panel (Command Library)
  • ⌘⇧L — Toggle left panel (Activity Feed)
  • ⌘⇧B — Toggle bottom panel (Where I Left Off)
  • ⌘⇧O — Workspace Overview
  • ⌘, — Settings

Troubleshooting

Screen goes blank

Force-quit Terminal Champion (⌘⌥Esc) and relaunch. The daemon preserves your PTYs, so tabs and running agents restore. If it repeats, open View → Toggle Developer Tools and capture the red Console entries.

Agent badge stuck

Agent detection uses a 5-minute latch to prevent flicker. If it's wrong for longer, click Refresh on the identity bar or switch away and back to the tab. For tabs opened through the managed-SSH transport, agent detection runs against the rolling output buffer instead of the process tree, so you may need a few seconds of fresh output before the badge updates.

Agent not detected in an SSH tab

Make sure the agent's banner is reaching the terminal buffer (don't pipe through less). The output-buffer fallback recognizes English brand names plus Chinese variants for Kimi and Qwen — if your agent prints in another language, click the identity bar's tab color dot and set the agent manually.

GitHub PR row not appearing

The row requires gh auth status to be green on the host machine and the current branch to have an open PR. First appearance can take up to 30 seconds.

Test result row not appearing

Make sure the output is reaching the terminal buffer — don't pipe test results through less or similar paginators. The parser looks for pytest ===== footers, cargo test result: ok/FAILED, and jest/vitest Tests: N failed, N passed.

SSH disconnect fires after a few minutes idle

For OpenSSH-binary tabs, enable Settings → Terminal → SSH keepalive. For really flaky networks, click Wrap tmux on the identity bar so a dropped stream doesn't kill the remote session. Managed-SSH tabs use russh's keepalive natively and surface a one-click Reconnect in the disconnect banner — no tmux wrap needed.

Drag-drop file upload says "not supported"

File drag-drop only works in LOCAL tabs and managed-SSH tabs. DOCKER and OpenSSH-binary tabs can't be targeted because there's no in-band file channel for them. For a Docker tab, run docker cp manually; for an OpenSSH tab, use scp at the prompt.

OSC 7 cwd not updating in remote tabs

Your remote shell isn't emitting OSC 7. Add this to ~/.bashrc or ~/.zshrc on the remote host:

PROMPT_COMMAND='printf "\033]7;file://%s%s\033\\" "$HOSTNAME" "$PWD"'

Port forward says "address already in use"

Another process on your machine is already bound to that local port. Either pick a different local port, or quit whatever's using it. lsof -iTCP:<port> -sTCP:LISTEN finds the culprit.

Saved Keychain credentials don't auto-fill

Open Keychain Access.app, search for com.terminalchampion.app, and confirm the entry exists. If macOS has marked the entry as locked or denied, double-click it and approve access for Terminal Champion. Re-saving from the Connect dialog also recreates the entry cleanly.

"Check for Updates" reports no update available

You're on the latest published build. The check is gated on the manifest at updates.terminalchampion.com; if you don't see new releases for an extended period, the App Store edition (TC SSH) may be the better fit since it auto-updates through Apple.