Skip to content

feat(tui): add terminal title throbber for tab activity#396

Merged
CSRessel merged 1 commit intomainfrom
terminal-title-throbber
Mar 29, 2026
Merged

feat(tui): add terminal title throbber for tab activity#396
CSRessel merged 1 commit intomainfrom
terminal-title-throbber

Conversation

@CSRessel
Copy link
Copy Markdown
Collaborator

Summary

  • Adds animated braille spinner in terminal tab title when Nori is actively working (task running, MCP startup)
  • Shows project name (from cwd) as idle title; spinner prefix when busy
  • Gated on config.animations; title cleared on exit via Drop

Implementation

  • New terminal_title.rs module: OSC 0 escape sequences, title sanitization (control chars, bidi, truncation), spinner frame computation
  • ChatWidget integration: refresh_terminal_title() called on lifecycle events (on_task_started, on_task_complete, on_session_configured, on_mcp_startup_complete)
  • Demand-driven animation: self-schedules next frame via FrameRequester::schedule_frame_in() during pre_draw_tick()
  • Write deduplication via cached last_terminal_title to avoid redundant OSC writes

Test plan

  • 10 unit tests covering sanitization, spinner cycling, title composition
  • All 1045 nori-tui tests pass
  • Clippy clean (just fix -p nori-tui)
  • Manual verification: title updates visible in terminal emulator tabs

Show an animated braille spinner in the terminal tab title when Nori is
actively working (task running, MCP startup). Displays project name from
cwd when idle. Gated on config.animations. Title is cleared on exit.
🤖 Generated with [Nori](https://noriagentic.com)

Co-Authored-By: Nori <contact@tilework.tech>
@CSRessel CSRessel merged commit 3eff990 into main Mar 29, 2026
3 checks passed
@CSRessel CSRessel deleted the terminal-title-throbber branch March 29, 2026 07:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant