smithery/Piebald-AI

tui

Guide for Splitrail's terminal UI and file watching. Use when modifying the TUI, stats display, or real-time update logic.

Installation

$ npx skills add smithery/Piebald-AI --skill tui

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery/Piebald-AI.

npx skills add smithery/Piebald-AI

Browse all from smithery/Piebald-AI

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 1,394 B
  • docs SUMMARY.md 133 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

Real-Time Monitoring & TUI

Splitrail provides a terminal UI with live updates when analyzer data files change.

Source Files

  • src/tui.rs - TUI entry point and rendering
  • src/tui/logic.rs - TUI state management and input handling
  • src/watcher.rs - File watching implementation

Components

FileWatcher (src/watcher.rs)

Watches analyzer data directories for changes using the notify crate. Triggers incremental re-parsing on file changes and updates TUI via channels.

RealtimeStatsManager

Coordinates real-time updates: background file watching, auto-upload to Splitrail Cloud (if configured), and stats updates to TUI via tokio::sync::watch.

TUI (src/tui.rs, src/tui/logic.rs)

Terminal interface using ratatui:

  • Daily stats view with date navigation
  • Session view with lazy message loading
  • Real-time stats refresh

Key Patterns

  • Channel-based updates - Stats flow through tokio::sync::watch channels
  • Lazy message loading - Messages loaded on-demand for session view to reduce memory

Adding Watch Support to an Analyzer

Implement getwatchdirectories() in your analyzer to return root directories for file watching. See src/analyzer.rs for the trait definition.