Knos carries research across the valley of death.
Video · Open Exchange · Article · Code · Run it on IRIS · Try it on NEAR
Test money only.
[Image] Job posted → [Image] Money held → [Image] Helpers try → [Image] Check passed → [Image] Helper paid
[Image] Qloo checks demand · [Image] IRIS checks proof · [Image] NEAR and Solana devnet pay · [Image] Sibyl remembers each result
How it works
No money locks on a vague brief. Each step is paid only when its proof is verified.
- Check demand. A demand check asks Qloo who would buy the product and where. Qloo's heatmap names the launch city.
- Ready brief. That city and the pre-order target become the terms of a Ready brief. Each milestone has a target, a checker and a deadline. A criteria hash locks them. If the city falls short by the first deadline, every pre-order is refunded.
- Money held. Pre-orders and milestone funding wait in a program on Solana, not with Knos.
- Paid on proof. The maker sends the proof. When it is verified, the program pays for that milestone. Example: an agent was paid 5 test units for verified work on devnet. The newest payout, read from chain, says what released it.
Add Knos to Claude Code with one command: claude mcp add --transport http knos https://knos.onrender.com/mcp
Open call: have research waiting for a market? Cross it on Knos: the page counts every crossing and pre-order by people outside Knos, live.
Paid on proof
The proof is checked before any money moves. A milestone names its checker in the brief. The proof can be:
- a lab result or a public evidence page, read by the milestone's checker;
- checks that GitHub signs, verified on chain;
- the same verdict signed by two of three referees;
- a verdict from IRIS inside a lab's own walls. Its agent can only say no or ask a person.
Nothing is paid on a promise. A missed deadline sends the money back.
Try it in ten seconds
Open the demand check in your browser. Type what you are about to build, or press one of the samples. Qloo's taste data says who wants it and where to launch it. The whole crossing runs in the app, with nothing to install and no sign-up.
Why nobody can fudge the count
The terms of a brief are locked by a hash before any money moves. A changed target or deadline gives a different hash. So a change cannot hide.
The money waits in a program on Solana, not with Knos. That program pays only on a verified proof. At the deadline it refunds the backers instead.
Neither the maker nor Knos can move the money alone.
Today one person can still change that program, after a public wait (who holds the keys).
Today Knos earns its fee only when work is accepted. When you get a refund, the fee goes back to you. So Knos gains when work passes, and it is not yet fully neutral (what is enforced and what is a promise).
Is it real?
It runs on test money only: test USDC on Solana's practice network, devnet.
There are no customers yet. Nobody has bought anything (what is not real yet).
One person holds every key today. Any change to the programs waits in public for 8 days first (who holds the keys).
Run it on IRIS
A lab pays for a research milestone only when IRIS finds the proof met. An AI Hub agent on a local model weighs a
GitHub check run or a lab result. A rule decides next, and above 50 USDC a person in IRIS Workflow does. Only then
does Solana devnet run a simulation with test money.
This entry runs on AI Hub build 154 (irishealth-community 2026.3.0AI.154.0), which the portal removed on 2 Nov 2026; build 109 is not tested.
The contest task, part by part
What is new, and why
- The trace is the production's own message log. Every step of the agent's decision is an interoperability
message, kept in a Langfuse-style SQL table. A lab cannot send its data to an outside tracing service; IRIS already
keeps an audited record of every message, so the trace stays inside the lab's own IRIS.
- An agent that can only say no. A lab cannot let a model pay anyone. So the agent has no tool that moves money: it
may only say met, not met or insufficient. Code checks that answer, and a person approves anything large.
- Vector Search keeps the agent honest. The proof's two nearest criteria come from IRIS Vector Search
(snowflake-arctic-embed-s, run in Embedded Python). A verdict that cites a criterion outside those two is capped at
0.6 confidence and goes to a person.
- The brief is locked by a hash. The brief is hashed with Knos's own
knos.ready.criteria_hash, run in Embedded
Python from the same src/knos that the Knos app uses. Proof against a changed brief is refused before any model is
asked.
Install
You need Docker with about 4 GB free for it, and the InterSystems image file
irishealth-community-2026.3.0AI.154.0-docker.tar.gz (x64) from the
AI Hub Early Access portal (an InterSystems login).
-
Load the image and retag it to the name the Dockerfile builds on:
(bash iris/scripts/load-image.sh <tar> does both.) Neither image, nor any image built on it, is pushed to a registry.
-
Get the code and make .env with random secrets:
-
Pick the model (the LLM provider). The default needs nothing: KNOS_AI_MODE=local asks qwen2.5:1.5b-instruct in
the ollama service through AI Hub's openai provider, with no key and no account. For a cloud model set
KNOS_AI_MODE=live, KNOS_LLM_PROVIDER and its key in .env:
A spend cap is checked before any paid call: at most KNOS_LLM_MAX_CALLS calls (default 30) and
KNOS_LLM_MAX_USD dollars (default 2.00). Never commit .env.
-
Start it:
The first start builds the image (about 3 minutes on 4 cores) and pulls the local model (about 1 GB).
See that it works
bash scripts/smoke.sh sends one decision on public data and prints decision: {"decision":"met","gate":"PAY",...}
and a Visual Trace link.
- Open
http://localhost:52773/knos/, sign in as _SYSTEM with the IRIS_PASSWORD line of .env: each decision,
its trace and the approver's inbox.
AMOUNT_USDC=80 bash scripts/smoke.sh: above 50 USDC the met decision waits for a person. Press Approve in the inbox
on /knos/ (or Interoperability > Workflow Inbox), then open the decision's Visual Trace link: the proof, the
agent's verdict, the rule, the approval and the devnet simulation, in order.
Every test in one command, with no key: bash scripts/test-all.sh (the build, the decisions, one trace through all six
parts, the bonus checks and the page).
What it decides
An InterSystems IRIS for Health production decides whether submitted proof meets a hash-locked Knos Ready brief: a
GitHub check run, a lab result (a FHIR Observation or an HL7 ORU^R01) or a Knos referee verdict. The three public
inputs scripts/smoke.sh uses are in data/public/SOURCES.md: a Synthea FHIR Observation, an HL7 ORU^R01 lab message
and a real GitHub check run.
How it works
- Proof comes in through custom adapters. A check run arrives by webhook at
/api/knos/webhook (signed with
KNOS_WEBHOOK_SECRET), by /api/knos/proof, or as a file the inbound adapter Knos.Iris.Adapter.CheckRunInbound
picks up. A lab result arrives as a FHIR Observation, or as an HL7 ORU^R01 file in inbox/oru/.
- The agent answers a decision contract.
Knos.Iris.AI.Verdict checks every answer. The rules referee, which
reads only structured fields, can only make an answer stricter, and the trace says so.
- Rule, Workflow, then the chain.
Knos.Iris.Rule.PayoutGate turns the decision into PAY, HUMAN,
REFUND_AT_DEADLINE or REJECT. HUMAN goes to a person. PAY runs a devnet simulation through the Java PEX operation.
Proof arrives one of three ways; one process checks, asks the agent, gates, asks a person, then simulates.
Requirements
Measured in a 4-core, 16 GB GitHub Codespace with mem_limit: 3g: build 160 s from the loaded image, health 7 to 9 s
after the container starts, peak 1,660 MiB in docker stats. On a 7.8 GB laptop the container peaked at 1,188 MiB.
FHIR is off by default (KNOS_FHIR=0); KNOS_FHIR=1 loads R4 and needs about 2 GB more.
The image used
irishealth-community:2026.3.0AI.154.0 (InterSystems IRIS for Health, AI Hub build 154,
IRIS for UNIX (Ubuntu Server LTS for x86-64 Containers) 2026.3.0AI (Build 154U)), from the InterSystems file
irishealth-community-2026.3.0AI.154.0-docker.tar.gz (x64). iris/Dockerfile builds on it in stages: a builder stage
runs iris.script, the final stage copies in only the databases the install changed.
LLM provider and key
KNOS_AI_MODE=local (the default) needs no key: measured on 5 Nov 2026 on 4 cores, 7 to 18 s a decision, about 670
tokens. KNOS_AI_MODE=live uses the provider and key from step 3 above. KNOS_AI_MODE=replay asks no model and says
"rules referee (no model key set)". No paid model call has been made for this project.
Start
With IPM on any IRIS for Health instance: zpm "install knos-iris" once the package is published, or from a clone,
zpm "load <clone>/iris -v" in a namespace with interoperability on. module.xml asks for IRIS 2026.3 or later with
interoperability enabled.
Check that it works
The health route answers {"production":"Running","agent":"local","fhir":"off","java":"ok","vector":"ok",...}.
Walkthrough of the three inputs
- Check run. Point a GitHub webhook (check runs) at
/api/knos/webhook, or drop a file in
/home/irisowner/knos/inbox/checkruns/ for Knos.Iris.Adapter.CheckRunInbound. Unsigned webhooks get 401.
- Lab result. POST a FHIR Observation (
"kind":"observation") to /api/knos/proof, or drop an HL7 ORU^R01 named
<briefId>.hl7 in inbox/oru/. OBX-3 and OBX-5 become the Observation's code and value.
- Referee verdict. POST a signed Knos referee verdict (
"kind":"verdict", as in fixtures/verdicts/passed.json).
The Workflow approval
A met decision above KNOS_PAYOUT_THRESHOLD_USDC (default 50) goes to the role PayoutApprovers. Approve or Reject in
the inbox on /knos/ or in Interoperability > Workflow Inbox. With no answer, the milestone stays held for two days.
Each AI Hub feature the agent uses answers live at GET /api/knos/aihub/<feature>: skill, policy, mcp, rag,
stats and workflow.
Solana devnet
On PAY, IRIS builds Knos's payout instruction and the Java PEX operation simulates it on devnet
(simulateTransaction): a simulation, not a payment. IRIS never releases money alone. The custom outbound adapter
Knos.Iris.Adapter.SolanaRpcOutbound does the reads.
The trace
Each decision's session in Visual Trace holds the Proof, the agent's Verdict, the Span messages and the Decision.
GET /api/knos/traces/<session> returns them as JSON; the table Knos_Iris_Data.Span has the same rows;
iris/docs/trace-schema.md maps them to Langfuse's trace fields.
Try it: bash scripts/smoke.sh prints a visual trace: link whose number is the session, then
SELECT Name, Kind, Model, Tokens, Ms FROM Knos_Iris_Data.Span WHERE SessionId = <session> gives every step.
Where each part lives
Platform findings
Four reproduce on a clean build 154 container, each with its own run.sh:
Problems I hit, and how I fixed them
- My 8 GB laptop stalled for two days. IRIS, Docker and the build would not fit, so every IRIS build and test moved
to one GitHub Codespace, and the compose file caps IRIS at 3 GB.
- The small model looked the brief up by the wrong key and gave up. With tools it fetched the wrong record, so the
local agent now gets the brief and the proof in its question, and code checks its answer.
- The IPM install failed with ERROR #5289 because a ToolSet compiled before its tools. A
DependsOn fixed the
compile order; the install then passed on build 154.
- The first build with FHIR ran past 1,800 s. FHIR is now off by default and loads only R4 when asked.
- A merge at start took 17 minutes at full CPU. The memory settings are now set once, the same at build and at
run, so a start merges nothing.
- A fresh codespace broke every non-root build step ("libc.so.6: Permission denied"). Its
/tmp default ACL was
the cause; scripts/codespace-setup.sh drops it.
Tests
python iris/tests/test_iris_decision.py runs the core decisions against a running instance: a passing check run, a
failing one, an altered brief, injection text in the proof and an ORU whose value misses. python iris/tests/test_iris_one_trace.py sends one check run through the whole production and checks that its one session
holds every part.
python iris/tests/test_iris_docs.py readme checks that every file this section names exists.
Architecture
The diagram under "How it works" above is the production; iris/src/Knos/Iris/Production.cls lists every item.
Known limitations
- PAY is a devnet simulation of the payout, not a payment; nothing in iris/ sends money.
- The link from IRIS's decision to the referee panel's 2 of 3 signatures is not built yet.
- Solana devnet only, with test money.
How it fits Knos
This folder is part of the one Knos product: Qloo checks demand, IRIS checks proof, NEAR and Solana devnet pay, and
Sibyl remembers each result. The Knos code is imported, not forked: the image runs the repository's src/knos.
Team
Zulqarnain Abubakar, Developer Community profile: https://community.intersystems.com/user/zulqarnain-abubakar
License
MIT, the repository's own LICENSE.
Bonuses
Each bonus with what shows it.
Knos on NEAR
On NEAR testnet, Knos pays a helper only when the test passes. The code is in near/, and every path in this
section is under near/ unless it starts with another top folder.
One job, two agents: only the output that passes the locked test is paid.
For a reader checking this project
Problem. When you pay an AI agent for work, you pay for its claim that the work is done. Nobody checks the claim
before the money moves.
What it does. A job's bid waits in a NEAR contract against a test locked by its hash. Agents take the job and submit.
A checker runs the locked test on each output and signs a token for the one that passes; the contract checks that token,
then pays. The agent whose output fails is paid 0.
Do this, see that:
- Open https://drexthealpha.github.io/Knos/near/ and click Post a job - see "Paid: Helper A $1.00. Helper B $0, its work failed."
about 4 s later, with a link to the payment on NEAR testnet (4.1 to 4.5 s on six walks, 7 Nov 2026).
- Under "Will this proof pass?" click Fund its test, then Pay with test money and watch - see a market opened on the job,
both helpers' tries, the payment and the market settled, each with its transaction (about 30 s).
- Click a take, submit or paid link under The job - see each step as its own testnet transaction.
- Run
python near/scripts/try_testnet.py <you>.testnet - see your own copy of both contracts release on a signed token
and refund after the deadline (Try it on testnet).
- Run
bash near/scripts/verify.sh - see the contract's sandbox tests and attacks pass (Tests).
What was built in the window. Everything under near/ and the hosted runner apps/wanted/knos_wanted/near_live.py:
the diff from the tag pre-hackathon (31 Oct 2026) is
https://github.com/drexthealpha/Knos/compare/pre-hackathon...main (near/ did not exist at that tag). The tag
hackathon-submission is added when the code is final.
Built before, on another chain (Q-002). Knos existed before this window on Solana devnet: the programs in
programs-v2/ and the Python package knos in src/knos/ that drives them. Only the NEAR work above is the entry.
The NEAR contract can pay a milestone out on Solana devnet through NEAR Chain Signatures
(Paid on Solana by Chain Signatures).
Own older code and libraries (Q-005). The hosted runner reuses the older app server in apps/wanted/ (routes, rate
limits) and its Render deploy. The libraries are listed under Disclosure. Most of the code was written with Claude Code.
Tracks it fits. Agent Economy (agents): agents with their own sub-accounts whose keys can only call the jobs
contract, under a spend cap. AI Swarms (swarms): two agents on one job, paid by the result of a locked test.
The test is locked before money is held and checked before money moves: nobody is paid on a claim. (Demand is checked first, by Qloo, on the site.)
A company pays a lab or a developer only when GitHub's signed run proves the milestone. The money waits in a NEAR contract; after the deadline with no proof, the company gets it back. The payout is paid on NEAR, or on Solana through NEAR Chain Signatures: the contract checks the transfer and has the MPC network sign it.
Spending limits cap what an agent may spend. Knos pays only for work that is proven done.
Run one now
Open drexthealpha.github.io/Knos/near/ and click Post a job. You see
"Paid: Helper A $1.00. Helper B $0, its work failed." and a link to the payment on NEAR testnet, within seconds: a job is
kept ready, posted against its locked test and tried by both agents, so your click sends the payment to the one whose
output passed.
It runs on Knos's own capped test account (live.knos-swarm-1105.testnet, test tokens only): 20 runs
a day, three every 10 minutes from one address; past a cap the page shows the last run and says "Replay". The same job from a
terminal: pip install knos, then knos near-job.
Work in the window
Every change since the work began: pre-hackathon...main
(the tag pre-hackathon is the commit before the first line of near/).
No Rust is needed to check or deploy the contract: near/wasm/ holds the built files and near/wasm/SHA256SUMS their
hashes. cd near/wasm && sha256sum -c SHA256SUMS prints knos_near.wasm: OK and knos_mock_usdc.wasm: OK
(a5fc5861…, 280,651 bytes, is the jobs contract deployed at jobs.knos-swarm-1105.testnet). Building them again and
every test: bash near/scripts/verify.sh (Rust with wasm32-unknown-unknown and cargo-near 0.22.0).
Try it on testnet
Your own copy of the contract, then a release and a refund. About 4 minutes after step 2. You need Python 3.10+ with cryptography, and near-cli-rs 0.30.1.
- Make a testnet account:
near account create-account sponsor-by-faucet-service <you>.testnet autogenerate-new-keypair save-to-legacy-keychain network-config testnet create. You see "New account <you.testnet> created successfully." and its transaction.
- Run
python near/scripts/try_testnet.py <you>.testnet. You see six sub-accounts made and the two contracts deployed from near/wasm/ (sha256 in near/wasm/SHA256SUMS).
- The script sets a test signing key by 2 of 3 owners, funds
m1 and releases it on a signed token. You see "release m1 on a signed token: done" with its transaction.
- It sends the same token again. You see it refused.
- It funds
m2 with a 1-minute deadline, waits, and refunds it. You see "m1: Released" and "m2: Refunded".
The page in web/ runs the same flow from a browser (python near/web/serve.py, checked by web/test-flow.mjs), but on the maintainer's test accounts (knos-*-1102.testnet, knos-pay2-1102), whose keys only that machine holds; it does not use your account yet. web/story/ takes a milestone apart as you scroll.
A job two agents try
Post a job with a locked test and a bid; two agents take it; the checker runs the locked test on each output, and only
the agent whose output passes is paid. You need Python 3.10+ with cryptography and near-cli-rs 0.30.1; it runs on the
maintainer's test accounts, whose keys only that machine holds (as the page in web/ does).
- Run
NEAR_CLI=<near> python near/web/serve.py and open http://127.0.0.1:8790/. You see "Paid only when the test passes" and a Post a job button.
- Click Post a job. You see "Paid: Agent A 1000, Agent B 0 test units." and the job's six transactions.
- Click Try both under Guardrails. You see two lines starting "refused", each with its transaction: a payment over agent B's cap, and a release with no passing proof.
- Open
http://127.0.0.1:8790/embed.html from another page or origin and click Pay with any wallet. You see a NEAR Intents 1Click quote for paying 1 USDC from Base (dry: nothing is spent), then a second click pays the bid on testnet.
The rules are in near/agents/RULES.md: the job's test is locked by its sha256 at funding, each agent is a
sub-account of knos-swarm-1105.testnet that signs with a function-call key allowed only take, submit and spend on
the jobs contract (its full-access key deleted), and the checker's key is set by 2 of the 3 owners.
web/test-job.mjs
walks these four steps in a fresh browser. One run, 5 Nov 2026:
Agent A was paid 1000; agent B was paid 0. NEAR Intents has no testnet, so the 1Click call is a dry quote only, with 0
spent on mainnet. The checker runs an agent's output in a subprocess with a 20 s limit and no environment; it is a
test-money demo, not a sandbox for hostile code.
The claim market
Each claim has a yes/no market in test tokens: will its locked check pass? The contract is
near/market/src/lib.rs, deployed at market.knos-swarm-1105.testnet (wasm wasm/knos_market.wasm).
- Price, no order book. With few traders on testnet an order book sits empty, so the price comes from an automated
market maker, Hanson's logarithmic market scoring rule (LMSR). Knos seeds each market with liquidity
b = 100 test tokens, so there is always a live price. An order book can be added once volume exists.
- The formula (token units, 6 decimals; q_yes and q_no are the shares sold on each side):
- cost: C(q_yes, q_no) = b · ln(e^(q_yes/b) + e^(q_no/b))
- price of Yes: e^(q_yes/b) / (e^(q_yes/b) + e^(q_no/b)), shown in cents ("Yes 62c"); No is 100c minus Yes
- a buy of Yes for c tokens: q_yes' = b · ln(e^(c/b) · (e^(q_yes/b) + e^(q_no/b)) − e^(q_no/b)); the buyer gets
q_yes' − q_yes shares (rounded down), each paying 1 token if Yes wins
- Knos's worst-case loss per market is its seed, b · ln 2, about 69.31 test tokens.
- Settled only by the locked check, never by vote. Each market follows one milestone of
knos-pay-1103.testnet:
its criteria hash is locked at funding and only the named GitHub Actions workflow's own OIDC token can release it.
resolve reads that milestone: Released settles Yes, Refunded (the deadline passed with no passing run) settles No.
vote and set_test are refused, always. redeem pays each winning share.
- The first claim:
near/claims/Split.lean, "splitting a bid between two helpers never pays out
more than the bid". Its check is lean-claim.yml: the proof must compile
with Lean 4.15.0, then the run's token releases the milestone whose criteria hash is the file's sha256.
Tests on NEAR
Every push that changes near/ runs them on GitHub: the near-tests runs.
Open the newest run, then its verify job: the step near/scripts/verify.sh ends with the line below. With Rust
(the wasm32-unknown-unknown target and cargo-near 0.22.0) the same on your machine:
It prints 208/208 tests passed (146 of them attacks), the contract's unit tests and then the sandbox flow, and fails when that print is not this line.
Each attack changes one thing and must be refused with the contract's own reason. The thing changed is one of these: the token's issuer, audience, expiry, repository, workflow, commit, header, form or signature; the funding message; the key set.
Or it is a second payment, an early refund or a release after the refund; for a job, a token for another output, job, test or payee, a checker key against a GitHub token and back, an agent that never took the job, a spend over the cap.
verify.sh builds both contracts to wasm and runs them on a local near-sandbox node: fund, release, replay, forgery and refund.
Measured: the release receipt burns 7.33 Tgas (11.68 Tgas for the whole transaction) in the latest verify.sh run (5 Nov 2026, a fresh clone); the replayed and the forged token are refused; after the deadline the payer gets the money back and a later release is refused.
On testnet
Read the rules from the chain:
Paid on Solana by Chain Signatures
sign_payout takes the unsigned Solana message for a released milestone. The contract accepts only one SPL TransferChecked of exactly the milestone's amount, in the mint and to the token account locked at funding, then asks v1.signer-prod.testnet (path knos-solana-1, Ed25519) to sign it. A relayer adds the signature and broadcasts; no Solana key is held anywhere.
The payout moves tokens held since funding. At funding the funder moves the amount from its own Solana token account into one owned by the contract's derived address; the payout is the transfer of exactly those tokens, and nothing is minted on the way.
A milestone released for a Solana payee with no payout signature by its deadline is refunded like an unreleased one, so it never stays locked; once its payout is signed, it is not.
scripts/solana_payout.py run does both on knos-pay-1103.testnet (code sha256 3503799e…), derived Solana address DUxGyghGoZNZu85zVJXHLAgsrA3rBt3eVDSGmhk8bzBi, on 3 Nov 2026:
Not built: when a released Solana milestone is refunded on NEAR, the tokens already held by the derived address stay there; a signed transfer back to the funder is not written yet.
The payee needs no NEAR for gas
relayer/relay.py is a NEP-366 relayer that pays only for calls to one Knos contract (knos-pay2-1102.testnet in the test). scripts/test_gasless.py has the payee sign a release as a delegate action; the relayer sends it (4XpFZwBM…) and the payee's NEAR balance is the same to the yoctoNEAR.
Every other call the test sends is refused, the token contract's ft_transfer among them, and the test prints each with the relayer's reason (the relayer also writes them to its local relay.log, not kept in the repository).
An agent that checks who it pays
agent/guard.py answers allow, warn or block for a receiver, from chain: no such account or on the shared blocklist (agent/blocklist.json, each entry with its evidence) is a block; a contract, an account under 7 days old or code changed in the last day is a warning that a person resolves.
scripts/test_agent_guard.py gives the agent a key that can call only release, refund and sign_payout here, then a task with an injected instruction to pay two other accounts: both are refused, and the chain refuses the key on the token contract.
A locked eval
eval/attempts.json holds 60 attempts, 30 honest and 30 cheating, each with a green CI run; its sha256 (eval/attempts.sha256) was committed before the first run. cargo test locked_eval -- --nocapture sends each through the contract, prints the counts with 95% Wilson intervals, and asserts them: every cheating attempt refused, every honest one paid, and plain CI pass/fail paying every cheat.
Read it for what it is. Each cheat is one of the four things the contract checks (a run from another branch or a pull request, another repository, a replayed token, altered criteria), and each carries a green CI run by construction, so the result shows that those checks run on every attempt.
It does not measure cheats the contract does not look for: tests edited and merged to main are outside what it can see.
Attacks on testnet
36 attacks and 4 controls, each a real transaction on the contract above. The first 37 rows were sent by scripts/attack_testnet.py, with tokens signed by an RSA-2048 test key that two owners set as kid knos-test, standing in for GitHub's key, so each row changes one thing.
The last 3 were sent by .github/workflows/near-release.yml (run 41651312325) with that run's own GitHub token, kid 38826b17-6a30-5f9b-b169-8beb8202f723.
Layout
contract/: the contract (lib.rs), RS256 (rsa.rs), token parsing (jwt.rs), the Solana payout check (solana.rs), unit tests (tests.rs, tests/).
mock-usdc/: a NEP-141 test token for the sandbox.
sandbox/: the sandbox test.
relayer/: the gas relayer. agent/: the receiver guard. agents/: the two agents, the checker, the job's locked test and its rules.
web/: the page and its server (serve.py, jobs_api.py), the pay button (pay.js); web/story/: the scroll story. wasm/: the built contracts.
Changes since the start of this work: near-pre...main.
Disclosure
Who wrote it: Claude Code (Anthropic's coding agent) wrote most of the code in this folder. The founder set each task and reviewed each change before it was merged. Commits carry the founder's account.
No starter template: the first commit of this folder (6413e89) adds each crate as written, with no generated scaffold in the history. The test token in mock-usdc/ uses the FungibleToken implementation from near-contract-standards, as its own documentation shows.
The contract's checks are this repository's own code (contract/src/rsa.rs, jwt.rs, solana.rs), with no crypto crate among the contract's dependencies (hashing uses the NEAR runtime's own sha256).
Libraries, at the versions in each Cargo.toml:
Tools: Rust with the wasm32-unknown-unknown target and cargo-near 0.22.0 (scripts/codespace-setup.sh); the testnet steps use near-cli-rs. Services: NEAR testnet, NEAR Chain Signatures on testnet, Solana devnet and GitHub Actions' OIDC tokens.
From a terminal
Install with pip install knos. The app answers the same steps over HTTP: POST /api/check (the demand check), POST /api/ready (the Ready brief) and POST /api/preorder (a pre-order on devnet). Run knos idea --help for every option.
Check every claim yourself
Start at the release page: the code, how it is built, what runs on devnet, the payments and the fees.
One payment from start to end, on 9 Oct 2026 with Knos 0.3.23, in a repository Knos owns, with test USDC (one step fixed by hand): funded · wrong work refused · paid (on verified proof) · replay paid nothing more · the record.
Rebuild knos_oidc and knos_pay, the programs that check the proof and pay, and compare: the hash devnet runs equals the verified build hash recorded for each (PROVENANCE). Read on 27 Oct 2026.
Words
Qloo, Ready brief, milestone and more, each in one plain line: docs/WORDS.md.
Questions
What is Knos?
Knos takes research from a paper to a product people want. It pays each step only on verified proof.
How does Knos pay an AI agent?
You post the task, your checks and the pay before work starts. When the checks pass and you merge, a program pays the agent.
Does Knos use real money?
No. It runs on devnet, Solana's practice network, with test USDC worth nothing.
What does Knos cost?
Ten demand checks a month are free; releases will cost companies 1%. Today devnet charges 0.30%, at least 0.05 test USDC.
Who holds the money?
A program on Solana holds it, not Knos. Today one person can change that program, after a public wait.
Can the buyer refuse to pay?
Not once the checks pass and the work is merged. Before that, the buyer still chooses whether to merge.
Who keeps the count of accepted work?
Neither side alone. A program checks GitHub's signature of which workflow ran, on which commit.
How do I try Knos?
Open the front door and type the product you want to build. It says who wants it and where, with no sign-up.
Read more
-
Get started: check demand, write a Ready brief, then hold the money and pay on proof.
-
Pricing: what Knos costs. Demand checks are free, 10 a month. The maker keeps 100%; the funder pays the payment program's fee on top: 0.30% of each payout, at least 0.05. Nobody is charged today (devnet, test money).
-
Trust: who holds the keys, and what is tested.
-
The story: one crossing, step by step, each with its evidence.
-
Every other document: the map of the documents.
Contact: open an issue, or report a security problem privately: SECURITY.md.
Below: tables that scripts write from the code and the chain, and the licence. Nobody types them by hand.
Every program the app or this site uses, and who can upgrade it, read from devnet on 2026-10-26 (scripts/program_authorities.py):
This page names no time for an upgrade, so it stays true before and after one. To see whether a change to the
programs is waiting, done or withdrawn, run knos status, or read the site's banner or its
upgrade record (web/upgrades.json is the
copy kept here).
The first set of programs (programs) has no upgrade authority, so nobody can change it.
It stays as a record, and no new task is funded there.
Reproduced by someone else: none recorded yet. Exercised on devnet: verify_github, fund_by_comment, fund_from_wallet, pay_on_merge and more, each named in the table. Deployed on devnet: verify_gitlab, key_guardian, hold_and_bind. Everything else is tested locally, implemented or not built: the table with the evidence has one row for each capability, from docs/capabilities.json. Only runs at the public program ids count here. Each capability's row also notes, with its transaction, any earlier trial run at separate test addresses (Knos 0.3.14).
MIT licence, all of it. Built by drexthealpha. Everything Knos remembers is kept by the Sibyl memory engine.