KubeRich
Browse documentation

BROWSE

Commands, filtering and navigation

The workspace has live pod and namespace views. Selected pods support inspection, logs and embedded shells; other resource tables are described in standard resources.

Commands

Press : outside an input, type a command and press Enter. The same parser and read-only policy handle --command / -c at launch. Arguments preserve casing.

Command Behavior
po, pod, pods Focus the available pod view
po NAMESPACE, po * Select a pod namespace or all namespaces
ctx, context, contexts Open the local context workspace table
ctx NAME Connect directly to that context
ns, namespace, namespaces Open the live namespace workspace table
ns NAME, ns * Select that namespace or all namespaces
shell, exec Open the selected pod’s container picker; s/x launches its shell
attach Choose a running container; a connects to its existing main process
upload, download Choose a container; u/d opens explicit copy review
status, retry Open connection details / reconnect
resource NAME[.GROUP][/VERSION] [NAMESPACE or *] Browse a discovered API family or an explicit served version
refresh Renew discovery and the selected resource watch on the current client
columns, columns cN ..., columns default, columns none Inspect/configure transient generic server columns
back, forward Restore the previous / next navigation state
help, ? Show actual keyboard actions and limits
quit, q, exit Exit and restore the terminal

For example, uv run kuberich --context YOUR_CONTEXT --command 'po YOUR_NAMESPACE' connects once and starts the requested pod scope without first watching another namespace. --command 'ctx NAME' selects that context before authentication. Unsupported commands report unavailable; they never display a substitute table. Inspection commands remain usable in read-only mode. Embedded shells are available in write mode; startup --command shell/exec is refused because a deliberately selected pod is required. Attach and copies also require interactive selection; see attach and file transfer. Guarded mutations have their own review workflows; plugins remain a later task. The shared policy rejects effectful commands in read-only mode.

Completion

The dedicated : bar shows the selected prefix match as an inline suggested suffix in muted italic styling. Up/Down cycle up to eight local candidates; there is no dropdown. The suffix is display text until accepted. Tab accepts it for editing; Enter after Up/Down accepts and submits the selected candidate once. Enter without arrow selection submits the typed text, so bare :ns opens the namespace table and :ctx opens the context picker. Editing the query, leaving the input or changing scope discards prior arrow selection. Matching ignores case; the accepted context name retains its original case. At 40×12 the native one-line input scrolls horizontally with its cursor. Inputs/candidates are bounded to 256 characters; only the suffix that fits in the remaining input width is visible. Empty input retains its placeholder. Suggestions never resize the bar or cover resources. Right moves the editing cursor rather than accepting a completion.

Candidates come from local command aliases, the current client's discovered resource catalogue, the loaded kubeconfig catalogue and the active session's namespace cache. Typing, selecting and accepting suggestions does not authenticate or make API requests. A context switch immediately drops the old namespace candidates. When namespace listing is denied, only the known current namespace and * are suggested; enter a permitted namespace directly. Disconnected/connecting sessions have no namespace suggestions.

Tab moves focus when no candidate applies. Shift+Tab always moves focus backward. Moving the input cursor away from its end hides suggestions; returning to the end restores applicable candidates. Escape leaves the input and clears command text; filter text remains until Escape in the table. Help restores the prior focus.

Filters

Press / outside an input. Plain text performs case-insensitive literal matching across namespace, name, readiness, status and restart count. re:PATTERN selects case-insensitive Unicode regex matching with the regex package's VERSION1 dialect. For example, api finds matching names and re:api|worker matches either. Age is excluded because it changes continuously. These are local filters over the current snapshot, rather than server-side label/field selectors.

Filtering updates while typing and continues through live pod changes. Enter returns to the table; Escape there clears the filter. Status reports visible/total counts. A valid filter with no matches shows No pods match this filter. Invalid or excessive regex patterns show a clear error and all current pods; they never masquerade as a successfully empty scope.

Queries are limited to 256 characters. Matching runs off the UI loop, with a total 50 ms regex budget per snapshot; a timeout discards partial results and reports the error. The engine releases the GIL during matching and supports an actual match timeout. Cancellation awaits the owned worker. Scope/query identity guards reject late results; rapid input coalesces into the latest render request. Fuzzy/inverse matching, label/field selectors and saved filter history are planned. Maximum-workload latency and memory still need sustained performance validation. These bounds alone do not establish a maximum supported workload.

Alt+Left / Alt+Right, or :back / :forward, restore context, namespace, filter, sort direction/column, selected pod UID and viewport. History retains at most 32 states in each direction for this invocation. New manual navigation clears the forward stack. Missing/deleted UIDs use the table's deterministic row fallback. History can return from a failed context; authentication/read failures remain visible. Restoring a context owns a new connection and cancels the previous watch. Only the matching revision can restore a saved viewport. History is not persisted, and namespace favorites/last-command recall are planned.