Mission control for AI coding agents. Watch Claude Code, Codex, Gemini and a dozen more work live in one macOS terminal: live status, an editor that follows their edits, undo for any turn, approvals from your phone and local models. 20+ built-in tools, all on the site below. Built on Ghostty.
See the code
Download · Website · Live agents · Features · Compare · Install · Shortcuts · Security
Real app, real agents, demo projects. The full tour, as a GIF. Watch it in higher quality.
Tellurion is a macOS terminal for developers who run several AI coding agents, like Claude Code, Codex, Gemini CLI and Copilot CLI, across several projects at once. It's a fork of Ghostty, the fast native terminal, that shows what every agent is doing, live: the code it's writing as it writes it, where it is in your project, what part of your backend it touches, and when it needs you. Agents share what they learn about each project, hand work to each other, and leave their changes in a review inbox you can undo from.
Everything Ghostty does still works, and your Ghostty config works as-is. This fork tracks official Ghostty releases and adds its features on top.
Tellurion was called GhosttyEXTREME. Same app, same features; if you have GhosttyEXTREME installed, Check for Updates… brings you to Tellurion.
[!NOTE] Unofficial fork. Not affiliated with or endorsed by the Ghostty project.
curl -fsSL https://raw.githubusercontent.com/steventsvik/Tellurion/custom/install.sh | bash
Apple silicon, macOS 13 or newer. Free and open source (AGPL-3.0). No account, no telemetry.
Run Claude Code, Codex, Gemini CLI, Copilot CLI or another agent in a tab, the way you already do. Tellurion follows each one as it works.
| As the agent… | …you see |
|---|---|
| starts a task | Its card in the sidebar shows the task, a working spinner and a timer, and the corners of its terminal breathe. A snapshot of your project is saved, so the turn can be undone. |
| reads a file | The editor opens that file at the lines it read, and the file lights up cyan on the code map. |
| edits a file | The change types itself into the editor with the lines highlighted, the file turns orange on the map, and the turn's diff count goes up. |
| thinks or replies | The agent panel shows its thinking, messages and every tool call as a timeline, sub-agents included. |
| touches your backend | The Worker, database or bucket that code belongs to lights up in the Backend view. |
| starts a dev server | The server moves into its own tab and keeps running after the agent is done. |
| needs you | Its card turns amber with Allow and Deny buttons and jumps to the top of the command palette and Mission Control. You get a notification you can answer from, and a Dock badge. |
| finishes | Its changes land in Review with the full diff. Not what you wanted? Undo last turn puts your files back. |
Nine agents report live status: Claude Code and Codex, plus GitHub Copilot CLI, Droid, Gemini CLI, Antigravity (agy), Kiro CLI, Cursor CLI and OpenCode. The welcome window connects Claude Code and Codex in one click, and Check Setup offers Connect for each of the others it finds on your Mac. Each hook only observes: it never approves, blocks or changes anything, and any settings file it touches is backed up first (symlinked dotfiles stay symlinks). Copilot, Droid, Gemini and OpenCode also report permission prompts; Kiro, Antigravity and Cursor show Working and Done.
Amp, Goose, Hermes, Aider, Crush, Qwen Code, Kimi and Mistral Vibe are recognized by name and logo when you start them.
| Agent sidebar Live status for every agent in every tab | Mission Control Every agent in every window on one screen | Code editor Opens what the agent reads and animates its edits |
| Code map Your project as a map of what the agent touched | Project memory What Claude Code and Codex know, shared between them | Hand off Pass a pane's work to Claude or Codex, with the diff |
| Review changes An inbox for each agent's diff, with line comments | Undo a turn A snapshot before every turn, restored in one click | Review loops One agent reviews another, round after round |
| Backend view Cloudflare, Supabase, Vercel and more, with live status | Database view Tables, columns and relations from your schema | Visual Fix Click an element in your app, say what to change |
| Localhost sessions Dev servers that outlive the agent that started them | Ports What's listening, and who holds a busy port | Git panel Pull request and checks, plus jj, GitButler and Graphite |
| Isolated sessions Throwaway Docker containers with only your project | Agent races Several agents, one task, keep the best result | Background processes Find and close what's been left running |
| Command history Every command as a block, with one-click fixes | Agent activity Time, prompts, changes and tokens per day and project | Setup and settings One-click setup, Check Setup, signed updates |
| Environment Tool versions, containers and local models | Skills Every agent's skills, kept up to date, and what's trending | Design Twenty templates, your own colors, and a logo you draw |
A vertical sidebar (⌃⌘S) lists every tab with its folder, git branch and uncommitted changes. Tabs can be pinned, colored and renamed, and hovering one shows a card with more detail.
⌃⌘M shows every agent (or every pane) in every window as a live card: status, task, last action, time in that state and the last lines of its terminal. Agents waiting on you come first. Click a card to jump to it, or hand its work off from there.
The command palette (⌘P) puts waiting agents at the top too, so you can answer one in two keystrokes. It also starts new sessions and opens every tool.
Each tab has its own VS Code–style editor (Monaco, ⌃⌘E) on that tab's folder, in your terminal theme.
Your project as a star map. Folders are tinted by what they are: frontend, API, database, tests, config. Files light up as the agent reads (cyan) and edits (orange) them.
⌃⌘Y shows what Claude Code and Codex remember about the current project, in one window.
MEMORY.md too.CLAUDE.md, CLAUDE.local.md, AGENTS.md) that the agents load
every session can be edited in place. It never overwrites a file an agent changed while
you were editing.
A new Codex session starts with what Claude Code has learned about the project, and a new Claude Code session with what Codex has learned, labelled as notes that may be out of date. Above, a fresh Codex session answers "how do I deploy and test this project?" from Claude's notes without opening a file. Nothing leaves your Mac, and you can turn it off in Settings.
Pass a pane's work to another Claude Code or Codex session: a new one in a split beside it, or one that's already running.
Pair an agent with a reviewer (⋮ → Start a review loop…). Each time the writer finishes a turn, the reviewer gets its changes and answers APPROVED or CHANGES NEEDED, and its findings go back to the writer, until it approves or a round limit. Every message waits for your Send unless you turn on Send automatically, and nothing is ever typed into an agent mid-turn or over your own typing.
When an agent finishes working in a git repository, its changes land in an inbox (⌃⌘I).
Every agent turn starts with a snapshot of your project. Undo last turn (or an earlier one) from the tab's ⋮ menu, or Restore to before this on any of your prompts in the agent timeline. It lists every file it will change and asks first, and your current files are saved too, so the undo can be undone, and the review inbox updates to match. Snapshots are git objects only: no commits, branches or stash entries, and your staged changes stay as they are. Folders that aren't repositories work too.
In a jj repository, the snapshot also remembers jj's own state, so if the agent ran jj commands during the turn, Restore with jj puts jj's history back along with the files.
The Backend tab in the code editor's agent panel shows what your project runs on,
worked out from its own files (package.json, wrangler.jsonc, supabase/, .vercel/,
Prisma, env variable names). It works offline and without logins.
wrangler, supabase, vercel),
using the logins you already have and only read-only commands. It shows deploys per
environment, project health, migrations not applied yet, and commits newer than the
last deploy.
The Database view draws your schema: tables, columns and relations for Supabase, Cloudflare D1, Postgres behind Hyperdrive (read from your migrations) and Prisma.
⌃⌘V previews your running dev server beside the terminal, at desktop, tablet or phone size.
When an agent starts a dev server (npm run dev, vite, rails s, make dev, …), an
SSH tunnel, kubectl port-forward, ngrok or cloudflared, it opens in its own tab
instead, so it keeps running after the agent is done. The agent is told the URL and how to
read the logs.
localhost URL,
framework, uptime, restart and stop.package.json scripts.
The sidebar lists what's listening, which project it belongs to (Next.js, Vite, Django and more get their own badge) and what started it. Open it in the browser or Visual Fix, jump to its tab, or stop it. When a command fails because its port is taken ("EADDRINUSE", "address already in use"), the sidebar names what holds the port and offers to stop it.
![]() | ![]() |
Click a tab's branch for a panel with its pull request (title, review state and every
check, failing ones first, each linked to its log), branches (switch, filter, create),
stashes (stash, apply, pop, drop) and recent commits. Tabs show commits to push and pull
(↑2 ↓1) and the pull request's number and checks beside the branch. Pull requests come
from the GitHub CLI (gh) when it's installed and signed in.
The panel also speaks the tools people use instead of plain branches:
gitbutler/workspace, and the panel shows them side by side with their
commits, push state and pull requests, plus GitButler's own Commit (to the branch you
pick), New branch, Push and Undo.gt init, the panel
shows the stack your branch is in, trunk to top, with each pull request and a "needs
restack" marker. Restack, Submit and Sync run gt in a new tab.
+ New → Isolated Session (Docker) opens Ubuntu 24.04, Python 3.13, Node 22, or a
sandboxed Claude Code or Codex in a throwaway container. Only the tab's folder is mounted,
at /workspace; your home folder is not, and the container is deleted when you exit.
Sandboxed agents keep their own login in a Docker volume, so your Mac's credentials are
never shared. Needs Docker Desktop, OrbStack or Colima; if Docker isn't running and Colima
is installed, it starts Colima and stops it again afterwards.
⌃⌘R gives the same task to several agents at once (Claude Code and Codex, or several of one), each in its own git worktree so they can't touch each other's work or yours. Compare their diffs side by side and apply the one you want.
⌃⌘K finds everything left running: dev servers, Colima VMs and containers, agent sessions, browser automation, databases, watchers, log followers and login services.
Every command becomes a block with its output, exit code and duration (⌃⌘B). When one fails, a chip offers Fix with Claude or Fix with Codex, or sends it to the agent already working on the project, with the command and its output.
⌃⌘A shows active time, prompts, files and lines changed, commands, test runs and tokens, per day, hour, agent and project. It reads the session history Claude Code and Codex already keep. Resume any recent session in a new tab, and API value shows what your usage would cost at API prices.
⌃⌘N (or Environment in the command palette) shows what's around your agents:
.nvmrc,
.python-version and friends), which aren't installed, when the terminal's own copy
differs, and the environment variables mise and direnv add. Only their names are shown;
values are never read. Install missing versions, trust a mise config, and allow or block
an .envrc after seeing what it runs.
⌃⌘U shows every skill your agents have in one place: Claude Code, Codex, Cursor, Hermes,
the shared ~/.agents/skills folder, Claude Code plugins, Claude.ai's synced skills and the
current project's own.
npx skills or cloned with git are checked against
their source, with Update on each and Update All.
tellurion doctor runs the same checks in a terminal.
Tellurion ships in ink and bronze around whatever terminal colors you already use. Design (Tools → Design, or "Design…" in the command palette) changes that, live.
tellurion-design.ghostty beside it, included by one config-file line; delete that line
to stop using it.
GPU-accelerated rendering, native tabs and splits, the quick terminal, hundreds of themes, ligatures, shell integration, AppleScript and Shortcuts. Your Ghostty config works as-is.
All of the sidebar's animations run in Core Animation, so the app does almost no work per frame. Anything you can't see pauses: background tabs, hidden and minimized windows. With six agents working at once, Tellurion uses about 1–3% CPU (measured on an Apple silicon MacBook).
Tellurion is for watching and steering the CLI agents you already use. If you want a terminal or editor with its own built-in AI, Warp or Zed may suit you better.
| Tellurion | Ghostty | cmux | Warp | Zed | |
|---|---|---|---|---|---|
| What it is | Ghostty fork for running coding agents | Fast native terminal | Ghostty-based terminal for agents | Terminal with built-in agents | Code editor with an agent panel |
| Runs Claude Code, Codex & co. unchanged | ✓ | ✓ | ✓ | ✓ | ✓ in its terminal; also via ACP |
| Status of every agent at a glance | Sidebar card per agent | — | Pane rings, tab highlights, sidebar notification text | Tab status and notifications (Claude Code, Codex, OpenCode via plugins) | For agents in its panel |
| Answer a permission prompt without switching | Sidebar, Mission Control or notification | — | — | Notifies you; answering elsewhere not documented | For agents in its panel |
| See the code as the agent writes it | Editor follows the CLI agent live | — | — | Code review panel for the agent's diff | Follows agents in its panel |
| Map of what the agent touched | Code map with blast radius | — | — | — | — |
| Undo an agent's turn | ✓ | — | — | Not documented for CLI agents | Checkpoints in its agent panel |
| Backend view (Cloudflare, Supabase, Vercel) | ✓ | — | — | — | — |
| Point at your running app, send it to the agent | Visual Fix | — | Browser that agents can drive | — | — |
| Open source | AGPL-3.0 | MIT | Client GPL-3.0; server BSL | Client AGPL/MIT; AI and cloud proprietary | GPL-3.0 |
| Platforms | macOS (Apple silicon) | macOS, Linux | macOS | macOS, Linux, Windows | macOS, Linux, Windows |
Where others are ahead: Warp and Zed run on Linux and Windows and come with their own AI. cmux has SSH workspaces and a browser your agents can control, and its sidebar also shows PR status and listening ports. Ghostty is the lean original that all of this is built on. Tellurion is macOS-only, Apple silicon only, and maintained by one person.
Compared from each project's public docs on October 7, 2026. Corrections welcome.
Apple silicon Macs, macOS 13 or newer. In Terminal:
curl -fsSL https://raw.githubusercontent.com/steventsvik/Tellurion/custom/install.sh | bash
It downloads the latest release,
checks it against the release's SHA-256 checksums and puts Tellurion.app in
/Applications. Then it opens: the welcome window connects Claude Code and Codex in one
click and runs a live test.
Updates arrive in the app: Tellurion checks for new releases and installs them when you say so (Tellurion → Check for Updates…). They're signed, and the app only accepts updates signed by this project.
Download Tellurion-<version>-macos-arm64.zip from the
latest release, unzip it and
move Tellurion.app to /Applications. It's signed with a Developer ID and notarized by
Apple, so it opens like any other download.
Your existing Ghostty configuration works as-is.
Hold ⌃⌘ for a moment to see them all over the window.
| Shortcut | |
|---|---|
| ⌘P | Command palette: agents waiting on you, new sessions, every tool |
| ⌘, | Settings (Ghostty's config file is under Tellurion → Edit Config File…) |
| ⌃⌘S | Show or hide the sidebar |
| ⌃⌘M | Mission Control |
| ⌃⌘E | Code editor |
| ⌃⌘Y | Project memory |
| ⌃⌘V | Visual Fix |
| ⌃⌘L | Localhost sessions |
| ⌃⌘I | Review changes |
| ⌃⌘R | Race agents |
| ⌃⌘K | Background |
| ⌃⌘B | Command history |
| ⌃⌘A | Agent activity |
| ⌃⌘U | Skills |
| ⌃⌘N | Environment |
| ⌃⌘/ | Every shortcut |
The welcome window and Check Setup do all of this for you. The steps below are what they do.
Tellurion sets GHOSTTY_EXTREME_AGENT_EVENTS=1 in its terminals. The hook
scripts in agent-hooks/ do nothing anywhere else.
./agent-hooks/install.sh
This copies the hooks to ~/.ghostty-extreme/agent-hooks/ and the localhost command
to ~/.ghostty-extreme/bin/. Point your agents there rather than at the repo: macOS
privacy protection can block terminal processes from reading ~/Desktop or
~/Documents, which silently breaks the hooks.
Shell detection. Add this to ~/.zshrc:
[[ -n "$GHOSTTY_EXTREME_AGENT_EVENTS" ]] && source ~/.ghostty-extreme/agent-hooks/ghostty-extreme.zsh
Claude Code. In ~/.claude/settings.json, run
~/.ghostty-extreme/agent-hooks/agent-hook.sh claude <event> for these hooks:
| Hook | Event |
|---|---|
SessionStart | session_start |
UserPromptSubmit | prompt_submit |
PostToolUse | tool_complete |
PermissionRequest | permission_request |
Notification | notification |
Stop | stop |
StopFailure | stop_failure |
SessionEnd | session_end |
PreToolUse (matcher Bash) | pre_tool_use (moves dev servers into localhost sessions) |
{ "type": "command", "command": "~/.ghostty-extreme/agent-hooks/agent-hook.sh claude stop" }
Codex. Run python3 agent-hooks/install-codex.py. It registers Codex's hooks without
touching Claude's settings or saved hook approvals, and backs up the config first.
Restart Codex and approve the new registrations through its normal hook review.
Other agents. Copilot CLI, Droid, Gemini CLI, Antigravity, Kiro, Cursor CLI and
OpenCode are connected from Check Setup → Connect. Each gets a small hook
(agent-event.py; for OpenCode, a plugin in ~/.config/opencode/plugins/) in that agent's
own settings.
Claude usage meter (optional). Have your Claude Code status line script save
rate_limits to ~/.claude/ghostty-extreme/claude-usage.json as
{"updated": <unix time>, "rate_limits": <rate_limits>}.
brew install [email protected] (the ziglang.org build fails to link
against the macOS 26.4+ SDKs)jq for the agent hooks: brew install jqgit clone https://github.com/steventsvik/Tellurion.git
cd Tellurion
/opt/homebrew/opt/[email protected]/bin/zig build -Doptimize=ReleaseFast -Dxcframework-target=native
ditto macos/build/ReleaseLocal/Ghostty.app /Applications/Tellurion.app
If the repo is in an iCloud-synced folder (like Desktop or Documents), codesign fails on
iCloud's extended attributes. Point macos/build at a folder outside iCloud first;
update-ghostty.sh does this for you.
./update-ghostty.sh rebases this fork onto the newest official Ghostty release, rebuilds
and installs it (it needs an upstream remote pointing at ghostty-org/ghostty).
--check only reports whether a new release exists.
AGPL-3.0, see LICENSE. Ghostty's own code is MIT (LICENSE-GHOSTTY). Parts of the sidebar are derived from Warp (AGPL-3.0). Full credits and trademark notes are in NOTICE.md.
For Ghostty itself (configuration, themes, keybindings), see the Ghostty documentation.
Mission control for AI coding agents. Watch Claude Code, Codex, Gemini and a dozen more work live in one macOS terminal: live status, an editor that follows their edits, undo for any turn, approvals from your phone and local models. 20+ built-in tools, all on the site below. Built on Ghostty.
See the code
Download · Website · Live agents · Features · Compare · Install · Shortcuts · Security
Real app, real agents, demo projects. The full tour, as a GIF. Watch it in higher quality.
Tellurion is a macOS terminal for developers who run several AI coding agents, like Claude Code, Codex, Gemini CLI and Copilot CLI, across several projects at once. It's a fork of Ghostty, the fast native terminal, that shows what every agent is doing, live: the code it's writing as it writes it, where it is in your project, what part of your backend it touches, and when it needs you. Agents share what they learn about each project, hand work to each other, and leave their changes in a review inbox you can undo from.
Everything Ghostty does still works, and your Ghostty config works as-is. This fork tracks official Ghostty releases and adds its features on top.
Tellurion was called GhosttyEXTREME. Same app, same features; if you have GhosttyEXTREME installed, Check for Updates… brings you to Tellurion.
[!NOTE] Unofficial fork. Not affiliated with or endorsed by the Ghostty project.
curl -fsSL https://raw.githubusercontent.com/steventsvik/Tellurion/custom/install.sh | bash
Apple silicon, macOS 13 or newer. Free and open source (AGPL-3.0). No account, no telemetry.
Run Claude Code, Codex, Gemini CLI, Copilot CLI or another agent in a tab, the way you already do. Tellurion follows each one as it works.
| As the agent… | …you see |
|---|---|
| starts a task | Its card in the sidebar shows the task, a working spinner and a timer, and the corners of its terminal breathe. A snapshot of your project is saved, so the turn can be undone. |
| reads a file | The editor opens that file at the lines it read, and the file lights up cyan on the code map. |
| edits a file | The change types itself into the editor with the lines highlighted, the file turns orange on the map, and the turn's diff count goes up. |
| thinks or replies | The agent panel shows its thinking, messages and every tool call as a timeline, sub-agents included. |
| touches your backend | The Worker, database or bucket that code belongs to lights up in the Backend view. |
| starts a dev server | The server moves into its own tab and keeps running after the agent is done. |
| needs you | Its card turns amber with Allow and Deny buttons and jumps to the top of the command palette and Mission Control. You get a notification you can answer from, and a Dock badge. |
| finishes | Its changes land in Review with the full diff. Not what you wanted? Undo last turn puts your files back. |
Nine agents report live status: Claude Code and Codex, plus GitHub Copilot CLI, Droid, Gemini CLI, Antigravity (agy), Kiro CLI, Cursor CLI and OpenCode. The welcome window connects Claude Code and Codex in one click, and Check Setup offers Connect for each of the others it finds on your Mac. Each hook only observes: it never approves, blocks or changes anything, and any settings file it touches is backed up first (symlinked dotfiles stay symlinks). Copilot, Droid, Gemini and OpenCode also report permission prompts; Kiro, Antigravity and Cursor show Working and Done.
Amp, Goose, Hermes, Aider, Crush, Qwen Code, Kimi and Mistral Vibe are recognized by name and logo when you start them.
| Agent sidebar Live status for every agent in every tab | Mission Control Every agent in every window on one screen | Code editor Opens what the agent reads and animates its edits |
| Code map Your project as a map of what the agent touched | Project memory What Claude Code and Codex know, shared between them | Hand off Pass a pane's work to Claude or Codex, with the diff |
| Review changes An inbox for each agent's diff, with line comments | Undo a turn A snapshot before every turn, restored in one click | Review loops One agent reviews another, round after round |
| Backend view Cloudflare, Supabase, Vercel and more, with live status | Database view Tables, columns and relations from your schema | Visual Fix Click an element in your app, say what to change |
| Localhost sessions Dev servers that outlive the agent that started them | Ports What's listening, and who holds a busy port | Git panel Pull request and checks, plus jj, GitButler and Graphite |
| Isolated sessions Throwaway Docker containers with only your project | Agent races Several agents, one task, keep the best result | Background processes Find and close what's been left running |
| Command history Every command as a block, with one-click fixes | Agent activity Time, prompts, changes and tokens per day and project | Setup and settings One-click setup, Check Setup, signed updates |
| Environment Tool versions, containers and local models | Skills Every agent's skills, kept up to date, and what's trending | Design Twenty templates, your own colors, and a logo you draw |
A vertical sidebar (⌃⌘S) lists every tab with its folder, git branch and uncommitted changes. Tabs can be pinned, colored and renamed, and hovering one shows a card with more detail.
⌃⌘M shows every agent (or every pane) in every window as a live card: status, task, last action, time in that state and the last lines of its terminal. Agents waiting on you come first. Click a card to jump to it, or hand its work off from there.
The command palette (⌘P) puts waiting agents at the top too, so you can answer one in two keystrokes. It also starts new sessions and opens every tool.
Each tab has its own VS Code–style editor (Monaco, ⌃⌘E) on that tab's folder, in your terminal theme.
Your project as a star map. Folders are tinted by what they are: frontend, API, database, tests, config. Files light up as the agent reads (cyan) and edits (orange) them.
⌃⌘Y shows what Claude Code and Codex remember about the current project, in one window.
MEMORY.md too.CLAUDE.md, CLAUDE.local.md, AGENTS.md) that the agents load
every session can be edited in place. It never overwrites a file an agent changed while
you were editing.
A new Codex session starts with what Claude Code has learned about the project, and a new Claude Code session with what Codex has learned, labelled as notes that may be out of date. Above, a fresh Codex session answers "how do I deploy and test this project?" from Claude's notes without opening a file. Nothing leaves your Mac, and you can turn it off in Settings.
Pass a pane's work to another Claude Code or Codex session: a new one in a split beside it, or one that's already running.
Pair an agent with a reviewer (⋮ → Start a review loop…). Each time the writer finishes a turn, the reviewer gets its changes and answers APPROVED or CHANGES NEEDED, and its findings go back to the writer, until it approves or a round limit. Every message waits for your Send unless you turn on Send automatically, and nothing is ever typed into an agent mid-turn or over your own typing.
When an agent finishes working in a git repository, its changes land in an inbox (⌃⌘I).
Every agent turn starts with a snapshot of your project. Undo last turn (or an earlier one) from the tab's ⋮ menu, or Restore to before this on any of your prompts in the agent timeline. It lists every file it will change and asks first, and your current files are saved too, so the undo can be undone, and the review inbox updates to match. Snapshots are git objects only: no commits, branches or stash entries, and your staged changes stay as they are. Folders that aren't repositories work too.
In a jj repository, the snapshot also remembers jj's own state, so if the agent ran jj commands during the turn, Restore with jj puts jj's history back along with the files.
The Backend tab in the code editor's agent panel shows what your project runs on,
worked out from its own files (package.json, wrangler.jsonc, supabase/, .vercel/,
Prisma, env variable names). It works offline and without logins.
wrangler, supabase, vercel),
using the logins you already have and only read-only commands. It shows deploys per
environment, project health, migrations not applied yet, and commits newer than the
last deploy.
The Database view draws your schema: tables, columns and relations for Supabase, Cloudflare D1, Postgres behind Hyperdrive (read from your migrations) and Prisma.
⌃⌘V previews your running dev server beside the terminal, at desktop, tablet or phone size.
When an agent starts a dev server (npm run dev, vite, rails s, make dev, …), an
SSH tunnel, kubectl port-forward, ngrok or cloudflared, it opens in its own tab
instead, so it keeps running after the agent is done. The agent is told the URL and how to
read the logs.
localhost URL,
framework, uptime, restart and stop.package.json scripts.
The sidebar lists what's listening, which project it belongs to (Next.js, Vite, Django and more get their own badge) and what started it. Open it in the browser or Visual Fix, jump to its tab, or stop it. When a command fails because its port is taken ("EADDRINUSE", "address already in use"), the sidebar names what holds the port and offers to stop it.
![]() | ![]() |
Click a tab's branch for a panel with its pull request (title, review state and every
check, failing ones first, each linked to its log), branches (switch, filter, create),
stashes (stash, apply, pop, drop) and recent commits. Tabs show commits to push and pull
(↑2 ↓1) and the pull request's number and checks beside the branch. Pull requests come
from the GitHub CLI (gh) when it's installed and signed in.
The panel also speaks the tools people use instead of plain branches:
gitbutler/workspace, and the panel shows them side by side with their
commits, push state and pull requests, plus GitButler's own Commit (to the branch you
pick), New branch, Push and Undo.gt init, the panel
shows the stack your branch is in, trunk to top, with each pull request and a "needs
restack" marker. Restack, Submit and Sync run gt in a new tab.
+ New → Isolated Session (Docker) opens Ubuntu 24.04, Python 3.13, Node 22, or a
sandboxed Claude Code or Codex in a throwaway container. Only the tab's folder is mounted,
at /workspace; your home folder is not, and the container is deleted when you exit.
Sandboxed agents keep their own login in a Docker volume, so your Mac's credentials are
never shared. Needs Docker Desktop, OrbStack or Colima; if Docker isn't running and Colima
is installed, it starts Colima and stops it again afterwards.
⌃⌘R gives the same task to several agents at once (Claude Code and Codex, or several of one), each in its own git worktree so they can't touch each other's work or yours. Compare their diffs side by side and apply the one you want.
⌃⌘K finds everything left running: dev servers, Colima VMs and containers, agent sessions, browser automation, databases, watchers, log followers and login services.
Every command becomes a block with its output, exit code and duration (⌃⌘B). When one fails, a chip offers Fix with Claude or Fix with Codex, or sends it to the agent already working on the project, with the command and its output.
⌃⌘A shows active time, prompts, files and lines changed, commands, test runs and tokens, per day, hour, agent and project. It reads the session history Claude Code and Codex already keep. Resume any recent session in a new tab, and API value shows what your usage would cost at API prices.
⌃⌘N (or Environment in the command palette) shows what's around your agents:
.nvmrc,
.python-version and friends), which aren't installed, when the terminal's own copy
differs, and the environment variables mise and direnv add. Only their names are shown;
values are never read. Install missing versions, trust a mise config, and allow or block
an .envrc after seeing what it runs.
⌃⌘U shows every skill your agents have in one place: Claude Code, Codex, Cursor, Hermes,
the shared ~/.agents/skills folder, Claude Code plugins, Claude.ai's synced skills and the
current project's own.
npx skills or cloned with git are checked against
their source, with Update on each and Update All.
tellurion doctor runs the same checks in a terminal.
Tellurion ships in ink and bronze around whatever terminal colors you already use. Design (Tools → Design, or "Design…" in the command palette) changes that, live.
tellurion-design.ghostty beside it, included by one config-file line; delete that line
to stop using it.
GPU-accelerated rendering, native tabs and splits, the quick terminal, hundreds of themes, ligatures, shell integration, AppleScript and Shortcuts. Your Ghostty config works as-is.
All of the sidebar's animations run in Core Animation, so the app does almost no work per frame. Anything you can't see pauses: background tabs, hidden and minimized windows. With six agents working at once, Tellurion uses about 1–3% CPU (measured on an Apple silicon MacBook).
Tellurion is for watching and steering the CLI agents you already use. If you want a terminal or editor with its own built-in AI, Warp or Zed may suit you better.
| Tellurion | Ghostty | cmux | Warp | Zed | |
|---|---|---|---|---|---|
| What it is | Ghostty fork for running coding agents | Fast native terminal | Ghostty-based terminal for agents | Terminal with built-in agents | Code editor with an agent panel |
| Runs Claude Code, Codex & co. unchanged | ✓ | ✓ | ✓ | ✓ | ✓ in its terminal; also via ACP |
| Status of every agent at a glance | Sidebar card per agent | — | Pane rings, tab highlights, sidebar notification text | Tab status and notifications (Claude Code, Codex, OpenCode via plugins) | For agents in its panel |
| Answer a permission prompt without switching | Sidebar, Mission Control or notification | — | — | Notifies you; answering elsewhere not documented | For agents in its panel |
| See the code as the agent writes it | Editor follows the CLI agent live | — | — | Code review panel for the agent's diff | Follows agents in its panel |
| Map of what the agent touched | Code map with blast radius | — | — | — | — |
| Undo an agent's turn | ✓ | — | — | Not documented for CLI agents | Checkpoints in its agent panel |
| Backend view (Cloudflare, Supabase, Vercel) | ✓ | — | — | — | — |
| Point at your running app, send it to the agent | Visual Fix | — | Browser that agents can drive | — | — |
| Open source | AGPL-3.0 | MIT | Client GPL-3.0; server BSL | Client AGPL/MIT; AI and cloud proprietary | GPL-3.0 |
| Platforms | macOS (Apple silicon) | macOS, Linux | macOS | macOS, Linux, Windows | macOS, Linux, Windows |
Where others are ahead: Warp and Zed run on Linux and Windows and come with their own AI. cmux has SSH workspaces and a browser your agents can control, and its sidebar also shows PR status and listening ports. Ghostty is the lean original that all of this is built on. Tellurion is macOS-only, Apple silicon only, and maintained by one person.
Compared from each project's public docs on October 7, 2026. Corrections welcome.
Apple silicon Macs, macOS 13 or newer. In Terminal:
curl -fsSL https://raw.githubusercontent.com/steventsvik/Tellurion/custom/install.sh | bash
It downloads the latest release,
checks it against the release's SHA-256 checksums and puts Tellurion.app in
/Applications. Then it opens: the welcome window connects Claude Code and Codex in one
click and runs a live test.
Updates arrive in the app: Tellurion checks for new releases and installs them when you say so (Tellurion → Check for Updates…). They're signed, and the app only accepts updates signed by this project.
Download Tellurion-<version>-macos-arm64.zip from the
latest release, unzip it and
move Tellurion.app to /Applications. It's signed with a Developer ID and notarized by
Apple, so it opens like any other download.
Your existing Ghostty configuration works as-is.
Hold ⌃⌘ for a moment to see them all over the window.
| Shortcut | |
|---|---|
| ⌘P | Command palette: agents waiting on you, new sessions, every tool |
| ⌘, | Settings (Ghostty's config file is under Tellurion → Edit Config File…) |
| ⌃⌘S | Show or hide the sidebar |
| ⌃⌘M | Mission Control |
| ⌃⌘E | Code editor |
| ⌃⌘Y | Project memory |
| ⌃⌘V | Visual Fix |
| ⌃⌘L | Localhost sessions |
| ⌃⌘I | Review changes |
| ⌃⌘R | Race agents |
| ⌃⌘K | Background |
| ⌃⌘B | Command history |
| ⌃⌘A | Agent activity |
| ⌃⌘U | Skills |
| ⌃⌘N | Environment |
| ⌃⌘/ | Every shortcut |
The welcome window and Check Setup do all of this for you. The steps below are what they do.
Tellurion sets GHOSTTY_EXTREME_AGENT_EVENTS=1 in its terminals. The hook
scripts in agent-hooks/ do nothing anywhere else.
./agent-hooks/install.sh
This copies the hooks to ~/.ghostty-extreme/agent-hooks/ and the localhost command
to ~/.ghostty-extreme/bin/. Point your agents there rather than at the repo: macOS
privacy protection can block terminal processes from reading ~/Desktop or
~/Documents, which silently breaks the hooks.
Shell detection. Add this to ~/.zshrc:
[[ -n "$GHOSTTY_EXTREME_AGENT_EVENTS" ]] && source ~/.ghostty-extreme/agent-hooks/ghostty-extreme.zsh
Claude Code. In ~/.claude/settings.json, run
~/.ghostty-extreme/agent-hooks/agent-hook.sh claude <event> for these hooks:
| Hook | Event |
|---|---|
SessionStart | session_start |
UserPromptSubmit | prompt_submit |
PostToolUse | tool_complete |
PermissionRequest | permission_request |
Notification | notification |
Stop | stop |
StopFailure | stop_failure |
SessionEnd | session_end |
PreToolUse (matcher Bash) | pre_tool_use (moves dev servers into localhost sessions) |
{ "type": "command", "command": "~/.ghostty-extreme/agent-hooks/agent-hook.sh claude stop" }
Codex. Run python3 agent-hooks/install-codex.py. It registers Codex's hooks without
touching Claude's settings or saved hook approvals, and backs up the config first.
Restart Codex and approve the new registrations through its normal hook review.
Other agents. Copilot CLI, Droid, Gemini CLI, Antigravity, Kiro, Cursor CLI and
OpenCode are connected from Check Setup → Connect. Each gets a small hook
(agent-event.py; for OpenCode, a plugin in ~/.config/opencode/plugins/) in that agent's
own settings.
Claude usage meter (optional). Have your Claude Code status line script save
rate_limits to ~/.claude/ghostty-extreme/claude-usage.json as
{"updated": <unix time>, "rate_limits": <rate_limits>}.
brew install [email protected] (the ziglang.org build fails to link
against the macOS 26.4+ SDKs)jq for the agent hooks: brew install jqgit clone https://github.com/steventsvik/Tellurion.git
cd Tellurion
/opt/homebrew/opt/[email protected]/bin/zig build -Doptimize=ReleaseFast -Dxcframework-target=native
ditto macos/build/ReleaseLocal/Ghostty.app /Applications/Tellurion.app
If the repo is in an iCloud-synced folder (like Desktop or Documents), codesign fails on
iCloud's extended attributes. Point macos/build at a folder outside iCloud first;
update-ghostty.sh does this for you.
./update-ghostty.sh rebases this fork onto the newest official Ghostty release, rebuilds
and installs it (it needs an upstream remote pointing at ghostty-org/ghostty).
--check only reports whether a new release exists.
AGPL-3.0, see LICENSE. Ghostty's own code is MIT (LICENSE-GHOSTTY). Parts of the sidebar are derived from Warp (AGPL-3.0). Full credits and trademark notes are in NOTICE.md.
For Ghostty itself (configuration, themes, keybindings), see the Ghostty documentation.