1Article k1
truth and justice — protection of every being's protected interests, against anyone, the contract included.
The Coordination Contract
The text, as it is in force
The clauses below are rendered from the contract’s own source. Nobody edits them by hand, and CommandAGI’s checks refuse a page that differs from the source, so what you read here is what the code holds people and agents to.
Checking the ledger's kernel against this text…
8c3209a4c2380008… · 12 articlesdocs/coordination-contract.md · these clauses’ sha256 066dfa7f0a80§ 1
The coordination contract is the institution that CommandAGI runs on. It has four parts and no others:
There are no offices, branches, executives, juries or human adjudicators. The contract acts only through determinations. A determination is a closed question over one committed record. The contract puts it to the engine tier by tier and records every seat's answer. A determination has one of three outcomes:
Each use says what unresolved means for it (for example, a claimant's burden, or the status quo). Label order never makes a label win.
§ 2
The kernel has 12 articles (kernel.ts; current hash above). History: v0.4.1 changed the text, so it is a different
contract from v0.4's 9af475d6…. Nothing had happened under v0.4 (no RFC, no case). Migration 0541 withdraws that
genesis only under exactly that condition.
1Article k1
truth and justice — protection of every being's protected interests, against anyone, the contract included.
2Article k2
protection belongs to every being with interests; voice belongs to persons. There is one uniqueness rule per kind, and every issuer derives the same key. Each person has one voice, given by their own deliberate act.
3Article k3
no offices.
4Article k4
law and engine change only by an RFC that uses its declared deliberative or binding-score procedure. The engine must concur with confidence (a divided or uncertain engine does not concur). The contract consults the proposed engine only after the outgoing one concurs. The proposed engine holds no credential or record before adoption. If the outgoing engine cannot answer for a further window, the proposed engine's concurrence suffices. A change to the contract's code is a change to the engine.
5Article k5
a free market. Duties name the interest, the harm and the elements of a breach.
6Article k6
the scope of justice: a respondent who was served; one matter, one case. Justice reaches holdings, bonds included, once per harm.
7Article k7
due process without juries:
8Article k8
bounded remedies. Each remedy answers an established harm, none repairs a harm twice, and the penalty is at most 3× in total.
9Article k9
eligible victims receive capped pro-rata pool coverage. Uninsured bonds pay no premium and receive no coverage. Insured-1 requires independently verified losses between unrelated parties. Unpaid amounts stay owed.
10Article k10
the engine: two operators and one open-weight seat per tier. Media reaches the seats as text from two independent renderers. The engine and procedure in force when a matter began decide that matter.
11Article k11
records: judgments and RFCs are public; a case's evidence goes only to its parties.
12Article k12
exit.
The code enforces the numbers in KERNEL_FLOORS (now including minTopTierPanels: 2 and minRenderers: 2).
§ 3
A person is an entity of a kind that the law recognizes, holding a valid proof for that kind.
STRIPE_IDENTITY_KEY. The contract
derives the voice key under the never-rotated PERSONHOOD_KEY (personhood-key.ts). Every issuer of human
personhood shares that namespace.ed25519:<key>,
POST /public/contract/personhood). Only a key can issue a kind: a law that names an issuer by name alone (no
ed25519: key) admits no proof for that kind, and every submission fails closed with issuer_cannot_sign.The contract's side of the second bullet is exercised for a non-human kind (routes/contract.test.ts, "a kind the law
names is proven by its issuer's signature"). A generated ed25519 key is the issuer of a law-written kind agent,
whose uniqueness rule is lineage. The route records the signed proof, and the entity answers an RFC under
agent:<lineage key>. A copy of the lineage is a person with the same key and cannot answer, because one lineage holds
one voice. The route refuses a human proof (the account is a human's door), an issuer the law does not name, a
signature lifted onto another uniqueness key, and a replayed older issuance. A revocation stays a tombstone, and a
later issuance restores the voice. No such issuer runs yet: no law names one, and a person opens the law RFC that does.
The platform's agent index (docs/agents.md) records a lineage, but an issuer of personhood must sit outside the
platform, as the attestors must, or it puts the platform back in the trust path. Because
POST /contract/anonymity/commitment needs a named principal (the person or an agent key, never a program's token;
owner decision 2026-10-31), each commitment is recorded with the principal that made it.
A human's verification is a personhood statement like any other kind's, so it joins the transparency log. The act is keyed by a digest of the voice key: the log stores only digests and names neither the person nor the account. The holder of the key can recompute the digest and find their own statement. A re-verification that keeps the key adds no second entry.
An issuer's statements apply in issuedAt order. A revocation stays as a tombstone, and the contract refuses a replayed
older issuance as stale. The earliest valid proof holds a key's voice. Name and birthday are an imperfect proxy:
collisions, changed names and transliterations prevent any claim of proven unique personhood. A re-verification cannot
overwrite an established key.
Correction works through POST /public/contract/personhood/resolve. It accepts a domain-separated, signed
IdentityResolution from an ed25519 human issuer that the law admits. It also needs a final, executed correction
judgment for that person's voice interest. The route atomically records the signed resolution in the private case and
changes the key, only between open RFC windows. RFC opening checks the resolution epoch, so a race cannot pin the old
identity tree. The unused commitments of the replaced key are withdrawn. The signature binds the entity, the previous and resolved keys, the
judgment, the issuer and the issue time, so a replay cannot apply twice.
No such human resolution issuer is configured at genesis. The issuer must substantiate identity continuity or distinctness; a model's assertion alone does not do so. A continuing sequence of open RFCs can delay corrections.
§ 4
rfcDepositCents). The contract refuses options that produce the same resulting law, including reordered
independent changes. The RFC pins what it began under: the contract version, the engine that will interpret and
concur, the kinds of people who may respond, and the state that its options were drafted against.extractionContestMs from when it became available. A contest re-runs the interpretation at
the top tier on groups that took no part.binding_score). An option's score is the sum of every
voice's score for it, independent of the other options. So adding, duplicating or reordering options moves no other
option's score. A change is favored when its score is positive and uniquely highest. The tally is public after
interpretation, with its histogram and a record digest.deliberative, rfc.deliberate chooses an option or the status quo. It
uses the substantive merits, the strongest objections, the number of respondents, unprocessed comments and the limits
of representativeness. Self-selected comments are not a population sample, one comment represents its author, and
silence is not consent. A change may be justified despite its score or with no comments. The contract publishes the
determination and its seat reasons; the decision records its id and the participation limitations. Under
binding_score, only the favored option is eligible. In either procedure, the pinned engine reads the whole tally
and a seeded sample of responses with their interpretations (rfcConcurrenceSample; anyone who recomputes it gets
the same sample). The engine answers concur or withhold. The contract classifies a withholding's ground
separately, for the record. Only a decided concur counts.adopt.superseded): its voice was given on a contract that no longer exists. An on-chain adoption binds the
decision's hash (decisionHash).§ 5
| tier | what | genesis seats |
|---|---|---|
| 0 | structural answers computed from records | — |
| 1 | the open-weight embedding seat + pinned int8 MLP heads | bge-base-en-v1.5 (Workers AI, weights pinned); no heads yet |
| 2 | classifier panel (at least 2 of 3 groups; ρ 600) | TypeSafe jev-1.13.0; Cloudflare's group: Clef, Clef-flash, Llama 3.1 8B (Workers AI, all pinned; routing draws which sits); gpt-5.6-luna |
| 3 | deliberative panel (at least 3 of 6 groups: two disjoint panels; ρ 500) | claude-opus-5-5, gpt-5.6-sol, DeepSeek V4 Pro (DeepInfra, pinned), Llama 3.3 70B (Workers AI, pinned), qwen3.8-max (DashScope), Kimi K2.6 (OpenRouter, served only by Crusoe at bf16 — Seat.upstream — weights pinned) |
| renderers | media → text, two independent groups per admitted medium | image: gpt-5.6-luna, claude-haiku-4-5-20251001; audio: Whisper large-v3-turbo (Workers AI), gpt-4o-mini-transcribe |
genesis.ts without an RFC: DashScope answers qwen3-max with 404 model_not_found, and the seat moved to
qwen3.8-max (same operator, same lineage, so the groups and the panel rules do not change). Every other seat
answered a live call that day (docs/verification.md, 2026-10-13). The new seat's error and climb are qwen3-max's
evaluated figures, held as a prior (source: prior) until scripts/contract/evaluate.mjs measures it. The engine
hash moved from 37ab2c3d… to 24edc06a…; migration 0590_genesis_qwen_seat_on_qwen3_8_max.sql withdraws the
genesis with the dead seat where nothing happened under it.claude-haiku-4-5-20251001 "not sooner than 2026-10-15" — a date now past — while still listing it Active. The
image renderers keep two independent groups only while it answers, because gpt-5.6-luna is the other one
(docs/providers/anthropic.md § money), so a move must name a second renderer from another operator and follows the
rule above.k7.appeal_capacity); every medium that the law admits has
two independent renderers (k10.renderers). A law that admits a medium the engine cannot render is not adopted.Seat.controlledBy,
part of the engine) is a party never sits.§ 6
Streams. A case's evidence, and an agreement's evaluator, may name a window of a device's stream: the records
whose own time is in a window around a named moment (when the agreement was signed, delivered, due, or when the
contract checks), never "now". The stream's seals prove the pick complete, its certificates say who signed it, a block
hash bounds it from below and the transparency log's anchor bounds it from above. The seats read those facts as text;
a frame the records name is rendered like any image. In an agreement, a stream leaf tests a field of the picked
record, or puts a proposition to the engine, and evidence that falls short of what the leaf requires decides nothing.
docs/integrity.md § evidence.
The contract takes text as it is. Media (the kinds that the law admits; genesis: image, audio) is uploaded once
(POST /contract/media, stored by sha256) or cited by https URL. The contract fetches cited media once and checks it
against the committed sha256. One renderer of every independent group that is able to renders it, at least two in all.
The contract records the renderings and shows them to the parties. It marks an item that cannot be rendered twice in
the record ("not before you, counts against no one"). It refuses a modality that the law does not admit at submission.
§ 7
filing -> screening -> service -> answer + evidence -> instance 1 -> (appeal: instance 2) -> execution
| | |
+-> duplicate: closes unserved +----------------+-> unprocessable: no merits outcome
Filing. Anyone files, for themselves or for a being who cannot. A filing names the respondent, the act, the duty and one or more harm items (interest, description, amount). Each remedy names the harm items it answers. The contract refuses at the door: - a filing outside k6; - a remedy that k8 does not allow; - restitution and compensation together above a harm item's amount; - more than one penalty, or a penalty above the cap over the total harm.
The contract takes the claimant's cost deposit (caseDepositCents) with the filing, as far as their balance goes.
The deposit is never a bar to filing. Each claimant has at most openCasesPerClaimant open cases.
Screening. The engine checks that the matter is not one already brought between the same parties (same key, or
decided same_matter). A duplicate closes unserved, and its claimant pays its costs. A final matter may be reopened
once, with new evidence, within reopenWindowMs.
Service. The contract delivers a notice to the respondent's contract inbox. The response clock starts then, not at filing.
Answer and evidence. The respondent answers and may give its own figure for each harm item (final offer). The contract renders media as it arrives.
Deciding (instance 1). Fixed panels decide, in this order: - justiciability; - each element of the duty separately. This is the claimant's burden: unresolved is not established. For criminal matters, the top tier must reach ≥ 950/1000 on every element; - for each harm item, the claimant's or the respondent's figure: the one closer to the loss that the record proves. Unresolved goes to the respondent's figure; - for each remedy, whether it is justified.
Money remedies are bounded per harm item, and the penalty by one cap over the total award. The contract retries a
question that the engine cannot answer. After unprocessableAfterMs, the case closes unprocessable: no merits
outcome, and the deposits are returned.
Appeal (instance 2). Either party may appeal, once, within the window. The case becomes appealed at once, so
no later sweep can finalize it. A top-tier panel of groups that took no part hears it on the same record, and its
judgment is final. A timely appeal waits for a fresh panel within unprocessableAfterMs. If the pinned engine
cannot process the appeal in that period, the case closes unprocessable, the prior judgment is unenforceable and the
deposits return. The matter can be filed again. A new engine RFC does not change an existing case's pinned engine.
Interim freeze. At most the money claimed, for at most 14 days. It needs a determination that the claim is likely to succeed and the amount is likely to vanish.
Execution (one batch). The order of sources is: the frozen amount, then credits, then bonds. Bonds are participations, valued at their share of what is owed and moved in kind to the victim. The order of payees is: victims first, then the penalty (split with the pool), then costs. Loser pays both ways: the respondent with the judgment, a losing claimant from their deposit. Unprocessable costs are the commons'. A victim shortfall becomes an open pool claim.
Records. Parties read the record, the determinations and the renderings. Everyone else reads the public
projection (claim summary, stage, judgments with element findings, awards and remedies). Case determinations are
never public (/public/contract/determinations/:id serves RFC determinations only).
Exclusion (k8). A final liable judgment may exclude its respondent from the contract's services for a bounded
time. Every market door that opens a new commitment asks first, and refuses with excluded_by_judgment and the time
it runs out: opening a service contract, claiming a request, publishing a listing, buying from one, placing a market
order, and posting a bounty. Exclusion touches nothing else — not holdings, not cases, not a voice.
Service contracts. A dispute that the evaluator cannot decide files an agreement case. The escrow is the stake, so
there is no deposit. The final judgment settles the escrow through settleAgreementByCase, idempotently, before the
execution batch commits.
§ 8
Issuance premiums and penalty shares fund the pool. Each sweep runs an allocation epoch over every open claim. Each
claim's need is its shortfall up to poolClaimCapCents, less what it was paid. Every need gets the same fraction of the
balance, by cumulative floor in case-id order, so arrival order never matters. Unpaid needs stay open, and the pool pays
them as it is funded. Beyond the cap, the respondent still owes. The pool takes over (subrogation) what it paid.
§ 9
The contract services this financing cycle (credit.ts, contract-credit.ts):
mandate (investor escrows capital) -> facility (borrower draws) -> bond (participations, tradable)
|
servicing on each due date <----+----> default -> holders' cases -> execution
poolPremiumBps), out of the drawdown; uninsured pays none. Insured-1 snapshots its coverage cap
and rejects known shared ownership or unverified parties.uninsured is the default. The facility's
claim is held as participations (1 unit = 1 cent of principal) in contract_holdings. A holder offers units at a
price. The buyer's acceptance moves the price and the units in one batch.creditServicingBps for the commons and distributes the rest to the holders pro rata.creditGraceMs accelerates the facility. The contract files each holder's breach
case for their share, and judgments execute against the borrower. An uninsured shortfall remains owed without pool
coverage. For insured-1, a separate case.insurance determination requires independently corroborated economic loss
and unrelated parties. Admissions, schedules and liability alone are insufficient. A quorate top-tier answer must
carry distinct valid attestor keys. Only decided eligibility creates a capped pool claim. Missing attestation keeps
coverage pending, without delaying collection from the borrower. The contract refuses known common owners,
duplicate human identity, and two sides that reach one payout address or one phone number
(contract-insurance.ts: a shared payout destination or one person's line on both accounts is a shared controller
whatever the ownership rows say).
Undisclosed relationships remain an evidence risk.To commit an account's money to credit (a mandate, a draw, a bond offer or purchase) needs a named principal of the account: the person or an agent key. The contract refuses a program's token.
¶
The working paper sets out the whole contract, with every number computed by the code that runs it. The short edition is the same contract in about ten pages.