Rust terminal UI for TaskForceAI.
This is a first-party app client like web, desktop, and mobile. It should not
own product runtime behavior directly; that behavior belongs in
apps/app-server and shared Rust runtime crates.
This app is intentionally a thin client over apps/app-server. It should own
terminal concerns only:
- input mapping
- mouse hit testing
- focus/view state
- rendering
- translating user intent into app-server commands
- applying app-server events to UI state
Runtime concerns belong in apps/app-server, not here:
- auth/token management
- remote API calls
- run streaming
- local persistence
- queued prompts
- sync
- MCP sessions/tool calls
Desktop Rust code is the closest existing implementation source for runtime
adapters. Prefer lifting or sharing the apps/desktop API, storage, sync, MCP,
and observability boundaries into app-server-compatible crates instead of
re-implementing those behaviors inside the TUI.
--app-server <PATH>runs a specific app-server binary.--run-store <PATH>points the app-server at a specific SQLite run store.--prompt <PROMPT>submits one prompt without launching the terminal UI.--output-format <text|json|streaming-json>controls--promptoutput.--mockruns the local SDK mock API server without launching the TUI.- Mouse capture is enabled by default so wheel scrolling and clicks stay inside the TUI instead of exposing shell scrollback. Use your terminal's mouse reporting selection modifier, usually Shift-drag, to select text.
--no-mousedisables mouse capture when you need native terminal selection.--mouseis kept as a compatibility alias for the default behavior.
- Spawn app-server over stdio.
- Call
initialize. - Load
history.list. - Render runs with ratatui.
- Type a prompt and press Enter to submit through app-server.
- Type
/help,/status,/inspect,/usage,/search <query>,/agents,/channel,/schedule,/pending,/prompt-queue,/upgrade,/clear,/reset,/new, or/reset-localand press Enter to execute local app-server commands. - Use arrow keys to select runs.
- Type
/to see slash-command suggestions in the prompt. - Use mouse wheel selection, row clicks, and footer clicks by default. Use your terminal's mouse reporting selection modifier, usually Shift-drag, to select text.
- Use footer actions for submit, cancel, delete, and quit, or use the matching keyboard shortcuts.
- Press Ctrl-X to cancel the selected run through app-server.
- Apply
eventnotifications through the UI reducer. - Press Esc or Ctrl-C to shut down cleanly.
/pendingor/queuelists queued prompts./pending add <prompt>queues a prompt through app-server./pending delete <pending-prompt-id>removes a queued prompt./pending replaysubmits the next replayable prompt; the TUI also asks app-server to replay one queued prompt periodically./prompt-queuelists queued prompts with dispatch steering./prompt-queue add <immediate|after_response> <conversation-id> <prompt>queues a prompt to dispatch now or after the model responds./prompt-queue delete <id>removes one queued prompt./prompt-queue clearclears queued prompts./pending-changeslists local sync change records./pending-changes delete <id>removes one local sync change record./pending-changes clearclears local sync change records./agentslists local background agent sessions./agents create <objective>creates a local background session definition./agents pause|resume|cancel|message|fork <session-id> [...]steers local agent session state./inspector/doctorshows runtime, account, model, extension, and local automation diagnostics./channellists local automation channels./channel add <name> [session-id]creates a local channel./channel push <channel-id> <message>sends a message through a channel and into its target agent session when configured./channel delete <channel-id>removes a channel./schedulelists local scheduled task definitions./schedule add <name> <cadence> <prompt>creates a local schedule record./schedule enable|disable|delete <schedule-id>updates a local schedule./sync poll [last-event-id]polls the app-server realtime sync cursor; the TUI also runs the same poll periodically and pulls updates when reported./voice statusshows terminal voice configuration./voice listenappends a transcript from the command configured inTASKFORCEAI_TUI_VOICE_LISTEN_COMMAND./voice replacereplaces the prompt with a transcript from the configured listen command./voice speak [text]speaks explicit text, or the selected run/output when no text is provided./voice cancelasks the platform speech command to stop./clearclears the current TUI view,/newstarts a fresh prompt view, and/reset-localclears local conversations, messages, pending queues, and metadata through app-server./resetremains a hidden alias for/reset-local.
When a completed run event arrives, the TUI asks app-server to dispatch the next
matching /prompt-queue add after_response ... item for that conversation.
Terminal dictation is intentionally command-backed so users can choose their local speech-to-text tool. For example:
TASKFORCEAI_TUI_VOICE_LISTEN_COMMAND='your-transcriber --single-utterance' make tuiSpeech playback uses the platform command when available: say on macOS,
spd-say on Linux, and Windows SpeechSynthesizer through PowerShell.
New runtime behavior should land in app-server or shared Rust runtime crates before it is exposed through the TUI.
Run the Go-compatible mock API without the terminal UI:
taskforceai --mockThis starts http://localhost:4321/api/v1/developer through app-server and blocks
until Ctrl+C.
Submit a prompt through app-server without launching ratatui:
taskforceai --prompt "summarize the latest run" --output-format text
taskforceai --prompt "summarize the latest run" --output-format streaming-jsonCheck for or apply a published CLI update without launching the TUI:
taskforceai update check
taskforceai update