A small program that runs on a laptop and tells you how well AI apps (Claude, ChatGPT, Cursor, Copilot, Codex and others) are performing. For every answer an AI gives, it shows how long you waited, whether it flowed smoothly, and a score from 0 to 100.
What problem does it solve?
"The AI feels slow" is hard to act on. Is it the Wi-Fi? A busy laptop? Or the AI provider itself? watson tells you which one, so the right team can fix it.
How does it tell the difference?
It watches when data arrives, and nothing else. A pause with dropped or resent data means the network. A pause while the laptop's CPU is maxed out means the machine. A pause with neither is the provider (or a tool it runs) working, and that never lowers the score.
On a Mac it can say more. A network pause is split into your Wi-Fi or router versus somewhere past the router. A machine pause can be the AI app itself starved of CPU or memory, or the laptop slowed down because it is hot or in Low Power Mode.
Can it tell my Wi-Fi from the internet?
On macOS, yes. watson reads the Wi-Fi signal strength every 2 seconds and pings the home or office router. If the router answered slowly or the signal was weak during the pause, it's the local link. If the router answered normally, the problem is further out. It ignores slow router replies while the laptop's CPU was maxed out, because a busy laptop delays its own pings.
Was it just me, or everyone?
The live page checks whether other AI apps on the same laptop had trouble at the same moment, and marks each pause "several apps", "same provider" or "this app only".
What does the score mean?
The AI Transport Score (0 to 100) rates the connection, not the AI's answer. It compares each response to that app's own normal, so a slow day stands out. Higher is better. Time the provider spends working is not held against it.
Privacy and security
Can watson read my prompts or the AI's answers?
No. The traffic is encrypted and watson never decrypts it. It sees only timing and size: when data arrived and how many bytes. The one thing it reads is the website name at the start of a connection (e.g. api.anthropic.com), to know which service it is.
Does it store content?
No. Its log holds timestamps, sizes and labels such as app name and score. No text, no URLs, no keystrokes.
Does any data leave the laptop?
No. Everything stays in a folder on the machine (~/.watson), readable only by the user. The only network activity watson causes is ordinary DNS lookups for the AI domain names it watches (which can be switched off) and, on macOS, small pings to the local router, which never go past it. It reads Wi-Fi signal numbers but never the network name.
Does it install a certificate or a proxy?
No. That is the main reason it works with any app without touching it.
Why does it ask for admin (sudo) rights?
Watching network traffic requires it on macOS and Linux. It's the same permission tools like Wireshark need. The code that handles traffic is built around not keeping content.
Does it record what else is running on my machine?
Only when the CPU is above 70%. Then it notes the top 5 app names and their CPU share, to explain a slowdown. It never records window titles, file paths or command lines. --no-process-names turns this off.
How it works
What does it use under the hood?
Go: a single program, no server or cloud needed.
libpcap: the standard network-capture library (the engine behind tcpdump and Wireshark).
A local log file: plain text, one line per AI response.
An optional browser extension: for AI chats in Chrome, Edge, Brave, Arc or any other Chromium-based browser. It records only when each chunk of a reply arrived and its size.
Do I need to change or install anything on the AI apps?
No. watson sits beside them and watches.
What does it show?
A live table in the terminal: one row per AI response, with the delay before the first word, total time, smoothness, and score.
A live web page on the machine itself (watson serve) with charts and tiles. For each turn (one episode of waiting on the AI) it shows a timeline of where the time went, with the duration of every call. A Report tab lists recent slow answers that weren't the provider's fault and what caused them. A Device tab shows which apps used the most CPU during busy spells, alongside Wi-Fi, router and CPU over time.
A summary per app when you stop it, plus one line naming the cause when the network or the laptop took most of the waiting time.
How does it know which app is which?
It matches the connection's website name to a known service, and asks the operating system which program owns the connection. If it can't tell, it says "unknown" and does not guess.
Which apps are covered?
Claude Code, Claude Desktop, ChatGPT desktop, Cursor, VS Code with Copilot, Codex, and web chats in Chromium-based browsers (Claude, Copilot, Gemini and others). The list is an editable file, so more can be added.
Can it monitor apps that aren't AI?
That is where it is heading (video calls, file sync, remote desktop). Today it is tuned for AI.
Limits
What can't it do?
It can't see tokens, model names or the question asked. That's the cost of never reading content.
Each response is inferred from timing, so every row carries a confidence rating.
It measures the connection, not whether the AI's answer was good.
Can it tell me how long the AI was "thinking", or which tool was running?
No. It sees only when data arrives, so it cannot tell the model thinking from a tool running or from you reading. A turn's time is split into time on the wire and "other" time with nothing on the wire, and watson says no more than that. The one extra hint: if the laptop's CPU reached 70% while nothing was on the wire, the turn is marked "machine busy". A quiet CPU proves nothing, so watson never says the machine was idle.
Does it work behind a corporate VPN?
Partly. A VPN wraps everything in one encrypted tunnel, which hides the AI destinations. watson detects this and says so. It can often capture on the VPN's own interface instead.
What about Windows?
Not tested. macOS and Linux are the supported platforms. The Wi-Fi, router, heat, memory and VPN checks are macOS only for now.
What about Safari or Firefox?
Browser chats need the extension, which runs in any Chromium-based browser (Chrome, Edge, Brave, Arc, Opera, Vivaldi). Safari and Firefox aren't covered yet. The desktop apps work regardless.
Is the "network vs provider" answer always certain?
No. Browsers increasingly use a newer protocol (QUIC) that hides the signals needed to tell network trouble apart. On a Mac, a slow or lost router ping can still mark the pause as your local network. Otherwise watson reports it as "unattributed" instead of blaming anyone. More on browsers and QUIC.
Getting started
What does it take to try it?
Build it with Go and run sudo ./watson watch, then use an AI app as normal. ./watson serve opens the live page. It needs libpcap, which macOS includes with the Xcode Command Line Tools.
Can I try it without live capture?
Yes. ./watson watch --replay file.pcap plays back a saved capture and needs no admin rights.
Is it a finished product?
It's a working tool in active development (the current work is generalizing it beyond AI apps). Treat what you see as an early version.