Files
claude-hud/CLAUDE.md
Jarrod Watts 48ba04953b feat: Security hardening and expanded test coverage
Scripts:
- Add set -uo pipefail to all shell scripts
- Add jq existence check before processing
- Add JSON validation before parsing
- Add session_id regex validation (alphanumeric, dash, underscore)

hooks.json:
- Remove empty matcher fields (follows spec)

Tests:
- Add ToolStream component tests (14 tests)
- Add TodoList component tests (10 tests)
- Add AgentList component tests (13 tests)
- Add SessionStats component tests (8 tests)
- Add ModifiedFiles component tests (10 tests)
- Add McpStatus component tests (14 tests)
- Add stats-reader formatTokens tests (5 tests)

Docs:
- Update README paths for marketplace installs
- Update CLAUDE.md with current architecture

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 17:09:39 +11:00

3.4 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Project Overview

Claude HUD is a Claude Code plugin that displays a real-time terminal HUD (Heads-Up Display) in a split pane. It shows context usage, tool activity, agent status, todos, git status, and cost estimation.

Build Commands

# All commands run from tui/ directory
cd tui

bun install          # Install dependencies
bun run build        # Build TypeScript
bun run dev          # Watch mode for development
bun test             # Run all tests
bun test <pattern>   # Run specific test (e.g., bun test sparkline)

# Manual testing with a FIFO
mkfifo /tmp/test.fifo
bun run start -- --session test --fifo /tmp/test.fifo
# Then in another terminal, send test events to the FIFO

Architecture

Data Flow

Claude Code Hooks → capture-event.sh → FIFO → EventReader → React State → Ink Components
  1. hooks/hooks.json - Registers shell scripts for Claude Code lifecycle events
  2. scripts/capture-event.sh - Transforms hook JSON into HudEvent format, writes to session FIFO
  3. scripts/session-start.sh - Creates FIFO, builds TUI if needed, spawns HUD in terminal split
  4. tui/src/lib/event-reader.ts - Reads FIFO line-by-line, parses JSON, emits events with auto-reconnect
  5. tui/src/index.tsx - Main App component, processes events and manages all state

Hook Events

Event Script Purpose
SessionStart session-start.sh Spawns HUD in split pane
PreToolUse capture-event.sh Shows tool as "running"
PostToolUse capture-event.sh Updates tool completion, tracks context/cost
UserPromptSubmit capture-event.sh Tracks user prompts, clears idle state
Stop capture-event.sh Sets idle state
PreCompact capture-event.sh Increments compaction count
SubagentStop capture-event.sh Marks agent complete
SessionEnd cleanup.sh Kills process, removes FIFO

Library Structure (tui/src/lib/)

  • types.ts - All TypeScript interfaces (HudEvent, ToolEntry, TodoItem, ContextHealth, etc.)
  • event-reader.ts - FIFO reader with connection status and exponential backoff reconnect
  • context-tracker.ts - Estimates token usage, burn rate, compaction warnings
  • cost-tracker.ts - Calculates API costs based on model pricing

Component Structure (tui/src/components/)

  • ContextMeter - Token usage bar, sparkline history, burn rate
  • ToolStream - Live tool calls with status, duration, path truncation
  • AgentList - Running/completed subagents with elapsed time
  • SessionStats - Tool counts, lines changed, session duration
  • GitStatus - Branch, staged/modified/untracked counts
  • TodoList - Current task list from TodoWrite events
  • ModifiedFiles - Files changed via Edit/Write
  • McpStatus - Connected MCP servers
  • Sparkline - Unicode sparkline chart (▁▂▃▄▅▆▇█)

Session Files

Runtime files stored in ~/.claude/hud/:

  • events/<session_id>.fifo - Named pipe for event streaming
  • pids/<session_id>.pid - Process ID for cleanup
  • logs/<session_id>.log - Fallback output when split pane unavailable

Dependencies

  • Runtime: Node.js 18+ or Bun, jq (JSON parsing in hooks)
  • TUI Framework: React 18 + Ink 5 (terminal UI via Yoga layout)
  • Build: TypeScript 5, ES2022 target, NodeNext modules
  • Testing: Vitest + @testing-library/react + ink-testing-library