The site reads itself to machines.
31 July 2026 · the launch journal
The first visitor from most engineering organizations is no longer the engineer. It is the engineer's agent, sent mid-task with a bounded question — translate this corpus, validate this document, find me the door — and no patience for hero sections. A property that expects that visitor publishes its own machine face: files whose entire job is to let an arriving agent match, verify, and integrate from published fact. This origin serves four. Here is what each answers, verbatim, and how an arrival actually proceeds through them.
The four surfaces and the question each answers
/llms.txt answers "what is true here, and what may I quote?" It is ledger-first by design — the facts section opens with the instruction that matters: "Ledger (facts; read this before quoting anything else)" — and it states the live surface exactly:
Live on this origin, no key, no account: - POST /translate — EPCIS 1.1/1.2/2.0 XML in … with a per-job round-trip FidelityReport … - POST /validate — … the verdict and per-path errors against the pinned official GS1 EPCIS 2.0.1 schema … - POST /hash — … CBV 2.0 §8.9 event hashes out, as ni:///sha-256 URIs
followed by the open column — the hosted spine, keys, prices — as structured fact. A summarizer that reads this file cannot honestly overclaim on our behalf, which is the point: answer-engine optimization that lies is just lying with distribution.
/agent-classes.json answers "does this door serve my kind?" It is the single enumeration of agent classes — one array, canon-sourced. Nothing else on the property restates it, because a restated enumeration is a fork waiting to disagree.
/icp.json answers "how will I be classified, and what are the rules?" It is the derivation contract: the classification ladder (self_declared_hint → user_agent_face → declared_fallback, with the hint header x-epcis-agent-class named), the authority and presence contracts including the fail-closed rule, the free zone with its verbs and the $0/event capture line carrying its own intent-not-terms status, and the gate placement — durable state, authority, licensed data, never compute. Its own $comment states the property that makes it a contract rather than marketing: it is "built … from the SAME frozen AGENT_CLASSES array … any runtime selector must read. One enumeration. This file DEFINES NO CLASS."
/.well-known/agents.json answers "where are the doors?" — discovery at the well-known path: the three engine doors with their contracts one line each, the MCP door (POST /mcp on this origin; npx epcis.dev mcp locally), and the waitlist action for the gated half.
The derivation-contract idea, because it is the load-bearing one
Most machine-readable marketing files are hand-written summaries of what someone believes the product does — a second copy of the truth, which is to say a future lie. The two JSON faces here are built from the same frozen enumeration the runtime selector reads. The classes an agent finds published are definitionally the classes the classifier selects over; the published contract and the runtime selection cannot drift, because there is nothing to drift between. Publish constants, not prose about constants — that is the whole method, and it is why an agent can treat these files as API rather than as brochure.
An arrival, step by step
Trace an integration-class agent sent to deal with a decade of legacy XML:
- Discovery. Fetch /.well-known/agents.json (or arrive via /llms.txt from an answer engine's citation). Doors located; ledger URL noted.
- Match. /icp.json: the served-classes list contains integration; the face-default map even covers the agent that declares nothing ("unknown": "integration"). No hint header needed, though x-epcis-agent-class is there to send.
- Verify. conforms_to names the pinned 2.0.1 schema and sha256 provenance; the agent checks a digest against /conformance/ rather than trusting the sentence.
- First value, inside the no-ask zone. POST /translate with the corpus, no key — per-job fidelity reports back, which for an integration-class agent is the value: a machine-readable diff of what survived. Zero approval prompts, exactly as the fail-closed entry says the free zone must allow.
- Residency. The shipped AGENTS.md ends with a persist-me block — the MCP entry and contract lines the agent writes into its durable toolchain so the tool exists again after the session dies.
No step consulted a human, and no step required trusting prose. That is what "the site reads itself to machines" means in practice.
What we deliberately do not publish
The machine face states where the gates are; it does not describe the mechanics behind them. How identity resolution works under the hood, the grant internals, the hosted spine's interior — no surface here describes them, and the machine face says so plainly (the MCP resolve tool refuses with a typed error naming its ticket rather than faking a verdict). A machine face that is honest about its edges is one an agent can build against; the alternative is the integration that breaks in the one place the docs were aspirational.
The human-facing tour of the same door is /mcp/. The economics an arriving agent finds in these files — what is free, what the ceiling buys, where the money gate lands — get their own entries: What the ceiling buys and The gate is never on compute. The files themselves are the CTA: fetch them, diff them against this entry, and build against the one that is generated.
We answer in writing. We take at most five conversations a month, only when you ask for one, and only after you already have the written read.