Documentation
Terminal UI
The full product in a terminal: same engine, same brain, same sessions as the app. Ships as a single binary; starts (and health-checks) the daemon itself.
$ lectern tui # resolves the binary from PATH, next to the CLI, or the repocopy
$ lectern tui --path ~/code/app --backend mock # target a workspace / free test-drivecopy
Live demo · the TUI in 20 seconds
One registry, three ways in
Every feature is a slash command; most also have a ^X leader chord; pickers are fuzzy dialogs. /help is generated from the registry itself, so it can never drift.
| Command | Chord | What |
|---|---|---|
| /sessions | ^X s | Fuzzy session switcher — ★ pinned first, ● running, ^R renames inline |
| /models | ^X m (or ^P) | Fuzzy model picker across every provider |
| /new · /rename · /pin · /export | ^X n · — · ^X p · — | Session management (export writes md/json into the workspace) |
| /plan /apply /conduct /one-shot | — · ^X a · ^X c · ^X o | Sticky run modes — the status-bar pill tints per mode |
| /diffs | ^X d | Full-screen tinted diff viewer for the session's edits |
| /clean | ^X v | Hide machinery lines (parity with the app's Clean mode) |
| /theme | ^X t | Built-in palette + the desktop theme-manager's JSON files |
| /brain /skills /usage /mcp-servers | ^X b · ^X k · ^X u · — | Read-only panels with real store data |
| /quit | ^X q | Exit (Esc cancels a running turn) |
Details that make it feel right
- Single-focus input — no tab-cycling; the mouse works (wheel scroll, click rows).
- Preferences persist in ~/.lectern/tui.json (model, theme, clean) — the TUI's only file there.
- A stale daemon that answers ping but not sessions is rejected with a clear rebuild message.
- Need a shell? The TUI lives in your terminal — use your multiplexer; the embedded terminal is the desktop's job.
Headless scripting
$ lectern tui --once "add error handling to fetchUser" --backend mockcopy
--once runs a single session and prints the event stream — the same interface our CI drive-suite uses (17 scripted steps, captures committed to the repo).