Skip to content

Introduction

cornercase is a terminal multiplexer for working on several things at once. It keeps your projects in a sidebar, gives each line of work its own workspace (optionally its own git worktree and branch), and runs as many tabs and split panes of real shells as you need. It can also read an issue from GitHub, GitLab, Shortcut, Linear, Jira, Plane or Asana and start a coding agent on it, in a fresh worktree, in a few clicks.

Everything is a button. There is no prefix key to learn and no shortcut that steals keys from your shell, your editor or your agent: every key you type goes to the program in front of you. If you’d rather use the keyboard, an optional prefix key opens a menu of shortcuts.

search projects, workspa…agent session·claude --permission-mode planProjects▾work> https://github.com/acme/web-shop/issues/482web-shop(4)orders-api(2)!Reading src/returns/address.rsfirst_line() panics on an empty address▾◆personalReturning Option<&str>, answering 422blog(1)Adding a test: empty_address_is_rejecteddotfiles(1)running cargo test…esc to interrupt+ NewWorkspaces↑3 more▾feat/dark-mode◐claudeOpus 5.5·7%+ Tab▾feat/gift-cardsrunning 7 tests◐codextest checkout::totals_include_tax ...okgpt-5.4·20%test checkout::coupons_stack ...ok+ Tabtest returns::label_is_printed ...oktest theme::dark_background_is_dark ...ok▾#482 Returns page cr…test theme::light_is_the_default ...ok◐claude+1test returns::postcode_is_trimmed ...okOpus 5.5·7%test returns::empty_address ...FAILED+ Tabfailures:+ New---- returns::empty_address stdout ----IssuesChanges 2panicked at src/returns/address.rs:12:33:FilesTODOcalled `Option::unwrap()` on a `None` valueSettingsUsagetest result:FAILED. 6 passed; 1 failedQuitissue-482-returns-page-crashes-on-empty-address
Two groups, four projects, four lines of work in web-shop, and an agent fixing issue #482 next to its failing test.

Each level lives inside the one before it, and each one has its own column or area on screen:

web-shop project a folder
├── main workspace the folder itself
│ ├── nvim tab
│ └── bash tab
├── feat/dark-mode workspace its own worktree
│ └── claude tab
└── #482 Returns page … workspace from an issue
└── claude tab split in two panes
  • Projects are folders. The sidebar on the left lists them, with the number of workspaces each one has, optionally in groups with an icon and a colour.
  • Workspaces are lines of work inside a project. The first one is the project folder itself; you can add more, and in a git repository each one can get its own worktree.
  • Tabs are shells inside a workspace. A tab is named after whatever runs in it: bash, nvim, claude. A tab running Claude Code, Codex, Gemini CLI, opencode, Grok Build, Cursor CLI or GitHub Copilot CLI also shows whether it is working, needs you or finished, and how full its context is. The optional agents section lists every agent in every project, one click from each.

Claude Code, Codex, Gemini CLI, opencode, Grok Build, Cursor CLI and GitHub Copilot CLI tabs show their model and context use, with a percentage when it is available.

  • Panes split a tab, right or down, like in Ghostty. Each pane is a real terminal.

Click, don't chord

Projects, workspaces and tabs are rows you click. + adds one, × closes it, ⋯ or a right-click renames it or puts a project in a group, a drag puts it in another place. More about the layout →

Split like Ghostty

Right-click a pane to split it right or down, drag the dividers, drag over text to copy it. More about panes →

A worktree per task

Tick a box and a new workspace gets its own checkout and branch. Your .env comes along. More about worktrees →

See what changed

In a git workspace, open the changes panel next to your panes: uncommitted edits, the branch’s commits, or both, live. Choose Every project to review uncommitted changes across your projects. More about the changes panel →

Read the code

Browse and search the workspace’s files next to your panes, with git’s marks beside each line, see its images as pictures, and click a path an agent prints to open it. More about the files panel →

Issue in, agent out

Read a GitHub or GitLab issue, Shortcut story, Linear issue, Jira issue, Plane work item or Asana task, press start, and an agent picks it up in its own worktree. More about issues →

A team per issue

Start a flow: a coder, reviewers of other providers and a tester, run by an orchestrator agent in their own worktree. The Flow panel draws the plan and lights it up as the work moves. More about flows →

Scripts and agents

A command line drives the running cornercase: open tabs, type into panes, start agents in their own worktrees, wait for them and read what they wrote. More about scripts and agents →

Shells outlive the UI

A background server owns every shell. Close the window, come back later, attach from several terminals. More about sessions →

Agents on another machine

cornercase remote devbox opens the window on your laptop and runs everything on the other machine. When the connection drops, it reconnects. More about remote machines →

Mouse first. Out of the box cornercase has no keyboard shortcuts of its own. Keys always reach the program in the active pane, so Ctrl+B, Alt combinations and everything your editor or agent uses keep working. Inside a dialog, Enter confirms and Esc cancels, and while the changes, files, TODO or Flow panel is open, Esc closes it. Shortcuts are there if you want them, behind a prefix key you choose.

A real terminal inside. Panes are emulated with libghostty-vt, the core of the Ghostty terminal. It answers the queries that programs like nvim, fzf, htop and full-screen agents wait for, supports the kitty keyboard protocol, and reflows text when a pane is resized.

The server owns your shells. The cornercase command is a thin client that only draws what the server sends it. Quitting detaches; the shells keep running until you stop the server.

Your colours. cornercase asks your terminal for its colours when it starts and draws everything with palette colours, so it looks right in light and dark themes alike.