Skip to content

Commit 511d808

Browse files
committed
[runtime] clarify VerifyAgent separation and runtime scope
Why: Keep this runtime focused on executing actions and producing signed receipts while moving public verifier product messaging to the external VerifyAgent repo. Contract impact: none
1 parent 14c169e commit 511d808

5 files changed

Lines changed: 33 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ All notable changes to this runtime repository will be documented in this file.
44

55
## Unreleased
66

7+
- Separated VerifyAgent into its own public Commons/MIT repository. The runtime now focuses on executing agent actions and producing signed CommandLayer receipts. Public paste-and-verify receipt verification is handled externally by VerifyAgent.
78
- Aligns the runtime service, docs, examples, and package metadata on the CommandLayer Commons v1.1.0 current line.
89
- Removes Commons runtime dependence on inbound `x402` request metadata so public Commons responses remain payment-agnostic.
910
- Refreshes the golden receipt fixture and production-surface tests to match current wrapped receipt responses and verification expectations.

README.md

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
# CommandLayer Runtime
22

3-
Reference Node.js runtime for CommandLayer Commons verbs. This service exposes deterministic verb handlers, signs receipts with Ed25519 via `@commandlayer/runtime-core`, and verifies receipts with a configured public key or an ENS lookup.
3+
Reference Node.js runtime for CommandLayer Commons verbs. This service executes deterministic verb handlers and produces signed CommandLayer receipts via `@commandlayer/runtime-core` (canonicalization, SHA-256 hashing, and Ed25519 signatures).
4+
5+
For public paste-and-verify receipt verification, use VerifyAgent: https://github.com/commandlayer/verifyagent
6+
7+
## Layer boundaries
8+
9+
- **Runtime (this repo):** executes agent actions and emits signed CommandLayer receipts through versioned runtime endpoints.
10+
- **VerifyAgent (external):** public receipt verifier experience in a separate Commons/MIT repository.
11+
- **SDK:** wraps agents and exposes reusable receipt tooling for programmatic verification and integrations.
12+
- **Agent Cards:** machine-readable identity/capability metadata.
13+
- **Commercial runtime:** hosted runtime surface (paid API, x402, indexing, dashboards).
14+
15+
## Runtime receipt flow
16+
17+
1. Runtime receives an agent action request.
18+
2. Runtime executes the verb endpoint.
19+
3. Runtime creates a canonical CommandLayer receipt.
20+
4. Runtime signs the receipt with the configured Ed25519 key.
21+
5. The receipt can be verified locally, by the SDK, or publicly through VerifyAgent.
422

523
## What is implemented
624

@@ -9,7 +27,7 @@ The runtime currently exposes:
927
- `GET /` — JSON index with service metadata and enabled verb routes.
1028
- `GET /health` — health and signer/verifier readiness.
1129
- `GET /healthz` — alias for `/health`.
12-
- `POST /verify` — receipt hash/signature verification, with optional ENS lookup and optional schema validation.
30+
- `POST /verify`runtime verification API for receipt hash/signature checks, with optional ENS lookup and optional schema validation.
1331
- `POST /<verb>/v1.1.0` for the verbs enabled by `ENABLED_VERBS`.
1432

1533
The default enabled verbs are:
@@ -158,7 +176,7 @@ scripts/dev.sh
158176

159177
`scripts/dev.sh` generates `keys.env` with `tools/mkkeys.mjs` if needed, sources that file, enables debug routes, and starts `server.mjs` on `127.0.0.1:8099` by default.
160178

161-
### Verify locally
179+
### Verify locally (runtime API)
162180

163181
```bash
164182
curl -s http://127.0.0.1:8080/health | jq .
@@ -183,6 +201,8 @@ The production verification path is `server.mjs`, which signs receipts and verif
183201

184202
Repo-local test coverage now includes runtime service tests that exercise the receipt production path and `POST /verify` behavior directly, alongside the remaining legacy helper coverage under `runtime/tests/`.
185203

204+
For public paste-and-verify receipt verification, use VerifyAgent: https://github.com/commandlayer/verifyagent
205+
186206
## Configuration and operations
187207

188208
- Configuration reference: [`docs/CONFIGURATION.md`](docs/CONFIGURATION.md)

docs/CONFIGURATION.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
This file documents environment variables that are actually read by `server.mjs` today.
44

5+
For public paste-and-verify receipt verification, use VerifyAgent: https://github.com/commandlayer/verifyagent
6+
7+
This runtime repository is focused on execution + signed receipt production, not hosting a public verifier UI/demo.
8+
59
## Core listen and service metadata
610

711
| Variable | Default | Notes |

docs/OPERATIONS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
This runbook describes behavior that is implemented by the current repository.
44

5+
For public paste-and-verify receipt verification, use VerifyAgent: https://github.com/commandlayer/verifyagent
6+
7+
Boundary reminder: this runtime executes verbs/actions and produces signed CommandLayer receipts; it does not ship the public verifier UI/demo experience.
8+
59
## Minimum deployment inputs
610

711
A normal boot requires all of the following unless `DEV_AUTO_KEYS=1` is used for development:

server.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1799,7 +1799,7 @@ app.post("/verify", async (req, res) => {
17991799
let ensExpect = null;
18001800

18011801
if (wantEns) {
1802-
// ENS signer resolution (VerifyAgent.eth integration)
1802+
// ENS signer resolution for receipt verification.
18031803
// Resolves cl.sig.pub / cl.sig.kid from the signer ENS name so receipts can be verified without hardcoded keys.
18041804
const signerForEns = String(proof?.signer_id || runtimeConfig.signerId || "").trim();
18051805
const ensOut = await fetchEnsSignerBundle({ signerName: signerForEns, refresh });

0 commit comments

Comments
 (0)