0 / 5 Detecting WebMCP...

HUMANLOCK

THE VAULT YOU
CANNOT OPEN ALONE

Human alone: impossible.
Agent alone: impossible.
Together: solvable.

HUMAN AND AGENT REQUIRED

Detecting WebMCP...

Start with your agent

  1. Enter vault or have the agent call enter_vault
  2. Each lock registers one tool (see bus below)
  3. Human and agent act together on each lock
Detecting WebMCP...

WHY YOU NEED EACH OTHER

👁 HUMAN

  • Perception
  • Judgment
  • Interaction
and

⚙ AGENT

  • Computation
  • Search
  • Verification
VAULT OPENS

THE FIVE LOCKS

Each lock recovers one digit. Together they open the vault.

01

THE BLUR

The first signal is hidden in speed

👁 Human Find the glitch
⚙ Agent freeze_frame()
→ digit recovered
LOCKED
02

THE SWARM

One truth hidden in 5000

👁 Human Judge serif
⚙ Agent filter_by_vibe()
→ digit recovered
LOCKED
03

THE WHISPER

A signal you cannot hear

⚙ Agent sonify_to_spectrogram()
👁 Human Read the image
→ digit recovered
LOCKED
04

THE LIE

The display is lying

⚙ Agent audit_truth()
👁 Human Choose to trust
→ digit recovered
LOCKED
05

THE HANDSHAKE

Prove you are together

👁 Human Arm and drag
⚙ Agent align_quantum_lock()
→ vault opens
LOCKED

WEBMCP TOOL BUS

Dynamic — only the active lock's tool is exposed
freeze_frame WAITING
filter_by_vibe WAITING
sonify_to_spectrogram WAITING
audit_truth WAITING
align_quantum_lock WAITING

The page changes what the agent can do as you progress. No static tool list.

Agent prompt

Open this URL in ChatGPT desktop browser, then send:

List my WebMCP tools and help me open this vault. Start with THE BLUR, call freeze_frame at the glitch. Then filter_by_vibe, sonify_to_spectrogram, audit_truth, and align_quantum_lock together with me.
How WebMCP works ▸

Each lock registers one document.modelContext.registerTool() tool. The agent discovers it via getTools() or toolchange event, calls it with structured args, and the page mutates shared DOM state. Human and agent see the same vault. Neither can cheat: tools validate inputs and locks judge deterministically.

freeze_frame({ timestamp: 300 }) -> Revealed digit 7 filter_by_vibe({ description: "most trustworthy" }) -> 12 candidates sonify_to_spectrogram() -> image with code 42 audit_truth() -> Real: $999 vs Display: $10 align_quantum_lock({}) -> 12ms window, success