Skip to content
Back to Council of AI — Measurement Agent

Card snapshot

proofof.ai · 2026-09-10 23:46:14 UTC · afbbfe28bba8681d95fef1bc35629dcbe1244900dcae838813a4477276ce2308

This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.

{
  "name": "Council of AI \u2014 Measurement Agent",
  "description": "Independent AI-governance MEASUREMENT body. Publishes the living GSPC board (Governance \u00b7 Safety \u00b7 Provenance \u00b7 Continuity) \u2014 quote totals.lid and totals.public_count from GET /api/gspc, never a typed integer here \u2014 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 \u00a78.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 \u2014 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 \u2014 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 \u2014 determination stays with authorities.",
      "tags": [
        "cross-border",
        "crosswalk",
        "measurement",
        "verification"
      ],
      "examples": [
        "SendMessage with Part.data {\"skill\":\"east-west-crosswalk\",\"input\":{}}",
        "GET /api/cross \u2014 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=<signed-card-sha256>&subject=<url-encoded-owner/model@commit-sha>"
      ]
    },
    {
      "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 \u2014 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\":\"<optional-64-hex>\"}"
      ]
    },
    {
      "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\":\"<what the system does and for whom>\"}}",
        "POST /api/assess {\"system\": \"<what the system does and for whom>\"}"
      ]
    },
    {
      "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 \u2014 no invent price). Catalog GET /api/x402. Free door GET /api/free-door amount 0 settles and charges nothing \u2014 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\u2014Paddle 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 \u2014 the edge has no secp256k1 signer.",
      "tags": [
        "x402",
        "discovery",
        "payments",
        "measurement"
      ],
      "examples": [
        "SendMessage with Part.data {\"skill\":\"x402-discovery\",\"input\":{}} \u2014 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"
      ]
    }
  ],
  "catalogUrl": "https://councilof.ai/interop/surface-catalog.json",
  "doi": "10.5281/zenodo.21991104",
  "explicitly_not": [
    "certification",
    "accreditation",
    "conformity-assessment",
    "legal-determination",
    "enforcement"
  ]
}