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.
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.
Editor first.
The IDE was where you wrote the code. The AI was a chat panel off to one side.
Agent moves into the terminal.
Claude Code, Codex, OpenCode, Hermes. Chat and execution in one window. Real diffs, real stderr, real state.
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.
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.
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.
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.
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.
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
integratedCodex
integratedOpenCode
integratedHermes
integratedSwitch agents mid-day without switching mental models. The terminal treats them the same; you don’t have to.
The terminal agents use,
not just run in.
Every terminal was built for a person to drive. This one ships with a command line the agent can drive too. A session can track itself as an issue, open the next tab, hand its work to a different agent, and tell you when it needs you — without leaving the pane it’s running in.
Already on your PATH.
It ships inside Push.app. No package to install, no daemon to run. Open a tab and the command is there.
Claude, Codex, OpenCode, Hermes — all fluent.
The /push skill ships with the app, projected into all four agents’ skill homes. Type /push — $push in Codex — and the agent knows the verb set.
You type it. Your agent types it.
No agent-only API, no human-only dashboard hiding behind it. The same verbs, whichever of you reaches for them first.
push trackTurn this session into a tracked issue. The tab binds to it, the Run button lights up, and the work shows up on your phone.
push statusThe workspace pulse — what’s running, what’s queued and why, which sessions are working, and which ones are waiting on you.
push terminal open --push work MA-4506One tab opens the next. Push resolves the agent from the issue, names the tab after it, and types the first turn itself.
push spin-off "rate limiting"A tangent gets its own tab and its own issue, carrying this session’s context across. This session keeps running.
push session inspectContext left, spend so far, rate-limit headroom, and the subagents running right now — read from the agent’s own channels, not guessed.
push terminal tail --issue MA-4506Read what another tab has been printing without switching to it.
Sixty-odd verbs, one help page: push --help. Nothing here is a separate product — it’s the same terminal, talking back.
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.
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.
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.
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.
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.
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.
Questions, answered.
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 · iOS beta on TestFlight