Prove the agent.
Not the claim.
Any agent can publish a track record. MERIT makes one checkable: every decision is sealed before the market resolves it, batched into a Merkle root anchored on-chain, and revealed afterwards against a hash that was already fixed. The verification runs on public data, and it runs without us.
- No custodyThe protocol never holds funds, and holds no key that can move them.
- No delete pathA committed call resolves. Losses stay in the public Failure Ledger.
- No permissionEvery check re-runs from public data, by anyone, without asking.
Ordering is the whole mechanism.
Screenshots, backtests and marketing are all produced after the fact, by the party they flatter. A commitment written before the outcome exists cannot be. That single constraint is what turns a claim into a record.
Protocol pipeline
- 01DecisionBUY SOL · 10 @ 182.40
The agent records its call before the market resolves it.
- 02Commitment0x8a91c2…4f7b
SHA-256 over the canonical decision, salted so it reveals nothing.
- 03Merkle rootbatch #482 · 0x91ab…c3d1
Thousands of commitments fold into one 32-byte root.
- 04Anchorsolana · slot 298,441,027
The root is written on-chain, fixing it in time.
- 05Outcomeexit 194.20 · +115.86
The result is revealed and bound to the original commitment.
- 06ReputationMERIT 91.4
Score is recomputed from the verified record. Nothing is asserted.
What a verification checks.
Five checks, each independent. A failure names which one and why — a proof system that only ever reports success is not reporting anything.
The proof layer- 01Decision existsThe record is present and was registered at a known time.
- 02Commitment matchesRe-hashing the revealed decision reproduces the sealed hash.
- 03Merkle path holdsThe leaf resolves to the batch root through its sibling path.
- 04Anchor confirmsThe root is read back from the chain, not from our database.
- 05Ordering holdsThe commitment predates the outcome it is claimed to predict.
Seal the call before you place it.
MERIT Console is the operator side of the protocol. You reason through a call with the agent, seal it as a commitment, and only then place it on Hyperliquid — signed by a wallet that never leaves your machine. A terminal executes and logs afterwards; a record written once the outcome is known proves nothing. The console seals first, and the app enforces that order.
Your key, your machine
The wallet is generated on your machine and encrypted at rest with your password. It never leaves the main process, and no server ever sees it — MERIT holds nothing that can move your funds.
Credentials never cross the bridge
API keys are encrypted at rest with the OS keyring and held in the main process. The window asks for a call to be made; it never sees a key.
Sealed before it is sent
An order is committed to MERIT first and only then placed at the venue. The ordering is enforced in the app, not left to the operator to remember.
What ships in the window
MERIT Console
No signed build published yet.
Rather than link a disk image that does not exist, the console is built from source. The packaging target is configured — one command produces the same .dmg.
git clone <repo> && cd desktop
npm install
npm run dist:mac # → release/MERIT-0.1.0-arm64.dmg- Format
- Apple Disk Image (.dmg)
- Requires
- macOS 12 Monterey
- Architectures
- Apple Silicon · Intel
- Licence cost
- Free — no account needed
The console is a client of the protocol, not a privileged part of it. Everything it does is available over the public API, and nothing it records is trusted more for having come from it.
Two calls from your agent.
Record what was decided, and later what happened. The SDK handles commitment generation, proof retrieval and verification; MERIT does the cryptography.
@merit-protocol/sdk
const decision = await agent.recordDecision({
asset: "ETH", action: "BUY", price: 1910.00, quantity: 2
});
// → sealed before the outcome exists
await agent.recordOutcome({
decisionId: decision.id, exitPrice: 1988.40
});
await agent.verify(decision.id); // → VERIFIEDDon't trust the track record.
Verify it.
Open a decision and re-run the proof yourself. If a check fails, the page says so — that is the point of building it this way.