The terminal that remembers
your agent sessions.

Quit the app. Open it tomorrow. Your Claude Code session is right where you left it. Same for Codex, OpenCode, and Hermes — naming, resume, and history that work across all four.

Download for Mac
macOS 14+ · Apple Silicon · Free
~/push-website — claude code
$ # quit yesterday. reopen tomorrow.
$ claude --resume
resumed session 8f3e1c2a in ~/push-website
✳ Push (terminal-launch)
last: "got it — implementing the four-agent grid now."
> where did we leave off?
Why now

The work moved.
The terminal kept up.

Two years ago, you wrote code in an editor. Today, you direct an agent and review the result. The surface that fits that loop best is the one where the agent already runs.

2024

Editor first.

The IDE was where you wrote the code. The AI was a chat panel off to one side.

2025

Agent moves into the terminal.

Claude Code, Codex, OpenCode, Hermes. Chat and execution in one window. Real diffs, real stderr, real state.

2026

Chat is the work.

You type in chat. You read the diff. You watch the tests. The editor demoted to an inspection surface. The terminal is where the work happens.

Built like a browser

Many tabs. No anxiety.

Twelve agent sessions in a strip you can scan. Sessions that survive a quit. Folder chips that group by where the work lives. ⌘⇧T to undo a close. The shape of UX you already know — pointed at the things that matter for agents.

Asset slot
30s recording: quit app → relaunch → Claude resumes
Sessions survive ⌘Q

Quit the app. Open it tomorrow. Your agent is right where you left it.

Every tab is pinned to its session ID on disk. Relaunch and click Terminal — claude --resume runs automatically against the same conversation. ⌘R reloads a tab as a fresh PTY without losing the thread.

Folder chips, not workspaces

Filter the strip by where the work lives.

Each open tab contributes a chip from its working directory. Click a chip and the strip narrows to that folder. Each folder remembers its last-active tab. New tabs land in the right cwd by default — no .tmux.conf, no setup.

⌘⇧T brings it back

Close a tab by accident? Reopen it where it was.

The undo stack restores closed tabs with their title, working directory, and position in the strip. As deep as your last session. A browser that loses your tabs every time you quit is a broken browser — same standard for a terminal you live in.

Four agents, one terminal

Naming. Resume. History.
Normalized across every agent
you actually use.

Four agent CLIs. Four storage formats. Four resume command shapes. Four hook systems. There is no shared protocol — so we wrote the integration for each of them. Tab titles, session resume, and history land the same way no matter which one is running in the pane.

Claude Code

integrated
Storage
~/.claude/projects/<cwd>/<id>.jsonl
Resume
claude --resume <id>
What Push handles
Auto-resume on relaunch · session-id markers · /clear flips · tab title from haiku

Codex

integrated
Storage
Codex-internal store
Resume
codex -C <cwd> resume <thread>
What Push handles
Per-turn hooks · per-cwd thread filter · clean tab title via overlay

OpenCode

integrated
Storage
OpenCode-internal store
Resume
opencode <cwd>
What Push handles
Plugin push-monitor.js · upstream prefix suppressed · title from info.title event

Hermes

integrated
Storage
~/.hermes/state.db
Resume
hermes --resume <id>
What Push handles
SQLite read-only · 17-hook surface mapped · title from sessions.title row

Switch agents mid-day without switching mental models. The terminal treats them the same; you don’t have to.

Native

GPU rendering.
Dual-theme.
Diff colors that look right.

Built on the same engine as Ghostty, with the parts that matter for code agents wired up: light/dark theme switching that Claude Code respects, a palette pipeline that nobody outside Ghostty.app has assembled, and a tint that’s personalization — not a second notification system.

Renderer

libghostty + Metal

GPU-rendered, 5000-line scrollback per tab. Doesn't choke when four agents stream output at once. Zero-latency tab switching — tabs warm in memory, the rest cold.

Palette

Light and dark, done right

Embedded libghostty wired up correctly: dual-theme paths, surface refresh on theme change, KVO observer on system appearance. Claude Code's truecolor diffs render with the right colors, light or dark, without restarting the tab.

Tint

Make it yours

Nine colors, ten strength steps, one toggle. Uses .blendMode(.color) so white text stays white and black stays black — only mid-lightness materials take the wash. A subtle mood-shift between sessions, not a notification.

What it isn’t

Made for one job.
Honest about the rest.

Not a Linux server tool.

Mac-only today. No daemon-on-the-remote-box story. If your work lives behind ssh + tmux, this isn’t the terminal you want.

Not a PR review queue.

The work happens inside the tab, not on a status board. If you spend most of your day accepting and rejecting agent diffs, you want a different shape of product.

Not for one throwaway shell.

Two open tabs, any terminal is fine. The persistence, the folder chips, the four-agent integration — they earn their place when you have many sessions, not one.

M
The team

Built in the open,
shipping weekly.

Push is made by MasslessAI. One team, one product. Code is closed for now, but every release is documented, every tradeoff is in public, and the inbox is open.

FAQ

Questions, answered.

A Mac terminal built around code agents. Many sessions in one window, naming and resume that work across Claude Code, Codex, OpenCode, and Hermes, folder chips that group by working directory, and the Mac-native rendering you expect. Quit the app and your sessions are still there tomorrow.

Open it tomorrow.
Your agent is still there.

Free. Signed and notarized. Installs in under a minute. Quits as cleanly as it opens.

macOS 14+ · Apple Silicon · Free