Help us improve
Share bugs, ideas, or general feedback.
Share bugs, ideas, or general feedback.
Share bugs, ideas, or general feedback.
npx claudepluginhub aparente/ghostty-auraA theme-agnostic Claude Code plugin that dynamically tints your Ghostty terminal based on what Claude is doing. Works with any Ghostty theme — no bundled colors, no theme switching.
Session start → query your current colors via OSC → blend tints at runtime → per-tab isolation
On session start, the plugin queries your terminal's current background, foreground, and cursor colors. These become the "base" palette. When state changes occur, tint colors are blended into your base using HSL color math — preserving your theme's lightness while shifting hue and saturation.
Each Claude Code session captures its own TTY, so multiple tabs maintain independent color states.
| State | Trigger | Tint | Behavior |
|---|---|---|---|
| connected | Session starts | Green | Animated fade, returns to base after 1.5s |
| working | Tool use | Blue | Animated ping-pong |
| needs_input | Permission request | Amber | Instant snap, holds until resolved |
| completed | Claude stops | Gold | Animated fade, returns to base after 2s |
| error | Tool error | Red | Instant snap |
| base | Idle | — | Your original theme colors |
git clone https://github.com/aparente/ghostty-aura.git
Add to ~/.claude/settings.json:
{
"plugins": ["path/to/ghostty-aura"]
}
The hooks/hooks.json registers all hooks automatically via ${CLAUDE_PLUGIN_ROOT}.
On first session start, a default config is created at ~/.claude/aura-config.json. To customize interactively:
cd ghostty-aura
node lib/setup.js
Edit ~/.claude/aura-config.json. No absolute colors — only tints and intensity. Actual colors are computed at runtime from your queried base.
{
"states": {
"connected": { "tint": "#4ade80", "intensity": 0.15, "transition": "animate", "auto_to": "base", "auto_ms": 1500 },
"working": { "tint": "#38bdf8", "intensity": 0.2, "transition": "animate" },
"needs_input": { "tint": "#fbbf24", "intensity": 0.25, "transition": "instant" },
"completed": { "tint": "#facc15", "intensity": 0.15, "transition": "animate", "auto_to": "base", "auto_ms": 2000 },
"error": { "tint": "#f87171", "intensity": 0.3, "transition": "instant" }
},
"animation": { "steps": 8, "step_ms": 120 }
}
tint — color to blend towardintensity — 0..1, how far to shift from basetransition — "animate" (smooth fade) or "instant" (snap)auto_to / auto_ms — auto-return to another state after delay# Create a fake base file for testing
echo '{"bg":"#1a1b26","fg":"#c0caf5","cursor":"#c0caf5"}' > /tmp/aura-base-test.json
# Test blending
node lib/color.js blend "#1a1b26" "#38bdf8" 0.2
jq for JSON parsingWhen SessionStart fires, the hook captures the session's TTY path (e.g., /dev/ttys003) and saves it to /tmp/aura-tty-{session_id}. It also queries the terminal's current colors and saves them to /tmp/aura-base-{session_id}.json. Subsequent hooks look up these files to target the correct TTY with the correct base palette.
Matches all tools
Hooks run on every tool call, not just specific ones
Share bugs, ideas, or general feedback.
Based on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Auto-generated session titles + per-session colors in the statusline, so parallel Claude Code sessions are easy to tell apart at a glance.
Updates Ghostty tab title with Claude Code status indicators showing current activity (working, editing files, running commands, etc.)
Show iTerm2 tab status (running/idle/attention) for Claude Code sessions
Claude Powerline statusline setup wizard
ASCII and ANSI mascot runtime for Claude Code status lines.
Ultra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Ambient light communication for Claude Code. Supports static colors, gentle animations, and color temperature modes. Works with Philips Hue (via OpenHue) or any smart light system.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claim