termist
terminal istanbul
Mission control for your coding agents. Run Claude Code, Codex and OpenCode side by side, across every project, from one terminal tab.
v0.2.6: from an issue to a task (i issues, Enter starts an agent on one, Shift+I opens a card's), agents drive termist (termist spawn, worktree, open), your agent setups, kept (e presets, Ctrl+S saves one, cards named after the task), tools next to your agents (O editor, L lazygit, f/F find, copy mode), what an agent changed (g, Ctrl+r reviewed), worktrees of their own (Ctrl+N, W, X), on top of 0.2.0's pull requests next to your agents. termist update keeps it current.
Install
- macOS and Linux
curl -LsSf https://eyupucmaz.github.io/termist/install.sh | sh- Windows, in PowerShell
powershell -ExecutionPolicy Bypass -c "irm https://eyupucmaz.github.io/termist/install.ps1 | iex"
Then open a terminal in a project and run termist. It uses the agent CLIs you already have installed, and never writes into your repositories or their config.
Pull requests next to your agents
New in 0.2. v shows a project's open pull requests, read through the GitHub CLI: one repo, or every repo in a folder of repos, each read with the account that has the most access to it. Read one whole, review it, and when the review asks for changes, hand them to an agent on its branch.
Install gh and run gh auth login; with several accounts, m chooses the repos and the account each is read with. Turn it all off with [github] enabled = false or in the settings.
Its look and its voice
Themes, Istanbul scenes, sounds and notifications, all set from inside termist.
config.toml, and your comments in it are kept.
- Sounds and desktop notifications when an agent waits for you or is done, the notifications only while the terminal is not in front. Ghostty, WezTerm, kitty, iTerm2 and others, through tmux too.
- The pane on any side of the cards,
right,left,bottomortop, with one column of cards beside it; Ctrl+a z moves it between beside and under. - Toasts in the top right when an agent waits for you or is done, in any project, and a status line with CPU, memory, battery and the time.
termist updateinstalls the newest release over the one you have, andtermist update --checkonly looks.
Every session is a card with a dot
- ●Running. The agent is working; leave it.
- ◆Waiting for you: a permission or a question. . takes you straight there, from any project.
- ✓Done, and you have not looked yet.
- ●Done and seen, ready for the next instruction.
- ○Not running, for instance after a reboot. Enter resumes the same conversation.
The dots come from each agent's own hooks, so they change the moment the agent does.
What you get
- Agents keep running when you close the window. A small daemon owns every session; the TUI just attaches to it.
- Start a task without leaving the grid: p, type the prompt, pick the agent with Tab and the model with ^O.
- Send the next instruction to a finished agent with Space, without opening its terminal.
- Projects as tabs, cards that scroll, rename and archive, and a real terminal for each agent when you want to type into it.
- The models each CLI offers, to choose from with ^O: Claude Code's, and what Codex and OpenCode list.
- The mouse everywhere: a click on a tab, a card, the pane, a file or a thread, and the wheel moves what is under it. Drag over the pane to copy.
- Your pull requests next to your agents: the list, the conversation, the diff, comments and reviews, and a worktree with an agent for each branch.
Keys
| Key | Does |
|---|---|
| p | New task from a prompt |
| n t | New agent session, new shell |
| Enter | Type into the selected card; Ctrl+a Esc goes back |
| Space | Follow-up to a card without entering it |
| . , | Next or previous session that needs you |
| / | Find any session |
| o x | Open a project, close its tab |
| r a A | Rename, archive, show the archive |
| v | Pull requests of the project, through the GitHub CLI; Enter opens one |
| d | In a pull request: its diff, unified or side by side (s); Ctrl+r marks a file viewed |
| c A | In a pull request: comment (on a line or a v range in the diff), send your review |
| r x | On a thread: reply, resolve |
| Ctrl+N Ctrl+T | In the new-task prompt: a new worktree for the task, named from the prompt / where the task starts |
| W X | The worktrees: show, hide, remove / remove the selected one (the branch stays) |
| i Shift+I | The project's open issues (Enter starts an agent on one in a worktree named after it, Space reads it) / the card's issue in the browser |
termist spawn | What an agent runs to start another (beside it, or --worktree in a branch's), to move into a worktree (termist worktree) or to open a file (termist open) |
| e | Your agent presets: Enter opens the new-task prompt with one, r renames, d deletes; Ctrl+S in that prompt saves one |
| O L | The card's folder in your editor (a terminal one as a card) / lazygit there |
| f F | Find a file / the lines with some text, opened in your editor at the line |
| PgUp | Copy mode: hjkl w b move, v V select, y copy, / ? search |
| g u Ctrl+r | What the card's branch changed, file by file / only the uncommitted / mark a file reviewed |
| w Space a | In a pull request: a worktree and an agent on its branch; mark review threads, hand them to the agent |
| Shift+V | The selected card's pull request in the browser |
| s | Settings: theme, colours, prefix, pane, keys |
| ? | Every key, as it is bound now |
| q | Quit the TUI; the agents keep running |