hey.food

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.

heyfood

A 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 proposal

Keyboard behavior

KeyBehavior
EnterSubmit the current draft when no turn is active.
Shift+Enter, Alt+Enter, Ctrl+JInsert a newline.
PageUp, PageDownMove through transcript scrollback.
Ctrl+HomeJump to the oldest retained transcript.
End, Ctrl+EndReturn to the live tail.
Ctrl+CClear a draft, cancel an active turn, or require a second press to exit while idle.
Ctrl+DExit 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.