Skip to content

Keybindings

Korvid shows only the keys that act on the current view. Press ? for the complete effective set, including remaps; press ~ to expand the top-bar legend.

Korvid key contexts. GLOBAL keys : ? 0 lead to TABLE. TABLE keys Enter d g / T inspect resources, filter tables, and open the bounded timeline. PODS keys l L Ctrl-T open logs, merged logs, and file transfer; PODS leads to LOGS. LOGS keys / f w p search, toggle JSON/raw format, wrap, and show previous logs. TABLE branches to guarded WRITE. WRITE keys r S Ctrl-D restart, scale, and delete; each requires a fresh approval keystroke.

Move and inspect

Key What it does
: Open the command bar
:pulse / :problems Inspect current problems, recent warnings, and coverage
:outcomes / :deployment-outcomes Open the latest bounded Deployment scale/restart outcome
Ctrl-P Search app actions and built-in commands by intent
:keys / :keybindings Edit, review, and save app keybindings
:slots / :ns-slots Preview and repack the 1–9 namespace shortcuts
? Show the effective keys for every view
~ Expand or collapse the top-bar legend
/ Filter a table or search the log pane
Enter / Esc Drill in / return one level
0 Toggle all namespaces
1–9 Jump to a namespace shortcut: pinned favorites first, then the namespaces you visit, in first-visit order
d Describe the selected resource
g Open operational relationships
T Open the bounded session timeline
l / L Open selected or merged pod logs
Ctrl-T Transfer files to or from the selected pod
Ctrl-W v/w/q Split, focus, or close a workspace pane
Ctrl-A / Ctrl-X Toggle the Agent / stop its current turn
q Quit

Ctrl-P opens the Action Palette: type what you want to do — scale, logs, context — and korvid ranks the app actions and the built-in : commands against it. Canonical spellings match exactly too: an action's own id (delete_resource, logs_multi), a command's text (pulse, ai), and its : form (:pulse, :agent). Each row reads category · what it does · how to run it — the key that action currently answers to, remaps included, or the command's canonical : spelling. Resource views (:pods, :deploy) are not rows: they come from the live alias table, so : stays the way to open one. :q is not a row either — the bound Quit action is its single entry. The 1-9 namespace shortcuts are not rows either — they take a number the palette has no generic way to invoke, so ? documents them and :ns/the numeric keys stay the route. An action that does not apply to the current view — or that applies but would currently do nothing, because nothing is selected, the row carries no hint, no search is running, the view does not render the column a sort key sorts by, the log pane is already full, or this session was started without the capability it needs — stays searchable and shows the reason instead of vanishing, so the palette also answers "why did that key do nothing?". A command row answers for what its own handler needs: :ai needs the model catalog its setup wizard is driven from, and :model needs a connected agent to report, so a session can offer one and grey out the other. A row is about the bare command it runs, so a greyed-out :ai row does not stop you typing :ai off. korvid looks for kubectl once, when the session starts, and the shell and port-forward rows report that one answer — install kubectl while korvid is running and it is picked up at the next start. A reason is written to fit a row on a narrow terminal, so where the key's own toast names a resource (the node a running drain is evicting, the node cordon is waiting on, the pod that would not fit the log pane) the row states the fact and the toast keeps the name. Such a row is greyed but not skipped: the arrow, Page and Home/End keys put the cursor on it like any other row so the reason can be read, and clicking it does the same. It still cannot run — Enter and a click on it dispatch nothing and leave the palette open. Esc closes the palette, and so does Ctrl-P, which the modal binds as a close key of its own. Selecting a write action opens the same approval dialog the key opens, which still needs its own fresh keystroke.

Act in context

Context Keys
Pods l logs · s shell · Shift-F port-forward
Deployments / StatefulSets r restart · S scale
DaemonSets r restart
ReplicaSets S scale
Nodes c cordon · u uncordon · Shift-D drain
Helm releases i install · u upgrade · h revisions
Helm revisions r rollback

Only Deployment scale and restart start a convergence tracker. After user approval, a successful write first records that the API accepted the request; :outcomes shows the separately observed controller result. In that modal, Enter, e, d, and l act on an evidence Pod only when its UID still matches; r reopens the latest snapshot, x stops observation, and Esc closes without stopping it.

Remap an app action

Type :keys (or :keybindings), or select Edit keybindings in the Action Palette. Search for an action and select it with Tab/Enter. The editor shows its scope, default keys, current keys, and proposed keys.

Editor key What it does
F1 / F2 Focus action search / replacement-key input
Enter in the key input Stage the typed key name, such as ctrl+g or shift+g
F3 Stage a deterministic suggestion, when a complete valid proposal is available
F4 Select a conflicting owner to continue resolving the chain
F5 Swap with the conflicting owner, only if the complete result is valid
F6 Undo the last staged change
F7 / F8 Stage a reset of the selected action / all keybindings
F9 Review every pending change
F10 Apply the reviewed proposal explicitly
Esc Cancel without saving or changing the live keymap

The editor keeps one session open while you resolve conflicts. Move each conflicting owner to another key, use a valid swap, or undo and try a different route. Two-way swaps and longer rotations are supported; unresolved conflicts block Apply. A suggestion is not offered if other pending conflicts would still leave the complete map invalid. Editing after Review invalidates it: review again before Apply. Enter stages a key; it never applies the map.

Only a successful save activates the new keymap. Dispatch, Help (?), the top-bar legend, and the Action Palette then use the same effective keys, including after restart. If saving fails, the editor remains open and the previous live bindings and saved configuration remain unchanged.

Resetting an action removes its override. If its default is occupied by another pending override, resolve that conflict before applying. Reset All is also staged and requires Review followed by Apply. It removes only the keybindings section: unrelated settings, favorite_namespaces, and any separately saved namespace-assignment state are preserved. Namespace slots 1–9 remain reserved; the all-namespaces action on 0 remains remappable. Reset All also stages removal of saved overrides rejected at startup, even when no custom bindings are active. That cleanup appears in the preview, can be undone or cancelled, and is saved only after Review and Apply. A malformed section such as keybindings: true also warns, uses defaults, and can be removed through this staged reset.

You can also edit the keybindings section of the shared configuration directly:

keybindings:
  delete_resource: ctrl+k
  sort_by_age: z

Startup and the editor use the same context-aware validation. Actions in mutually exclusive resource views can share a key, but global or pane actions that can run together cannot. Equivalent spellings such as shift+g and G refer to the same physical key. Unknown, invalid, duplicate, or shadowing overrides warn and are skipped at startup; an invalid editor proposal cannot be applied. Unicode key names must match the terminal's emitted spelling: use a, for example, rather than the unsupported latin_small_letter_a. For uppercase letters combined with Ctrl, Alt, or another modifier, use an explicit Shift modifier and lowercase base: alt+shift+a, not alt+A. Ambiguous spellings are rejected rather than guessed across terminal protocols. Unmodified A and the existing ASCII shift+a/shift+A aliases remain supported. For Shift-only text, use the emitted character or its key name: ? or question_mark, not shift+slash. Shift-only punctuation, digit, space, and non-ASCII text spellings are rejected instead of guessing a keyboard layout. Shift with navigation or function keys remains supported. Combinations involving Ctrl/Alt or other modifiers retain their distinct terminal identities and may require enhanced keyboard-protocol support.

Fixed navigation, pane-chord, and namespace keys are reserved. The approval dialogs' actions and confirm keys are not remappable: every write still requires a fixed fresh keystroke. Priority overrides cannot intercept approval controls, including Ctrl-N to decline, editor controls, or any other modal's fixed keys. Remapping Quit away from q does not free it for a priority action: it still closes Help and Describe. Global priority actions also cannot take printable keys, including Shift-only letters, punctuation, spaces, and Unicode: those keys must remain available to text inputs and typed approval gates. Use an available Ctrl/Alt combination or function key instead. This restriction does not apply to normal actions or the main-screen-only command-bar shortcut. The editor cannot open over a dialog or during a context switch. The palette's own key moves under open_action_palette, but its fixed Esc and Ctrl-P keys close the palette whichever key opened it; another priority action cannot take them. Action names come from the app itself. An unrecognised name is skipped at startup with a warning that lists every valid action name. Press ? for the complete effective set.