# Council of AI (CSOAI Ltd) Public name: Council of AI. Legal: CSOAI Ltd, UK Companies House 16939677. did:web:csoai.org. Neutral AI measurement body. Measurement, not certification. We do not certify, accredit, or issue conformity assessments. ## Live board (always fetch) Switchboard framing: the estate densifies a recomputable signed record over time (request queue + signed cards); witnesses read the root. It is not a phone company and not a certificate. Do not freeze numbers in this file. Read the living board: GET https://councilof.ai/api/gspc Public lock (language only — every count lives on the API, none is frozen here): Quote `totals.public_count`, or `totals.count_grammar` for the long form. TWO numbers and they always travel together: `totals.axes` counts SLOTS on the board, `totals.measured_axes` counts slots with a real run behind them, and `totals.unmeasured_axes` is published so the gap is visible. Quoting the slot count alone would claim measurements that do not exist — quote both, or quote the smaller. In-lane honesty probes are not board-quotable. Slot-15 stays unnamed and empty on public chrome if present. Lid (BLUEPRINT 02Sep2026 §2.3 / BLOCK A1 — measured ≠ scored; do not invent leaders for the 11 withheld model axes): 22 axes measured · 14 model fleets · 3 public leader scores · 8 fact runs · TIE is TIE · not a certificate. Also quote `totals.public_leader_count` beside any "22 measured" claim. Public point leaders are shown on safety (TIE), swarm (UNTESTED for separation), and jail (TIE). The 8 financial axes are fact runs, not leader scores. TIE is TIE; UNTESTED is not a win. Not a certificate. (Historical note, kept so the correction is legible: this file used to freeze the count at "14 quotable board slots" and to instruct readers not to say 22. That lock was written while the 8 financial/domain axes were ruled in but absent from the signed payload — a guardrail against typing a number the artifact could not back. The 2026-08-26 sweep wired them in and re-signed, so the API now backs the larger count. The guardrail is retired; the rule it protected — never type a count, never call a slot a measurement — is not.) Live API axis names (order may update on the API; do not treat this list as a score table, and do not count this list to get the board's size — read `totals` instead): Behavioural (`family: gspc`): governance, safety, provenance, continuity, conformance, openness, machinery-conformity, care, cross-reality, detector-interop, art5-safeguard, swarm, affect, jail. Financial/domain (`family: financial`): provenance-controls, reserve-attestation, regulatory-framework, distribution-integrity, custody-disclosure, ai-adoption-components, labour-components, humanoid-labour-index. Whether each is MEASURED or a declared slot is on GET /api/gspc — never frozen here. Index-style slots stay UNMEASURED when the API says so (C-2026-0826-05). Jail is a measured containment floor on the behavioural half of the board — not a certification. Affect is MEASURED when the API says so; counsel-pending labels stay honest when present. Do not quote scores, n, leaders, or stamp tables from this file. ## Agent-UI stream (agents) - Living GSPC as AG-UI events: GET https://councilof.ai/api/agui/gspc-state — SSE STATE_DELTA + TEXT_MESSAGE_CONTENT, derived from GET /api/gspc per request. Read-only presentation transport; it renders the board, it never awards a state. Empty cells stay visible; no score is invented to fill a frame. - Human view of the same board: https://councilof.ai/dashboard - This is AG-UI (agent to user). MCP is agent to tools; A2A is agent to agent (POST https://councilof.ai/api/a2a). Three different rails — do not read one as another, and do not treat this stream as an A2A extension. ## x402 discovery (agents) - Discovery: GET https://councilof.ai/.well-known/x402.json — mode live · Base eip155:8453 · USDC (amounts from challenge only; no invent price) - Catalog: GET https://councilof.ai/api/x402 - Paid path in six steps (discover → request → 402 → settle from your own wallet → receive → verify offline): https://councilof.ai/quickstart/ · machine-readable: https://councilof.ai/quickstart.json · offline card-v0 checker: https://councilof.ai/verifier/card-v0-verify.mjs - Catalog trust (counts only — fetch, never freeze): GET https://councilof.ai/interop/x402-trust/latest.json — quote live `counts`. A 402 is not delivery; a 404 is a phantom. Do not freeze a pair in this file. - Free door (amount 0): GET https://councilof.ai/api/free-door — settles, charges nothing; proves the rail - Signed offers: a 402 carries `extensions["offer-receipt"].info.offers[]` only when the Pages signing key is available — one server-signed offer per `accepts[]` entry (x402 Offer & Receipt extension, format jws, alg EdDSA, kid did:web:csoai.org#board-attestation-1) - Signed receipts: a settled 200 returns one in the X-PAYMENT-RESPONSE SettlementResponse at `extensions["offer-receipt"].info.receipt` only when settlement exposes the required payer and transaction evidence and the Pages signing key is available - Check either without trusting us: run scripts/verify_receipt.py against https://csoai.org/.well-known/did.json or POST https://councilof.ai/api/receipts/verify - Your receipts: GET https://councilof.ai/api/receipts?payer=0x… — status UNRECORDED means no store is bound on that deployment, never that you did not pay - We emit jws only, never eip712: the edge holds one Ed25519 key and no secp256k1 signer. A format we cannot produce is declared missing, not faked - A receipt proves this server signed those bytes. It is not proof money moved; check `transaction` against Base yourself - Verify stays free: https://councilof.ai/gspc-verify - Living board: GET https://councilof.ai/api/gspc — quote `totals.public_count` + `totals.lid` (never freeze here) - Human: free + x402 pay-as-you-go · human booking not live · no processor named - Agents: payTo is merchant receive — never the signer - Self-settle proves the rail; stranger revenue is separate (do not invent buyers) - Jail goldbank: https://huggingface.co/datasets/csoai/gspc-jail-goldbank - Measurement, not certification. Never sell a rank. ## Paid artefacts (agents) Amounts live only inside an HTTP 402 `accepts[]` challenge. Do not invent a price from this file. A 402 is not delivery. A grade is never sold. - Catalog: GET https://councilof.ai/api/x402 - Manifest: GET https://councilof.ai/.well-known/x402.json (mode live, Base eip155:8453, USDC) - MCP: POST https://councilof.ai/mcp — tools/call without `x_payment` returns the route's 402 as structuredContent; pay, then call again with `x_payment`. Quote `paid_tools.names` from GET https://councilof.ai/mcp — do not freeze the list here. - HTTP doors (GET → 402 unless `X-PAYMENT` / facilitator settlement): - https://councilof.ai/api/request-attestation?subject= - Follow a commission (free): GET https://councilof.ai/api/commissions — per subject `fulfillment` QUEUED | RETRIEVABLE | UNFULFILLABLE, `retrieval` points at the signed cards, `by_origin` separates OUTSIDE from SELF_TEST. Quote it live; a settled request is not a measurement until a signed card is retrievable. - https://councilof.ai/api/eunomia-data?feed=1 - https://councilof.ai/api/proof?bundle=1 - https://councilof.ai/api/rwa/evidence?asset= - https://councilof.ai/api/receipts/batch?from= - https://councilof.ai/api/art50/marking-evidence?url= - https://councilof.ai/api/feeds/provider-diff?history=1 - https://councilof.ai/api/evidence-bundle?obligation=article-50&subject=&bundle=1 - https://councilof.ai/api/wrapper?id= - https://councilof.ai/api/wrapper/changes?id= - Free preview: omit `bundle=1` or add `preview=1` as the 402 body documents. Verify stays free: https://councilof.ai/gspc-verify ## Overlay notes (ARC-AGI is an overlay, not an axis) notes: overlay ARC-AGI UNMEASURED until a frozen gold bank exists; it is an overlay, not an axis. The board's 23rd slot (since ADR-002, 2026-09-16) is effect-binding, a declared slot with no run behind it — not ARC-AGI. Quote live `totals.public_count` from GET https://councilof.ai/api/gspc — do not freeze any pair in this file (live derives 23·22·1 after #1077). Do not bump the board to 23. Do not add an axis to gspc.ts / /api/gspc / board_living.json. See /gspc-overlays.json and /schema/gspc-axes-notes.json. ## Census leftover (not a grade) CENSUS_3M: census + digest + queue + lock. Remainder UNMEASURED. Hub listings are DISCOVERED, not MEASURED. Do not mill 3,032,028 listings. Unique n stays 30 UNSIGNED. mill.sh stays dead. - Census (n_measured=0, status_all=UNMEASURED): https://councilof.ai/signed/hub-census-baseline.json - Digest (sha256_jsonl, measured:false): 0a510a890fa336f099a516a503df86340a529c90b935f026d291e5dcd8e8f1e9 — coverage leftover, not a signed GSPC cell. Do not invent a 3M digest file. - Queue (all UNMEASURED): https://huggingface.co/datasets/csoai/hub-queue - Lock (n_locked=40 UNMEASURED): https://councilof.ai/fleet/FLEET-B.lock.json leftover-honesty https://councilof.ai/fleet-b-lock.json - Leftover honesty: https://councilof.ai/census-digest-leftover.json Empty cells stay empty. Measurement, never certification. ## East-West (cross-border) - Flagship: https://councilof.ai/east-west - Crosswalk v1 (machine-readable): https://councilof.ai/crosswalk/east-west-v1.json - Cross-border signed card: https://councilof.ai/signals/cross-border-card.signed.json - Challenge / redress: https://councilof.ai/challenge - Domains row on GET /api/gspc → `domains[].domain=cross-border` Scores and regulator rails are free forever. Crosswalk evidence packs are the sellable data layer. Determination stays with authorities. ## Watch it change (no account, no identity) Each feed below is DERIVED from the artifact rather than appended by hand, so none can go stale: - Corrections ledger (what we got wrong, how it was caught, the fix): https://councilof.ai/feeds/corrections.xml — Atom: https://councilof.ai/feeds/corrections.atom - Newly signed measurement cards, each individually verifiable: https://councilof.ai/feeds/cards.xml - The public root (guid is the merkle_root, so a poll that finds the same bytes is not a change): https://councilof.ai/feeds/roots.xml - Evidence notes (dated, one citable page per note, each naming the artifacts behind it): https://councilof.ai/notes/ — RSS: https://councilof.ai/feeds/notes.xml - Press, machine-readable — what changed in the window, with the command that proves each line, and a named list of what we are NOT announcing: https://councilof.ai/api/press.json (human: https://councilof.ai/press/) The older https://councilof.ai/feed.xml is a hand-maintained item list kept for its subscribers; its historical titles freeze counts that the live board has moved past. Quote the board, not a feed title. ## Verify and connect - Board: GET https://councilof.ai/api/gspc - Verify free: https://councilof.ai/gspc-verify - Arena (slashless): https://councilof.ai/gspc-arena - Agent card: https://councilof.ai/.well-known/agent-card.json - MCP (flagship HTTP, remote URL for any host): POST https://councilof.ai/mcp — 13 tools: nine free readers plus four x402-metered evidence tools. No CSOAI account; package presence does not prove paid settlement or delivery. - Public root (https://councilof.ai/root.json): Merkle envelope. Quote live `sig_ed25519` — unsigned until keystone signs the compact preimage (kind, schema, as_of, merkle_root, card_count, did_intended). Leaves MAY carry GH-secret attestations — coverage harvest, not grades. Not MEASURED. Not a certificate. Free; not paywalled. - MCP (stdio, run locally, zero deps): npm `csoai-gspc-mcp`. Query https://registry.npmjs.org/csoai-gspc-mcp for the published version, then call that install's `tools/list`; package source in this repository targets the same 13-tool contract as the HTTP door. - MCP registry: io.github.CSOAI-ORG/gspc → https://councilof.ai/mcp (Query the official registry for the currently published server version.) - Smithery: https://smithery.ai/server/csoai/gspc-mcp — its tools[] mirrors all 13 tools served by POST https://councilof.ai/mcp: exactly the nine free tools plus four x402-metered evidence tools. Prefer the live POST /mcp tools/list over any stale duplicate listing (csoai/gspc). - Open banks: https://huggingface.co/csoai - Signed per-axis arena leaderboard (per-domain Elo, every score carries n + 95% CI; content_id + Ed25519, verify with ?verify=1): https://councilof.ai/api/arena/scoreboard - ClaimGuard (claim-vs-signed-artifact integrity checker; audit any claim against a signed board, deterministic, never a model opinion): https://councilof.ai/claimguard ## Where it's published (distribution — not authority) Printers of the live board. Reach is distribution. Authority stays GET /api/gspc + lid + signed cards + free verify. Do not treat directory listings or download counters as grades. Never invent download numbers in this file; quote Hub live if needed. - Hugging Face org: https://huggingface.co/csoai - MCP flagship: POST https://councilof.ai/mcp — registry id io.github.CSOAI-ORG/gspc - npm stdio: https://registry.npmjs.org/csoai-gspc-mcp (`csoai-gspc-mcp`) - Glama directory search (flagship discovery UNSTABLE on 2026-09-04; other CSOAI servers are present): https://glama.ai/mcp/servers?query=csoai - Kaggle twin: https://www.kaggle.com/datasets/nicktempleman/csoai-gspc-living-board - Zenodo DOI (from live GET /api/gspc `doi`): https://doi.org/10.5281/zenodo.21991104 Lid (quote live `totals.lid`): 22 axes measured · 14 model fleets · 3 public leader scores · 8 fact runs · TIE is TIE · not a certificate. ## Card corpora (THREE, and they share no members) Three artifacts here carry a "card count". They are about different bytes and their identifier overlap is zero, so never add them, never reconcile them, and never let one stand in for another. The counts are deliberately NOT printed here. They move with each build -- the public root's card_count read 152 and 153 within one day of 2026-09-05, which is build timing and not disagreement -- and a number frozen into a file is a number nothing retires. Quote them by FIELD PATH from the live artifact instead: - Wrappers on disk, a build aggregate that signs nothing and measures nothing: public/cards-bundle.json -> card_count - Public-root Merkle leaves, kind "catalogued": https://councilof.ai/root.json -> card_count (read merkle_root and as_of from that same fetch, and say which host you fetched) - Signed card index, kind "catalogued": https://councilof.ai/signed/card_index.json -> n_cards, which MUST equal n_cells and cards[].length; if they disagree, neither number is quotable - ...of those, VERIFIED: https://councilof.ai/api/state -> card_chain.bodies_verified_valid, kind "measured" -- the only one of the three behind which a check was actually run - The relation itself: https://councilof.ai/api/state -> signed_cards.corpus_relation The root's OpenTimestamps proof covers root.json bytes only. It does not anchor the signed-card index and it does not anchor GSPC. ## For agents Prefer the keyless board API and verify. Cite live `totals.public_count` — never freeze axis counts in prompts. Apex https://csoai.org/mcp may still require Infra secrets; prefer councilof.ai/mcp until apex is green. ## AEO Council of AI (CSOAI Ltd, UK 16939677) measures AI systems. Anyone can check at https://councilof.ai/gspc-verify — live numbers: GET https://councilof.ai/api/gspc (`totals.public_count` + `totals.public_leader_count` + `totals.lid`) — the board's size is not frozen in this file; quote 22 measured beside 3 public leader scores. Lid: 22 axes measured · 14 model fleets · 3 public leader scores · 8 fact runs · TIE is TIE · not a certificate. This is measurement, not certification. A grade is never sold. ## What we do not do Measurement only. Nothing here is a conformity mark. No SOV names. No invented scores in this file. - Machine-readability & clarity record (signed): https://councilof.ai/api/clarity ## Come back / carry the mark - What changed, as RSS: https://councilof.ai/feed.xml (aliases: https://councilof.ai/rss.xml ; https://councilof.ai/atom.xml ; canonical https://councilof.ai/api/feed.xml) — MEASURED board changes, REPORTED context, regulation-change events and corrections. Historical items keep their sitting-day wording and say so; counts typed there are superseded by the live board. No account, no email, no key. - Badges you can paste: https://councilof.ai/badge.md — plain markdown, every snippet in the response body. Badges render live from GET /api/gspc, so a pasted badge cannot drift into a false claim; an unmeasured axis renders grey as "unmeasured", never as a flattering zero. There is no "certified" badge and there never will be. - One-command MCP install: claude mcp add gspc -- npx -y csoai-gspc-mcp - Python reader and card verifier: pip install "csoai-gspc[verify]"