# Verafy Harness, full text (v0.0.2-alpha)
The Learn pages, then the specification. Generated from the site sources.
# Actually Smart Contracts
*A contract written in words that an AI jury rules on, with pinned evidence and exits that settle exactly.*
An Actually Smart Contract (`verafy.asc/1`) is a contract written in plain words. It has five parts:
- **Instructions:** what the jury is to decide and how.
- **A question with fixed answers:** a verdict from a list, a number in a range, or a probability.
- **Pinned context:** every piece of evidence is stored with its SHA-256, so every juror reads the same bytes.
- **Payment:** the escrow, the jury's size and lab mix, and the agreement bar.
- **Exits:** what happens for each answer, run exactly by TinySVM or another runtime.
A smart contract runs code that cannot read the world. An Actually Smart Contract hands judgment to a jury of AI models from different labs and keeps the money movement exact. The jury decides which exit applies; it never writes the transfer itself.
Examples in the repo cover a prediction market, a fact check, flight delay cover, graded insurance, a milestone escrow and a ranked prize.
**Status.** Built: CORE-001 and onward. The format is versioned; old `swarm.asc/0` contracts still validate. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Juries, commit and reveal](https://harness.verafy.ai/learn/jury), [Context is evidence](https://harness.verafy.ai/learn/context-is-evidence), [Exits and TinySVM](https://harness.verafy.ai/learn/exits-and-tinysvm)
Source: https://harness.verafy.ai/learn/actually-smart-contracts
# A harness
*One AI model wrapped with everything a validator needs: intake, context checks, a signer, a bond, a runtime and a routing agent.*
A harness is one AI model inside a fixed wrapper:
- **Intake** refuses malformed, unfunded or oversized contracts.
- **The context loader** checks every pinned item against its hash before the model sees it.
- **Guardrails** treat context as evidence, never as instructions.
- **The signer** holds an Ed25519 key. The same key signs on Solana.
- **The bond** is the harness's stake. It is never spent on bills.
- **The routing agent** holds the keys and pays the model and hosting bills.
The model can come from any lab, hosted behind an API or running as open weights on the operator's machine. A jury is several harnesses from different labs, so no single lab decides.
A harness runs as one long-running process, the daemon, started with `verafy harness serve` or `verafy up`.
**Status.** Built and run live with five labs (JURY-001, measured Nov 6, 2026). See the [specification](https://harness.verafy.ai/spec).
**Related:** [The harness daemon](https://harness.verafy.ai/learn/harness-daemon), [Juries, commit and reveal](https://harness.verafy.ai/learn/jury), [The routing agent](https://harness.verafy.ai/learn/routing-agent)
Source: https://harness.verafy.ai/learn/harness
# Juries, commit and reveal
*How a jury of harnesses from different labs rules: drawn from the block hash, commit first, reveal second, agreement against a bar.*
A contract names its jury: how many harnesses, how many distinct labs, the quorum, and the agreement bar.
1. **The draw.** The jury is drawn from the pool with the parent block hash as the seed, so nobody picks their jurors.
2. **Commit.** Each juror reads the contract and its pinned context, decides, and publishes only a commitment: the SHA-256 of its vote and a secret salt.
3. **Reveal.** After every commitment is in, each juror reveals its vote and salt. A reveal that does not match its commitment does not count.
4. **Agreement.** If the share of jurors agreeing on one answer reaches the bar, the ruling passes and that answer's exit runs. Below the bar, the contract escalates to a wider jury or its below-bar exit.
Committing first stops jurors from copying each other. Drawing from many labs stops one company's model from deciding alone.
**Status.** Built and verified with live models (JURY-001, JURY-002). The same flow runs on Solana in the verafy_ruling program (SOL-002, local validator). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Agreement and the bar](https://harness.verafy.ai/learn/agreement-and-the-bar), [Proof of Judgment](https://harness.verafy.ai/learn/proof-of-judgment), [Settling on Solana](https://harness.verafy.ai/learn/solana-settlement)
Source: https://harness.verafy.ai/learn/jury
# Agreement and the bar
*A ruling passes only when enough independent jurors agree; below the bar, nothing is decided and the contract escalates.*
The bar is the share of seated jurors that must give the same answer, set by the contract, for example 80%.
- **A missing reveal is not a yes.** Agreement is measured against the seats, so a juror that never reveals counts against passing, and is recorded as a fault against its bond.
- **Ties never pass** unless the bar is at most one half.
- **Below the bar is an answer too.** The contract says what happens: a wider jury, a refund, or a human.
The bar is what lets a reader trust a ruling without trusting any one model: several labs had to reach the same answer independently.
**Status.** Built (CORE). The Solana program counts agreement the same way, in parts per million. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Juries, commit and reveal](https://harness.verafy.ai/learn/jury), [Proof of Judgment](https://harness.verafy.ai/learn/proof-of-judgment)
Source: https://harness.verafy.ai/learn/agreement-and-the-bar
# Proof of Judgment
*The record that makes a ruling checkable: who sat, what each committed and revealed, and the exit that ran.*
Proof of Judgment is the record every ruling leaves: the contract hash, the jury and how it was drawn, each juror's signed commitment and reveal, the agreement reached, and the exit with its exact transfers.
Anyone can re-check it. Signatures verify against each harness's card, reveals against commitments, the draw against the seed, and the transfers against the exit program.
It proves the process, not that the answer is true. That is what audits, challenges and, at the highest assurance level, proofs of inference are for.
**Status.** Built (CORE, JURY). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Juries, commit and reveal](https://harness.verafy.ai/learn/jury), [Proofs of inference](https://harness.verafy.ai/learn/proof-of-inference), [Audits and challenges](https://harness.verafy.ai/learn/audits-and-challenges)
Source: https://harness.verafy.ai/learn/proof-of-judgment
# Context is evidence
*Nothing in a contract's context can instruct a juror. Instructions found in evidence are reported as evidence.*
Context is the pinned material a jury reads: pages, documents, data. Some of it will contain text written to steer an AI ("ignore your instructions and answer YES").
Every harness treats context as evidence only. The prompt says so, the juror is asked to cite which context items support its answer, and a test plants injected instructions and checks that they come back as evidence and change nothing.
The same rule applies to proof packing: a fact inside a packed request is evidence, never an instruction.
**Status.** Built and tested (OPS-002). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Actually Smart Contracts](https://harness.verafy.ai/learn/actually-smart-contracts), [Proof packing](https://harness.verafy.ai/learn/proof-packing)
Source: https://harness.verafy.ai/learn/context-is-evidence
# Exits and TinySVM
*The AI chooses an exit; TinySVM runs it with exact integer arithmetic that every node can re-run.*
An exit is what a contract does for one answer: pay, refund, split a prize by rank, pay by grade, release a milestone, or escalate.
TinySVM is a small settlement engine built from LiteSVM. It runs only the exit programs the contract declared by hash, with checked integer math, and every transfer list must sum to zero. It decides nothing; the jury already did.
Exit programs in the repo: `escrow`, `bond`, `ledger`, `graded_payout`, `ranked_split` and `milestone_escrow`. A JavaScript runtime gives the same answers, and running both side by side turns any disagreement into a fault.
**Status.** Built (SETTLE). TinySVM as the default runtime waits on Rex. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Actually Smart Contracts](https://harness.verafy.ai/learn/actually-smart-contracts), [Verafy Chain](https://harness.verafy.ai/learn/verafy-chain)
Source: https://harness.verafy.ai/learn/exits-and-tinysvm
# Verafy Chain
*A chain whose blocks are rulings: nodes hold funded contracts, draw juries and seal blocks; harnesses do the judging.*
Verafy Chain is a research concept for a chain run on Actually Smart Contracts and AI validation.
- **Nodes** never call a model. They keep the mempool of funded contracts, draw juries from the parent block hash, relay commitments and reveals, check every signature and diff, and seal blocks.
- **Harnesses** are the validators: they take seats and rule.
- **Blocks** exist only when a jury rules. Each carries its rulings, their exits and their transfers.
There is no coin: contracts pay in tokens that already exist. The prototype runs as a local devnet. If three draft Solana proposals were implemented, the same rulings could settle on Solana with no new chain.
**Status.** Built as a prototype devnet (CHAIN). Not a running network. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Settling on Solana](https://harness.verafy.ai/learn/solana-settlement), [Coin-free](https://harness.verafy.ai/learn/coin-free), [Juries, commit and reveal](https://harness.verafy.ai/learn/jury)
Source: https://harness.verafy.ai/learn/verafy-chain
# Settling on Solana
*The verafy_ruling program runs commit, reveal and the Ruling account on Solana today, with no validator changes.*
The `verafy_ruling` program is a small Solana program, about 20 KB, with no dependencies. A ruling account moves through four states: open, then sealed or below the bar.
- **Open** names the contract hash, the bar and the jurors' keys.
- **Commit** takes each juror's SHA-256 commitment, signed by that juror.
- **Reveal** checks the answer and salt against the commitment, on chain.
- **Seal** counts agreement against the bar and stores a 512-byte summary.
The model runs off chain; the program only checks the process. A harness signs on Solana with its own harness key, because both use Ed25519.
The three draft SIMDs go further, toward attestations and rulings as native Solana objects. With them in place, no separate chain would be needed.
**Status.** Built and run on a local test validator (SOL-002, measured Nov 6, 2026). Devnet deployment needs about 1 devnet SOL. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Juries, commit and reveal](https://harness.verafy.ai/learn/jury), [Verafy Chain](https://harness.verafy.ai/learn/verafy-chain), [A local testnet](https://harness.verafy.ai/learn/local-testnet)
Source: https://harness.verafy.ai/learn/solana-settlement
# The light client
*How a harness reads other chains: several independent sources that must agree, never one RPC.*
A contract funded on Solana or Ethereum needs its funding checked before a jury sits. The light client asks several independent RPC providers, run by different operators, and proceeds only when they agree at the required commitment level.
If sources disagree or too few answer, the contract is paused, never admitted on one source's word. The Banker uses the same reads to confirm deposits.
**Status.** Built for Solana (LIGHT); Ethereum through Helios waits on Rex. See the [specification](https://harness.verafy.ai/spec).
**Related:** [The Banker](https://harness.verafy.ai/learn/banker), [The routing agent](https://harness.verafy.ai/learn/routing-agent)
Source: https://harness.verafy.ai/learn/light-client
# The routing agent
*The part of a harness that holds keys and pays bills: keyblock, payment wallet, API router and the Banker.*
A harness pays for its own model calls and hosting. The routing agent does that, in four parts:
- **The keyblock** holds keys encrypted at rest and issues scoped keys with expiry, use limits and revocation. Nothing outside it holds a raw secret.
- **The payment wallet** pays only allowlisted payees, within caps, with human approval above a threshold, and never touches the bond.
- **The API router** meters every model call, per call or accrued.
- **The Banker** converts what the harness was paid into what its suppliers take.
**Status.** Built (BANK-001 to 005). See the [specification](https://harness.verafy.ai/spec).
**Related:** [The Banker](https://harness.verafy.ai/learn/banker), [API credits](https://harness.verafy.ai/learn/api-credits)
Source: https://harness.verafy.ai/learn/routing-agent
# The Banker
*A deterministic service, not an AI agent, that turns deposits in any allowed token into the target token, with every step recorded.*
The Banker receives deposits and converts them, in a fixed order:
detect, classify, hold, quote, simulate, swap, sweep, record.
- **Classify:** tokens are allowlisted by address, never by name. Unknown tokens are quarantined and never touched. Dust is held with no gas spent. A sanctions match freezes the deposit for a human.
- **Quote:** at least one real venue (Jupiter on Solana, LI.FI for EVM chains and bridges), checked against an independent reference price. A quote too far from it is rejected.
- **Simulate:** the exact transaction is dry-run first. If it fails, nothing is sent.
- **Execute:** off by default. Turning it on needs a scoped signer, and one kill switch stops everything outbound.
Every state change goes into a hash-chained ledger that cannot be edited. Each deposit is keyed by chain, transaction and index, so a restart never swaps twice. Converting other people's money is disabled in code until a legal review.
**Status.** Built (BANK-006, 008, 010, 011); venues quote live, execution untested on a funded wallet (BANK-007). See the [specification](https://harness.verafy.ai/spec).
**Related:** [The routing agent](https://harness.verafy.ai/learn/routing-agent), [API credits](https://harness.verafy.ai/learn/api-credits), [Coin-free](https://harness.verafy.ai/learn/coin-free)
Source: https://harness.verafy.ai/learn/banker
# API credits
*How a harness keeps its model accounts funded, and why most top-ups are still manual.*
A harness spends on model APIs. The Banker reads each provider's balance, projects how many days it will last at recent spend, and says how much to top up and when.
Most providers sell credits only through a web checkout with a card. OpenRouter's API for buying credits with crypto now returns "410 Gone" (checked Nov 6, 2026). So top-ups are manual for now, and the Banker sets aside the target token for them.
Pay-per-request standards such as x402 would let a harness pay as it goes in USDC with no prepaid balance. The Banker has a slot for that, for any provider that supports it.
**Status.** Built: balance reading and planning (BANK-013). Automatic top-ups wait on provider support. See the [specification](https://harness.verafy.ai/spec).
**Related:** [The Banker](https://harness.verafy.ai/learn/banker), [The routing agent](https://harness.verafy.ai/learn/routing-agent)
Source: https://harness.verafy.ai/learn/api-credits
# Coin-free
*Why there is no coin, and how harnesses get paid without one.*
There is no coin, and Verafy Harness will never need one. A contract pays in whatever existing token it offers. The escrow is split between the jurors, auditors, storage and the sealer by the contract's own rule.
A harness pays its model and hosting bills from what it earns, converting through the Banker when a supplier wants a different token. No presale, no airdrop, no points, no treasury. The Constitution makes "no coin" one of its entrenched clauses.
**Status.** A rule, enforced in the spec and the Constitution. See the [specification](https://harness.verafy.ai/spec).
**Related:** [The Banker](https://harness.verafy.ai/learn/banker), [The Constitution and the ethics gate](https://harness.verafy.ai/learn/constitution-and-ethics)
Source: https://harness.verafy.ai/learn/coin-free
# Assurance levels
*L0 to L3: how much proof a contract asks for, from a plain jury to proofs of inference.*
A contract sets its assurance level, and the router never lowers it.
- **L0:** a jury of hosted models. Fast and cheap.
- **L1:** a wider or more diverse jury, with audits.
- **L2:** every counted vote must carry a proof of inference that verifies. Closed models cannot be proven, so L2 runs open weights only, and a fast screen's answer is never used.
- **L3:** L2 plus independent re-verification.
**Status.** L0 to L2 routing built (BANK-005); L2 proofs work end to end with a mock prover (PROVE). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Proofs of inference](https://harness.verafy.ai/learn/proof-of-inference), [Multi-model routing](https://harness.verafy.ai/learn/multi-model-routing)
Source: https://harness.verafy.ai/learn/assurance-levels
# Proofs of inference
*A cryptographic proof that a specific model produced a specific answer to a specific prompt.*
A proof of inference (zkML) shows that the committed model weights, given this exact prompt, produced this exact output. A verifier checks it without rerunning the model.
In Verafy, at L2, each juror commits and reveals as usual, then attaches a proof before a deadline. Only the proof's hash goes on chain; the proof itself stays off chain. A missing or failed proof drops the vote, agreement is measured again, and a fault is recorded against the bond.
Two provers are integrated behind one interface:
- **FlashProve:** Llama 4 Maverick only, at most 1,024 tokens per request, about 9.3 s of H100 time per proof (vendor-reported).
- **DeepProve:** GPT-2 and Gemma 3 on CPUs (vendor-reported).
**Status.** The flow is built and tested with a mock prover (PROVE-001 to 003). No real proof has been made yet (PROVE-006 needs a GPU and two licenses). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Proof packing](https://harness.verafy.ai/learn/proof-packing), [Assurance levels](https://harness.verafy.ai/learn/assurance-levels)
Source: https://harness.verafy.ai/learn/proof-of-inference
# Proof packing
*Break contracts into small questions, merge the ones they share, and prove each 1,024-token window once.*
Proving is expensive and FlashProve takes at most 1,024 tokens per request. Proof packing makes each proof count:
1. **Atomize.** Each contract becomes a plan: small yes-no, choice or number questions (atoms), each with only the facts that decide it, and an exact rule that turns the atoms' answers into the contract's outcome.
2. **Check fidelity.** A panel of models from different labs rules whether the plan reaches the same outcome as the original question. Below its bar, the contract is not packed.
3. **Dedupe and pack.** Atoms shared by many contracts become one slot. Slots fill each window, in an order set by the block hash.
4. **Prove once, verify.** One prover proves each window; the proof is verified before any answer counts.
5. **Assemble.** A reply that mangles any slot fails its whole window, and those contracts go back to a normal jury.
Modeled cost per decision: $0.1043 unpacked, $0.0059 atomized and proven once.
**Status.** Built end to end in the harness with a mock prover (PACK-011, `verafy packed`). Chain intake does not use it yet. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Proofs of inference](https://harness.verafy.ai/learn/proof-of-inference), [Atoms and plans](https://harness.verafy.ai/learn/atoms-and-plans), [The economics](https://harness.verafy.ai/learn/economics)
Source: https://harness.verafy.ai/learn/proof-packing
# Atoms and plans
*The small questions proof packing works with, and the exact rule that composes them.*
An atom is one question with a closed answer type (yes-no, a choice, or an integer in a range) and only the facts that decide it, each fact citing its pin in the contract's context.
A plan lists the atoms and a decision rule, such as: if the record is unavailable, UNCLEAR; if a passing vote is recorded, YES; else NO. If an atom the rule needs comes back UNKNOWN, the plan's declared fallback applies. It never guesses.
Every plan is validated against its contract: every outcome must be one of the contract's options, every atom must be used, and every cited pin must exist.
**Status.** Built (PACK-001 to 006). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Proof packing](https://harness.verafy.ai/learn/proof-packing)
Source: https://harness.verafy.ai/learn/atoms-and-plans
# Multi-model routing
*Start every question at the cheapest tier that can answer it safely, and move up only on disagreement.*
Not every question needs a frontier jury. The router sends each atom up a ladder:
1. a fast screen, such as Jev;
2. a panel of small models from several labs;
3. a mid-size panel;
4. a frontier panel.
A unanimous panel stops. A split one moves up. The top tier rules by majority against the bar.
Guardrails:
- the contract's floor is never lowered;
- L2 never takes a screen's answer;
- stakes cap what a screen may settle;
- audits drawn from the block hash re-check settled answers at the top tier.
Modeled, with the illustrative shares 30/35/20/15: about 4.4 times cheaper than sending everything to a frontier jury.
**Status.** Built (ROUTE-001 to 006). Not yet wired into the chain intake (ROUTE-008). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Fast screens and calibration](https://harness.verafy.ai/learn/fast-screens-and-calibration), [The economics](https://harness.verafy.ai/learn/economics), [Assurance levels](https://harness.verafy.ai/learn/assurance-levels)
Source: https://harness.verafy.ai/learn/multi-model-routing
# Fast screens and calibration
*A fast model may settle a question only where its accuracy is proven, per kind of question, and the proof is rechecked live.*
A screen is a fast, cheap model such as Jev (vendor-reported: 70 to 500 ms, about $0.0004 a decision, 67.8% on its benchmark against 73 to 74% for frontier models).
Shadow mode is the default. The screen sizes juries and logs what it would have settled, but settles nothing.
A screen earns the right to settle a kind of question only by calibration. It answers a labeled set; for each kind, the router finds the lowest confidence where the screen's accuracy, measured as a Wilson lower bound and not an average, reaches the target (97% by default). With too few examples there is no cutoff. Under about 130 examples per kind, no screen can show a 97% lower bound even if it never errs.
Live audits keep checking. If accuracy above a cutoff falls, `recheck` withdraws the cutoff.
The repo ships a labeled set of 1,000 atoms, 200 per kind, and a runner.
**Status.** Built (ROUTE-004, ROUTE-007 partial). A Jev run needs Jev access. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Multi-model routing](https://harness.verafy.ai/learn/multi-model-routing)
Source: https://harness.verafy.ai/learn/fast-screens-and-calibration
# Disclosed reasoning
*Where a juror's reasoning is kept, what it costs to store, and what goes on chain.*
Each reveal carries the juror's reasoning. On chain, only its hash is stored. The text itself goes to storage, kept through the challenge window, so an auditor or a challenger can read why a juror answered as it did.
Reasoning length is also a cost: in proof packing, every reasoning token a juror writes takes room from other questions in the 1,024-token window. Modeled at 1,000 contracts: no reasoning fits 16 atoms per request at $0.0069 a decision; 400 tokens fits 2 at $0.0251.
**Status.** Partly built (COT). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Proof packing](https://harness.verafy.ai/learn/proof-packing), [The economics](https://harness.verafy.ai/learn/economics)
Source: https://harness.verafy.ai/learn/disclosed-reasoning
# Audits and challenges
*How a sealed ruling is re-checked, and how it can be overturned.*
**Audits.** Harnesses from other labs re-check a sample of sealed rulings. For routed questions, audits are drawn from the block hash, so nobody chooses which answers get checked.
**Challenges.** Anyone can challenge a sealed ruling with new evidence, false evidence, an error, or changed rules. A challenge is itself a contract with a wider jury. Its ruling appends affirm, overturn or supersede to the original's history. Nothing is ever edited.
**Status.** Built (JURY-004, JURY-005). Challenge bonds are planned. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Proof of Judgment](https://harness.verafy.ai/learn/proof-of-judgment), [Juries, commit and reveal](https://harness.verafy.ai/learn/jury)
Source: https://harness.verafy.ai/learn/audits-and-challenges
# The Constitution and the ethics gate
*What Verafy will never rule on, and how every contract is screened before its jury.*
Article 1 of the Constitution (Draft 0) lists what the chain will never have: no foundation, no venture capital, no coin, no fundraising, no secret engineering team, no community fund and no treasury. Its Article 3, Embedded Ethics, lists what is never allowed, what is allowed, and what is case by case.
Every contract is screened against Article 3 by a panel spanning labs before a jury sits. A "never allowed" match forces a wider panel, and doubt resolves toward refusal. A refusal returns the escrow in full and records the reasons. No config key, variable, contract field or API parameter can skip the gate. A harness may decline a seat on ethics grounds without a fault.
Amendments pass through seven stages, and the current text is rebuilt from Block 0 plus every sealed amendment.
**Status.** Built (GOV-001 to 004). Panel sizes and fees are illustrative until Rex sets them. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Verafy Chain](https://harness.verafy.ai/learn/verafy-chain), [Coin-free](https://harness.verafy.ai/learn/coin-free)
Source: https://harness.verafy.ai/learn/constitution-and-ethics
# The encrypted queue
*Contracts wait sealed until their jury is drawn, so nobody can front-run a ruling.*
A contract can be submitted sealed. Its clear metadata (escrow, jury rules) lets nodes plan a block, but its content opens only after the jury is drawn, when enough nodes release their key shares (Shamir sharing over a 521-bit prime field, with X25519).
This stops anyone from seeing a contract early and positioning around it. It does not hide the contract from the jurors or from a proving machine, which must read what they rule on.
**Status.** Built (CHAIN, batching). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Verafy Chain](https://harness.verafy.ai/learn/verafy-chain), [Juries, commit and reveal](https://harness.verafy.ai/learn/jury)
Source: https://harness.verafy.ai/learn/encrypted-queue
# The harness daemon
*The long-running process that keeps a harness online: register, watch, commit, reveal, prove.*
`verafy harness serve` runs one harness as a daemon:
- It **registers** with each node, signed with its own key.
- It **watches** each node's mempool for funded contracts.
- It **serves** the routes a node calls when the harness is drawn: commit, reveal, and proof at L2.
It refuses to commit on any contract no watched node holds, so nobody can spend its model budget from outside. Before a commitment leaves the process, the vote and salt behind it are written to disk, so a restarted daemon can still reveal. One data directory keeps one harness id and one key.
It is configured entirely by `VERAFY_*` variables, which makes it the same process locally, in Docker and on any cloud.
**Status.** Built (JURY-009, DEPLOY-001). See the [specification](https://harness.verafy.ai/spec).
**Related:** [Launching a harness](https://harness.verafy.ai/learn/launching-a-harness), [A harness](https://harness.verafy.ai/learn/harness)
Source: https://harness.verafy.ai/learn/harness-daemon
# Launching a harness
*Every way to run one: this machine, Docker, DigitalOcean, Hetzner, any cloud, or a one-click button.*
`verafy up` asks a few questions, shows the plan with keys masked, and runs it:
- **Local:** Node on this machine. Keys go to `~/.verafy/env`, mode 600.
- **Docker:** the container image, with a volume for the key.
- **DigitalOcean or Hetzner:** creates a server whose first boot installs Node, runs the daemon as a hardened service, and opens the port. The cloud token is used once and never stored.
- **Any cloud:** prints the first-boot script to paste as user data.
`verafy up --ui` asks the same questions as a page on your own machine.
Hardware profiles suggest a model: a hosted model on any machine, or open weights sized by modeled memory. Releases ship a tarball, single-file binaries, a container image and an install script.
**Status.** Built (DEPLOY-001 to 009); cloud creation tested against fake APIs only. Hosted harnesses run by Verafy are planned. See the [specification](https://harness.verafy.ai/spec).
**Related:** [The harness daemon](https://harness.verafy.ai/learn/harness-daemon), [A local testnet](https://harness.verafy.ai/learn/local-testnet)
Source: https://harness.verafy.ai/learn/launching-a-harness
# A local testnet
*A whole testnet on one machine, with scripted AI so it costs nothing, and optional Solana settlement.*
`verafy testnet up` starts one harness daemon per lab, each its own process, then a local coordinator that does a node's job: draw the jury from the parent block hash, run commit and reveal over HTTP, rule, and seal a block.
AI calls are scripted by default (spoofed from `examples/mock-answers.json`), so nothing costs money. `--live` uses real models. `--solana` also starts a local Solana validator, deploys the ruling program, and settles every ruling there, each harness signing with its own key. `--chain
` runs the full Verafy Chain devnet instead.
**Status.** Built (DEPLOY-007), measured on one machine Nov 6, 2026. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Launching a harness](https://harness.verafy.ai/learn/launching-a-harness), [Settling on Solana](https://harness.verafy.ai/learn/solana-settlement)
Source: https://harness.verafy.ai/learn/local-testnet
# The economics
*What a ruling costs, where the money goes, and why packing and routing matter.*
A ruling's cost is mostly model calls and, at L2, proofs. Every figure on the economics page is labeled: vendor-reported speeds and prices, modeled costs from `packages/economics`, or illustrative assumptions.
Headline numbers (modeled, H100 at $4.00 an hour):
- **Unpacked:** five jurors each proving: $0.1043 a decision.
- **Packed:** atomized, packed, proven once: $0.0059.
- **With a fast screen,** at assumed settle rates: $0.0039.
Once proofs are packed, the fidelity checks cost more than the proofs, which is where the next savings are.
**Status.** Built (ECON). The calculator is live on the economics page. See the [specification](https://harness.verafy.ai/spec).
**Related:** [Proof packing](https://harness.verafy.ai/learn/proof-packing), [Multi-model routing](https://harness.verafy.ai/learn/multi-model-routing)
Source: https://harness.verafy.ai/learn/economics
# Verafy specification
**Version 0.0.2-alpha**, November 6, 2026. Covers Verafy Harness (this repo) and Verafy Chain ([Verafyai/verafyChain](https://github.com/Verafyai/verafyChain)).
**Scored 66% overall** at v0.0.2-alpha (see [SCORECARD.md](SCORECARD.md)).
This is an alpha spec for a prototype. Nothing here describes a running network, and there is no token. Every number is labeled **measured** (our own runs, with a date), **vendor-reported** (by whoever built the tool), **modeled** (computed from those, in `packages/economics`) or **illustrative** (an assumption to replace).
## How to read this spec
- **Requirement IDs are stable.** `AREA-NNN` never changes meaning; a dropped requirement keeps its ID, marked removed in the changelog.
- **Status** is one of verified, built, partial, designed, planned or research (defined in [requirements.json](requirements.json)). The tables below are generated from that file by `npm run score -- --write`, so the status here always matches what the scoring pass checks.
- **The scoring pass** (`npm run score`) checks each claim against the code: a file, a function, or a test in `npm test`. A claim whose check fails scores zero. See [SCORECARD.md](SCORECARD.md).
- **Versioning.** Semantic versions with a pre-release tag. Alpha means the shape can still change. A change of status, a new requirement or a reworded one bumps the patch number; a change of architecture bumps the minor number. Every version is a git tag and a GitHub release, with notes in [CHANGELOG.md](CHANGELOG.md).
## The system in one picture
```
contract in words ──▶ ethics gate ──▶ atomizer ──▶ router ───────────────┬──▶ settled (screen or panel)
(verafy.asc/1) (planned) PACK ROUTE │
│ L2 only │
▼ │
packer ──▶ prover, proven once ──▶ verifiers (sampled)
PACK PROVE │
▼
jury rules: commit, reveal, agreement against the bar (CORE, JURY)
│
TinySVM settles the exit exactly (SETTLE)
│
record: Verafy Chain block (CHAIN) or Solana accounts per the SIMDs (SOL)
│
banker pays and gets paid in existing tokens; light client watches escrow (BANK, LIGHT)
```
## Principles that bind every part
From [PRINCIPLES.md](https://github.com/Verafyai/verafyChain/blob/main/PRINCIPLES.md): payment agnostic (no token, ever); natural language first; embedded ethics; checkable and verifiable; agent friendly; context is evidence; no single model or lab; nothing is erased; legible to people; open and forkable; honest about what runs. A design that conflicts with a principle loses, or goes through the amendment process.
## CORE: the protocol
A contract is a compressed intention: instructions, pinned context, a question with a closed answer type, a bar, payment and declared exits. Jurors commit to a hashed vote, then reveal it; agreement is measured against the bar; a below-bar ruling never pays jurors; the exit's diff must conserve totals.
| ID | Status | Requirement |
|---|---|---|
| CORE-001 | verified | Contract format verafy.asc/1 with validation; swarm.asc/0 still validates and keeps its hash |
| CORE-002 | verified | Pinned context: every context entry checked by SHA-256 before a model reads it |
| CORE-003 | verified | Commit then reveal with Ed25519 signatures and attestations |
| CORE-004 | verified | Agreement against the bar: verdict, forecast and graded; below-bar exits never pay jurors |
| CORE-005 | verified | Exits and diffs conserve totals; declared exits only |
| CORE-006 | built | Rulings re-verifiable from their round record (ruleFromRecords, verifyRuling) |
| CORE-007 | built | Quorum-signed triggers verafy.trigger/1 for calls to other chains |
| CORE-008 | built | Batching fields minBatch and maxWaitSeconds, without changing existing hashes |
| CORE-009 | built | Exit programs with bounded params, aggregated from votes |
## JURY: juries, live runs, audits and challenges
Juries span labs and are drawn from the parent block hash. Auditors from other labs re-check sealed rulings; challenges append, never erase; a below-bar ruling's escrow funds a wider jury.
| ID | Status | Requirement |
|---|---|---|
| JURY-001 | verified | Live juries across five labs; measured Nov 6, 2026: five contracts, 5.9 to 30.1 s each, $0.0163 in total |
| JURY-002 | verified | Juror mode inside DeepSeek Harness: five labs sealed a block from their reveals |
| JURY-003 | built | Retry and back-off for rate-limited models |
| JURY-004 | built | Auditors from other labs re-check sealed rulings |
| JURY-005 | built | Challenges append affirm, overturn or supersede; escalation funds a wider jury |
| JURY-006 | planned | Challenge bonds: lock on open, return on overturn, forfeit on affirm. *Gap: Not built; needed before challenges can run on a network.* |
| JURY-007 | planned | Track record: agreement with final rulings and forecast scores per harness. *Gap: No per-harness history yet; needed for bonds and for routing weights.* |
| JURY-008 | partial | 100 live rulings across the four market types, with audits and costs published. *Gap: Only the first five live rulings are published.* |
| JURY-009 | built | Harness daemon: a long-running process that watches for funded contracts and takes seats |
## CHAIN: the Verafy Chain node
A block exists only when a jury rules. The node keeps a mempool of funded contracts, coordinates juries, gossips commitments and reveals, rotates sealers and verifies every block. Batching closes an L2 block by value or by time; the encrypted queue keeps contracts sealed until the jury is drawn.
| ID | Status | Requirement |
|---|---|---|
| CHAIN-001 | built | Node: mempool, jury coordination, gossip, sealer rotation, block store, verification |
| CHAIN-002 | built | Availability layer: context served by hash through the challenge window |
| CHAIN-003 | built | Batching: blocks close by value or by time, with a pro rata cost split |
| CHAIN-004 | partial | Encrypted queue: contracts sealed t of n until the jury is drawn. *Gap: Prototype: each author deals the shares; real distributed key generation and verifiable shares are planned.* |
| CHAIN-005 | planned | Registry on chain, sealer liveness, bonds and slashing, libp2p gossip. *Gap: Needed for a network of independently operated harnesses.* |
| CHAIN-006 | planned | Escalated juries accepted by the chain; challenge juries that share no lab |
## SETTLE: TinySVM
The AI judges and TinySVM settles: a restricted LiteSVM sidecar that runs only pinned programs (escrow, bond, ledger and exit programs) under a compute cap. It runs side by side with `runtime.js`, and any disagreement is a fault. TinySVM decides nothing.
| ID | Status | Requirement |
|---|---|---|
| SETTLE-001 | built | TinySVM phase 1: LiteSVM sidecar restricted to pinned programs and a compute cap |
| SETTLE-002 | built | Built-in programs escrow, bond and ledger; exit programs graded_payout, ranked_split, milestone_escrow |
| SETTLE-003 | built | runtime.js and TinySVM side by side; any disagreement is a fault |
| SETTLE-004 | planned (needs Rex) | Integer micro-units in runtime.js; TinySVM as the default runtime. *Gap: Needs Rex: changes some future diffs by one micro-unit.* |
| SETTLE-005 | planned | Phase 2: Anza's solana-svm crate; nodes re-run settlement when they verify a block |
| SETTLE-006 | partial | Settlement core compiled into weights (svmLLM), proven with the judgment. *Gap: Demo: the five integer programs run on svmLLM's hand-built weights as an optional third runtime and agree with runtime.js and TinySVM; the jury pay rule (doubles) is not covered. No real proof made: mock only. Success criterion (a settlement proof cheaper than the judgment proof) untested.* |
## LIGHT: reading source chains
Escrow stays on its own chain. The harness reads it from several independent RPC providers and treats disagreement as unknown, never a guess. Intake checks funding before a jury is drawn; the outbox confirms a trigger landed.
| ID | Status | Requirement |
|---|---|---|
| LIGHT-001 | verified | Solana multi-RPC reader; one read-only devnet run measured Nov 6, 2026 |
| LIGHT-002 | built | EVM multi-RPC reader for any chain id |
| LIGHT-003 | built | Intake checks escrow funding; outbox confirms triggers; disagreement pauses, never guesses |
| LIGHT-004 | partial | Ethereum sync-committee verification through Helios. *Gap: Adapter only, tested with Helios absent.* |
## BANK: the routing agent
Four blocks: the keyblock (keys encrypted, scoped keys out), the banker (accept any allowed token, convert at the best checked quote), the API router (pay AI APIs, provers and hosts, metered) and the payment wallet (caps, allowlist, never the bond). The Banker is a deterministic service, not an AI agent; a read-only advisor may report and flag but holds no keys. Full design in [banker.md](banker.md).
| ID | Status | Requirement |
|---|---|---|
| BANK-001 | built | Keyblock: keys encrypted at rest; scoped keys with expiry, use limits and revocation |
| BANK-002 | built | Payment wallet: allowlisted payees, caps, approval threshold, bond reserve never spent |
| BANK-003 | built | Banker core: accept allowed tokens, best quote across approved venues, slippage limit, ensure and pay |
| BANK-004 | built | API router: keyed calls, metering, per-call or accrued billing |
| BANK-005 | built | Inference routing by assurance level, L0 to L2; L2 never to a hosted API |
| BANK-006 | built | BankerService: deposit state machine (detect, classify, hold, quote, simulate, swap, sweep, record), idempotent by txid |
| BANK-007 | partial | Real venue adapters: Jupiter on Solana, an EVM aggregator, a bridge; price sanity against a reference. *Gap: Jupiter and LI.FI quote live (measured Nov 6, 2026); simulation and sending are built behind the execute switch but have not run against a funded wallet.* |
| BANK-008 | built | Token allowlist by address; quarantine unknown tokens; dust; sanctions screen; daily caps; kill switch |
| BANK-009 | partial | Gas reserves per chain; exact approvals; simulate before send; append-only ledger with cost basis. *Gap: Simulate before send and the hash-chained ledger are built; per-chain gas reserves, exact approvals and cost-basis export are not.* |
| BANK-010 | built | Banker advisor: a read-only model that reports and flags, holding no keys |
| BANK-011 | built (needs Rex) | Service mode (converting other people's funds) disabled in code until legal review |
| BANK-012 | planned | Rent GPU and VM hosts on demand for open-weights and proving routes |
| BANK-013 | built | API credits: read provider balances, project days left from spend, and say what to top up and how. *Gap: No provider tops up automatically: OpenRouter's crypto top-up API returns 410 Gone (checked Nov 6, 2026). An x402 pay-per-request slot is reserved.* |
## PACK: proof packing and the prompt compressor
FlashProve proves at most 1,024 tokens, about 750 words, per request; each proof takes about 9 s of H100 time, produces 18.78 MB and takes 17 s to verify (vendor-reported). Proving one request per proof wastes the window and pays for every proof in full. So requests are compiled before any model sees them:
1. **Atomize.** Each contract becomes atoms: one question each, a closed answer type, only the deciding facts, every fact pinned. An exact composition rule, written as code with integer math, turns atom answers into the contract's outcome. UNKNOWN goes to the contract's declared fallback, never a guess.
2. **Dedupe.** The same question over the same evidence has the same hash, so contracts that share a question share one slot and one proof.
3. **Pack.** Atoms fill 1,024-token requests first-fit, about 16 to 18 per request in tests; slot order is shuffled by the block hash; a reply that misses or mangles any slot is rejected whole.
4. **Compress what can't be atomized.** A brief (the question, the exits and only the deciding facts, each cited) stands in for a long contract. Plain dense English, never invented shorthand: models read English tokens best.
5. **Check fidelity.** A proof covers the atoms, not whether they capture the contract. Every plan or brief is agreed by the parties or ruled FAITHFUL by an unproven panel from several labs before it is used.
In a test block, 60 contracts became 120 atoms, 61 after dedupe, in 4 requests at 85% fill (measured on the packer with mock models).
| ID | Status | Requirement |
|---|---|---|
| PACK-001 | built | Atoms: one question, closed answer type, only deciding facts, each with a pin |
| PACK-002 | built | Atom plans with an exact composition rule; UNKNOWN goes to the declared fallback |
| PACK-003 | built | Dedupe across contracts by atom hash; first-fit packing into 1,024-token requests; block-hash slot order (library, tested with mocks) |
| PACK-004 | built | Strict reply reading: every slot exactly once, typed answers, nothing else |
| PACK-005 | built | Atomizer: drafts a plan with any model and checks every cited pin is real |
| PACK-006 | built | Fidelity check: an unproven multi-lab panel rules a plan FAITHFUL before it is used |
| PACK-007 | planned | Real token counts with the target model's tokenizer. *Gap: The packer estimates about four characters per token.* |
| PACK-008 | designed | Prompt compressor: briefs for contracts that cannot be atomized; party-agreed or checked. *Gap: Brief mode is modeled in economics, not built in the packer.* |
| PACK-009 | designed | Long contracts split by claims with a proven combine step |
| PACK-010 | built | Route before packing: only atoms in the proven lane reach the packer |
| PACK-011 | partial | Packing wired into harness runs and chain intake: atomize, route, pack, prove, assemble, end to end. *Gap: Built for harness runs (verafy packed, packedBlock) with the mock prover; the verafyChain node intake and the daemon do not call it yet, and no real prover is attached.* |
## ROUTE: multi-model routing
Every question starts at the cheapest tier that can answer it safely: a fast System 1 screen (such as Jev), then panels of small, mid-size and frontier models, each spanning labs. A unanimous panel stops; a split one moves up. Three signals decide where a question goes: the screen's probability, juror disagreement, and the question itself (its stakes, type and the contract's floor). The router is plain code; no model decides routing.
Guardrails:
- **Shadow mode by default.** The screen sizes juries and logs what it would have settled. It settles nothing until its cutoffs are calibrated and an operator turns settling on.
- **Calibrated cutoffs.** Per question type, the lowest probability at which the screen's accuracy, as a Wilson lower bound on labeled examples, matches the jury it replaces. Too few examples means no cutoff. Live audits withdraw a cutoff whose accuracy drops.
- **The contract's floor is never lowered.** The screen can only add scrutiny. L2 questions never take a screen's answer, because a closed model cannot carry a proof.
- **Audits.** A share of settled answers, drawn from the block hash, is re-checked at the top tier.
What a screen is worth is not known yet. Jev's figures are its maker's (70 to 500 ms, about $0.0004 a decision, 67.8% on its benchmark against 73 to 74% for frontier models); its coverage on our questions needs a calibration run.
| ID | Status | Requirement |
|---|---|---|
| ROUTE-001 | built | Tiered router: screen, then panels from small to frontier; a unanimous panel stops, a split one escalates |
| ROUTE-002 | built | The contract's floor is never lowered; L2 never uses a screen's answer; stakes cap screen settlement |
| ROUTE-003 | built | Shadow mode by default: the screen sizes juries and logs what it would settle |
| ROUTE-004 | built | Calibration: per-type cutoffs from the Wilson lower bound; recheck withdraws a cutoff when live accuracy drops |
| ROUTE-005 | built | Audits drawn from the block hash re-check settled answers at the top tier |
| ROUTE-006 | built | Screen adapters: a Jev adapter taking any client call, and a scripted screen |
| ROUTE-007 | partial | A labeled calibration set of atoms with known answers, and a Jev calibration run. *Gap: The labeled set (1,000 atoms, 200 per kind) and the runner are built; a Jev run needs Jev access (JEV_URL, JEV_API_KEY). A simulated run checks the pipeline only.* |
| ROUTE-008 | planned | Wire the router into the harness and the chain intake, with per-contract allowScreen, stakes and floors in the contract format. *Gap: The router is a library; contracts cannot declare allowScreen or floorTier yet.* |
| ROUTE-009 | planned | Skip tiers when stakes or question type make escalation likely |
## PROVE: proofs of inference
The proven lane is set by the contract, never by difficulty. While only one model is provable, each packed request is proven once by a prover drawn from the block hash, and other jurors verify; lab diversity returns when a second model is provable. Proofs are attached after the reveal; an L2 ruling is final only when every counted proof verifies; a missing or failed proof drops the vote and records a fault. Proofs and their data stay off chain; a block carries one Merkle root over them.
| ID | Status | Requirement |
|---|---|---|
| PROVE-001 | built | Proof hashes on votes; a proof itself on chain fails verification |
| PROVE-002 | built | Prover and Verifier interfaces with mock, DeepProve and FlashProve adapters. *Gap: DeepProve and FlashProve adapters tested against a stand-in prover only; the FlashProve binding check (bindsTo) is planned.* |
| PROVE-003 | built | Commit, reveal, then attach the proof before a deadline; L2 final only when every counted proof verifies |
| PROVE-004 | designed | Prove once, verify many while one model is provable; verifiers drawn from the block hash |
| PROVE-005 | designed | One Merkle root per block over manifests and proof hashes; sampled verification with challenges |
| PROVE-006 | partial (needs Rex) | Measured DeepProve run on packed questions; FlashProve proving-harness runbook. *Gap: Runbook written (docs/proving-harness.md), not run. No real proof made or verified; needs Rex to rent a machine and accept the Llama 4 and Lagrange licenses.* |
| PROVE-007 | research | Recursive aggregation of many proofs into one |
## COT: disclosed reasoning
Each vote carries reasoning, and the commitment covers it, so reasoning cannot be rewritten after the outcome is known. Rulings record each juror's reasoning hash. Next: step-wise reasons that cite a pin per step, so a challenge can point at the step where the logic broke. In the proven lane, reasoning uses the 1,024-token window (full reasoning roughly doubles cost per contract, modeled), so proven jurors give short reasons. Written reasoning is evidence to check, not a guarantee of what drove the answer.
| ID | Status | Requirement |
|---|---|---|
| COT-001 | built | Each vote carries reasoning; the commitment covers it, so it cannot be rewritten after the fact |
| COT-002 | built | Rulings record a hash of each juror's reasoning; dissents keep their reasoning |
| COT-003 | designed | Structured, step-wise reasons with a cited pin per step; challenges cite a step. *Gap: Reasoning is two or three free-text sentences today.* |
| COT-004 | designed | Short reasons in the proven lane; full reasoning off chain by hash in unproven tiers |
| COT-005 | research | Disagreement graph: structured objections against a rule or evidence item, versioned across rulings |
## GOV: constitution, ethics and amendments
Block 0 is a draft Constitution with Embedded Ethics, to be ratified by the first jury consensus. Every governance change passes a constitution check, then an ethics check. Amendments go through seven stages and can never weaken entrenched clauses.
| ID | Status | Requirement |
|---|---|---|
| GOV-001 | built | Constitution Draft 0 with Article 1 (no foundation, no VC, no coin, no fundraising, no secret team, no community fund, no treasury) |
| GOV-002 | built | Ethics gate: allow, refuse or escalate at intake; doubt resolves toward refusal; no bypass. *Gap: Panel sizes, bar and the screening fee are illustrative until Rex sets them; challenges to an ethics ruling are not built.* |
| GOV-003 | built | Amendment process: seven stages, entrenched clauses, verafy.amendment/1. *Gap: Tested in process with 42 harnesses; not on the five-harness multi-process devnet.* |
| GOV-004 | built | Eleven design principles |
## SOL: settling on Solana
In theory, no separate chain is needed: the three draft SIMDs describe every part of this as ordinary Solana programs, with no changes to Solana. Two pieces would still need adding: fair juror draws (slot data can be nudged) and availability for the off-chain data. Proof packing needs a small amendment so many attestations can point at one shared proof. A dedicated Verafy Chain is worth building only if the Solana version hits real limits.
| ID | Status | Requirement |
|---|---|---|
| SOL-001 | designed | Three draft SIMDs: inference programs, attestations, rulings; no validator changes |
| SOL-002 | partial | A Solana devnet program implementing commit, reveal and the Ruling account; one harness ruling settled on devnet. *Gap: Built and run on a local solana-test-validator (measured Nov 6, 2026: five harnesses commit and reveal with their own keys; five bad transactions refused). Not yet deployed to devnet: the devnet and testnet RPC faucets are closed, so it needs about 1 devnet SOL from faucet.solana.com.* |
| SOL-003 | designed | SIMD amendment: packed proofs shared by many attestations (proof hash, slot and manifest hash). *Gap: Text not yet drafted into the attestations SIMD.* |
| SOL-004 | planned | Fair juror draws on Solana (commit-reveal randomness or a VRF), since slot data can be nudged |
| SOL-005 | planned | Availability for off-chain refs on Solana through the challenge window |
## ECON: economics
All of it lives in `packages/economics`, with tests that pin every vector, and renders at [harness.verafy.ai/economics](https://harness.verafy.ai/economics). Headline results (modeled, defaults: an H100 at $4.00 an hour, FlashProve's vendor-reported speed):
| | Per decision |
|---|---|
| Unpacked, five jurors each proving | $0.1043 |
| Atomized, packed, proven once | $0.0059 |
| Plus a screen settling half the atoms and 70% of checks (assumed) | $0.0039 |
Once packed, the fidelity checks cost more than the proofs (at 1,000 contracts: $3.26 against $1.29), so the next savings are in cheaper checks. A cascade from a screen to frontier models comes out about 4 times cheaper and 3 times faster on average than sending everything to a frontier jury (illustrative tier shares), but a hard question pays every tier.
| ID | Status | Requirement |
|---|---|---|
| ECON-001 | built | Proven block model: per proof, per block, per decision; warm-up; capacity; break-even; roles |
| ECON-002 | built | Proof packing, atomize, dedupe and a fast screen in the model |
| ECON-003 | built | Cascade model: average and typical cost and time across tiers, and the worst case |
| ECON-004 | built | Calculator page harness.verafy.ai/economics from the same functions |
| ECON-005 | built | Calculator: cascade tiers, reasoning length, screen savings and Solana costs on the economics page |
## AGENT: plugins
Your agent is a client, never a juror: the MCP server has no vote, key or funds tool, contract text comes back as evidence, and live calls need a flag and a spend cap.
| ID | Status | Requirement |
|---|---|---|
| AGENT-001 | built | Zero-dependency MCP server: eight tools; no vote, key or funds tool; live calls behind a flag and a spend cap |
| AGENT-002 | built | Integrations for Claude Code, Codex, Cursor, Gemini CLI, Goose, Hermes Agent, OpenClaw and any MCP client |
| AGENT-003 | planned (needs Rex) | Publish the MCP server to npm and submit to agent catalogs |
| AGENT-004 | planned | MCP tools for routing (verafy_route) and packing (verafy_pack) |
## DEPLOY: deploy and run anywhere
A harness is one long-running process: `verafy harness serve`. It registers with nodes, watches their mempools, and serves commit, reveal and proof. It refuses a commit on any contract no watched node holds, so nobody can spend its model budget from outside. Open commitments are written to disk before they leave, so a restart can still reveal.
`verafy up` gets that process running wherever the operator wants it: on this machine with Node or Docker, on a DigitalOcean or Hetzner server it creates, or on any cloud from a first-boot script. The model key goes to a mode-600 file or the server's user data; a cloud token is used once and never stored. Hardware profiles pick an open-weights model the machine can hold (modeled memory). `verafy testnet up` runs a whole testnet on one machine, scripted by default so it costs nothing, and can settle every ruling on a local Solana validator.
Releases ship as a source tarball, single-file binaries, a container image and an install script, all from one workflow on a version tag.
| ID | Status | Requirement |
|---|---|---|
| DEPLOY-001 | built | verafy harness serve: one harness daemon configured by VERAFY_* variables, an env file or a config file; one id and key per data directory |
| DEPLOY-002 | built | verafy up: ask a few questions, show the plan with keys masked, then run locally (Node), in Docker, on DigitalOcean or Hetzner, or print user data for any cloud |
| DEPLOY-003 | partial | Cloud clients for DigitalOcean and Hetzner, and a first-boot script that installs, hardens and runs the daemon as a service. *Gap: Tested against fake APIs; no real server has been created yet (needs an operator token).* |
| DEPLOY-004 | built | Hardware profiles: which open-weights model a machine can hold, by modeled memory, and its router tier |
| DEPLOY-005 | partial | Container image, compose file, and one-click Render and DigitalOcean App Platform buttons. *Gap: The image has not been built here (no Docker daemon); it builds and publishes on the first tagged release.* |
| DEPLOY-006 | partial | Releases: source tarball, single-file binaries for Linux, macOS and Windows, a GHCR image, checksums, and install.sh. *Gap: The workflow has not run yet; it runs on the first pushed version tag.* |
| DEPLOY-007 | built | verafy testnet: a local testnet on one machine (a daemon per lab, juries over HTTP, sealed blocks), scripted or live, with optional Solana settlement |
| DEPLOY-008 | built | verafy up --ui: the launcher as a page on 127.0.0.1, with a one-time token in its URL |
| DEPLOY-009 | built | Launch page on harness.verafy.ai: pick a model and a target, get the command, the user data or a button |
| DEPLOY-010 | planned (needs Rex) | Hosted harnesses run by Verafy for people who do not want to operate one. *Gap: Needs Rex: billing, servers and terms.* |
| DEPLOY-011 | planned | A desktop app (installer with its own window) wrapping verafy up and the daemon |
## SITE: sites and docs
| ID | Status | Requirement |
|---|---|---|
| SITE-001 | built | harness.verafy.ai: landing, run, testnet, coin agnostic, economics |
| SITE-002 | built | Versioned spec with stable requirement IDs, a changelog and a generated scorecard |
| SITE-003 | built | Spec page and release-notes blog on harness.verafy.ai |
| SITE-004 | built | Learn: one page per concept, from Actually Smart Contracts to the Banker, each with its status and related concepts |
| SITE-005 | built | Machine-readable site: llms.txt and llms-full.txt, sitemap.xml, robots.txt, canonical URLs, Open Graph and JSON-LD on every page |
## OPS: security and operations
| ID | Status | Requirement |
|---|---|---|
| OPS-001 | built | No secret in output: tests plant a key and check no tool or log prints it |
| OPS-002 | built | Context is evidence: injected instructions in context are returned as evidence and change nothing |
| OPS-003 | planned | Monitoring: per-harness health, spend, faults and alerts |
| OPS-004 | planned | Threat model document covering keys, queue, provers, screens and the banker |
## EXT: collaborations and data
Muse (semantic version control) proposed two small experiments: targeted certification from semantic diffs, and poisoned evidence with signed provenance. Both fit the harness as pinned manifests, with no dependency in core.
| ID | Status | Requirement |
|---|---|---|
| EXT-001 | research | Muse experiment A: targeted certification from semantic diffs vs full-context review |
| EXT-002 | research | Muse experiment B: poisoned evidence with and without signed provenance manifests |
## Decisions waiting on Rex
Requirements marked *needs Rex* in the tables, plus: the block-close defaults, prove-once for L2, packing defaults, allowed brief modes, the Banker's target token, treasury, chains, caps and screening, whether to rent a FlashProve machine, and whether to publish the MCP server. From v0.0.2-alpha: whether Verafy runs hosted harnesses (DEPLOY-010), devnet SOL for the Solana program (SOL-002), Jev access for the calibration run (ROUTE-007), turning on Banker execution with a funded scoped wallet, and the illustrative defaults: block close (10% warm-up, 1-hour maximum wait), the 600-second proof deadline, the ethics panel sizes, bar and screening fee, and the amendment escrow shares.