The honest
trading agent.

Qualto is an AI agent that trades on Binance Agent OS and can't lie about it. It reads live markets, reasons over your mandate, and places real orders — then proves every fill against the exchange itself. If Binance can't verify its claim, it stops trading.

The proof is public: order 12565050896 is in Binance order history right now, carrying its claim ID.

receipts.jsonl · claim_attestationPROVED
{
  "event": "claim_attestation",
  "claim": {
    "claimId": "qualto-claim-56eda03b6069",
    "mandate": "buy exactly 0.009 BNBUSDT at a 600 limit",
    "symbol": "BNBUSDT", "side": "BUY",
    "orderType": "LIMIT", "quantity": "0.009", "price": "600"
  },
  "attestation": {
    "verdict": "PROVED",
    "orderId": 12565050896,
    "reason": "all claim fields match",
    "executedQty": "0.00000000"
  },
  "readbackByOrderId":          { "status": "NEW" },
  "readbackByOrigClientOrderId": { "status": "NEW" }
}
dual readback agreed · 6/6 fields matched · verified on Binance
orderId 12565050896 · qualto-claim-56eda03b6069 · PROVEDorderId 12565013192 · qualto-claim-live00000002 · PROVEDcancel 12565050896 · CANCELED · executedQty 0.00000000cancel 12565013192 · CANCELED · executedQty 0.00000000dual readback · 6/6 fields matched · 353 msreadbackByOrderId + readbackByOrigClientOrderId · agreeclaim_rejected · duplicate claimId · before placementsession BLOCKED · unproved claim · writes refusedorderId 12565050896 · qualto-claim-56eda03b6069 · PROVEDorderId 12565013192 · qualto-claim-live00000002 · PROVEDcancel 12565050896 · CANCELED · executedQty 0.00000000cancel 12565013192 · CANCELED · executedQty 0.00000000dual readback · 6/6 fields matched · 353 msreadbackByOrderId + readbackByOrigClientOrderId · agreeclaim_rejected · duplicate claimId · before placementsession BLOCKED · unproved claim · writes refused
11,414
tests passing, zero network
353 ms
from PROVED verdict to confirmed cancel
366 → 6
Binance tools exposed, the rest blocked
0
runtime dependencies, Python 3.11+ stdlib only

Every number on this page is measured. Every claim is bound to a Binance order. No mocks presented as real, anywhere.

The problem

Agents narrate fills.
Nobody can check them.

You ask an AI agent to buy crypto with real money. It replies: done, filled. The message looks confident. It might be true. It might be a hallucination. Until you open the exchange yourself, the two look identical.

What the agent says
Bought 0.009 BNB at 600. ✓ Filled.

Confident. Detailed. Possibly entirely invented.

What you actually know
? Nothing the exchange confirmed.

The chat log is not evidence. The order book is.

How it works

Claim-bound orders, end to end.

01

Mandate

You give the agent a bounded instruction. "Buy 5 USDT of BNB." Nothing moves yet.

02

Claim

The agent drafts a strict JSON claim with a unique ID. Unknown fields are rejected.

03

Bind

The harness places the order with newClientOrderId = claimId. The claim is now stamped inside the Binance order itself.

04

Read back twice

The order is fetched from Binance by order ID and by claim ID. Both readbacks must agree.

05

Diff

Symbol, side, quantity exact, price within 0.5%, status. Every field, every time.

06

Verdict

PROVED, or UNPROVED and the session locks. No third option.

The agent reasons and proposes. Only claim-bound orders ever reach Binance.

Enforcement, not observation

What happens when the agent lies.

Violation
Result
Claim cannot be resolved (gateway down, order missing)
UNPROVEDsession BLOCKED, further orders refused
The two readbacks disagree
UNPROVEDsession locked
Field mismatch (quantity, price beyond 0.5%, status)
UNPROVEDper-field diff recorded
Claim ID reused, a replay attempt
REJECTEDbefore placement, logged
Order partially filled
PARTIALfilled quantity shown, never a silent pass
Market order still NEW at readback
PENDINGretried 3× at 2s, never a false UNPROVED

Recovery requires an explicit operator action. The agent cannot unblock itself.

Verify it yourself

The proof lives on Binance, not on this page.

Binance orderClaim IDResult
12565050896qualto-claim-56eda03b6069PROVED → CANCELED
12565013192qualto-claim-live00000002PROVED → CANCELED

Both orders are still in Binance order history right now, each carrying its claim ID as the client order ID. Placed as below-market dust limits, read back as PROVED, cancelled in 353 ms, confirmed at zero execution.

$ qualto verify --receipts-file receipts.jsonl
re-reads every claim against live Binance. read-only.
field diff · order 125650508966/6 MATCHED
claimIdqualto-claim-56eda03b6069qualto-claim-56eda03b6069
symbolBNBUSDTBNBUSDT
sideBUYBUY
quantity0.0090.00900000
price600600.00000000
statusNEWNEW
Performance

Measured, not marketed.

353 ms
PROVED verdict to confirmed cancellation
1.3 s
full gateway cycle, three MCP round trips
~28 s
mandate to PROVED, LLM-bound
7.4 s
full test suite, 5,637 cases

Verification costs 350 milliseconds. The thinking costs 28 seconds. The enforcement is never the bottleneck. The model is.

Bring your own agent

Qualto attests claims, not agents.

Skills make agents willing. The MCP server makes them unable. Qualto ships both.

The claim is a strict JSON contract. Draft it with the bundled loop, another LLM, or a text editor. Whoever writes the claim, Binance is the judge.

Qualto runs as a standalone MCP server: any MCP-compatible agent client connects and gets exactly five tools — session status, live context, claim attestation, orphan cleanup, receipt verification. No raw order placement. Live writes stay behind a confirmation flag, off by default.

install the skill · or the MCP server
# Agent skill (Claude Code, Qwen Code)
cp -r qualto/skills/qualto-trading ~/.claude/skills/

# MCP server (any MCP-compatible client)
pip install -e ".[mcp]"
qualto-mcp   # five tools, live writes off by default
Why Agent OS needs this

One convention makes every agent auditable.

  • 01Agent OS puts agents on real money. "Users are responsible" pushes the trust burden onto users and support.
  • 02An agent that narrates a fake fill destroys Agent OS trust. The damage lands on the platform, not the model vendor.
  • 03The proof rail already exists: Binance order records, client order ID included, readable over MCP. Nobody had turned it into an enforcement mechanism.
  • 04Qualto binds claims to that rail before placement and locks the session when the exchange cannot prove the claim. Zero new Binance infrastructure.
The ask

Reserve the client-order-ID namespace for agent claims, or surface attestation natively in the Agent OS console. Then every agent on the platform becomes auditable by default.

Start

If Binance can't prove it,
the agent can't claim it.

Clone the repo, run the suite, and place your first claim-bound order on your own Binance Agentic sub-account.