TUI · Rust · k9s-style

A terminal god-view of every coding agent on your network

recondo-tui opens to a live realtime lens in under 500 ms. Five metric cards on top, a 50-row virtualized traffic table underneath, vim navigation, command palette, pinned tabs, and cross-lens selection. It's a GraphQL client over the same data the dashboard reads — no separate ingestion, no extra storage.

Install

Option 1 — from source (current v1 path)

git clone github.com/recondodev/recondo
cd recondo
cargo run -p recondo-tui

First-run compile is 30–60 s. Subsequent runs are instant. Requires Rust 1.80+ (rustup).

Option 2 — from crates.io (once v1 ships)

cargo install recondo-tui
recondo-tui

# Upgrade later
cargo install --force recondo-tui

Option 3 — prebuilt binaries

macOS and Linux binaries are coming so you won't need a Rust toolchain. Track progress on the releases page.

Configuration

Environment variables

Variable Default Description
RECONDO_API_URL http://localhost:4000/graphql GraphQL endpoint the TUI polls for metrics + session data
RECONDO_API_KEY — (dev-mode bypass) wrt_… bearer key for production / shared deployments

CLI flags (override env vars)

recondo-tui --api-url http://staging.example.com:4000/graphql
recondo-tui --api-key wrt_abc123def456
recondo-tui --api-url http://staging.example.com:4000/graphql \
            --api-key wrt_abc123def456

Authentication models

The TUI inherits the same auth model as the rest of Recondo. When the API runs with NODE_ENV=development, no Authorization header is needed and the API synthesizes an admin ApiKeyInfo with cross-project access — same posture as the dashboard.

In production (or any non-dev API), set RECONDO_API_KEY=wrt_… and the TUI sends Authorization: Bearer wrt_… on every request. The API validates the key against the api_keys table and scopes results to the key's project.

Lenses

Open a lens by pressing its key from anywhere. Selection follows you across lenses — highlight a session in s, switch to c, and the cost lens scopes to that session.

d · Realtime monitor Live metrics + 50-row virtualized traffic table. Default landing.
s · Sessions All captured sessions — filter by provider / model / framework / project.
c · Cost & usage Spend grouped by provider / model / framework. 14-day daily sparkline.
a · Agent analytics Active agents, framework mix, top developers, top repositories.
A · Audit trail v1.5 — audit log of API/MCP calls and governance changes. v1 stubs to dashboard.
r · Replay / diff v1.5 — compare two turns side-by-side. v1 stub.

Global keybindings

: Command palette — :realtime · :sessions · :today · :since 2026-04-01
/ Fuzzy search within the current lens (Esc closes)
? Help overlay — full keybinding reference
q Quit (only outside the command palette)
Esc Close overlays / search / palette
Enter Drill in — session → turns → full prompt + response + tool calls
j / k Move cursor down / up (vim)
gg / G Jump to top / bottom
H / L History back / forward across lenses
Tab / ⇧-Tab Cycle focus between panels (multi-panel lenses only)
f Filter — realtime cycles providers; sessions/cost/agents open a modal
o / ⇧-O Sort forward / reverse (lens-dependent sort keys)
g Group-by cycle (cost lens only) — provider → model → framework
* Pin current lens + time window as a tab
1 – 9 Jump to pinned tab N

Vim / k9s muscle memory: j/k for up/down, / for search, : for commands. gg is two key presses, detected as a sequence.

Time windows

Set via the command palette so numeric keys stay reserved for pinned tabs. Time windows persist across lens switches.

:today Midnight to now (local)
:week Last 7 days from now
:month Last 30 days from now
:all No time filter — full history
:since 2026-04-01 From the given date to now
:between 2026-04-01 2026-04-15 Inclusive window

Pinning views & cross-lens selection

Pinned tabs preserve a lens + time window combination. Selection is shared across all lenses through a tiny in-memory registry — pinning and returning doesn't reset your position.

1. Press 's' to open Sessions
2. Navigate with j/k to a session of interest
3. Press '*' to pin this view as tab 1
4. Press 'c' to open Cost — the lens scopes to that session
5. Press '1' to jump back to the pinned sessions view
6. Selection is still on the same session

Troubleshooting

"Cannot reach Recondo API at http://localhost:4000/graphql"

API isn't running or you're pointed at the wrong host. Verify: curl http://localhost:4000/graphql (a 400/200 is fine — connection refused isn't). Point elsewhere with recondo-tui --api-url ….

"Empty realtime feed" / "No sessions"

Data exists somewhere but the TUI doesn't see it. Check captures first: ls ~/.recondo/objects/req/ | head -5. If empty, no agent traffic ever reached the gateway — send a prompt through Claude Code. If non-empty, check the API: psql -h localhost -U recondo -d recondo -c "SELECT COUNT(*) FROM sessions;".

"Auth rejected" / 401

Key format must be wrt_…; header must be exactly Authorization: Bearer wrt_…. If the API is running in production mode, the dev-bypass doesn't apply — every request needs a valid key.

Where to go next

The TUI is one of three surfaces over the same capture stream.