A tiny floating cat that watches your coding agents — Claude Code and OpenAI Codex — from a corner of your screen. Tablo reflects live activity through a small animated cat and a soft colored glow: it sleeps and breathes sage when idle, trots and pulses amber while agents are working, and turns shocked and flushes coral when a session needs your input or its context window crosses the danger line. Tap Tablo to open a panel with a live context meter per session; from there, open a fuller dashboard with settings.
Built with Tauri 2 (Rust) + SvelteKit / Svelte 5. macOS is the primary platform today.
Prebuilt installers for macOS, Windows, and Linux live on the
Releases page. The one-liners
below download the latest build, verify its published SHA-256 checksum, and
install it quietly — aborting if the checksum is missing or doesn't match. The
URLs are pinned to a release tag (not a moving branch); if you'd rather read the
script first, open that raw URL or grab install.sh / install.ps1 and run it
locally.
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/unravel-team/tablo/tablo-v2.0.0/install.sh | bashWindows (PowerShell)
irm https://raw.githubusercontent.com/unravel-team/tablo/tablo-v2.0.0/install.ps1 | iextablo isn't code-signed / notarized yet, so after verifying the download the installer clears the OS quarantine flag (macOS) / mark-of-the-web (Windows) so it opens without a Gatekeeper / SmartScreen prompt. Once installed, tablo keeps itself up to date — it checks for new releases and updates in the background.
- Avatar — a tiny (126×134) transparent, always-on-top window that is click-through everywhere except the cat. Drag to reposition (remembered between launches); tap to toggle the panel. The cat's animation, glow, and count pips are a pure function of your aggregate live state.
- Panel — opens on tap, anchored by the avatar. Grouped, live session meters. Dismisses on a second tap, on tap-away/blur, or with Esc.
- Dashboard — a larger, resizable window with per-session gauges, a live terminal-style activity preview, permission approvals, and a settings pane.
- Toast — a small, quiet notification that flies out of the avatar when a working session finishes and starts waiting on you (toggleable).
The avatar is a small animated cat whose state is legible at a glance, with precedence alarmed → running → idle:
| State | Cat | Glow | Meaning |
|---|---|---|---|
| idle | curled asleep | sage, slow breathe | nothing active, or every session is just waiting on you |
| running | trotting | amber, quicker pulse | at least one session is actively working |
| alarmed | ears-back, wide-eyed | coral, urgent flush | a session crossed the context warning line, or a tool call is waiting for your approval |
Transitions are animated (the cat wakes and settles rather than snapping), and escalation is glow-only — no jitter. Up to three count pips stack off the top-right, each shown only when non-zero:
- coral — sessions with a pending permission request,
- sage — sessions waiting on you,
- amber — sessions actively working.
Tablo tails each agent's session transcripts and computes every active session's context-window occupancy in real time, pushing updates to all windows. A session counts as active if its transcript changed within a configurable window (default 15 min), and finished sessions clear from the panel after their own (shorter) timer, reappearing the instant you prompt them again. Compaction snap-backs animate down rather than flicker.
In the panel, sessions group by state, most urgent first:
- Context window warning (pinned top) — any session past the warning line,
under a red
> N%header (Nis your configured limit). - Permission Request — tool calls awaiting approve/deny.
- Waiting — handed back to you.
- Working — actively running.
Each row shows the project, an optional AI-generated session title, a live one-line activity ("editing scanner.rs", "running cargo check", "waiting for you") with a colored status dot, a read-only permission-mode badge, the agent source (claude / codex), and a segmented-LED context bar with the raw token count — colored sage → amber → coral by threshold. Filter chips toggle the Waiting / Working groups when more than one session is active.
Tablo watches both Claude Code (~/.claude/projects/) and OpenAI Codex
(~/.codex/sessions/) sessions, side by side in the same avatar count, panel,
and dashboard. A small neutral claude / codex tag on each row marks which
agent it came from. Codex support is on by default and can be switched off in
Settings.
For Claude sessions, Tablo auto-detects each session's context window (the
standard window vs. the 1M-token beta) from on-disk signals — no manual toggle;
the per-session used / limit readout shows what was detected. Codex reports its
window directly, so it's always exact.
Tablo can gate Claude Code tool calls behind a tap:
- A
PreToolUsehook sends each intercepted tool call to Tablo and blocks. - Tablo forces the avatar to alarmed, raises a count pip, and surfaces the request in the panel's Permission Request group and on the dashboard.
- You tap Approve / Deny; the decision releases or blocks the tool.
- Only mutating tools are intercepted by default
(
Bash/Write/Edit/MultiEdit/NotebookEdit); read-only tools never pay the round-trip. - Fail-closed: if you never decide within the timeout (~10 min), it denies. If Tablo is down, the hook fails fast and Claude Code proceeds normally — it never hangs.
Approvals are off until you enable them in Settings, and only then is Claude Code's hook config touched.
Every session card — and every toast — has a jump button that focuses the terminal a session is running in. Sessions self-report their location through a passive hook; jump then switches tmux to the exact pane (if any) and brings the host terminal to the front.
Pinpointing the exact tab needs a terminal that's scriptable — either a per-tab tty (Terminal.app / iTerm2) or a surface API (Ghostty). Support on macOS:
| Terminal | No tmux | Inside tmux |
|---|---|---|
| Terminal.app | Exact window/tab | Exact pane |
| iTerm2 | Exact tab * | Exact pane |
| Ghostty | Exact tab ** | Exact pane |
| WezTerm, kitty, Alacritty, Warp, Hyper, Tabby | App only *** | Exact pane |
* The iTerm2 path exists but is currently unverified.
** Ghostty exposes no per-tab tty, so Tablo matches the exact surface by its working directory + tab title (Claude/Codex title the tab with the session name) through Ghostty's AppleScript dictionary.
*** Brings the app to the front. With a single tab that's the right one; with multiple tabs and no tmux it lands on the current tab — these terminals expose no scriptable per-tab tty. Inside tmux, jump is always exact: tmux selects the pane and Tablo just foregrounds the app.
Across platforms, the tmux pane-switch works everywhere (including WSL); the GUI window-raise is macOS-only, so on Linux and Windows jump still switches the tmux pane but doesn't raise the window, and Wayland stays a no-op.
Both agents jump. The jump logic is shared and agent-agnostic. Claude jump is
on by default; Codex jump is opt-in in Settings (it installs a hook into
~/.codex/hooks.json, which Codex asks you to trust once). The two paths are
fully independent.
When a working session finishes and starts waiting on you, a gentle toast slides
out of the avatar showing project · title and a jump button. Its on-screen
time is configurable, and the whole feature can be switched off. Toasts
overshadow rather than stack.
The dashboard is a larger view with per-session context gauges, a live
terminal-style activity preview ($ live preview) of what each agent is doing,
and the same live approvals. A compact headline shows active · waiting ·
projects. A gear opens an in-window Settings pane:
- Tool approvals — turn Claude Code approve/deny on or off.
- Jump to Claude session (experimental) — enable/disable the jump buttons for Claude sessions.
- Watch Codex / Jump to Codex session (experimental) — watch Codex CLI sessions (on by default), and enable jump for them (opt-in; Codex asks you to trust the hook once).
- Panel shortcut — summon the panel from anywhere with Ctrl+Cmd+P.
- Follow AeroSpace workspace — keep the widget with you across AeroSpace workspace switches (appears only when AeroSpace is detected — see below).
- Context window limit — the warning threshold,
1–100% (default60). Applies live everywhere. - Cancelled-prompt grace — how long Tablo waits before treating a Ctrl-C'd prompt as done rather than thinking (minutes).
- Clear waiting sessions — how long a finished session lingers in the panel before it clears (minutes); it returns the moment you prompt it again.
- Waiting notifications — toggle the toast and set its on-screen time.
- Anonymous usage stats — send an anonymous ping so active users can be counted (on by default; opt out here). No session data — see Privacy below.
- Theme — dark / light.
Warm dark (the hero mode) and light. The toggle lives in Settings and syncs instantly across every window; your choice is remembered.
Tablo runs as a macOS Accessory app — hidden from the Dock and Cmd+Tab, with a small menu-bar icon to show/hide the widget, open the dashboard, or quit. It surfaces in Cmd+Tab only while the dashboard is open, then drops back to the corner. No emoji anywhere; status is shown with the cat, colored glows, and LED-style dots.
Tablo reads your local Claude Code / Codex transcripts and never sends their contents anywhere. The one thing it reports off your machine is anonymous usage stats (via Aptabase) — a launch/heartbeat ping so active users can be counted. No session content, file paths, prompts, or tokens; only that Tablo ran, plus your OS and app version. It's on by default and opts out with one toggle in Settings.
Tablo stays put across native macOS Spaces (Mission Control desktops) — the avatar, panel, and toast are pinned to every Space. AeroSpace, the i3-like tiling window manager, emulates its own workspaces and slides windows off-screen on a switch, so that native pin doesn't apply. Tablo handles it by following: when it detects AeroSpace running, it moves the cat onto whichever workspace you focus, so the widget is always with you. It's on by default and cost-free when AeroSpace isn't running — the Follow AeroSpace workspace toggle in Settings appears only once AeroSpace is detected.
Big shoutout to @nikitabobko for AeroSpace — a superb tiling window manager for macOS.
bun install
bun run tauri dev # launch the app (the cat appears bottom-right)
bun run tauri build # produce a bundleConfig is stored at the Tauri app-config dir — on macOS,
~/Library/Application Support/com.projektdreamscape.tablo/config.json — and
holds the avatar position, thresholds, timers, theme, and toggles.