Panel and keys
Where it sits
Section titled “Where it sits”<leader>v opens and closes the review; <leader>r 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.
| Placement | What it is for |
|---|---|
| Right | A pane down the right of the window, with the conversation still beside it |
| Full | The 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.
Settings
Section titled “Settings”Three, all optional, given where the plugin is listed:
{ "plugin": [ ["@opencode-cockpit/review", { "variant": "full", "source": "branch" }] ]}variant | right (default) or full — where it opens |
source | worktree (default), branch, or session — what it opens on |
keybinds | overrides for the two global keys, e.g. { "cockpit.review.open": "<leader>d" } |
Through the bundle, the same options go under a review key:
{ "plugin": [["opencode-cockpit", { "review": { "variant": "full" } }]]}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.
| Key | Does |
|---|---|
| <leader>v | Open or close the review |
| <leader>r | Move it: right pane, full screen |
| j k ↑ ↓ | Move |
| tab | Switch pane |
| return l → | Open a file, or fold a folder |
| h ← | Back to the file list |
| d u pgdn pgup | Scroll the diff |
| v | Start a selection, or cancel it |
| c n | Comment here, or reply to the thread here |
| f | Comment on the whole file |
| x | Remove the thread you are on |
| space m | Mark read, and go to the next unread |
| s | Submit the review |
| b | Next source: uncommitted, or what this branch changes |
| g | Reload the diff |
| w | Right pane or full screen |
| p | Show what the panel is costing |
| q esc | Close |
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.
The footer
Section titled “The footer”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:
- Trouble. Something threw. It is also written to
trouble.logbeside the review’s threads, with the stack and what was on screen at the time. - The numbers, if you pressed p — how long a frame costs, how many were dropped, how often the row cache hit.
- 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 thread on screen
Section titled “A thread on screen”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.