Skip to content

Panel and keys

<leader>v opens and closes the review; <leader>k cycles where it sits. <leader> is OpenCode’s own prefix, ctrl+x unless you changed it. From the palette it is /changes — /review and /diff belong to OpenCode itself.

PlacementWhat it is for
RightA pane down the right of the window, with the conversation still beside it
FullThe whole window, for when you are reading rather than chatting

w switches between them from inside the panel. At half width the file list stays — it narrows rather than disappearing, because a review you cannot change file in is a diff viewer.

All optional, in the review section of ~/.config/opencode-cockpit/config.json or a project’s .cockpit.json (before 0.9 Review read no file, only its plugin entry):

~/.config/opencode-cockpit/config.json
{ "review": { "variant": "full", "source": "branch" } }
variantright (default) or full — where it opens
sourceworktree (default) or branch — what it opens on
keybindsoverrides for the two global keys, e.g. { "cockpit.review.open": "<leader>z" }
enabledfalse switches Review off; so does features.review: false

A value Review does not know ("variant": "left") is the default and a ! row in the pane naming the ones it does. See Configuration.

The keys inside the panel are not configurable. They are a closed set that only exists while the panel is open, and the panel gives them straight back when it closes.

The panel takes the keyboard while it is open, and gives it straight back when it closes.

KeyDoes
<leader>vOpen or close the review
<leader>kMove it: right pane, full screen
j k ↑ ↓Move
tabSwitch pane
return l →Open a file, or fold a folder
h ←Back to the file list
d u pgdn pgupScroll the diff
shift+→ shift+← · L HScroll the code sideways, to read a long line to its end — or swipe sideways, or shift+wheel
vStart a selection, or cancel it
c nComment here, or reply to the thread here
fComment on the whole file
xRemove the thread you are on
space mMark read, and go to the next unread
zFold
sSubmit the review
bNext source: uncommitted, or what this branch changes
BPick the base the branch is compared with, remembered per branch
oOn a changed image: open both versions in your system viewer
gReload the diff
wRight pane or full screen
pShow what the panel is costing
?Every key the panel takes; esc back
q escClose

ctrl+p works while the review is open: it steps aside for OpenCode’s palette.

Submit is s and source is b, which looks arbitrary until you try it the other way: they were s and S for an afternoon, two meanings on one letter separated only by a shift, and one of them sends your review to the agent.

Two rows, always, because the body’s height is measured from them — a footer that grew would shove the diff about every time something happened. So anything it has to say replaces the keys rather than being added to them, in this order:

  1. Trouble. Something threw. It is also written to trouble.log beside the review’s threads, with the stack and what was on screen at the time.
  2. The numbers, if you pressed p — how long a frame costs, how many were dropped, how often the row cache hit.
  3. The keys, which is what you see the rest of the time.

The numbers are always being kept, whether or not you are looking at them. A debug mode you have to remember to switch on is off during every problem worth seeing.

A comment is a band across the diff rather than a box: a tinted row spanning the full width is the boundary, so it needs no characters to draw one. Inside it, a dim line says where the thread is and how it stands, and an inverted badge says who is speaking — YOU or AGENT. The thread your cursor is on gets one coloured column in its margin and shows what you can do to it.