# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview This is a custom status line binary for Claude Code, written in Go. It replaces shell-based status line scripts with a compiled binary for better performance. The binary reads JSON from stdin (provided by Claude Code) and outputs a formatted status line with ANSI colors. ## Build and Development Commands This project uses [Task](https://taskfile.dev) as its build tool. ```bash # Build (default) task build # Build with stripped symbols to bin/statusline # Testing task test # Run unit tests (go test -v ./...) task test:cover # Run tests with coverage task test:fixture # Test with fixture JSON and show timing # Linting task lint # Run golangci-lint task lint:fix # Run golangci-lint with auto-fix # Other task run # Build and run with test fixture task tidy # Run go mod tidy task install # Install binary to ~/.claude/ task size # Show binary size task clean # Remove bin/ directory ``` ## Architecture Single-file Go application (`main.go`) that: 1. **Reads JSON from stdin** - Parses Claude Code's status hook payload (`StatusInput` struct) 2. **Gathers system state**: - Gitea process status via gopsutil (cross-platform process listing) - Git repository info via go-git (branch name, dirty state) - Terminal width via unix ioctl 3. **Outputs formatted status line** with ANSI colors, padding to terminal width Key functions: - `formatContextInfo()` - Formats token usage as "Xk/Yk" - `getGiteaStatus()` - Returns green/red dot based on gitea process running - `getGitInfo()` - Returns git branch and dirty indicator - `stripANSI()` - Removes ANSI codes for visible length calculation ## JSON Input Format The binary expects Claude Code's status hook JSON via stdin. See `test/fixture.json` for the complete structure. Key fields used: - `model.display_name` - Model name to display - `workspace.current_dir` - Current directory path - `context_window.context_window_size` - Total context window tokens - `context_window.current_usage` - Current token usage (may be null) ## Dependencies - `github.com/go-git/go-git/v6` - Pure Go git implementation - `github.com/shirou/gopsutil/v4` - Cross-platform process/system info - `golang.org/x/sys` - Unix system calls (terminal size)