tablo - A tiny cat that watches your AI coding agents for you

by
You kick off an AI agent, switch tabs, and forget it's stuck or 90% through its context window. tablo fixes that, a tiny cat in your screen corner watching every Claude Code & Codex session: live context meters, tool approvals, and a nudge the second one needs you. Unlike usage dashboards, tablo tracks the conversation context filling up in real time, per session, across both tools — in a widget that stays out of your way. cozy by default. 🐱

Add a comment

Replies

Best
Maker
📌
Hey Product Hunt 👋 I run a lot of Claude Code and Codex sessions at once, and I kept hitting the same annoying thing: I'd kick off an agent, switch tabs to do something else, and completely forget it was sitting there, stuck, or quietly burning through its context window until it auto-compacted and lost the thread. I wanted something that would just watch them for me without taking over my screen. So I built tablo, a tiny pixel cat that sits in the corner of your desktop and keeps an eye on every session. It shows a live context-window meter per session, surfaces tool approvals, and nudges you the second one needs you. Tap the cat or hit the shortcut to open a panel with everything at a glance; there's a dashboard too. A few things that made it fun to build: 1) the cat has moods: it sleeps when idle, starts running when agents are working, and gets alarmed when a session's near its limit. 2) it's a true desktop widget (Tauri), not a web dashboard and stays out of your way. 3) fully free and open source. It works best on macOS right now; Windows/Linux run the core but some bits are experimental. And a heads up: the "jump to session" feature (tap to focus the exact terminal/tmux pane) is marked experimental because focusing arbitrary terminals is genuinely a bit flaky across setups. Would love your feedback, and if you run coding agents, give the cat a try and tell me what's missing 🐾

 It looks insane and funny—especially that cat. Btw, congratulations!

 
Thank you so much for the feedback !! :)

love the cat mascot idea, super cozy vibe honestly. one thing i'd want though is a little sound or subtle notification when a session is about to hit the limit so i can wrap things up before it gets cut off mid task. right now i think it just nudges you right when it's already too late, like a few seconds before the cutoff. maybe a heads up at like 75% would be way more useful so you can actually plan the handoff

 
Thank you for the feedback !! Yes, these issues are already being tracked and will be resolved in the upcoming version : )

 
Please do check out the new update, I have added a notification nudges as requested.

As someone who really likes cats, this is actually almost a must-have for me. Really fun little thing, I think it’s cool and somehow cozy too, it just gives the whole thing a different feel right away. Congrats on the launch!

 
Glad to hear that ! Keep looking forward to the amazing updates : )

I feel like coding agents are becoming something you supervise instead of actively use. I'm curious if you've thought about adding simple stats, like which agent spends the most time waiting for approvals or burns through context the fastest.

 
Thank you for the review !
Yes, I have thought about adding statistics while also keeping the application lightweight, it's primarily a widget so I have to make sure it does not eat up your machine's resources : )

A tiny cat watching my coding agents is genuinely delightful — and so useful. Congrats on the launch! 🚀

 
Isn't it ! : ) Thank you for the support !

This hits close to home. I run long Claude Code sessions for a data pipeline and losing track of a session mid-context-window is exactly the failure mode you're describing. The mood states (sleeping/running/alarmed) are a nice touch, way more glanceable than a numeric meter. Following to see how the Windows/Linux support shakes out.

 
Thank you so much ! Yes, windows and linux are almost entirely supported !

The context-window meter per session is exactly what I kept wishing existed. I always notice too late that an agent quietly compacted. Does the widget remember your session layout between restarts, like which terminal panes map to which agent, or does it rediscover them fresh every time?

 
Hey ! Glad you liked context window per session :)
As for session layout (which terminal pane maps to which agent), is something which is stored by your system at the start of a session. Therefore, it is extremely hard to track if you change your layout.
If you use tmux, on the other hand, tablo is smartly able to remember you exact session and pane.

 Also pane to session mapping does not survive a restart because the session mapping information is extracted using an internal hook. If you perform an action AFTER the restart, the session mapping is restored !

The per-session context meter is the right primitive. Usage dashboards tell you what you spent; this tells you what's about to break, and those are genuinely different problems.

One thing I'd want once several are running: sessions aren't equally valuable. I route deliberately — cheaper models doing gathering and research, expensive ones doing judgement and synthesis. A gather session hitting 90% is fine, it's disposable, I'll rerun it. The synthesis session hitting 90% is the expensive one, because its context is the work product, and an auto-compact there quietly loses reasoning I can't get back.

A flat meter treats those identically, so the cat gets alarmed about the wrong one. Some way to mark a session as the one that matters — pin it, priority tag, whatever — would make the alarm mean something. It'd also make subscriptionbox's 75% heads-up land harder, since the early warning is really only worth having on sessions where planning a handoff is worth the interruption.

Leopold's question is the other one I'd want answered — whether pane-to-session mapping survives a restart is the difference between a widget I leave open and one I re-set-up every morning.

The mood states are a good call, by the way. Glanceable beats precise for anything living in peripheral vision.

 
Thank you so much for the detailed feedback !!
Will make sure to implement these in the future updates !

As for pane-to-session mapping survives a restart: The pane to session mapping does not survive a restart because it is extracted using a hook which is fired when you perform an action. Therefore, once you send a message, or the agent performs an action, the mapping will be restored.

Also, the widget is extremely lightweight therefore it won't tax your machine if you don't shut it down :)

 That is a cleaner answer than I expected, thank you.

One edge worth turning over though. If the mapping is restored by a hook that fires on action, then right after a restart the sessions you cannot locate are precisely the stuck ones. A hung session is by definition not firing actions, so it never re-announces itself. Which means the mapping is missing in exactly the case the product exists to catch.

Probably rare enough not to block anything. But if you ever want a cheap fix, writing the pane mapping to disk when you capture it and treating it as a hint on restart would cover it with no runtime cost. Worst case the hint is stale and the next real action corrects it.

Good to hear on the footprint too. That was the other thing that would have stopped me leaving it open all day.

 
Cheers !
I will wire up a fallback by writing the mapping to the disk
Also, tablo is completely open source, if you feel like you want to help solve a problem, please feel free to fork the repo and contribute your changes :)

 Writing it to disk is the right call, and faster than I expected you to move on it.

On the fork offer, yes, but let me earn it. Give me a week with tablo running against my own sessions first. Contributing a fix to something I have not properly used would be worse than not contributing.

What I actually want to find out is whether the priority idea survives contact. It is easy to want a feature on launch day. Harder to still want it on Thursday when you have stopped noticing the widget. If I stop caring which session is which after two days, that tells you more than my original comment did.

Either way I will come back and tell you which one it was.

The moods are the risky part. A tool approval that's blocking right now and a context window that fills in ten minutes are different urgencies, and one alarmed cat flattens them into the same glance. With four sessions running I'd want it to only wake up for the blocking one, otherwise it's alarmed most of the day and I stop seeing it.

 
Yes, I think the shocked mood can be confusing at times, that's why I also gave the counts around the cat (green counts are waiting sessions, yellow are running and red are either requesting input or going beyond healthy context). Will roll out a better mood logic in the future updates ! Stay tuned :)

 The counts help, but red doing double duty is the bit I'd change. Needs my input and burning through context want completely different reactions from me, one is drop everything and the other is fine for another ten minutes, so folding them into one colour puts me back to opening the panel to find out which. Give the blocking one its own state and the cat can go back to being ignorable.

 
That is a noteworthy idea !! Will surely work on this :)

💡 Bright idea

 One thing if you do build it: only let the blocked state move. Peripheral vision catches motion long before it catches colour, so if the context meter animates too I'll tune both out inside a day. Static red for context pressure, a moving cat only when it actually needs me, and I'd never open the panel just to find out which.

building it as a Tauri widget instead of an Electron dashboard is the right call for something meant to live in the corner all day. what's idle memory actually look like with 3-4 sessions being watched at once?

 
It is almost negligible because tauri works with native Rust backend which is already known for it's superb memory optimization. If you want numbers, right now I am tracking about 7 sessions and the memory usage is 45 MBs :)

12
Next