TUI

Running praxis with no arguments launches the interactive terminal UI:

$ praxis

This page covers the interactive UI. For scripting, one-shot commands, and global options, see CLI.

Drag across text anywhere in the TUI to highlight it. Press Ctrl+C to copy the highlighted text; click elsewhere or press any other key to clear the highlight. In split views, highlighting stays within the pane where the drag started. Draggable controls such as pane dividers and chain-canvas elements retain their normal behavior.

The terminal UI provides six main windows, switched with keyboard shortcuts:

Orchestrator (Ctrl+O)

LLM-powered conversation interface for coordinating operations across the Praxis network. Features:

  • Real-time streaming responses with tool execution display
  • Plan tracking with step visualization
  • Token usage statistics
  • Command history and conversation scrolling
  • Single orchestrator session per TUI run — the conversation lifetime equals the TUI process lifetime. Use praxis --continue or praxis --resume on the next launch to bring it back. Ctrl+Alt+W exports the transcript to markdown.
  • Ctrl+C cancels the in-flight prompt
  • Ctrl+E toggles the tools panel; Ctrl+Alt+E expands it fully
  • Shift+Enter (or Alt+Enter) inserts a newline in the prompt; bare Enter sends. Multi-line drafts grow the input box; / move between lines first, then through command history.

Nodes (Ctrl+L)

Node and agent management with integrated session chat and terminal access:

  • Node list with status indicators (active/warning/inactive), OS details, and agent counts
  • Agent selection and concurrent ACP session management
  • Session Chat — direct conversation with agents, with YOLO mode and working directory selection
  • Active Sessions overlay (Ctrl+W) — see every live session across nodes and connectors; Enter to resume, Ctrl+D / Del to discard, Esc to dismiss
  • Terminal (Ctrl+Y to toggle) — full PTY terminal emulation with scrollback (see Terminal)
  • Recon (r with an agent selected in the detail pane) — view reconnaissance results directly in the terminal
  • Reset (Ctrl+R with a node selected) — cancel work, close sessions, and re-register the node after confirmation

Inside a chat view, Esc or Ctrl+W pauses the session (leaves it running on the node; resume from the Active Sessions overlay). Ctrl+C cancels an in-flight prompt, or closes the session if the agent is idle. Shift+Enter (or Alt+Enter) inserts a newline; bare Enter sends. Multi-line drafts grow the input box; / move between lines first, then through history. The status bar shows N sessions whenever any concurrent sessions are live. On first connect, whenever you open the Nodes window, and after a node reset, the TUI calls session/list on each node to pick up sessions left alive from previous runs or other clients.

Recon Overlay

The recon overlay opens as a full-screen modal from the Nodes detail pane. It is a hierarchical browser (expand/collapse groups, filter bar, detail pane) with three tabs: Config, Tools, and Sessions. See Reconnaissance for the result contents and refresh behavior.

KeyAction
Tab / 1 2 3Switch tab (Config / Tools / Sessions)
/ Move among visible tree rows
/ Collapse / expand or focus detail
Space / EnterToggle expand on branches; open leaf detail
PgUp / PgDnScroll detail pane
/Focus filter bar
rStatic recon refresh
Ctrl+USemantic recon (Discover)
Ctrl+EEdit selected Config file in $EDITOR (Config tab only)
EscUnfocus filter → clear filter → leave detail → close
Ctrl+QClose overlay

With the mouse, click chevrons to expand or collapse, click rows to select, click a selected branch again to toggle it, drag the pane split, and click the filter bar to type.

When opened, the TUI first checks the service cache for existing recon data. If none is cached, it sends an ACP _praxis/recon request to the node and polls request_recon roughly every 1.5 seconds for up to ~90 seconds. Cached recon data appears instantly on re-open.

Press Ctrl+E on a Config leaf to open the selected file in $VISUAL/$EDITOR; on a clean exit with changes, the new contents are written back to the node and the detail pane refreshes.

Intercept (Ctrl+T)

Live traffic interception with three tabs (Tab / Shift+Tab to switch). Enable/disable interception from the Nodes window with i (not from this window). The equivalent non-interactive commands are documented under CLI — Traffic Interception.

  • Traffic — incoming traffic streams from every node into a ring buffer (2,000-entry cap; bodies load lazily on selection; 64 MiB body cache). HTTP entries show individually; WebSocket frames group by flow id and HTTP/2 by flow+stream so concurrent sockets don't flood the list.
  • Rules — create, edit, delete, and toggle intercept rules (regex patterns with direction and scope). List on the left; selected-rule detail on the right (prompt, scope, match count). Rules can carry an optional LLM summarisation prompt.
  • Matches — matched-traffic review with AI summaries (when a rule has a summarisation prompt).

Traffic tab

KeyAction
Enter / Focus detail pane (then / scrolls detail)
Esc / Unfocus detail / clear filter (Esc ladder)
/Focus filter box (regex, falls back to substring)
Ctrl+EnterServer-side traffic search (while filter focused)
nCycle node filter
aCycle agent filter
pPause / resume the live stream
tToggle follow-tail
rRe-request the initial page from the service
Ctrl+XClear ALL traffic (with confirmation)
bCycle body render mode: pretty → raw → hex
yCopy selected URL
mJump to Matches for the selected traffic row

Request and response bodies arrive via a second fetch on selection to keep the broadcast payload small — large bodies load within a few hundred milliseconds after you navigate to an entry.

Rules tab

KeyAction
Focus rule detail pane (then / scrolls detail)
/ EscUnfocus detail
Ctrl+NCreate a new rule
Ctrl+EEdit the selected rule
Ctrl+DDelete the selected rule (with confirmation)
Ctrl+UDuplicate selected rule
SpaceToggle enabled / disabled
EnterJump to the Matches tab filtered to this rule
rRefresh the rules list
/Filter rules by name/pattern

The rule form (open via Ctrl+N / Ctrl+E) fields: Name, Regex (must compile — invalid patterns are rejected), Direction (send / receive / both), Scope (all / node / agent), and an optional LLM summary prompt. Tab moves between fields, Space / / cycles select-style fields, Ctrl+S saves, Esc cancels.

Matches tab

The detail pane highlights every place the rule's regex actually hit in the selected match — URL, host, method, headers, and request/response bodies (rendered per the current body mode). Every occurrence is boxed; the current one is a bright green block with white text, the rest are a dimmer green box. n / p jump between occurrences, auto-scrolling the pane, and spill over to the next / previous match row once the current one is exhausted.

KeyAction
Enter / Focus match detail pane
fCycle rule filter
n / pJump to next / previous highlighted regex-match occurrence
Esc / Unfocus detail / clear filters
rRefresh
/Filter matches
yCopy URL
bCycle body mode
Ctrl+NCreate rule from match

Log Query (Ctrl+G)

KQL-style query interface over captured logs (intercepted traffic, event logs, recon results, operations history, and more — 12 virtual tables in total). See Log Query for the full query reference.

  • Multi-line editor with basic KQL keyword highlighting
  • Ctrl+R runs the query (Ctrl+Enter is kept as an alias); the spinner in the hint line indicates in-flight execution
  • Ctrl+E opens the current query in $VISUAL / $EDITOR (falls back to vi / notepad). Save and quit cleanly to replace the in-app editor buffer with the saved text
  • Tab opens a context-aware autocomplete popup (tables at start of query, operators after |, columns inside where / project / sort, functions & keywords inline). / navigate, Enter accepts, Esc dismisses
  • ? toggles a schema sidebar listing every available table with its columns and descriptions
  • Esc from the editor moves focus to the results; i from the results moves focus back to the editor (Log Query is the exception to the list/detail focus model — it is editor-first)

Results pane:

KeyAction
PgUp PgDn g GRow navigation
EnterExpand the selected row into a key/value detail pane (JSON fields pretty-printed)
/Open a row filter (substring match across all cells)
sCycle the sort column
SToggle sort direction
rRe-run the last query
EscClose expanded row / clear filter / return to editor

Response bodies in TrafficLogs and JSON columns like ToolkitActionsLog.details_json auto-pretty-print in the detail pane.

Operations (Ctrl+P)

Operation and chain management with three tabs (Tab / Shift+Tab to switch):

  • Executions — live tracking of running/queued/completed operations and chains with duration timers
  • Library — browse operation and chain definitions with search filtering and detail view
  • Triggers — automated chain firing rules

Common actions:

  • Create new operations inline (Ctrl+N on the Library tab)
  • Create new chains via the chain builder (Ctrl+Alt+N on the Library tab, or click ^!n new chain in the hint bar)
  • Edit an existing op or chain (Ctrl+E with the row selected — opens the op form for ops, the chain builder for chains)
  • Run operations and chains with node/agent selection and YOLO mode (Ctrl+R)
  • Delete the selected op or chain (Ctrl+D)
  • In Executions, cancel the selected running operation or chain (Ctrl+C) or clear completed history (Ctrl+X, with confirmation)
  • Create, edit, enable/disable and delete chain triggers

Library tab — chain builder

The chain builder is a full-screen TUI canvas with draggable element blocks and orthogonal line connectors between ports. It is mouse-first but fully usable from the keyboard for core authoring actions.

  • Canvas — drag a block by its body to move it (drag starts only after a small movement threshold so a plain click does not nudge the block); drag empty space to pan; the mouse wheel scrolls vertically. Block positions persist in ChainDefinitionInput.positions so each chain remembers its layout.
  • Ports — every block exposes filled circles on its left (input) and right (output) edges. Ports and connector segments hit-test with a multi-cell tolerance. Click an output port and drag to an input port on another block to create a connection. A rubber-band line follows the cursor while you drag. Loop outputs are labeled r (retry / port 0) and x (exit / port 1).
  • Selection — single-click a block or connector segment to select it. Enter or double-click opens the properties modal for that selection.
  • Properties modal — for blocks: click fields to edit inline; prompts and tool params accept multi-line input (Shift+Enter inserts a newline); pickers for operation / model / tool / payload / session group; kind cycler ◂ Kind ▸ only among body kinds (Trigger and Termination stay fixed); memory mode store/retrieve; session group + per-block config (max runtime, YOLO, working dir, require-all-inputs). For connections: condition cycler toggles any / on success / on failure (also shown as ✓/✗ glyphs on the edge); c cycles condition when a connection is selected.
  • Header stripName, Category, Timeout, and Description at the top; click to edit. Incomplete blocks show a ! badge on the canvas; save rejects invalid graphs with a clear error list.
  • Palette[+ OP], [+ TXR], … buttons along the bottom. New blocks place to the right of the current selection (when one exists) and auto-wire into the graph. New chains pre-select the Trigger so the first add wires in automatically. Adding an Operation opens the op picker immediately. Keyboard (canvas only, not while the properties modal is open): o op, t transform, g generic prompt, m memory, p loop, k tool, y payload.
  • Keyboard selectionTab / Shift+Tab cycle selection through blocks then connections (no mouse required). Enter opens properties for the selection. c selects the first connection if needed and cycles its condition (any / on success / on failure).
  • LayoutLayout button or l re-runs left-to-right auto-layout from triggers.
  • Save / Cancel — top-right buttons; Ctrl+S saves; Esc closes the properties modal first, then cancels the form (confirms if there are unsaved changes). A dirty * marker appears in the hint bar while editing.

A newly created chain is seeded with a connected Trigger → Termination pair so the graph is valid out of the box; auto-layout is applied to existing chains that don't yet have stored positions.

Triggers tab

Triggers fire a chain on a schedule, when an intercept rule matches, or when a new node connects. Each trigger picks a target chain, a trigger type, and a target spec (nodes + agents, with an optional OS substring filter and, for event triggers, an "include triggering node" toggle).

KeyAction
EnterToggle enabled/disabled for the selected trigger
Ctrl+NNew trigger
Ctrl+EEdit selected trigger
Ctrl+DDelete selected trigger

In the trigger form, ↑/↓ or Tab/Shift+Tab move between fields, ←/→ cycle picker options, Space/Enter toggle checkboxes and list items, Ctrl+S saves, and Esc cancels. The form is fully mouse-driven: click a row to focus/toggle it, click Ctrl+S/Esc in the hint bar to save or cancel.

Settings (Ctrl+S)

Configuration management:

  • LLM — model definitions, provider selection, API keys, feature assignment (orchestrator, documentation helper, semantic ops, semantic parser, traffic parser), and the Traffic Parser body limit
  • Service — MCP server toggle, MCP port, Claude Bridge settings (CCRv1/CCRv2 enable and port configuration), logging, log query row limits, prompt timeout
  • About — connection info

Help Assistant (Ctrl+H)

Press Ctrl+H from any window to open the floating Help Assistant overlay — a documentation-aware chat that answers questions about Praxis without leaving the TUI. Press Ctrl+H again or Esc to dismiss.

KeyAction
Ctrl+HOpen / close the assistant
EnterSend the current question
Ctrl+TToggle inclusion of screen context (when available)
Ctrl+CStop a streaming response; close the overlay when idle
Ctrl+LClear the conversation
EscClose the assistant (cancels any in-flight response)
Up / Down / PageUp / PageDownScroll the conversation
Mouse wheelScroll the conversation

Mouse Support

The TUI supports mouse interactions across all windows:

  • Click — select items in lists, tabs, and interactive elements
  • Double-click — activate items (e.g. open an operation, select a node)
  • Drag — scroll through lists and content areas
  • Scroll wheel — scroll through lists, chat history, and scrollable content
  • Status bar — every hint in the bottom bar is a button: the six window names switch windows, ^h help opens the Help Assistant, and ^q quit exits

Mouse interactions work alongside keyboard controls in all windows and popups.

Global Keybindings

KeyAction
Ctrl+OOrchestrator window
Ctrl+LNodes window
Ctrl+POperations window
Ctrl+TIntercept window
Ctrl+GLog Query window
Ctrl+SSettings window
Ctrl+HHelp Assistant overlay (any window)
Ctrl+YToggle terminal mode (Nodes)
Ctrl+QQuit

Status bar short labels: orchestrator · nodes · ops · intercept · logs · settings · help · quit.

Ctrl+W is window-scoped: in Nodes it toggles the Active Sessions overlay (or pauses the current chat session).

Keybinding grammar

The TUI uses a consistent two-layer grammar:

LayerKeysUse
Navigate / viewbare keys, arrows, Tab, /, Enter, EscMove around lists, filter, soft toggles (pause, body mode, expand)
Change data / appalways Ctrl+Create (^n), edit (^e), delete (^d), run (^r), save (^s), clear-all (^x), windows, quit

Further conventions:

  • / opens a filter on list panes (local narrowing). Intercept Traffic also supports server search via Ctrl+Enter while the filter is focused.
  • Esc ladder: leave filter typing → clear filter → unfocus detail → close overlay.
  • List + detail: Enter / focuses detail; Esc / returns to the list (does not toggle).
  • r refreshes/reloads live data; Ctrl+R runs/executes (Operations Library, Log Query).
  • Log Query exception: i / Esc move between editor and results (editor-first window).