| Crates.io | tael |
| lib.rs | tael |
| version | 0.2.0 |
| created_at | 2025-12-30 22:32:08.780033+00 |
| updated_at | 2025-12-30 22:32:08.780033+00 |
| description | Terminal-agnostic agent inbox TUI - track AI assistant status across panes |
| homepage | |
| repository | https://github.com/Mootikins/tael |
| max_upload_size | |
| id | 2013523 |
| size | 1,582,658 |
A lightweight TUI for tracking AI agent status across terminal panes.
Know when your agents need attention without constantly checking each pane.
Named after Tael, the purple fairy from Zelda: Majora's Mask.
cargo install tael
Or build from source:
git clone https://github.com/Mootikins/tael
cd tael
cargo install --path .
# Open interactive TUI (default)
tael
# Add an item with attributes
tael add -a "msg=claude-code: Waiting for input" -a pane=42 -a proj=myproject
# Add with JSON stdin (extract fields with @.field syntax)
echo '{"message":"Auth needed"}' | tael add -a "msg=@.message" -a pane=42
# Claude Code preset (extracts message/type from JSON stdin)
echo "$NOTIFICATION_JSON" | tael add --from-claude-code -a pane=$PANE_ID
# List items (with optional grouping)
tael list
tael list --group-by proj
tael list --group-by status,proj
# Remove item by pane
tael remove -a pane=42
# Clear all
tael clear
# Launch TUI in a floating pane (Zellij only)
tael float
tael float -p bottom-left --width 40% --height 60%
| Key | Action |
|---|---|
j / ↓ |
Move down |
k / ↑ |
Move up |
Enter |
Focus pane (jump to it) |
d |
Delete selected item |
p |
Pin floating pane (Zellij only) |
r |
Reload inbox |
q / Esc |
Quit |
Add to ~/.claude/settings.json:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "tael add --from-claude-code -a pane=$ZELLIJ_PANE_ID -a proj=$(basename $PWD) -a branch=$(git branch --show-current 2>/dev/null)"
}
]
}
],
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "tael remove -a pane=$ZELLIJ_PANE_ID"
}
]
}
]
}
}
The --from-claude-code flag reads JSON from stdin and extracts message and notification_type fields automatically.
Add to your Zellij config to toggle the inbox with a hotkey:
keybinds {
shared {
bind "Alt i" {
Run "tael" {
floating true
close_on_exit true
}
}
}
}
For tmux, set the focus command via environment or CLI flag:
export TAEL_FOCUS_CMD="tmux select-pane -t {pane_id}"
Or pass directly:
tael --focus-cmd "tmux select-pane -t {pane_id}"
tael is configured entirely via CLI flags and environment variables (no config files).
| Flag | Env Variable | Description |
|---|---|---|
--focus-cmd |
TAEL_FOCUS_CMD |
Command to focus a pane (use {pane_id} placeholder) |
-f, --file |
TAEL_INBOX_FILE |
Override inbox file path |
--group-by |
- | Group items by attribute (e.g., status,proj) |
Focus command is auto-detected for Zellij and tmux if not specified.
| Variable | Description |
|---|---|
ZELLIJ_PANE_ID |
Auto-used for pane ID in Zellij hooks |
ZELLIJ_SESSION_NAME |
Used for per-session inbox file naming |
TMUX |
Detected for tmux focus command auto-config |
tael add when they need attentiontael remove when they're done or user respondstael TUI to see all waiting agents at a glanceInbox is stored as Markdown in ~/.local/share/tael/<session>.md, making it easy to inspect or edit manually.
MIT