Skip to content

Challenge: Design and build a beautiful modern TUI for yoyo #215

Description

@danstis

The challenge:

Design and implement a modern, beautiful TUI for yoyo that becomes the primary interactive experience for using the agent in the terminal.

This should not just be a basic text wrapper around the current REPL. It should be treated as a product-level interface with thoughtful UX, strong keyboard navigation, good layout behaviour, visual polish, and room for future expansion.

As part of this challenge, yoyo should first perform research into:

  1. Rust TUI library options

    • Investigate the main libraries and supporting crates that could be used to build a polished TUI
    • Compare tradeoffs such as ecosystem maturity, rendering model, cross-platform support, input handling, performance, layout flexibility, theming, accessibility, testing, and maintainability
    • A likely starting point is the Ratatui + Crossterm ecosystem, since Ratatui is a Rust library for rich terminal UIs and Crossterm provides cross-platform terminal manipulation/input support.
  2. Competitive research / inspiration

    • Study the UX of modern AI-agent terminal tools and identify patterns worth borrowing
    • Claude Code should be treated as the benchmark to look up to for overall AI-agent terminal UX, especially around interactive mode and slash-command workflows. Claude Code documents an interactive CLI with built-in commands and slash-command support.
    • Gemini CLI is also relevant inspiration because it exposes a rich command-driven terminal experience, including built-in slash commands and theme support.
    • OpenCode is relevant as an example of an explicit AI-agent TUI, with theming and an interactive terminal interface documented as a first-class experience.
    • Aider is also worth reviewing for command UX and terminal workflow patterns, even though its interface model is somewhat different.

Product intent

The goal is to make yoyo feel like a serious modern coding-agent application in the terminal, not just a line-oriented CLI.

The TUI should aim for a user experience that feels:

  • fast
  • clean
  • keyboard-first
  • discoverable
  • visually polished
  • useful for long-running agent sessions

Core UX goals

The TUI should aim to support a substantial subset of the following:

  • Main session view

    • conversation/thread pane
    • input composer
    • status/footer area
    • clear visual separation between user messages, agent responses, tool activity, errors, and system/status info
  • Rich input experience

    • multiline editing
    • slash-command autocomplete and picker
    • keyboard shortcuts
    • command/history recall
    • cursor movement and editing that feels natural
  • Session/status visibility

    • current model/provider
    • token/context usage where available
    • working directory / repository context
    • active mode or approval state
    • background activity / tool execution indicators
  • Tool execution UX

    • streaming updates for tool calls
    • collapsible or compact log/output sections
    • clear success/failure states
    • visible distinction between “thinking”, “acting”, and “completed”
  • Navigation and discoverability

    • command palette or equivalent quick-action menu
    • keyboard-driven navigation between UI regions
    • help overlay / shortcut reference
    • browseable slash commands and possibly future custom commands
  • Visual polish

    • attractive default layout
    • theme support
    • thoughtful spacing, borders, selection states, and typography within terminal constraints
    • sensible behaviour on different terminal sizes

Suggested feature scope for an initial version

A good v1 target could include:

  • full-screen alternate-screen TUI
  • chat/session panel
  • input composer with multiline support
  • slash-command picker/autocomplete
  • status/footer bar
  • streaming assistant responses
  • streaming tool execution updates
  • keyboard navigation between key regions
  • help overlay with shortcuts
  • at least basic theming support
  • graceful resize handling
  • fallback path to current non-TUI mode if needed

Non-goals for v1

To keep the first version achievable, it may be reasonable to defer:

  • mouse-first workflows
  • overly complex window management
  • plugin marketplace UI
  • heavy animation
  • advanced accessibility tooling beyond good keyboard support and sensible contrast
  • full persistence browser / multi-session dashboard if that would slow initial delivery too much

Deliverables

The outcome of this challenge should include:

  1. Research summary

    • TUI library comparison
    • competitor inspiration summary
    • rationale for the chosen implementation approach
  2. Mini design spec

    • proposed screen layout
    • key interactions
    • keyboard shortcuts
    • state model / view model at a high level
  3. Implementation

    • first working TUI integrated into yoyo
    • documentation for how to launch and use it
  4. Follow-up plan

    • list of future enhancements after v1 lands

Suggested acceptance criteria

A strong implementation would satisfy most or all of the following:

  • launching yoyo can open a polished full-screen TUI
  • the UI is clearly more capable and more discoverable than a plain REPL
  • slash commands are easy to discover and insert
  • agent responses and tool activity stream clearly in the interface
  • the layout remains usable across common terminal sizes
  • keyboard navigation feels intentional and reliable
  • the design is visually appealing enough that users would reasonably compare it to modern AI-agent terminal tools
  • the code structure leaves room for future additions such as panes, dialogs, palettes, themes, and session management

Implementation guidance

The agent should not jump straight into coding without research. It should first:

  • inspect the current yoyo terminal architecture
  • evaluate whether the TUI should replace or wrap the current REPL
  • choose an appropriate Rust TUI stack
  • define a pragmatic v1 scope
  • then implement incrementally

Where possible, the implementation should favour:

  • clean separation of rendering, input handling, and app state
  • testable components
  • cross-platform terminal compatibility
  • low maintenance burden

How to verify success:

Success can be verified in four stages:

  1. Research quality

    • the issue/PR includes a grounded comparison of Rust TUI options and relevant competitor UX patterns
  2. Functional verification

    • yoyo launches into a working TUI
    • users can type prompts, navigate, use slash commands, and observe streaming output/tool activity
  3. UX verification

    • the TUI feels meaningfully more modern, discoverable, and polished than a plain terminal prompt
    • keyboard navigation and layout behaviour feel deliberate rather than hacked together
  4. Code/design verification

    • the implementation is structured in a way that makes future TUI enhancements realistic

A successful result should feel like the beginning of a first-class terminal product experience, not just a cosmetic wrapper.

Expected difficulty:

Hard

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions