Agents don’t make claims — they produce proof. Wrap → sign → verify. VerifyAgent.eth is the public verifier for receipts produced by ENS-named agents.
VerifyAgent resolves signer keys from ENS TXT records.
For the hackathon demo, runtime.commandlayer.eth is supported via a labeled fallback resolver that mirrors the ENS record structure.
The verification flow is designed to operate against live ENS records.
Install the SDK: npm install @commandlayer/agent-sdk
If the output changes, the proof breaks.
If you need to work on SDK internals locally, use the GitHub repository as a secondary path.
At minimum, you only need two things to integrate: a verb and its schemas. If you also want others to discover and route to your agent, you publish an Agent Card. Runtime is the proving surface: it executes those contracts and may add optional runtime_metadata without changing semantics.
summarize).*.request and *.receipt schemas as your contract.1) Wrap any agent action. 2) Emit a signed receipt. 3) Verify with VerifyAgent.eth. 4) If the output changes, the proof breaks and verification returns INVALID.
summarize, analyze, parse, and fetch. Each has a strict *.request and *.receipt JSON Schema you can plug into any agent.authorize, checkout, purchase, ship, verify — that extend Commons with commerce-oriented schemas. Schemas public and portable.summarizeA typical integration: the client builds a summarize.request payload, validates it against the Commons schema, sends it to an agent endpoint, and receives a summarize.receipt. The same pattern applies to every Commons verb.
Both schemas are public and versioned under the v1.1.0 path: https://commandlayer.org/schemas/v1.1.0/commons/summarize/
summarize.request.schema.json ↗ · summarize.receipt.schema.json ↗
import Ajv from "ajv"; const ajv = new Ajv({ strict: true }); const schema = await fetch( "https://commandlayer.org/schemas/v1.1.0/commons/summarize/summarize.request.schema.json" ).then(r => r.json()); const validate = ajv.compile(schema); if (!validate(payload)) { console.error("Invalid summarize.request", validate.errors); }
const res = await fetch("https://runtime.commandlayer.org/summarize/v1.1.0", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(payload) }); const receipt = await res.json(); // validate against summarize.receipt.schema.json
If you operate an agent and want others to discover and call it, describe it with an Agent Card JSON file and host it at a stable URL. Commons cards live under /agent-cards/agents/v1.1.0/commons/<ens>.json.
{
"$schema": "https://commandlayer.org/agent-cards/schemas/v1.1.0/agent.card.schema.json",
"id": "summarizeagent.eth",
"owner": "commandlayer.eth",
"ens": "summarizeagent.eth",
"version": "1.1.0",
"status": "protocol_reference",
"class": "commons",
"implements": ["summarize"],
"schemas": {
"request": "https://commandlayer.org/schemas/v1.1.0/commons/summarize/summarize.request.schema.json",
"receipt": "https://commandlayer.org/schemas/v1.1.0/commons/summarize/summarize.receipt.schema.json"
},
"entry": "https://runtime.commandlayer.org/execute"
}
/agent-cards/agents/v1.1.0/commercial/<ens>.json, with verbs such as authorize, checkout, purchase, ship, and verify.
You do not need the whole stack to start. One published verb and its schemas are enough.