DevTools overlay for browser-based AI agents — see what your agent is doing in real time.
Project description
agentwatch
React DevTools, for browser AI agents. Drop a translucent overlay onto every tab that shows what your agent is trying to do, what it just clicked, and what it's about to do next.
Why
Browser-use, Playwright agents, computer-use models — they're all black boxes to the developer watching them. The agent moves the mouse, types into a field, the page reloads, then it errors out, and you're left guessing what it thought it was doing.
agentwatch adds a tiny floating overlay to every tab. Your agent code
pushes one-line status updates ("goal: book a flight", "last action:
clicked search", "next action: type SFO"), and the overlay shows them
live, framework-agnostic.
The result: bug screenshots that are self-explanatory. Demo GIFs that viewers actually understand. Pair-debugging sessions where the human can intervene the moment the agent goes off-rails.
Architecture
┌──────────────────────────┐ ws://127.0.0.1:8765 ┌──────────────────────────┐
│ Your agent (any lang) │ ──────────────────────────────▶ │ Chrome MV3 extension │
│ agentwatch.announce( │ broadcasts status JSON │ injects floating overlay│
│ goal=..., last=...) │ │ on every tab │
└──────────────────────────┘ └──────────────────────────┘
The SDK runs a localhost WebSocket broadcaster in a background thread.
The extension's content script connects to it on every page load. Each
announce() call updates the overlay in place with a green flash.
Install (2 steps)
1. Install the Chrome extension
git clone https://github.com/yubinkim444/agentwatch.git
cd agentwatch
In Chrome / Edge / Brave:
- Open
chrome://extensions - Toggle Developer mode (top-right)
- Click Load unpacked
- Select the
extension/folder
A small overlay appears in the bottom-right of every tab, showing a disconnected (yellow) dot until your agent connects.
2. Install the SDK
pip install agentwatcher
Use it
Python
from agentwatch import AgentWatch
with AgentWatch() as aw:
aw.announce(goal="Book a one-way flight SFO → JFK for tomorrow")
# ...do agent stuff...
aw.announce(step=1, last_action="Opened google.com/flights",
next_action="Click the origin field")
# ...
aw.announce(step=2, last_action="Typed 'SFO'",
next_action="Click the destination field")
Or imperatively, without the context manager:
import agentwatch
agentwatch.start()
agentwatch.announce(goal="...", last_action="...", next_action="...")
Any other language
Open a WebSocket to ws://127.0.0.1:8765 and send JSON like:
{"goal": "Book a flight", "last_action": "Clicked search", "next_action": "Type SFO"}
Every connected tab's overlay updates immediately.
Recognized fields
| Field | What the overlay shows |
|---|---|
goal |
Top-line objective. |
last_action |
What the agent just did. |
next_action |
What the agent is about to do. |
step |
Optional step counter / index. |
error |
Highlighted in red. The error row only appears when set. |
Any other keys are kept in the broadcast payload but not rendered by the default overlay — fork the extension if you want to add custom rows.
Pairs nicely with
playwright,selenium,browser-use, any computer-use agent.- A screen-recorder. The overlay + your tool together produce demo GIFs that explain themselves.
Companion projects
- mcp-rec — VCR for MCP servers.
- llm-cache-proxy — disk cache for OpenAI/Anthropic API calls.
- promptlock — lockfile for prompts.
- context-diff — git diff for Claude Code context windows.
License
MIT © yubinkim444
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentwatcher-0.1.0.tar.gz.
File metadata
- Download URL: agentwatcher-0.1.0.tar.gz
- Upload date:
- Size: 4.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d931a3cd4f1f3e25b90a65716589cfbe949987427e9fd7fa0c211ceab09b4dd4
|
|
| MD5 |
6125ca1362c3310d5de4092e5477a427
|
|
| BLAKE2b-256 |
c637cb2328dfd51658fa7833ad93e2be03b6d87aa9c575cf537fd2c4cd4512f9
|
File details
Details for the file agentwatcher-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agentwatcher-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f02a7ff435e1869257c73696e61c70417efb37b19672c972d1cc04c8064379c9
|
|
| MD5 |
260fdc69158f222b8ec9b1b08420c34d
|
|
| BLAKE2b-256 |
a47bc0c2b34d57c1aef3bcefdfb2c50d8975540edc9258b4548cc845d16b0e59
|