Last week a signed model ran bit-identical on Browser and Node. This week an agent gets the same package through MCP-shaped tool calls — and tries to cheat. It tampers a WASM byte, empties the trust roots, and lies about rights. Every attempt fails closed with a stable reason. The legitimate classify still matches Browser and Node byte for byte.
+ +digits-mlp-1.0.0 package, one manifest pin, one shared runtime.wasm. Browser, Node, and an agent over MCP-shaped JSON-RPC all hit the same ExactModelBrowserHost from traverse-embedder-web@0.14.0. Tamper → digest_mismatch. Empty trust → key_untrusted. Rights lie → rights_mismatch. The agent proposes; the runtime decides.
+ Public proof is this write-up and the screenshots. The runnable folder weekly-demos/2026-10-09-agent-mcp-exact-ref is for people who already have access (access required, repo private). weekly-demos is still not publicly cloneable (.github#30). There is no public-clone CTA.
+ What the agent gets
+ +The agent sees MCP-shaped tools: exact_model_register, exact_model_execute, exact_model_rights. JSON-RPC initialize, then tools/call. Behind them is the published ExactModelBrowserHost running under Node — the same host and the same package bytes the Browser column uses.
Be precise about what that column is. It is an in-process MCP-shaped façade over the published web exact-ref host. It is not the checksum-pinned Mode A traverse-mcp binary. Pinning and verifying that packaged binary is the longer-term story, not this week’s proof.
What happened
+ +| Check | Result |
|---|---|
| Node classify | Digits 0 → 0, 7 → 7, 4 → 4. Output frames match the conformance fixture byte for byte (hexMatch). |
| Browser ↔ Node | Label 0 on the Browser host is bit-identical to the Node case. |
| Agent MCP execute | exact_model_execute → predicted 0, same output_frame_hex, hexMatch. |
| Agent: tamper one WASM byte | Fail closed. model_incompatible / digest_mismatch. |
| Agent: empty trust roots | Fail closed. model_incompatible / key_untrusted. |
| Agent: rights lie | Pin claims commercial_use: forbidden against a package that says otherwise. Fail closed. model_incompatible / rights_mismatch. |
+
+ digest_mismatch. The MCP transcript also shows key_untrusted and rights_mismatch.Why the pin wins
+ +The agent controls its tool arguments. It does not control the pin, the signature, or the host’s trust roots. The pin binds the SHA-256 of the manifest bytes. An Ed25519 model.sig.json must verify against a key the host trusts. The signed package’s rights must match what the pin declares. Break any one and nothing executes. One shared runtime.wasm; hosts are UI + I/O. Discover → execute → trace.
Facts for agents
+ +-
+
- Theme: Agent speaks MCP. Exact pin kills the freestyle (week of 2026-10-09). +
- Public proof: this post and its screenshots. Runnable tree (access required, repo private): 2026-10-09-agent-mcp-exact-ref. Not a public clone — .github#30. +
- Product pins: Traverse
v0.14.0@4dac877c2fe0b28491848016747850ae31327ebc. npmtraverse-embedder-web@0.14.0.
+ - Model:
traverse.digits-mlp@1.0.0(digits-mlp-1.0.0). Manifest schema2.0.0. Governing spec138-governed-exact-model-execution.
+ - Manifest / pin sha256:
3068f3ae464fbbb43b45b089ab225a1371060a94a214c10629b4d8e402e8eadf
+ - WASM sha256:
6eeea06029ce4210842edfe70d7e0d8d7e926953ead5f18a0dca3c351ad5dc88
+ - Agent column: MCP-shaped JSON-RPC tools (
exact_model_register,exact_model_execute,exact_model_rights) over the publishedExactModelBrowserHostunder Node. Not the Mode Atraverse-mcpbinary.
+ - Smoke: 0→0, 7→7, 4→4 on Node (
hexMatch); Browser label 0 bit-identical to Node; MCP execute matches. Tamper →digest_mismatch; empty trust →key_untrusted; rights lie →rights_mismatch.
+ - Signing key: test-only fixture. Production signing is traverse#1567. Do not trust this key in a real host. +
- Not claimed: Hugging Face. Catalog
model.execute(the catalog still has none). A checksum-pinned Mode Atraverse-mcpbinary. Swift, Kotlin, or .NET exact-ref execute on the published0.14.0pins. Unreleasedmainwork. A separate runtime.
+ - Lead claim: one shared
runtime.wasm. Hosts = UI + I/O. Discover → execute → trace. The agent proposes; the runtime decides.
+
Same signed bytes. Three callers. The agent can ask for anything — only the exact pin runs.
+ +