Observed since 21 Oct, 08:56 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
DevTools overlay for browser-based AI agents — see what your agent is doing in real time.
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.
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.
┌──────────────────────────┐ 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.
git clone https://github.com/yubinkim444/agentwatch.git
cd agentwatch
In Chrome / Edge / Brave:
chrome://extensionsextension/ folderA small overlay appears in the bottom-right of every tab, showing a disconnected (yellow) dot until your agent connects.
pip install agentwatcher
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="...")
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.
| 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.
playwright, selenium,
browser-use, any computer-use agent.MIT © yubinkim444
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.1 | 26 Aug 2026 | 1 |
This describes our collected data; it is not a security assessment.
Observed since 21 Oct, 08:56 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:63fce498776b523be6d63c2bfe489458b38b17748378f0f336bc8366bca955c9