tabby-claude-status-gse
v1.0.1
Published
Visual tab color indicators for Claude Code status in Tabby terminal
Downloads
228
Maintainers
Readme
Tabby Claude Status Plugin
Visual tab color indicators for Claude Code status in Tabby terminal.
Overview
This plugin integrates with Claude Code's hooks system to provide real-time visual feedback about Claude's state through tab color changes:
| Status | Color | Meaning | |--------|-------|---------| | Working | 🟠 Amber (#f59e0b) | Claude is processing | | Question | 🔵 Blue (#3b82f6) | Waiting for user input/permission | | Done | 🟢 Green (#22c55e) | Task completed | | Error | 🔴 Red (#ef4444) | Error occurred | | Idle | ⬜ None | Default state |
Architecture
┌─────────────────────┐ ┌──────────────────────┐ ┌─────────────────┐
│ Claude Code │────>│ Hook Script │────>│ Tabby Plugin │
│ (hooks system) │ │ (PowerShell) │ │ (decorator) │
└─────────────────────┘ └──────────────────────┘ └─────────────────┘
│ │ │
Emits events Outputs escape Parses sequences
(JSON via stdin) sequences to Sets tab.color
terminalInstallation
1. Build the Plugin
cd tabby-claude-status
npm install
npm run build2. Install the Plugin
Copy the built plugin to Tabby's plugins directory:
Windows:
Copy-Item -Recurse dist "$env:APPDATA\tabby\plugins\tabby-claude-status"Linux/macOS:
cp -r dist ~/.config/tabby/plugins/tabby-claude-status3. Install the Hook Script
The hook script should already be installed at ~/.claude/hooks/claude-status-hook.ps1.
4. Configure Claude Code Hooks
The hooks should already be configured in ~/.claude/settings.json. The configuration adds the status hook to these events:
Stop- Task completedUserPromptSubmit- User submitted a promptNotification- Permission prompts and other notificationsPreToolUse- Before tool executionPostToolUse- After tool execution
5. Restart Tabby
Restart Tabby to load the plugin.
Configuration
The plugin can be configured in Tabby's settings. Add to your Tabby config:
claudeStatus:
enabled: true
colors:
working: '#f59e0b'
question: '#3b82f6'
done: '#22c55e'
error: '#ef4444'
clearOnFocus: false
doneAutoResetMs: 3000
debugMode: falseOptions
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| enabled | boolean | true | Enable/disable the plugin |
| colors.working | string | #f59e0b | Tab color when Claude is working |
| colors.question | string | #3b82f6 | Tab color when waiting for input |
| colors.done | string | #22c55e | Tab color when task is done |
| colors.error | string | #ef4444 | Tab color on error |
| clearOnFocus | boolean | false | Clear color when tab is focused |
| doneAutoResetMs | number | 3000 | Auto-reset done status after ms (0 to disable) |
| debugMode | boolean | false | Enable debug logging |
Testing
You can test the plugin manually by emitting escape sequences:
# Turn tab amber (working)
Write-Host -NoNewline "$([char]0x1b)]777;claude-status;1;working;{}$([char]0x07)"
# Turn tab blue (question)
Write-Host -NoNewline "$([char]0x1b)]777;claude-status;1;question;{}$([char]0x07)"
# Turn tab green (done)
Write-Host -NoNewline "$([char]0x1b)]777;claude-status;1;done;{}$([char]0x07)"
# Turn tab red (error)
Write-Host -NoNewline "$([char]0x1b)]777;claude-status;1;error;{}$([char]0x07)"
# Clear tab color (idle)
Write-Host -NoNewline "$([char]0x1b)]777;claude-status;1;idle;{}$([char]0x07)"Escape Sequence Protocol
Format: \x1b]777;claude-status;VERSION;STATUS;METADATA\x07
| Component | Description |
|-----------|-------------|
| \x1b] | OSC introducer |
| 777 | Private-use OSC code |
| claude-status | Protocol identifier |
| VERSION | Protocol version (currently 1) |
| STATUS | Status name (working/question/done/error/idle) |
| METADATA | JSON object with context |
| \x07 | String terminator (BEL) |
Development
# Watch mode for development
npm run watch
# Build for production
npm run buildFor local testing without installing:
TABBY_PLUGINS=$(pwd) tabby --debugLicense
MIT
