New Now on Homebrew

The aesthetic terminal for
coding agents.

Termi watches Claude, Codex, Grok and Cursor so you don't have to. Every agent gets a mascot. Every tab tells you when it needs you. And there's no chrome in the way.

Free and open source · Apple silicon · macOS 11+

⌘1 claude
⌘2 codex
⌘3 zsh ~/Developer/Termi

Detects the agents you already use

Features

Everything an agent needs.
Nothing you'll have to ignore.

Knows what every agent is doing

Termi reads the screen of each tab. A mascot walks while the agent works. The tab turns yellow when it needs you, and green when it's done. Glance down, not around.

⌘1 claude
 
⌘2 codex
 
⌘3 grok
 
⌘4 cursor
 
working needs you done

❯ hover this card

Zero chrome

No title bar, no toolbar. Traffic lights appear only when you reach for the top edge.

  • src/
  • agent.rs
  • editor.rs
  • main.rs
  • Cargo.toml

> review

Drag in context

⌘B opens a file tree. Drop a file on the prompt and it lands as @path. Try it.

Review without leaving

Open a file, click a line number, leave a note. ⌘↵ hands every note to the agent as one review prompt, each with the code it's about. Click a line number to try it.

src/agent.rs

  1. fn busy(&self, screen: &str) -> bool {
  2. screen.lines().any(|l| {
  3. l.ends_with('…')
  4. })
  5. }
xterm
solarized dark
solarized light
gruvbox

Plain-text settings

Four themes, one file: ~/.config/termi/settings. ⌘, edits it with the arrow keys.

14MB

Rust · alacritty_terminal · egui

Native and small

No Electron, no runtime. Built on alacritty's terminal core and drawn on the GPU.

⌘T New tab
⌘1 Jump to tab
⌘B File tree
⌘' Note on line
⌘↵ Send review
⌘, Settings

Keyboard first

Every tab has a number, always on the status line. You'll never reach for the mouse.

Hooks

Reads the screen.
Listens to hooks.

Detection works out of the box from each tab's foreground process. For certainty, any hook can write idle, working or input to $TERMI_STATE_DIR/$TERMI_TAB. Here's Claude Code.

~/.claude/settings.json
{
  "hooks": {
    "UserPromptSubmit": [{ "hooks": [{ "type": "command",
      "command": "[ -n \"$TERMI_TAB\" ] && echo working > \"$TERMI_STATE_DIR/$TERMI_TAB\" || true" }] }],
    "Notification": [{ "hooks": [{ "type": "command",
      "command": "[ -n \"$TERMI_TAB\" ] && echo input > \"$TERMI_STATE_DIR/$TERMI_TAB\" || true" }] }],
    "Stop": [{ "hooks": [{ "type": "command",
      "command": "[ -n \"$TERMI_TAB\" ] && echo idle > \"$TERMI_STATE_DIR/$TERMI_TAB\" || true" }] }]
  }
}

Your agents are working.
Now you can too.

View source

Download Termi

Apple silicon · macOS 11+

Download for macOS
or install with Homebrew
macOS says it can't be opened?

Termi isn't notarised yet. Clear the quarantine flag once: