Keyboard
At the prompt#
| Key | Action |
|---|---|
| Enter | Send the prompt |
| Tab | Switch between Build and Plan |
| ↑ ↓ | Scroll the conversation a line at a time |
| PgUp PgDn | Scroll a screen at a time |
| Home | Jump to the start of the conversation |
| End | Jump back to the latest output |
The arrow keys scroll rather than recall: there is no prompt history, so ↑ does not bring back what you typed last.
Tab is not slash completion — Enter already does that from the highlighted row. The composer changes colour and the caret follows, so the mode is visible without looking anywhere else.
Completing a slash command#
Typing / opens the list of matching commands, and while that list is showing
the arrow keys belong to it rather than to the conversation.
| Key | Action |
|---|---|
| ↑ ↓ | Move through the matches |
| Enter | Complete the prompt to the selected command |
| Enter again | Run it |
The first Enter completes rather than runs, so /appr +
Enter becomes /approval and waits. Typing a command in full skips
that step — the list has nothing left to complete, so Enter runs it.
Reviewing a diff#
An edit to an existing file pauses on a diff. It shares the screen with the conversation rather than covering it.
| Key | Action |
|---|---|
| Enter | Apply the edit |
| Esc | Reject it |
| ↑ ↓ | Scroll a line at a time |
| PgUp PgDn | Scroll a screen at a time |
| Home | Jump to the top of the diff |
| End | Jump to the bottom |
Approving a command#
A shell command that needs asking opens a dialog of its own, with the command as it will be run and the reason it stopped.
| Key | Action |
|---|---|
| Enter or A | Run it |
| Esc or R | Refuse, and tell the agent so |
Which commands stop here at all is the approval mode, not this dialog.
Answering a question#
The agent can ask you something mid-turn. Questions arrive as a set and are answered one at a time.
| Key | Action |
|---|---|
| Enter | Submit this answer and move to the next |
| Esc | Cancel the whole set |
Pickers#
/models, /approval and /resume open a picker. /provider does not — it
prints the configured providers as text.
| Key | Action |
|---|---|
| ↑ ↓ | Move the selection |
| Enter | Choose it, and save |
| Esc | Close without changing anything |
| CtrlA | Session picker only: widen to every project on this machine |
They differ in one way: the model and session pickers have a search field, so typing narrows the list. The approval picker has a short fixed list and no search, so typing does nothing there.
The session picker starts scoped to the current project, which is what you almost always want. CtrlA is also the only way to reach history migrated from a version before sessions existed, which belongs to no project.
Ctrl+C#
CtrlC means different things depending on what the session is doing, and the order is deliberate:
| Situation | What it does |
|---|---|
| A turn is running | Cancels the turn — including one parked on an approval |
| A window is open, nothing running | Closes the window |
| Nothing running, no window | Exits Woopcode |
Stopping the agent outranks closing the window waiting on it. A dialog open mid-turn is the agent asking a question, so cancelling the turn is what you mean; the dialog comes down on the way out.
With nothing running, one press closes the window and a second exits. Quitting the whole session on the first press would be a surprising amount of destruction for one keystroke.
On a short terminal#
Every dialog prints its keys along the bottom, and that row is the first thing dropped when the window is too short to hold both it and the thing being decided. The keys still work — this page is where they live when the hint is gone.
See also#
Added in woopcode@0.6.0