This post is written by the maintainers of cornercase. It's our own project, it's free and open source (MIT or Apache-2.0), and there's nothing paid behind it. We'd like to explain what it does, how it works, and where it still falls short.
The problem
Starting ten coding agents is easy. Keeping up with them is the hard part.
Once you have a few Claude Code or Codex sessions open at the same time, the questions pile up. Which one is waiting for an answer? Which one finished while you were looking at another? What did each one change? Did two of them edit the same file?
We kept answering those questions with tmux, git worktrees and a growing pile of scripts, and we kept re-wiring that setup. cornercase is the tool we built so we could stop.
What cornercase does
cornercase is a terminal multiplexer, in the same family as tmux or Zellij, built around running agents in parallel. It runs inside the terminal you already use.
From an issue to an agent at work. Open an issue from GitHub, GitLab, Linear, Jira, Plane, Asana or Shortcut and press start. cornercase creates a worktree on a branch named after the issue, opens a tab in it, and hands the issue to the agent as its first prompt. It works with Claude Code, Codex, Gemini, Grok, Cursor, Copilot and nine more agents.
One worktree and one tab per agent, with status. Each agent gets its own branch, folder and tab, so two agents never touch the same file. Tabs show who is working (◐), who needs you (!) and who finished while you were away (✓), along with the model and how full its context is. ! and ✓ climb up to the workspace and project rows, and your terminal sends a notification, also over SSH.
The review next to the work. The changes panel shows the workspace's diff as the agent writes it: uncommitted changes, the agent's commits, or everything since a base branch. You can also see what is uncommitted across every project at once. Hover a hunk to open it in your editor, copy it, or hand it back to the agent. Recent releases added staging a file and discarding a file's changes from the same panel.
Close the window. Nothing stops. A background server owns the shells. Quit detaches and running cornercase again reattaches, from any terminal. Several windows can show the same session. cornercase remote <host> keeps the window on your laptop and the shells and agents on another machine, over your own ssh, and reconnects by itself when the connection drops. Below 90 columns the sidebar folds into a menu bar, so it also works from a phone over SSH.
Scripting, so one agent can run the others. Everything in the window is also a command:
pane=$(cornercase start claude --worktree fix-login --prompt 'Fix the login form, then commit')
cornercase wait --pane "$pane" --timeout 1800 # until the agent stops: idle, done, pending or waiting
cornercase read --pane "$pane" --last-message # what it said, from its own transcript
cornercase --help lists the rest: open projects and worktrees, split panes, type into them, press keys, wait on one agent or several, and follow events as they happen. You can teach the commands to your agents as a skill:
npx skills add usecornercase/cornercase-terminal --skill cornercase -g
An account per pane. If you have separate accounts, for example one for work and one for personal projects, each pane shows its accounts in a row under it. Pick another account there and only that pane changes. Claude Code and Codex restart on the new account in the same conversation; Gemini CLI starts a new one.
One more design choice: everything is a click, and every key goes to the program in the active pane. There are no shortcuts to learn unless you choose a prefix key.
How it works, briefly
cornercase is written in Rust. Two decisions shape most of it.
Status comes from the agent's own files, not from hooks. For Claude Code, cornercase reads the session file Claude Code keeps for each running session in ~/.claude/sessions/. It reads that file and never writes it. We decided against hooks because they mean editing your ~/.claude/settings.json or shipping a plugin, and the Stop hook doesn't fire when you interrupt with Esc. We also decided against screen scraping, because Claude's screen changes too often to match reliably. The session file turns idle right after an interrupt and switches to waiting as soon as a prompt shows.
Panes run on libghostty-vt, Ghostty's terminal core. That is why nvim, fzf, htop and full-screen agents work as expected inside a pane, in your terminal's own colours.
Honest limits
- It's early. The current release is v0.12.172, and the project changes daily. Expect rough edges, and expect things to move.
- Linux and macOS only, on x86_64 and arm64. There is no Windows build.
- It's a TUI. It lives in your terminal. If you want a desktop app with its own window, cornercase isn't that.
-
Building from source needs Zig 0.15.2 on your
PATH, exactly that version, because it builds Ghostty's terminal core. The prebuilt binaries don't need it.
Install
With the install script:
curl -fsSL https://usecornercase.dev/install.sh | sh
Or with Homebrew:
brew install usecornercase/tap/cornercase
Then run it:
cornercase
That starts the server and opens the window. From there, + New → open project lets you pick a folder, and Issues → pick one → start gets an agent going. Quit closes the window and leaves everything running.
cornercase checks GitHub for a new release every hour and offers to install it. cornercase update does the same from a shell.
If you'd rather look before installing anything, there's an interactive simulation on usecornercase.dev. The full walkthrough is in First steps.
Feedback
We'd like to hear from people who run several agents at once. What's still painful in your setup? What breaks? What would make you switch from plain tmux?
- GitHub: usecornercase/cornercase-terminal for issues and pull requests
- Discord: discord.gg/aYqCa4xC4R for questions and ideas
- Docs: usecornercase.dev/docs
Thanks for reading.

Top comments (0)