@postqode/agent-tui
v0.9.0
Published
Lean terminal UI for a PostQode coding agent — a readline + ANSI REPL on top of @postqode/agent's event stream. Streams text, renders tool calls, shows usage, and ships slash commands. Zero heavy UI deps.
Readme
@postqode/agent-tui
A terminal UI for a PostQode coding agent on top of @postqode/agent's event
stream. Two frontends, same agent core and config:
postqode-tui— rich UI built on OpenTUI (React + a native renderer). Requires Bun (OpenTUI's renderer is exposed viabun:ffi).postqode-tui-node— dependency-free readline + ANSI REPL on plain Node (no Bun, no native deps). The portable fallback.
Both reuse @postqode/headless-agent's config loading, so the same env vars /
flags / agent.config.json apply and every provider is available — including
postqode.
Run
OpenTUI (Bun):
bun run tui # from this package
postqode-tui --provider anthropic --model claude-sonnet-4.5
postqode-tui --provider openai --base-url <azure-resource> \
--azure-api-version 2025-04-01-preview --model gpt-5.5Readline fallback (Node):
postqode-tui-node
postqode-tui-node --provider postqode --base-url https://gateway --model anthropic/claude-sonnet-4.5The OpenTUI app lives in src/opentui/ (run from source under
Bun; typecheck with npm run typecheck:opentui). The readline app is the
compiled dist/cli.js.
Each prompt extends the same conversation (the agent is stateful). A spinner covers the wait for the first token; text streams as it arrives; tool calls render inline.
Flags
| Flag | Meaning |
|---|---|
| --provider <name> | anthropic, openai, openrouter, gemini, postqode, … |
| --model <id> | model id (default: provider default) |
| --base-url <url> | OpenAI-compatible / postqode gateway URL |
| --azure-api-version <v> | Azure OpenAI api-version |
| --max-turns <n> / --max-cost <usd> | per-prompt budgets |
| --tools emoji\|minimal\|hidden | tool-call display (default emoji) |
| --reasoning | show the model's reasoning, dimmed |
Slash commands
/help · /model · /cost · /new (fresh conversation) · /clear · /exit
(or Ctrl-D). Ctrl-C aborts an in-flight turn; again while idle exits.
Programmatic
import { runTui } from "@postqode/agent-tui"
import { loadConfig } from "@postqode/headless-agent"
await runTui({ config: loadConfig({ provider: "anthropic" }), toolDisplay: "emoji" })The rendering and command layers (formatEvent, handleCommand, Renderer)
are exported and pure, so they're unit-testable without a TTY.
