The bomb has a blind spot

Blindspot is a five-minute cooperative bomb-defusal game built around a capability split.

The human can see the bomb: its wire colours, keypad symbols, button markings, casing, and the coloured strip that appears during a hold. The AI agent gets the manual and seven WebMCP tools: two read tools for rules and progress, plus five narrowly scoped actions. Neither side has the complete answer in the intended tool-only run, so they must talk before the timer reaches zero.

Why WebMCP is the mechanic, not a checkbox

Most agent demos try to expose as much page state as possible. Blindspot asks the opposite question: what should a good tool contract deliberately withhold?

get_bomb_status reports the countdown, strikes, module types, and progress, then explicitly lists the visual facts it refuses to return. The action tools can cut, press, hold, and release, but they never reveal the bomb's appearance. This makes least-privilege interface design playable. If one tool leaks a wire colour or keypad symbol, the co-op game collapses because the agent no longer needs its human partner.

This is a tool-contract demonstration, not a claim that WebMCP is a browser sandbox. An agent separately granted vision or DOM access could inspect the rendered page. The mission prompt therefore asks the agent to use only Blindspot's WebMCP tools, making the seven contracts the complete interface for the run.

The human-agent experience

  1. The agent calls get_bomb_status and get_manual.
  2. It asks the human for only the visual facts required by a rule.
  3. It acts through typed WebMCP calls while both participants watch every call and result appear live.
  4. On the button module, the agent holds the button, a strip lights up only in the human view, the human reports its colour, and the agent schedules the correct release digit.
  5. A successful run ends in a mission report with time left, strikes, and tool-call count.

The page includes a physical bomb-console interface, responsive human and agent views, an enlarged handoff state, opt-in synthesized sound, accessible redundant colour labels, and a replayable deterministic judge seed.

Implementation

Blindspot is intentionally small: vanilla HTML, CSS, and JavaScript with no runtime dependencies or build step. src/tools.js declares the seven real contracts and registers each one with document.modelContext ?? navigator.modelContext, including name, description, JSON inputSchema, annotations, and execute.

The same instrumented handlers update the live call feed. A fallback console is generated from those schemas only when native WebMCP is unavailable. Native sessions keep the executable controls with the connected agent.

The public repo includes an MIT license, complete run instructions, a deterministic judge walkthrough, and 26 headless checks. The suite covers rules, clock throttling, all seven registration descriptors, partial registration reporting, hostile call-feed input, audio opt-in, schema-driven fallback accessibility, and bomb-appearance leak probes across fresh seeded games. GitHub Actions runs the suite and syntax checks on every push.

Verified live

I tested the production deployment in ChatGPT's in-app browser. It registered all seven tools from the production origin, completed the deterministic bomb through native WebMCP, and ended DEFUSED with zero strikes.

Built With

Share this project:

Updates