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.

termist in a terminal: the Galata Tower at dusk for a moment, then three agents as cards, one running, one waiting for an answer, one done; the user jumps to the waiting one, answers it, starts a new task and finds a session by name.
Three agents at work. . jumps to the one waiting for you, p starts a new task, / finds any session.

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.

termist's pull request list for a folder of two repos. The user opens #212, Fix the login redirect loop, reads its conversation and marks its two review threads, opens the diff unified and then side by side, comments on two lines of the next file, and sends a review that requests changes. Then the marked threads go to a new Claude Code agent in a worktree on the pull request's branch, and the grid shows its card in a band of its own under the branch and #212.
From the list to an agent: v, Enter, Space on two threads, d and s, a comment with c, the review with A, then a.
The pull request list of the folder acme: three open pull requests in api and six in site, each with its number, title, review and checks marks and age; #212, Fix the login redirect loop, is selected, and beside the list its preview says your review is requested and its checks pass.
The list (v). Repo by repo, with the reviews asked of you (⇄ on the tab and f to show only those), checks, conflicts and drafts at a glance, and a preview beside it.
Pull request #212 open on its conversation: two comments, a review, then two line threads, each under the lines of code it is about, both marked with a yellow diamond to be handed to an agent.
The whole pull request (Enter). Overview, conversation with line threads under their lines, checks and files. r replies, x resolves, e and D edit and delete your own, Space marks a thread.
The diff of #212 side by side: a file tree on the left, then old and new lines of src/auth/redirect.rs in two columns, removed lines red and added green, the words that changed marked, and a review thread folded under the line it is about.
The diff (d). A file tree beside unified or side-by-side (s) changes, threads under their lines. J / K go from file to file, Ctrl+r marks a file viewed on GitHub.
The review box over the diff: Comment, Approve and Request changes, with Request changes chosen and a sentence typed. Above it, a line comment just written waits in the review, marked pending.
Writing back. c comments on the pull request, a line or a v range (Ctrl+s makes it a suggestion). Line comments wait in your review until A sends it: comment, approve or request changes.
The grid in two bands: the folder acme with two agents, one done and one waiting, then the band of the worktree site@fix/login, headed by #212 Fix the login redirect loop with its checks passing, holding the agent that took the review comments. Below, its pane shows the threads it was given and its work on them.
From a pull request to an agent. w opens a worktree on its branch and an agent there; a hands the marked threads, with the lines they are about, to the agent already on that branch or to a new one. Cards stand in bands, one per worktree, under the branch and its pull request; Shift+V opens a card's pull request in the browser.

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.

The settings screen open over three agent cards. The theme changes from Üsküdar, dark, to Moda, light, to the terminal's own colours and back to Moda, and the whole screen follows at once. Then the help opens with the Galata Tower at dusk above the list of keys.
The theme changes from the settings (s) and the whole screen follows at once. The help (?) lists every key as it is bound now.
The Galata Tower drawn in the terminal at dusk: a violet to orange sky, gulls, the old town's houses and the Golden Horn below, captioned Galata Kulesi, gün batımı.
Istanbul scenes. Galata, Kız Kulesi, Ayasofya, the Bosphorus Bridge, a vapur and the Basilica Cistern, in the colours of the hour. They show at start, on an empty grid and when you have been away a while.
The settings screen over the grid: theme, colours, prefix, pane, keys, sounds, desktop, splash, idle and animation, each with its current value.
Settings, from inside. Theme, colours, prefix, where the pane goes, and every key of the grid and of focus mode. Changes are saved to config.toml, and your comments in it are kept.
The grid in the light Moda theme: three agent cards on a cream background, the running agent's terminal below them.
Themes. Üsküdar is dark and the default, Moda is light, and the terminal theme keeps your terminal's own colours. Agents are told the colours termist draws them with, so they pick a light look on Moda.
The help over the grid: the foot of the Galata scene, the version and config path, then the keys of the grid with what each one does.
Help. ? lists every key as it is bound now, with a scene at the top.

Every session is a card with a dot

The dots come from each agent's own hooks, so they change the moment the agent does.

What you get

Keys

KeyDoes
pNew task from a prompt
n tNew agent session, new shell
EnterType into the selected card; Ctrl+a Esc goes back
SpaceFollow-up to a card without entering it
. ,Next or previous session that needs you
/Find any session
o xOpen a project, close its tab
r a ARename, archive, show the archive
vPull requests of the project, through the GitHub CLI; Enter opens one
dIn a pull request: its diff, unified or side by side (s); Ctrl+r marks a file viewed
c AIn a pull request: comment (on a line or a v range in the diff), send your review
r xOn a thread: reply, resolve
Ctrl+N Ctrl+TIn the new-task prompt: a new worktree for the task, named from the prompt / where the task starts
W XThe worktrees: show, hide, remove / remove the selected one (the branch stays)
i Shift+IThe 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 spawnWhat 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)
eYour agent presets: Enter opens the new-task prompt with one, r renames, d deletes; Ctrl+S in that prompt saves one
O LThe card's folder in your editor (a terminal one as a card) / lazygit there
f FFind a file / the lines with some text, opened in your editor at the line
PgUpCopy mode: hjkl w b move, v V select, y copy, / ? search
g u Ctrl+rWhat the card's branch changed, file by file / only the uncommitted / mark a file reviewed
w Space aIn a pull request: a worktree and an agent on its branch; mark review threads, hand them to the agent
Shift+VThe selected card's pull request in the browser
sSettings: theme, colours, prefix, pane, keys
?Every key, as it is bound now
qQuit the TUI; the agents keep running