{ "name": "Council of AI — Measurement Agent", "description": "Independent AI-governance MEASUREMENT body. Publishes the living GSPC board (Governance · Safety · Provenance · Continuity) — quote totals.lid and totals.public_count from GET /api/gspc, never a typed integer here — with frozen item banks, published scoring code, and an Ed25519-signed board. Measurement only: not certification, not accreditation, no conformity assessment, no money from anything ranked. A2A v1.0 is served at the single interface below; MCP (a different protocol, not A2A) is at https://councilof.ai/mcp.", "version": "1.1.0", "provider": { "organization": "CSOAI Ltd", "url": "https://councilof.ai" }, "supportedInterfaces": [ { "url": "https://councilof.ai/api/a2a", "protocolBinding": "JSONRPC", "protocolVersion": "1.0" } ], "documentationUrl": "https://councilof.ai/llms.txt", "iconUrl": "https://councilof.ai/og-image.png", "capabilities": { "streaming": false, "pushNotifications": false, "extendedAgentCard": false, "extensions": [ { "uri": "https://councilof.ai/a2a/extensions/signed-receipts/v1/", "required": false, "description": "A DRAFT WE PUBLISH AND DO NOT YET EMIT: this agent attaches no receipt to a response today. Declared because we author the specification, not because the door implements it. Ed25519-signed task-outcome receipts plus a did:web key-trust convention for AgentCard signing (A2A v1.0 §8.4). A receipt is evidence of what was claimed, not a certification, and a signature over it is an integrity claim rather than a truth claim." }, { "uri": "https://councilof.ai/.well-known/x402.json", "required": false, "description": "x402 discovery index for the agent pay rail (also GET /api/x402). Free door amount 0 at /api/free-door. Verification stays free. payTo is merchant not payer. Self-settle is not revenue. Settlement is PROVEN on Base mainnet: transaction hashes are published in docs/product/SETTLED-DOORS and verifiable on chain by anyone, independently of this server. Measurement credential, never a grade." }, { "uri": "https://github.com/x402-foundation/x402/blob/69652a69798f0b08f95bef33318896e36e210f7e/specs/extensions/extension-offer-and-receipt.md", "required": false, "description": "x402 Offer & Receipt extension (v0.6), JWS profile — CONDITIONALLY EMITTED. A signed offer is attached only when BOARD_SIGN_KEY_PKCS8_B64 is provisioned and an accepts[] entry can be committed; otherwise the 402 carries csoai.offer_receipt with the gap and no offer-receipt extension block. A signed receipt is attached only after facilitator-confirmed settlement when the facilitator names a payer and the board key is available; otherwise the paid artefact still delivers and receiptGap states why no signed receipt was attached. When emitted, the format is jws, alg EdDSA, kid did:web:csoai.org#board-attestation-1, resolvable at https://csoai.org/.well-known/did.json (an authorization mechanism the extension names in section 4.5.1). eip712 is NOT emitted: the edge has no secp256k1 signer; when the optional Ed25519 board key is provisioned it signs JWS. A format we cannot produce is better declared missing than faked. A receipt proves this server signed those bytes; it is not by itself proof that money moved, and the transaction field, when present, is a claim to check against the chain." } ] }, "defaultInputModes": [ "text/plain", "application/json" ], "defaultOutputModes": [ "text/plain", "application/json" ], "skills": [ { "id": "gspc-board", "name": "Signed GSPC Board", "description": "SendMessage answers with the live board: totals.lid verbatim from GET /api/gspc and the derived axis rows (axis, family, kind, status, n, separation, leader state). Empty cells stay empty; a withheld leader is a state, not a zero; a fetch failure is UNCHECKABLE, never a fabricated number. Live JSON, recomputable from published rows.", "tags": [ "measurement", "governance", "verification" ], "examples": [ "SendMessage with Part.data {\"skill\":\"gspc-board\",\"input\":{}}", "Legacy compatibility: one text Part containing exactly \"board\"", "GET /api/gspc — the same board, outside A2A" ] }, { "id": "east-west-crosswalk", "name": "East-West crosswalk & cross-border card", "description": "One signed GSPC measurement mapped across EU, UK, US, Illinois, and China GB/T alignment surfaces. Crosswalk v1 JSON, cross-border signed card, and stranger verify at /gspc-verify. Measurement only — determination stays with authorities.", "tags": [ "cross-border", "crosswalk", "measurement", "verification" ], "examples": [ "SendMessage with Part.data {\"skill\":\"east-west-crosswalk\",\"input\":{}}", "GET /api/cross — cross-border signed card" ] }, { "id": "measured-badge", "name": "Measured Badge", "description": "A global-board README link plus a card-bound status badge. The global board never becomes a model score. A model-specific score may render only from a VALID signed cell that names the exact subject and immutable revision; otherwise the subject is UNMEASURED or UNSIGNED.", "tags": [ "measurement", "governance", "verification" ], "examples": [ "SendMessage with Part.data {\"skill\":\"measured-badge\",\"input\":{\"card\":\"<64-hex-signed-card-sha256>\",\"subject\":\"owner/model@<40-or-64-hex-revision>\"}}", "GET /api/badge?card=&subject=" ] }, { "id": "benchmark-quality-register", "name": "Benchmark-quality register", "description": "Signed register of what third-party AI benchmarks disclose about their own process integrity. Deterministic predicates only — no language model judges. Records are unsolicited; nothing on the register is certification or endorsement.", "tags": [ "meta-evaluation", "benchmark-quality", "reproducibility", "governance" ], "examples": [ "SendMessage with Part.data {\"skill\":\"benchmark-quality-register\",\"input\":{}}", "GET /api/benchmark-quality" ] }, { "id": "article50-detect", "name": "Article 50 provenance detection (free)", "description": "Verify a C2PA-style signed manifest for AI-generated content (EU AI Act Article 50) at POST https://councilof.ai/api/detect. Deterministically checks the Ed25519-signed metadata layer and the IPTC/schema.org digitalSourceType; returns AI_MARKED / NOT_AI_MARKED / UNVERIFIABLE with a signed verdict receipt (in-toto/DSSE when a board key is bound). The imperceptible-watermark layer we cannot see is declared, never claimed. Free for all; unrestricted for authorities, media, fact-checkers, researchers and civil society. Not certification.", "tags": [ "article-50", "provenance", "detection", "verification", "c2pa" ], "examples": [ "SendMessage with Part.data {\"skill\":\"article50-detect\",\"input\":{\"manifest\":{\"claim\":{}}}}", "POST /api/detect {\"manifest\":{...},\"asset_hash\":\"\"}" ] }, { "id": "eu-ai-act-screen", "name": "EU AI Act screening helper (deterministic, text-only)", "description": "POST https://councilof.ai/api/assess with a system description. Keyword matches name the Annex III categories and Article 5 patterns a human should inspect; no model is consulted. It does not establish legal tier, applicability, exceptions or compliance, and an empty description is UNMEASURED, not a low-risk finding. When no signing key is provisioned the report says UNSIGNED out loud.", "tags": [ "eu-ai-act", "screening", "deterministic" ], "examples": [ "SendMessage with Part.data {\"skill\":\"eu-ai-act-screen\",\"input\":{\"system\":\"\"}}", "POST /api/assess {\"system\": \"\"}" ] }, { "id": "x402-discovery", "name": "x402 discovery + free door", "description": "Agents discover paid artefact rails via GET https://councilof.ai/.well-known/x402.json (mode is reported from runtime env, Base eip155:8453, USDC; amounts from challenge only — no invent price). Catalog GET /api/x402. Free door GET /api/free-door amount 0 settles and charges nothing — proves the rail. Living board GET /api/gspc. Verification stays free at /gspc-verify. payTo is merchant receive, never the signer. Self-settle proves the rail; stranger revenue is separate (do not invent buyers). Coming—Paddle not live. No card-processor invent. Measurement, never certification. Signed offers and receipts are conditional: a 402 carries extensions['offer-receipt'].info.offers[] only when BOARD_SIGN_KEY_PKCS8_B64 is provisioned and an accepts[] entry can be committed; otherwise csoai.offer_receipt names the gap. A signed receipt appears in the X-PAYMENT-RESPONSE SettlementResponse only after facilitator-confirmed settlement when the facilitator names a payer and the board key is available; otherwise receiptGap states why no signed receipt was attached. Emitted signatures use format jws, alg EdDSA, kid did:web:csoai.org#board-attestation-1. Verify one without trusting us: POST it to /api/receipts/verify, or run scripts/verify_receipt.py against https://csoai.org/.well-known/did.json. Your own receipts: GET /api/receipts?payer=0x... (status UNRECORDED means no store is bound on that deployment, never that you did not pay). No eip712 is emitted — the edge has no secp256k1 signer.", "tags": [ "x402", "discovery", "payments", "measurement" ], "examples": [ "SendMessage with Part.data {\"skill\":\"x402-discovery\",\"input\":{}} — catalog only; it makes no payment", "GET https://councilof.ai/.well-known/x402.json", "GET https://councilof.ai/api/free-door", "GET https://councilof.ai/api/gspc", "GET https://councilof.ai/gspc-verify", "GET https://councilof.ai/api/free-door # inspect csoai.offer_receipt; read extensions['offer-receipt'].info.offers[0].signature only when signed", "POST https://councilof.ai/api/receipts/verify -d '{\"receipt\":\"eyJ...\"}'", "GET https://councilof.ai/api/receipts?payer=0x4dB7AAFbe797a39Cd6Cc4E7aa64d970F7F6E02B7" ] }, { "id": "estate-index", "name": "Estate index (census, not evidence)", "description": "SendMessage answers with the estate census summary from GET /api/state -> estate_index, and the full index is GET /interop/master-consolidation-2026-09-16.json with its OpenTimestamps proof beside it. Every artefact CSOAI holds across this repository, Hugging Face, GitHub, Kaggle and Oracle Object Storage, committed to one Merkle root. Read it as a census, never as evidence: INDEXED means we found the artefact and measured nothing against it, and UNSIGNED means a card body exists carrying signature: null awaiting a signing decision. Two leaf classes sit under the root and are never added together: a bytes leaf is the sha256 of an artefact we read, a record leaf is the sha256 of our own note about a remote artefact we did not download and proves nothing about the remote bytes. The root is UNSIGNED, so it records when the set existed and not who assembled it, and it is therefore not Rekor-witnessable the way public/root.json is. It does not replace root.json or the signed card index, each of which commits to its own separate corpus with zero identifier overlap. Some identifiers are withheld because they carry internal names; those entries are kept and their digests untouched, so inclusion can still be proved by a holder of the real identifier. Measurement, never certification.", "tags": [ "census", "provenance", "merkle", "measurement" ], "examples": [ "SendMessage with Part.data {\"skill\":\"estate-index\",\"input\":{}} — returns the summary, not the 7,940 rows", "GET https://councilof.ai/api/state # estate_index.merkle_root and the counts", "GET https://councilof.ai/interop/master-consolidation-2026-09-16.json", "GET https://councilof.ai/interop/master-consolidation-2026-09-16.json.ots", "GET https://councilof.ai/estate/" ] } ], "catalogUrl": "https://councilof.ai/interop/surface-catalog.json", "doi": "10.5281/zenodo.21991104", "explicitly_not": [ "certification", "accreditation", "conformity-assessment", "legal-determination", "enforcement" ] }