Playground
This page runs a Monitor Protocol server inside your browser. It is not a simulation. The page loads the reference engine from @mentu/monitor-protocol and calls it directly. Nothing you do here leaves your browser, and reloading the page starts fresh.
The scenario is a monitor called ci-main that watches builds for you. You play every part: the builds that pass and fail, the agents that report, and two readers catching up at their own pace.
A monitor, running in this page
This is the reference engine from @mentu/monitor-protocol, loaded as plain files. Nothing you do here leaves your browser.
1. Something happens
2. The monitor remembers
- No observations yet.
- Observations
- 0
- Refused
- 0
- Subscribers
- 0
Confidence: not computed, because inputs are missing (none). The state says so instead of guessing.
Show the raw state
null
3. Subscribers catch up
Receives everything.
Receives failed builds only.
Things to try
- Make a few builds pass and fail. Each one becomes an observation in the log, with its number, its tier (
measured) and who saw it (probe:ci). - Subscribe both readers. The Claude Code session receives everything. The dashboard has a filter,
#status: failed, so it only receives failed builds. Each reader has its own cursor. - Pull, then crash before acknowledging. Pull again, and the same observations come back marked redelivered. The monitor did not forget them.
- Acknowledge. The cursor moves forward and the waiting count drops. In the strip at the bottom, a number gets a green outline once a reader has committed it.
- Try to cheat. A bot that rates its own claim as
srcis refused, and the refusal appears in the log as an observation. An agent that names a stranger inon_behalf_ofis refused too. - Let your agent act for you. Your agent names you, the monitor's owner, and its report is accepted at the top tier with both names kept.
- Read the state. The confidence stays empty because inputs are missing, and the gaps say why in plain words.
How this page works
The engine is the package's own compiled JavaScript, copied from the npm tarball. Four import lines reach for Node.js features: hashing, random numbers, events and files. Those four point at small browser stand-ins instead. Nothing else is changed.
The file engine.json records the package version, the tarball's integrity hash as published on npm, and a hash of every file, so you can check the copy against the registry.
The server in this page runs open, like a server started without --registration-token. That is why its state lists the gap unattested_origin: nobody independent vouched for the owner.