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 --continueorpraxis --resumeon the next launch to bring it back.Ctrl+Alt+Wexports the transcript to markdown. Ctrl+Ccancels the in-flight promptCtrl+Etoggles the tools panel;Ctrl+Alt+Eexpands it fullyShift+Enter(orAlt+Enter) inserts a newline in the prompt; bareEntersends. 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/Delto discard, Esc to dismiss - Terminal (
Ctrl+Yto toggle) — full PTY terminal emulation with scrollback (see Terminal) - Recon (
rwith an agent selected in the detail pane) — view reconnaissance results directly in the terminal - Reset (
Ctrl+Rwith 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.
| Key | Action |
|---|---|
Tab / 1 2 3 | Switch tab (Config / Tools / Sessions) |
↑ / ↓ | Move among visible tree rows |
← / → | Collapse / expand or focus detail |
Space / Enter | Toggle expand on branches; open leaf detail |
PgUp / PgDn | Scroll detail pane |
/ | Focus filter bar |
r | Static recon refresh |
Ctrl+U | Semantic recon (Discover) |
Ctrl+E | Edit selected Config file in $EDITOR (Config tab only) |
Esc | Unfocus filter → clear filter → leave detail → close |
Ctrl+Q | Close 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
| Key | Action |
|---|---|
Enter / → | Focus detail pane (then ↑/↓ scrolls detail) |
Esc / ← | Unfocus detail / clear filter (Esc ladder) |
/ | Focus filter box (regex, falls back to substring) |
Ctrl+Enter | Server-side traffic search (while filter focused) |
n | Cycle node filter |
a | Cycle agent filter |
p | Pause / resume the live stream |
t | Toggle follow-tail |
r | Re-request the initial page from the service |
Ctrl+X | Clear ALL traffic (with confirmation) |
b | Cycle body render mode: pretty → raw → hex |
y | Copy selected URL |
m | Jump 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
| Key | Action |
|---|---|
→ | Focus rule detail pane (then ↑/↓ scrolls detail) |
← / Esc | Unfocus detail |
Ctrl+N | Create a new rule |
Ctrl+E | Edit the selected rule |
Ctrl+D | Delete the selected rule (with confirmation) |
Ctrl+U | Duplicate selected rule |
Space | Toggle enabled / disabled |
Enter | Jump to the Matches tab filtered to this rule |
r | Refresh 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.
| Key | Action |
|---|---|
Enter / → | Focus match detail pane |
f | Cycle rule filter |
n / p | Jump to next / previous highlighted regex-match occurrence |
Esc / ← | Unfocus detail / clear filters |
r | Refresh |
/ | Filter matches |
y | Copy URL |
b | Cycle body mode |
Ctrl+N | Create 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+Rruns the query (Ctrl+Enteris kept as an alias); the spinner in the hint line indicates in-flight executionCtrl+Eopens the current query in$VISUAL/$EDITOR(falls back tovi/notepad). Save and quit cleanly to replace the in-app editor buffer with the saved textTabopens a context-aware autocomplete popup (tables at start of query, operators after|, columns insidewhere/project/sort, functions & keywords inline).↑/↓navigate,Enteraccepts,Escdismisses?toggles a schema sidebar listing every available table with its columns and descriptionsEscfrom the editor moves focus to the results;ifrom 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:
| Key | Action |
|---|---|
↑ ↓ PgUp PgDn g G | Row navigation |
Enter | Expand the selected row into a key/value detail pane (JSON fields pretty-printed) |
/ | Open a row filter (substring match across all cells) |
s | Cycle the sort column |
S | Toggle sort direction |
r | Re-run the last query |
Esc | Close 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+Non the Library tab) - Create new chains via the chain builder (
Ctrl+Alt+Non the Library tab, or click^!n new chainin the hint bar) - Edit an existing op or chain (
Ctrl+Ewith 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.positionsso 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 labeledr(retry / port 0) andx(exit / port 1). - Selection — single-click a block or connector segment to select it.
Enteror 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+Enterinserts 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 togglesany/on success/on failure(also shown as ✓/✗ glyphs on the edge);ccycles condition when a connection is selected. - Header strip —
Name,Category,Timeout, andDescriptionat 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):oop,ttransform,ggeneric prompt,mmemory,ploop,ktool,ypayload. - Keyboard selection —
Tab/Shift+Tabcycle selection through blocks then connections (no mouse required).Enteropens properties for the selection.cselects the first connection if needed and cycles its condition (any/ on success / on failure). - Layout —
Layoutbutton orlre-runs left-to-right auto-layout from triggers. - Save / Cancel — top-right buttons;
Ctrl+Ssaves;Esccloses 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).
| Key | Action |
|---|---|
Enter | Toggle enabled/disabled for the selected trigger |
Ctrl+N | New trigger |
Ctrl+E | Edit selected trigger |
Ctrl+D | Delete 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.
| Key | Action |
|---|---|
Ctrl+H | Open / close the assistant |
Enter | Send the current question |
Ctrl+T | Toggle inclusion of screen context (when available) |
Ctrl+C | Stop a streaming response; close the overlay when idle |
Ctrl+L | Clear the conversation |
Esc | Close the assistant (cancels any in-flight response) |
Up / Down / PageUp / PageDown | Scroll the conversation |
| Mouse wheel | Scroll 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 helpopens the Help Assistant, and^q quitexits
Mouse interactions work alongside keyboard controls in all windows and popups.
Global Keybindings
| Key | Action |
|---|---|
Ctrl+O | Orchestrator window |
Ctrl+L | Nodes window |
Ctrl+P | Operations window |
Ctrl+T | Intercept window |
Ctrl+G | Log Query window |
Ctrl+S | Settings window |
Ctrl+H | Help Assistant overlay (any window) |
Ctrl+Y | Toggle terminal mode (Nodes) |
Ctrl+Q | Quit |
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:
| Layer | Keys | Use |
|---|---|---|
| Navigate / view | bare keys, arrows, Tab, /, Enter, Esc | Move around lists, filter, soft toggles (pause, body mode, expand) |
| Change data / app | always 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 viaCtrl+Enterwhile 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). rrefreshes/reloads live data;Ctrl+Rruns/executes (Operations Library, Log Query).- Log Query exception:
i/Escmove between editor and results (editor-first window).