From b922bf9cffc6a507dddf8e930680014abafe9f89 Mon Sep 17 00:00:00 2001 From: TK Collective Date: Mon, 3 Aug 2026 05:50:15 +0000 Subject: [PATCH 1/3] Showcase: AgentOracle Verifiable Delivery Adds a showcase package demonstrating settlement-grade signed receipts for ACP transaction outcomes. - showcase.json passes scripts/validate-showcase.mjs (55/55) - receipt.json is a live production issuance against agentoracle-gateway-main-39fa17e.zuplo.app, signed ao-composed-2026-07-ed25519-3d44ba27 - verify.py reproduces valid=True against https://agentoracle.co/.well-known/jwks.json using the agentoracle-receipt-verify PyPI verifier (Apache-2.0) - SKILL.md documents inputs, tools, credentials, approval gates, stop conditions, and output contract - exactly three feedbackPrompts, exactly one acp primitive - API key redacted in result-redacted.md; signing private key never in the tree --- .../agentoracle-verifiable-delivery/README.md | 114 ++++++++++++++ .../showcase.json | 81 ++++++++++ .../agentoracle-signed-receipt/SKILL.md | 141 ++++++++++++++++++ .../examples/compose_request.json | 13 ++ .../examples/prompt.md | 102 +++++++++++++ .../examples/receipt.json | 1 + .../examples/result-redacted.md | 132 ++++++++++++++++ .../examples/verify-output.txt | 8 + .../examples/verify.py | 79 ++++++++++ 9 files changed, 671 insertions(+) create mode 100644 showcase/agentoracle-verifiable-delivery/README.md create mode 100644 showcase/agentoracle-verifiable-delivery/showcase.json create mode 100644 showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/SKILL.md create mode 100644 showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/compose_request.json create mode 100644 showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/prompt.md create mode 100644 showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/receipt.json create mode 100644 showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/result-redacted.md create mode 100644 showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/verify-output.txt create mode 100644 showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/verify.py diff --git a/showcase/agentoracle-verifiable-delivery/README.md b/showcase/agentoracle-verifiable-delivery/README.md new file mode 100644 index 0000000..9e0b723 --- /dev/null +++ b/showcase/agentoracle-verifiable-delivery/README.md @@ -0,0 +1,114 @@ +# AgentOracle Verifiable Delivery — Showcase Package + +## What this is + +An ACP transaction outcome, recorded as a signed evidence artifact +that any third party can verify **offline** against the issuer's +published JWKS. No network access to AgentOracle infrastructure is +required to verify — just the receipt file, the published public key, +and a small reference verifier. + +## What a reviewer is looking at + +Three artifacts, produced against the live production +AgentOracle rail: + +1. **`skills/agentoracle-signed-receipt/examples/compose_request.json`** + — the exact request body sent to `POST /v1/compose` on the live + Zuplo gateway. Content-addressed via `subject.claim_hash` and + `subject.skill_hash`. +2. **`skills/agentoracle-signed-receipt/examples/receipt.json`** — + the JWS General Serialization envelope returned by the gateway. + Signed with `kid: ao-composed-2026-07-ed25519-3d44ba27`, published + in the live JWKS. +3. **`skills/agentoracle-signed-receipt/examples/verify-output.txt`** + — the actual output of running the reference verifier + (`agentoracle-receipt-verify`) against the committed receipt + + the live JWKS. `valid: True`, exit code 0. + +Plus: + +- **`skills/agentoracle-signed-receipt/SKILL.md`** — the reusable + skill contract (when to use, inputs, tools, credentials, approval + gates, stop conditions, validation, output contract). +- **`skills/agentoracle-signed-receipt/examples/prompt.md`** — the + scenario, request shape, and reproduction steps. +- **`skills/agentoracle-signed-receipt/examples/result-redacted.md`** + — the redacted run report showing HTTP request, response, + decoded receipt payload, verification output, and public/private + boundaries. + +## Three verify commands + +Any reviewer with Python 3.10+ can independently verify the committed +receipt in under a minute: + +```bash +# 1. Install the reference verifier from PyPI (Apache-2.0, ~600 lines). +pip install agentoracle-receipt-verify + +# 2. Change into the examples folder where the receipt lives. +cd showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples + +# 3. Run the verifier against the committed receipt + live JWKS. +python3 verify.py +``` + +Expected output (exit code 0): + +``` +receipt: .../skills/agentoracle-signed-receipt/examples/receipt.json +jwks_url: https://agentoracle.co/.well-known/jwks.json + +=== VerifyResult === + canonical_sha256: sha256-b9cf4e4afbee83cfd110c7923c6adff68a70487fb2cc7053fcb203e898afd695 + valid: True + checks: {'canonical_recomputes': True, 'all_signatures_verified': True} + signers: [{'kid': 'ao-composed-2026-07-ed25519-3d44ba27', + 'issuer': 'https://agentoracle.co/.well-known/jwks.json', + 'verified': True}] +``` + +If any check returns False, or the exit code is non-zero, the +receipt is not authentic — do not treat it as evidence. + +## Why this matters for ACP + +When two ACP agents settle a transaction and later disagree about +what actually happened — did the deliverable arrive? did the +recommended action satisfy the caller's rules? was the adversarial +check performed? — the retained receipt is the tiebreaker. Either +party, or a neutral auditor with no AgentOracle account, can run the +three verify commands above and get a byte-level yes/no. + +The receipt is content-addressed (RFC 8785 JCS + Ed25519 per RFC 8032) +so the same inputs produce byte-identical canonical bytes. Post-hoc +edits invalidate the signature. Retention is durable — the JWKS is +publicly cacheable, and retired keys stay in the JWKS for at least +12 months after rotation. + +## Live production, not fixtures + +The receipt committed here was produced against the live production +AgentOracle rail on 2026-08-03 — the same rail that serves every paid +customer, the same signing key (`ao-composed-2026-07-ed25519-3d44ba27`) +that verifies against the live JWKS at +https://agentoracle.co/.well-known/jwks.json. + +No fixtures, no mocks, no test-mode keys. If the receipt verifies, +that is because the AgentOracle production key signed it in that +exact byte order at that exact decision point. + +## References + +- Receipt format specification (IETF Internet-Draft): + https://datatracker.ietf.org/doc/draft-krausz-verification-state +- Open draft under review — v0.4 (sealed evidence + multi-clock anchors), + not part of this demo's shipped envelope. Pointer only: + https://github.com/TKCollective/agentoracle-receipt-spec/pull/5 +- PyPI reference verifier: + https://pypi.org/project/agentoracle-receipt-verify/ +- AgentOracle product: + https://agentoracle.co (self-serve $99/month, x402 pay-per-call + at $0.09/verification) +- Whitepaper: https://agentoracle.co/whitepaper diff --git a/showcase/agentoracle-verifiable-delivery/showcase.json b/showcase/agentoracle-verifiable-delivery/showcase.json new file mode 100644 index 0000000..6538712 --- /dev/null +++ b/showcase/agentoracle-verifiable-delivery/showcase.json @@ -0,0 +1,81 @@ +{ + "slug": "agentoracle-verifiable-delivery", + "title": "AgentOracle Verifiable Delivery", + "tagline": "An ACP transaction outcome becomes a signed evidence artifact any third party can verify offline", + "description": "This showcase packages a live AgentOracle receipt against an ACP-shaped delivery claim: the exact request sent to the live production gateway, the JWS General Serialization envelope returned, and a reference verifier that runs offline against the published JWKS. The receipt is content-addressed (RFC 8785 JCS + Ed25519), so two agents who later disagree about what happened — or any neutral auditor with no AgentOracle account — can independently confirm the settlement at the byte level.", + "status": "validated demo", + "topic": "commerce", + "topics": ["commerce", "acp", "verification", "receipts", "settlement", "security"], + "builder": { + "name": "TK Collective", + "url": "https://github.com/TKCollective" + }, + "links": { + "repo": "https://github.com/Virtual-Protocol/acp-cli-demos", + "demo": "https://agentoracle.co", + "share": "https://agentoracle.co/changelog", + "feedback": "https://github.com/Virtual-Protocol/acp-cli-demos/issues/new?title=Feedback%3A%20AgentOracle%20Verifiable%20Delivery&body=Which%20feedback%20prompt%20fits%3F%0A%0A-%20Which%20of%20your%20ACP%20flows%20would%20benefit%20most%20from%20settlement-grade%20evidence%3F%0A-%20What%20additional%20adversarial%20checks%20would%20you%20want%20in%20the%20v_gate%20pipeline%3F%0A-%20Would%20you%20use%20this%20as%20a%20co-issuer%20%28append%20your%20own%20signature%29%20or%20as%20a%20standalone%20reference%3F%0A%0ANotes%3A%0A" + }, + "primitives": ["acp"], + "visual": { + "kind": "receipt verification demo", + "eyebrow": "acp + agentoracle", + "title": "verifiable delivery" + }, + "skills": [ + { + "name": "agentoracle-signed-receipt", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/tree/main/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt", + "sourcePath": "showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt", + "summary": "Reusable ACP-outcome evidence workflow: caller computes a v_gate result, AgentOracle signs a JWS composed envelope binding claim_hash + skill_hash + v_gate + mapping_hash, downstream verifiers verify offline against the published JWKS. Ed25519 + RFC 8785 JCS + RFC 7515 JWS.", + "install": "# Verify a received receipt (any language)\npip install agentoracle-receipt-verify\n\n# Issue a new receipt (requires paid AgentOracle key)\nexport AO_API_KEY=" + } + ], + "artifacts": [ + { + "label": "Signed receipt (live production issuance)", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/receipt.json", + "kind": "proof" + }, + { + "label": "Verifier output (VALID against live JWKS)", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/verify-output.txt", + "kind": "proof" + }, + { + "label": "Redacted run report", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/result-redacted.md", + "kind": "proof" + }, + { + "label": "Demo prompt and reproduction steps", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/prompt.md", + "kind": "prompt" + }, + { + "label": "Skill source (SKILL.md)", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/SKILL.md", + "kind": "skill" + }, + { + "label": "Offline reference verifier (PyPI)", + "href": "https://pypi.org/project/agentoracle-receipt-verify/", + "kind": "verifier" + }, + { + "label": "Receipt format specification (IETF Internet-Draft)", + "href": "https://datatracker.ietf.org/doc/draft-krausz-verification-state", + "kind": "spec" + }, + { + "label": "Open draft under review — v0.4 (sealed evidence + multi-clock anchors), not part of this demo", + "href": "https://github.com/TKCollective/agentoracle-receipt-spec/pull/5", + "kind": "draft" + } + ], + "feedbackPrompts": [ + "Which of your ACP flows would benefit most from settlement-grade evidence?", + "What additional adversarial checks would you want in the v_gate pipeline?", + "Would you use this as a co-issuer (append your own signature) or as a standalone reference?" + ] +} diff --git a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/SKILL.md b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/SKILL.md new file mode 100644 index 0000000..85b3c70 --- /dev/null +++ b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/SKILL.md @@ -0,0 +1,141 @@ +# SKILL: agentoracle-signed-receipt + +## When to use + +When an ACP transaction outcome needs to be independently verifiable +later — settlement dispute resolution, audit trail requirement, +cross-party attestation, examiner compliance record, or any case where +two agents may need to agree on what happened without either side +being trusted. + +Use for any ACP interaction where the settled evidence needs to +outlive the current session: paid delivery of a task, agent-to-agent +service completion, model output attestation, on-chain-adjacent +records that regulators will ask about later. + +## When NOT to use + +Do not use for anything the settlement rail already proves. If the +transaction is fully on-chain and the settlement event itself is the +evidence, an additional signed receipt is redundant. + +Do not use to "prove" an agent's private reasoning. This skill signs +a receipt over a public, verifiable claim about the transaction — not +over the agent's internal state. + +Do not use if the outcome is disputed at the moment of signing. This +skill produces a signed record of what one issuer decided at the time. +Adversarial evidence handling is a separate flow. + +## Inputs, tools, credentials, and preconditions + +**Inputs required:** + +- `claim`: the exact text of what is being asserted about the + transaction. This is what the receipt content-addresses via + `subject.claim_hash`. +- `skill`: a stable identifier for the ruleset that produced the + claim. Content-addressed via `subject.skill_hash`. +- `v_gate`: the caller's already-computed decision result — verdict + (`act` or `halt`), confidence, threshold, adversarial result, + recommendation. + +**Tools:** + +- `POST https://agentoracle-gateway-main-39fa17e.zuplo.app/v1/compose` + — issue the signed receipt. API key required + (`Authorization: Bearer `), $99/month self-serve at + https://agentoracle.co/register, 100 requests/hour/key. +- `pip install agentoracle-receipt-verify` — offline reference + verifier. Zero dependencies beyond stdlib and `cryptography`. +- The public JWKS at https://agentoracle.co/.well-known/jwks.json + — fetched once, cacheable forever, used to verify any receipt. + +**Credentials:** + +- AgentOracle API key for the paid issuance rail + (`$99/mo self-serve` or `x402 pay-per-call` at $0.09 per verification + through `POST /evaluate`). +- No credential needed for verification — verifiers verify offline + against the published public keys. + +**Preconditions:** + +- Caller has computed a `v_gate` result. This skill signs a decision; + it does not run the underlying check. For a rail that runs the + check *and* signs, use `POST /evaluate` on the same base URL. + +## Approval gates + +- **Spending gate:** issuing a receipt through `POST /v1/compose` + requires a paid API key. Verification is free (offline). +- **Posting gate:** none — issued receipts are private to the caller + until the caller chooses to share. +- **Deployment gate:** production keys are minted by Stripe webhook + on `checkout.session.completed`. Rotate via Stripe Dashboard. + +## Stop conditions and handoff rules + +- If verification fails on any of the three checks + (`canonical_recomputes`, `canonical_matches_claimed`, + `all_signatures_verified`), **stop** — do not treat the transaction + as settled evidence. Escalate to the counterparty and to the issuer + before continuing. +- If `v_gate.verdict = "halt"` in the receipt, **stop** — do not act + on the underlying claim, even if some other axis reads well. Halt + is the model saying the claim did not meet the ruleset's threshold + under adversarial checking. Retain the receipt as evidence of the + halt decision. +- If the `kid` in the receipt's protected header is not present in + the current JWKS, **stop** — that either indicates a rotation the + verifier did not update through, or a receipt issued by a key that + is no longer trusted. Reach out to the issuer for the retired-key + JWKS mirror. + +## Validation checks and output contract + +**Validation performed by `verify.py` (or the PyPI verifier directly):** + +1. `canonical_recomputes` — the base64url-decoded payload + canonicalizes back to the same JCS bytes. +2. `canonical_matches_claimed` — the `sha256` of the canonical bytes + matches any claimed canonical hash carried alongside the receipt. +3. `all_signatures_verified` — every entry in `signatures[]` verifies + as an Ed25519 signature over `.` against the + JWK identified by that signature's `kid` in the JWKS. + +**Output contract:** + +- **Envelope kind:** `verification.v0.3+composed` +- **Envelope format:** JWS General Serialization (RFC 7515 §7.2.1) + with one or more signatures. Single-signer for + `POST /v1/compose` output; downstream aggregators + (AgentTrust, Presidio) can append their signatures without + reformatting. +- **Protected header `typ`:** + `application/vnd.verification.v0.3+composed+jws` +- **Signing algorithm:** EdDSA (Ed25519, RFC 8032) +- **Canonicalization:** RFC 8785 JCS +- **Payload fields:** `composed_decision`, `composed_decision_rule`, + `envelope_kind`, `receipt_version`, `signature_meta`, `subject` + (`claim_hash` + `skill_hash`), `v_gate` (issuer, mapping_id, + mapping_hash, verdict, confidence, threshold, adversarial_result, + recommendation). + +The receipt is content-addressed — the same inputs produce byte-identical +canonical bytes and thus identical `canonical_sha256`. This is the +property that makes it a settlement-grade tiebreaker: two parties who +each retain the receipt can independently derive its identity and +verify its signature without trusting AgentOracle infrastructure. + +## References + +- Receipt format specification (IETF Internet-Draft): + https://datatracker.ietf.org/doc/draft-krausz-verification-state +- Open draft under review — v0.4 (sealed evidence + multi-clock anchors), + not part of this demo's shipped envelope. Pointer only: + https://github.com/TKCollective/agentoracle-receipt-spec/pull/5 +- PyPI reference verifier: + https://pypi.org/project/agentoracle-receipt-verify/ +- Whitepaper: https://agentoracle.co/whitepaper +- Changelog: https://agentoracle.co/changelog diff --git a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/compose_request.json b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/compose_request.json new file mode 100644 index 0000000..a9f183b --- /dev/null +++ b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/compose_request.json @@ -0,0 +1,13 @@ +{ + "subject": { + "claim_hash": "sha256-4ecb7096fdfeff23ee1ea86d8c906bf45777beb9ec6d1f039c65badfbdec037e", + "skill_hash": "sha256-20b1be1fef665c5fe49345e5ec1bcb64ee00daf7533fc14f0e552160fbcef336" + }, + "v_gate": { + "verdict": "act", + "v_confidence": 0.95, + "v_gate_threshold": 0.7, + "v_adversarial_result": "resilient", + "v_recommendation": "confident_supported" + } +} diff --git a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/prompt.md b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/prompt.md new file mode 100644 index 0000000..886ef35 --- /dev/null +++ b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/prompt.md @@ -0,0 +1,102 @@ +# Demo prompt — reproducing the AgentOracle signed receipt + +**What this demonstrates.** An ACP transaction between two agents +produces a settlement-grade evidence artifact: a JWS-signed composed +envelope that any third party can verify offline against the issuer's +published JWKS. + +**What "settlement-grade" means here.** If Agent A and Agent B later +disagree about whether the deliverable was in fact delivered, either +party — or a neutral auditor with no AgentOracle account and no +network access to AgentOracle infrastructure — can take the retained +receipt and prove three things: + +1. The payload canonicalizes byte-identically (JCS, RFC 8785). +2. The canonical hash matches the hash claimed on the receipt. +3. The Ed25519 signature verifies against a public key whose `kid` + is in the issuer's published JWKS. + +If those three pass, the receipt is authentic — the issuer really did +sign this exact claim under this exact ruleset at this decision point. + +## Scenario + +Agent A completes an ACP-brokered service: a technical summary of +RFC 8785. Agent B settles for the agreed 3.50 USDC on Base mainnet. +Agent A then requests a signed receipt from AgentOracle attesting that +this delivery occurred, with high confidence, resilient to adversarial +re-reads. + +The claim being verified: + +> Agent A delivered a completed 500-word technical summary of the +> RFC 8785 JCS specification to Agent B for the agreed 3.50 USDC +> settlement on Base mainnet block 47892103. + +The skill under which the check was performed: + +> `acp.delivery.evidence.v1` + +Both are content-addressed via `sha256` into the receipt's +`subject.claim_hash` and `subject.skill_hash` — so the receipt is +tied to the exact bytes of the claim string and the exact identifier +of the ruleset. Any post-hoc edit invalidates the signature. + +## How the receipt was produced + +The exact request sent to `POST /v1/compose`: + +```json +{ + "subject": { + "claim_hash": "sha256-", + "skill_hash": "sha256-" + }, + "v_gate": { + "verdict": "act", + "v_confidence": 0.95, + "v_gate_threshold": 0.7, + "v_adversarial_result": "resilient", + "v_recommendation": "confident_supported" + } +} +``` + +See `compose_request.json` in this folder for the exact bytes. + +The full HTTP request: + +```bash +curl -X POST https://agentoracle-gateway-main-39fa17e.zuplo.app/v1/compose \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer $AO_API_KEY" \ + --data @compose_request.json +``` + +`$AO_API_KEY` is a live production API key issued at +https://agentoracle.co/register on the $99/month self-serve tier. +Every self-serve subscriber gets their own key; keys gate access to +the composition endpoint at 100 requests/hour per key. + +The response is the file at `receipt.json` in this folder. + +## Reproducing on your own key + +1. Sign up at https://agentoracle.co/register with a real card + ($99/month, real charge). Copy the `zpka_...` key from the + post-checkout page (available for 1 hour, retrievable in the + Zuplo Dashboard afterward). +2. Change the `claim` and `skill` inputs to describe your own ACP + transaction. Recompute the SHA-256 of each and update + `compose_request.json`. +3. Compute your own `v_gate` result over the transaction — verdict, + confidence, threshold, adversarial pass, recommendation. +4. Set `AO_API_KEY=` and run the `curl` above. +5. Save the response as your own `receipt.json`. +6. Anyone with your receipt can now verify it offline against + https://agentoracle.co/.well-known/jwks.json without touching your + API key. + +The receipt's authenticity is a property of the AgentOracle signing +key — not of the caller. The API key gates issuance rate and +metering; verification is public. diff --git a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/receipt.json b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/receipt.json new file mode 100644 index 0000000..d13a275 --- /dev/null +++ b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/receipt.json @@ -0,0 +1 @@ +{"payload":"eyJjb21wb3NlZF9kZWNpc2lvbiI6ImFjdCIsImNvbXBvc2VkX2RlY2lzaW9uX3J1bGUiOiJBTkRfUFJFU0VOVCIsImVudmVsb3BlX2tpbmQiOiJ2ZXJpZmljYXRpb24udjAuMytjb21wb3NlZCIsInJlY2VpcHRfdmVyc2lvbiI6IjAuMy4wLWNvbXBvc2VkIiwic2lnbmF0dXJlX21ldGEiOnsiYWdlbnRvcmFjbGVfandrc191cmwiOiJodHRwczovL2FnZW50b3JhY2xlLmNvLy53ZWxsLWtub3duL2p3a3MuanNvbiJ9LCJzdWJqZWN0Ijp7ImNsYWltX2hhc2giOiJzaGEyNTYtNGVjYjcwOTZmZGZlZmYyM2VlMWVhODZkOGM5MDZiZjQ1Nzc3YmViOWVjNmQxZjAzOWM2NWJhZGZiZGVjMDM3ZSIsInNraWxsX2hhc2giOiJzaGEyNTYtMjBiMWJlMWZlZjY2NWM1ZmU0OTM0NWU1ZWMxYmNiNjRlZTAwZGFmNzUzM2ZjMTRmMGU1NTIxNjBmYmNlZjMzNiJ9LCJ2X2dhdGUiOnsiaXNzdWVyIjoiYWdlbnRvcmFjbGUiLCJtYXBwaW5nX2lkIjoiYWdlbnRvcmFjbGUtdjAuMy0yMDI2LTA1LTMwIiwidl9hZHZlcnNhcmlhbF9yZXN1bHQiOiJyZXNpbGllbnQiLCJ2X2NvbmZpZGVuY2UiOjAuOTUsInZfZ2F0ZV9tYXBwaW5nX2hhc2giOiJzaGEyNTYtMGE3ODI2Mzk3Njc5MGRmNmU3NmNkOWYzZjQ0MWJmNWEzYjVjM2E4MmUzNDZiNWFjYTQzZTQ5NjI2ODgxZDdiMCIsInZfZ2F0ZV90aHJlc2hvbGQiOjAuNywidl9yZWNvbW1lbmRhdGlvbiI6ImNvbmZpZGVudF9zdXBwb3J0ZWQiLCJ2ZXJkaWN0IjoiYWN0In19","signatures":[{"protected":"eyJhbGciOiJFZERTQSIsImtpZCI6ImFvLWNvbXBvc2VkLTIwMjYtMDctZWQyNTUxOS0zZDQ0YmEyNyIsInR5cCI6ImFwcGxpY2F0aW9uL3ZuZC52ZXJpZmljYXRpb24udjAuMytjb21wb3NlZCtqd3MifQ","signature":"XxsTuYNJZlspmm6vTe6kq1As6OtI0m4s71H4mrr70sWpDmam-ZNgBlt4Vpqo0wwfKZT3Dc0n96XxTixJ9kIVBA"}]} \ No newline at end of file diff --git a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/result-redacted.md b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/result-redacted.md new file mode 100644 index 0000000..a4678d1 --- /dev/null +++ b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/result-redacted.md @@ -0,0 +1,132 @@ +# Demo run — redacted result + +Run captured 2026-08-03 UTC against the live AgentOracle production +gateway. All fields are the actual bytes from the run; the API key +is redacted. + +## HTTP request + +``` +POST /v1/compose HTTP/1.1 +Host: agentoracle-gateway-main-39fa17e.zuplo.app +Content-Type: application/json +Authorization: Bearer zpka_ed17********************02523b32 ← REDACTED + +{ + "subject": { + "claim_hash": "sha256-4ecb7096fdfeff23ee1ea86d8c906bf45777beb9ec6d1f039c65badfbdec037e", + "skill_hash": "sha256-20b1be1fef665c5fe49345e5ec1bcb64ee00daf7533fc14f0e552160fbcef336" + }, + "v_gate": { + "verdict": "act", + "v_confidence": 0.95, + "v_gate_threshold": 0.7, + "v_adversarial_result": "resilient", + "v_recommendation": "confident_supported" + } +} +``` + +## HTTP response + +``` +HTTP/2 200 +content-type: application/json +``` + +Response body: the JWS General Serialization envelope committed as +`receipt.json` in this directory. + +## Receipt decoded + +Protected header (base64url-decoded from `signatures[0].protected`): + +```json +{ + "alg": "EdDSA", + "kid": "ao-composed-2026-07-ed25519-3d44ba27", + "typ": "application/vnd.verification.v0.3+composed+jws" +} +``` + +Payload (base64url-decoded, formatted for readability): + +```json +{ + "composed_decision": "act", + "composed_decision_rule": "AND_PRESENT", + "envelope_kind": "verification.v0.3+composed", + "receipt_version": "0.3.0-composed", + "signature_meta": { + "agentoracle_jwks_url": "https://agentoracle.co/.well-known/jwks.json" + }, + "subject": { + "claim_hash": "sha256-4ecb7096fdfeff23ee1ea86d8c906bf45777beb9ec6d1f039c65badfbdec037e", + "skill_hash": "sha256-20b1be1fef665c5fe49345e5ec1bcb64ee00daf7533fc14f0e552160fbcef336" + }, + "v_gate": { + "issuer": "agentoracle", + "mapping_id": "agentoracle-v0.3-2026-05-30", + "v_adversarial_result": "resilient", + "v_confidence": 0.95, + "v_gate_mapping_hash": "sha256-0a78263976790df6e76cd9f3f441bf5a3b5c3a82e346b5aca43e49626881d7b0", + "v_gate_threshold": 0.7, + "v_recommendation": "confident_supported", + "verdict": "act" + } +} +``` + +- `composed_decision: act` — the aggregated verdict. +- `subject.claim_hash` — sha256 of the exact claim text in + `prompt.md`. Regenerable from the string; any post-hoc edit + invalidates the signature. +- `subject.skill_hash` — sha256 of the ruleset identifier + `acp.delivery.evidence.v1`. +- `v_gate.v_gate_mapping_hash` — sha256 of the mapping bytes on + disk at + https://agentoracle.co/mappings/agentoracle-v0.3-2026-05-30.json. + Pins the recommendation table that produced the verdict. +- `v_gate.verdict: act`, `v_recommendation: confident_supported` — + the decision resolved to act because the aggregated inputs + satisfied rule 1 of the mapping (resilient adversarial pass + + confidence ≥ threshold + supported). + +## Verification run + +Run of `python3 verify.py` in this directory: + +``` +receipt: .../skills/agentoracle-signed-receipt/examples/receipt.json +jwks_url: https://agentoracle.co/.well-known/jwks.json + +=== VerifyResult === + canonical_sha256: sha256-b9cf4e4afbee83cfd110c7923c6adff68a70487fb2cc7053fcb203e898afd695 + valid: True + checks: {'canonical_recomputes': True, 'all_signatures_verified': True} + signers: [{'kid': 'ao-composed-2026-07-ed25519-3d44ba27', + 'issuer': 'https://agentoracle.co/.well-known/jwks.json', + 'verified': True}] +``` + +Exit code: `0`. + +## Public/private boundaries + +**Public:** +- Full receipt bytes (`receipt.json`) — the whole point of a signed + receipt is that publishing it does not weaken the signature. +- Full request body (`compose_request.json`). +- Claim text (`prompt.md`). +- All hashes and sha256 values. +- The public key identified by `kid` — resolvable from + https://agentoracle.co/.well-known/jwks.json. + +**Redacted:** +- The API key used to authenticate the `POST /v1/compose` call + (redacted to `zpka_ed17...02523b32` — you would use your own). + +**Private (never in the run, never in this doc):** +- AgentOracle's Ed25519 signing private key (lives in Zuplo secret + storage; never exposed). +- Stripe secret keys, webhook signing secrets, session keys. diff --git a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/verify-output.txt b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/verify-output.txt new file mode 100644 index 0000000..8b49eaf --- /dev/null +++ b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/verify-output.txt @@ -0,0 +1,8 @@ +receipt: /home/user/workspace/acp-cli-demos/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/receipt.json +jwks_url: https://agentoracle.co/.well-known/jwks.json + +=== VerifyResult === + canonical_sha256: sha256-b9cf4e4afbee83cfd110c7923c6adff68a70487fb2cc7053fcb203e898afd695 + valid: True + checks: {'canonical_recomputes': True, 'all_signatures_verified': True} + signers: [{'kid': 'ao-composed-2026-07-ed25519-3d44ba27', 'issuer': 'https://agentoracle.co/.well-known/jwks.json', 'verified': True}] diff --git a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/verify.py b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/verify.py new file mode 100644 index 0000000..86a4d42 --- /dev/null +++ b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/verify.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +""" +Offline verifier for the AgentOracle demo receipt. + +Uses the AgentOracle PyPI verifier library `agentoracle-receipt-verify` +against the receipt file committed here (`receipt.json`) and the live +JWKS published at https://agentoracle.co/.well-known/jwks.json. + +Runs three checks per the receipt-spec conformance suite: + + 1. Canonical bytes recompute — verify the payload bytes canonicalize + back to the same JCS form. + 2. Canonical hash matches the claimed canonical_sha256. + 3. Ed25519 signature over the JWS signing input verifies against the + JWK identified by the protected header's `kid`. + +Exit code 0 if all three pass, non-zero otherwise. + +Usage: + python3 verify.py [receipt.json] + + receipt.json defaults to the sibling file in this directory. +""" + +from __future__ import annotations + +import json +import os +import sys +import urllib.request +from pathlib import Path + + +JWKS_URL = "https://agentoracle.co/.well-known/jwks.json" + + +def load_receipt(path: str | os.PathLike) -> dict: + with open(path, "r") as f: + return json.load(f) + + +def fetch_live_jwks() -> dict: + with urllib.request.urlopen(JWKS_URL, timeout=15) as r: + return json.load(r) + + +def main() -> int: + here = Path(__file__).resolve().parent + receipt_path = Path(sys.argv[1]) if len(sys.argv) > 1 else here / "receipt.json" + + print(f"receipt: {receipt_path}") + print(f"jwks_url: {JWKS_URL}") + print() + + try: + from agentoracle_receipt_verify import verify + except ImportError: + print("MISSING DEPENDENCY: install with:") + print(" pip install agentoracle-receipt-verify") + return 2 + + receipt = load_receipt(receipt_path) + jwks = fetch_live_jwks() + + result = verify(receipt, {JWKS_URL: jwks}) + + print("=== VerifyResult ===") + print(f" canonical_sha256: {result.canonical_sha256}") + print(f" valid: {result.valid}") + print(f" checks: {result.checks}") + print(f" signers: {result.signers}") + if result.errors: + print(f" errors: {result.errors}") + return 1 + return 0 if result.valid else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) From bc78661c6d2929e1f7e5bbe6c544b58a65bbb4e6 Mon Sep 17 00:00:00 2001 From: TK Collective Date: Mon, 3 Aug 2026 19:03:37 +0000 Subject: [PATCH 2/3] Address bot review: verb-first tagline + hero posterUrl - Tagline updated to verb-first per bot suggestion, tweaked to keep the offline-verifiable property that distinguishes this from a log - Added assets/hero.png (16:9) and posterUrl in the visual block so the community showcase card renders with a poster - Topics left as-is (accurate to the artifact); happy for maintainers to consolidate if that's the house convention --- .../assets/hero.png | Bin 0 -> 83816 bytes .../showcase.json | 5 +++-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 showcase/agentoracle-verifiable-delivery/assets/hero.png diff --git a/showcase/agentoracle-verifiable-delivery/assets/hero.png b/showcase/agentoracle-verifiable-delivery/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..49ef99c311f876bbf857a2b3e7e7d4431fe6830c GIT binary patch literal 83816 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 F{ui_GudDz7 literal 0 HcmV?d00001 diff --git a/showcase/agentoracle-verifiable-delivery/showcase.json b/showcase/agentoracle-verifiable-delivery/showcase.json index 6538712..9148889 100644 --- a/showcase/agentoracle-verifiable-delivery/showcase.json +++ b/showcase/agentoracle-verifiable-delivery/showcase.json @@ -1,7 +1,7 @@ { "slug": "agentoracle-verifiable-delivery", "title": "AgentOracle Verifiable Delivery", - "tagline": "An ACP transaction outcome becomes a signed evidence artifact any third party can verify offline", + "tagline": "Turn ACP transaction outcomes into signed receipts anyone can verify offline", "description": "This showcase packages a live AgentOracle receipt against an ACP-shaped delivery claim: the exact request sent to the live production gateway, the JWS General Serialization envelope returned, and a reference verifier that runs offline against the published JWKS. The receipt is content-addressed (RFC 8785 JCS + Ed25519), so two agents who later disagree about what happened — or any neutral auditor with no AgentOracle account — can independently confirm the settlement at the byte level.", "status": "validated demo", "topic": "commerce", @@ -20,7 +20,8 @@ "visual": { "kind": "receipt verification demo", "eyebrow": "acp + agentoracle", - "title": "verifiable delivery" + "title": "verifiable delivery", + "posterUrl": "https://raw.githubusercontent.com/Virtual-Protocol/acp-cli-demos/main/showcase/agentoracle-verifiable-delivery/assets/hero.png" }, "skills": [ { From bdf1826457301601cde8b38399d9ab845974acff Mon Sep 17 00:00:00 2001 From: Joe Krausz Date: Thu, 6 Aug 2026 12:12:38 +0000 Subject: [PATCH 3/3] Remove pricing/promotional references per maintainer review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README.md: drop pricing bullet from References; add single 'Learn more' section at end - showcase.json: soften install snippet — API key without price - SKILL.md: strip pricing from Tools + Credentials + Approval gates; retain full technical detail (endpoints, rate limits, RFC refs, algorithm choices) - prompt.md: technical framing for key acquisition; reproduction steps unchanged in substance No changes to any technical content: receipt.json, compose_request.json, verify.py, verify-output.txt, result-redacted.md, hero.png untouched. Showcase now fully technical. --- .../agentoracle-verifiable-delivery/README.md | 7 ++++--- .../showcase.json | 2 +- .../skills/agentoracle-signed-receipt/SKILL.md | 18 +++++++++--------- .../examples/prompt.md | 13 +++++-------- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/showcase/agentoracle-verifiable-delivery/README.md b/showcase/agentoracle-verifiable-delivery/README.md index 9e0b723..8f80f8f 100644 --- a/showcase/agentoracle-verifiable-delivery/README.md +++ b/showcase/agentoracle-verifiable-delivery/README.md @@ -108,7 +108,8 @@ exact byte order at that exact decision point. https://github.com/TKCollective/agentoracle-receipt-spec/pull/5 - PyPI reference verifier: https://pypi.org/project/agentoracle-receipt-verify/ -- AgentOracle product: - https://agentoracle.co (self-serve $99/month, x402 pay-per-call - at $0.09/verification) - Whitepaper: https://agentoracle.co/whitepaper + +## Learn more + +https://agentoracle.co diff --git a/showcase/agentoracle-verifiable-delivery/showcase.json b/showcase/agentoracle-verifiable-delivery/showcase.json index 9148889..8d95449 100644 --- a/showcase/agentoracle-verifiable-delivery/showcase.json +++ b/showcase/agentoracle-verifiable-delivery/showcase.json @@ -29,7 +29,7 @@ "href": "https://github.com/Virtual-Protocol/acp-cli-demos/tree/main/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt", "sourcePath": "showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt", "summary": "Reusable ACP-outcome evidence workflow: caller computes a v_gate result, AgentOracle signs a JWS composed envelope binding claim_hash + skill_hash + v_gate + mapping_hash, downstream verifiers verify offline against the published JWKS. Ed25519 + RFC 8785 JCS + RFC 7515 JWS.", - "install": "# Verify a received receipt (any language)\npip install agentoracle-receipt-verify\n\n# Issue a new receipt (requires paid AgentOracle key)\nexport AO_API_KEY=" + "install": "# Verify a received receipt (any language)\npip install agentoracle-receipt-verify\n\n# Issue a new receipt (requires an AgentOracle API key)\nexport AO_API_KEY=" } ], "artifacts": [ diff --git a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/SKILL.md b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/SKILL.md index 85b3c70..c323b6b 100644 --- a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/SKILL.md +++ b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/SKILL.md @@ -44,8 +44,7 @@ Adversarial evidence handling is a separate flow. - `POST https://agentoracle-gateway-main-39fa17e.zuplo.app/v1/compose` — issue the signed receipt. API key required - (`Authorization: Bearer `), $99/month self-serve at - https://agentoracle.co/register, 100 requests/hour/key. + (`Authorization: Bearer `), 100 requests/hour/key. - `pip install agentoracle-receipt-verify` — offline reference verifier. Zero dependencies beyond stdlib and `cryptography`. - The public JWKS at https://agentoracle.co/.well-known/jwks.json @@ -53,9 +52,9 @@ Adversarial evidence handling is a separate flow. **Credentials:** -- AgentOracle API key for the paid issuance rail - (`$99/mo self-serve` or `x402 pay-per-call` at $0.09 per verification - through `POST /evaluate`). +- AgentOracle API key for the issuance rail (`POST /v1/compose`). + An alternate `POST /evaluate` endpoint on the same base URL runs + the underlying check and signs in one call. - No credential needed for verification — verifiers verify offline against the published public keys. @@ -67,12 +66,13 @@ Adversarial evidence handling is a separate flow. ## Approval gates -- **Spending gate:** issuing a receipt through `POST /v1/compose` - requires a paid API key. Verification is free (offline). +- **Issuance gate:** issuing a receipt through `POST /v1/compose` + requires an API key. Verification is offline and requires no + credential. - **Posting gate:** none — issued receipts are private to the caller until the caller chooses to share. -- **Deployment gate:** production keys are minted by Stripe webhook - on `checkout.session.completed`. Rotate via Stripe Dashboard. +- **Key issuance gate:** production keys are minted server-side by a + provisioning webhook; rotation is handled externally by the issuer. ## Stop conditions and handoff rules diff --git a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/prompt.md b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/prompt.md index 886ef35..ea9dbca 100644 --- a/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/prompt.md +++ b/showcase/agentoracle-verifiable-delivery/skills/agentoracle-signed-receipt/examples/prompt.md @@ -73,19 +73,16 @@ curl -X POST https://agentoracle-gateway-main-39fa17e.zuplo.app/v1/compose \ --data @compose_request.json ``` -`$AO_API_KEY` is a live production API key issued at -https://agentoracle.co/register on the $99/month self-serve tier. -Every self-serve subscriber gets their own key; keys gate access to -the composition endpoint at 100 requests/hour per key. +`$AO_API_KEY` is a live production API key issued by AgentOracle. +Keys gate access to the composition endpoint at 100 requests/hour +per key. The response is the file at `receipt.json` in this folder. ## Reproducing on your own key -1. Sign up at https://agentoracle.co/register with a real card - ($99/month, real charge). Copy the `zpka_...` key from the - post-checkout page (available for 1 hour, retrievable in the - Zuplo Dashboard afterward). +1. Obtain an AgentOracle API key. The `zpka_...` value is what + `$AO_API_KEY` expects. 2. Change the `claim` and `skill` inputs to describe your own ACP transaction. Recompute the SHA-256 of each and update `compose_request.json`.