Changelog

All notable changes to Irrlicht, following Keep a Changelog conventions.

v0.2.5 (2026-04-05)

Added

  • Pi coding agent adapter — Monitor Pi sessions alongside Claude Code and Codex. Watches ~/.pi/agent/sessions/, parses JSONL v3 transcripts, detects state from stopReason, extracts tokens/cost/model, and supports Pi subagent linking via parentSession
  • Pi icon in macOS menu bar — Greek letter pi (π) icon distinguishes Pi sessions from other agents

v0.2.4 (2026-04-05)

Added

  • Will-o’-the-wisp app icon — Custom purple wisp flame icon for the macOS app bundle, replacing the default icon
  • Will-o’-the-wisp favicon — SVG and PNG favicons added to landing page and all documentation pages
  • SEO metadata — Open Graph, Twitter Card, and canonical URL tags across all site pages
  • CLAUDE.md development guide — Project conventions, build commands, and architecture overview for AI-assisted development

Fixed

  • Ready sessions no longer deleted while process is alive — Sessions in ready state are preserved as long as their Claude Code process is still running, preventing premature cleanup during idle periods

Distribution

  • ir:release skill — Automated release pipeline with DMG, PKG, universal binary builds, changelog updates, and GitHub release creation
  • DMG background asset for branded installer experience

v0.2.3 (2026-04-04)

Added

  • Subagent session lifecycle — Background and foreground subagents are detected as child sessions linked to their parent, with real-time state tracking and automatic cleanup when finished
  • Purple badge — Parent sessions display a live count of active subagents in a purple circle badge in the menu bar
  • Hierarchical dashboard APIGET /api/v1/sessions returns a DashboardResponse with Orchestrator → Group → Agent → Children hierarchy
  • PID discovery retry with backoff — Retries at 500ms, 1s, 2s intervals with CWD-based fallback when lsof fails
  • macOS app improvements — Debug mode (IRRLICHT_DEBUG=1), dev daemon support, clean shutdown, version display in UI, WebSocket keepalive with auto-reconnect
  • irrlicht-ls enhancements--format json output, --id prefix filter, hierarchical display with indented child sessions and agent count badges

Changed

  • Modular SessionDetector — Refactored into focused collaborators: StateClassifier (pure state transitions), MetadataEnricher (git/metrics), PIDManager (process lifecycle)
  • Unified processlifecycle package — Process scanner and process watcher merged into a single adapter
  • Cascade delete removes all child sessions when a parent session is deleted
  • Stale child sessions (transcript >2min old) cleaned up automatically in periodic sweep

Fixed

  • No false “waiting” state during tool execution — Only user-blocking tools (AskUserQuestion, ExitPlanMode) trigger waiting; Agent, Bash, Read etc. correctly show as working
  • Multi-instance session assignment — Running two Claude Code sessions in the same repo no longer causes PID conflicts; disambiguator ensures unique assignment
  • Subagent badge no longer persists after agent finishes
  • WebSocket connection state replaced isWatching flag with proper ConnectionState enum

v0.2.2 (2026-04-03)

Added

  • Embedded daemon in app bundle — Irrlicht.app bundles both SwiftUI UI and Go daemon; no separate services needed
  • DaemonManager — Auto-spawns, monitors, and restarts embedded daemon with exponential backoff
  • Session tooltips on hover in menu bar popover
  • DMG and PKG distribution artifacts

Fixed

  • Delete sessions immediately on process exit
  • Skip orphan transcript files on startup
  • Delete old session when /clear reuses same PID
  • Filter daemon self-PID from lsof
  • Ready-session TTL cleanup (30min default)

v0.2.0 (2026-04-03)

Added

  • OpenAI Codex adapter with recursive directory watching for sessions/YYYY/MM/DD/ structure
  • Per-model pricing data and EstimateCostUSD for cost tracking
  • Cost display in menu bar UI per session and per project group
  • Token breakdown tracking (input, output, cache read, cache creation)
  • Codex transcript event parsing (message, response_item, function_call, turn_context)
  • Codex model detection from ~/.codex/config.toml
  • Content character counting for token estimation when explicit counts unavailable
  • GPT-5.4 model capacity entry
  • Dark mode adaptive Codex SVG icon
  • Project name coloring by max context utilization (green/yellow/orange/red)
  • macOS .pkg installer bundling daemon + app + LaunchAgent

Changed

  • Filesystem watcher now recursively watches all subdirectories (supports deep nesting)
  • Git adapter resolves main repo root via --git-common-dir (worktree-aware)
  • Git adapter strips worktree- prefix from branch names
  • GetCWDFromTranscript now tail-reads last 32KB for latest CWD (supports mid-session worktree switches)
  • CWD/branch/project refreshed on every activity (not just on first detection)
  • Context utilization tests updated for 1M context windows
  • Token extraction refactored with shared extractUsage helper
  • Model config updated to v2.1.0 with pricing data for all models
  • build-release.sh now builds both daemon and Swift app, creates .pkg installer

Fixed

  • ESC cancellation detection using is_error flag on tool results
  • Parent session state adjustment based on sub-agent activity
  • Permission prompt detection as waiting state
  • Filesystem watcher race condition on directory creation

v0.1.0 (2026-03-20)

Added

  • Initial release
  • Claude Code session monitoring via filesystem watching
  • Three-state model: working, waiting, ready
  • macOS SwiftUI menu bar application
  • Go daemon (irrlichd) with HTTP API and WebSocket streaming
  • Context utilization tracking with pressure levels
  • Process exit detection via kqueue
  • Pre-session detection via process scanning
  • Git branch and project name resolution
  • mDNS/Bonjour service advertisement
  • Embedded web dashboard
  • irrlicht-ls CLI listing tool
  • Structured JSON logging with rotation
  • Gas Town orchestrator integration
  • Subagent detection and parent-child relationships

Format

This changelog follows the Keep a Changelog conventions. Versions use Semantic Versioning.

Types of changes:

  • Added — new features
  • Changed — changes in existing functionality
  • Deprecated — soon-to-be removed features
  • Removed — now removed features
  • Fixed — bug fixes
  • Security — vulnerability fixes