Command palette
One search over your command history, snippets, actions, tabs and worktrees.
⌘K opens one search over five things at once: what this machine has actually run, your snippets, the app’s own actions, your tabs and the repository’s worktrees. Beside the list is a detail pane — a snippet’s placeholders to fill in, or when a command last ran and how it went.
If you forget every other shortcut, this is the one to keep.
Scopes
Chips in the field narrow the search to History, Snippet or Action; with none selected it searches everything. A row’s group is shown either way, and tabs and worktrees are always in the list even though they have no chip of their own.
| Group | Rows |
|---|---|
| History | commands this machine has run, with the exit code and duration |
| Snippet | your snippets, with their {{placeholder}}s |
| Action | the app’s own commands |
| Tab | every open tab, by title and directory |
| Worktree | every worktree of the repository, by name and path |
Before you type, the order is actions, tabs, worktrees, snippets, then
history. Once you type, ranking decides — titles outrank subtitles, and
history rows are ranked below everything else. A history row is a guess
at what you meant; an action named for what you typed is not. Without that
rule a long command containing an n, a c and an l somewhere outranked
New Claude Tab for “ncl”.
How history is ranked
The ranking is the feature, so it is worth stating exactly. For each matching command:
- This folder first. A command run in the selected tab’s folder gets the largest bonus; one run in a folder above or below it gets a smaller one. The same command means something different in another checkout, and the one you want is nearly always here.
- Then recency, in whole hours — so today beats last week without the last minute beating a better match.
- Then frequency, counted up to twenty runs.
Twelve rows at most. The detail pane says when it last ran, in which folder, its exit code and duration, and how many times you have run it.
History is fed by the command record the terminal already keeps — every
command with its exit code, its duration and its folder — and the same
command run again is the same entry, moved to the front with its new
outcome. A list with git status in it forty times is not a history.
Up to 2000 commands are kept, in history.json. See
Files on disk.
The one-time seed
The first time Overterm runs with no history.json, it seeds the list from
your shell’s own history file — $HISTFILE, else ~/.zsh_history, else
~/.bash_history — newest first, duplicates dropped, up to 2000 commands.
zsh’s extended format (: 1699999999:0;git status) is unwrapped.
That is all the file has, so a seeded entry carries no folder, no exit code and no duration. It happens once; after that the list is what you ran in Overterm.
Running a row
| Key | What it does |
|---|---|
| ↩ | runs it — types the command and Return |
| ⌥↩ | pastes it without running |
| ↑ ↓ | move, wrapping |
| ⎋ | closes the palette |
Everything is typed into the selected terminal, so nothing happens that you
could not have typed yourself. A snippet with {{placeholder}}s is filled
in the detail pane first, and ↩ is not available until every
placeholder has a value.
The actions
These are always in the list:
New Tab · Split Right · Split Down · New Task… · Agent Overview · Tab Peek · Show Pull Request · Clean Up Merged Worktrees… · New Claude Tab · New Codex Tab · Toggle Sidebar · Overgit · Changes · New Snippet… · Open Snippets File
And while the selected tab is split, four more: Next Pane, Zoom Pane, Equalize Panes, Close Pane.
Why ⌘K
Ghostty binds ⌘K to clear_screen and answers keys in the
terminal before the menu sees them. The palette is ⌘K as the
designs have it, so Overterm writes an unbind for Ghostty’s and moves
clearing the screen to ⇧⌘K. Both are rebindable — see
Keyboard shortcuts and
keybindings.json.