CLIENT / INTERACTIVE SESSION
The native TUI
The Rust workspace contains a Ratatui session foundation for continuous food conversations: streaming transcript, multiline composer, bounded scrollback, cancellation, responsive layout, and terminal restoration.
heyfoodA session is a conversation, not a command carousel
The composer accepts natural-language food requests. Agent events stream into semantic transcript entries labeled You, hey.food, or Notice. Operation state moves through idle, running, cancelling, finishing, and exiting so the UI can distinguish a stopped request from a closed terminal.
> Plan Friday dinner for everyone in my household
> Compare the restaurant options and explain the dietary concerns
> Turn the selected recipe into a grocery proposalKeyboard behavior
| Key | Behavior |
|---|---|
Enter | Submit the current draft when no turn is active. |
Shift+Enter, Alt+Enter, Ctrl+J | Insert a newline. |
PageUp, PageDown | Move through transcript scrollback. |
Ctrl+Home | Jump to the oldest retained transcript. |
End, Ctrl+End | Return to the live tail. |
Ctrl+C | Clear a draft, cancel an active turn, or require a second press to exit while idle. |
Ctrl+D | Exit only when the draft is empty. |
Terminal behavior is part of correctness
- Compact, standard, and wide modes change header and footer density without changing conversation semantics.
- Leaving the live tail records unseen lines instead of forcing the viewport downward.
- Scrollback is bounded by entry count, rendered lines, and memory size, with an explicit truncation notice.
- Untrusted service text is normalized before rendering in the terminal.
- Raw mode, alternate screen, cursor visibility, and line wrapping are restored on normal exit, errors, and external signals.
Voice is a composer input
The target interaction uses Ctrl+Space, F8, or /voice to move through recording, transcription, and transcript review without leaving the session. Accepted voice and typed text enter the same turn path. This integration is under Rust requalification and is not active in v0.4.1.
No hidden slash-command contract
The qualified session currently treats composer input as a food request. Slash commands for profile, household, location, voice, or session management are design work, not a shipped interface. They will be documented only after their grammar and behavior are active.