Binance Agent OS · Track A

Every trade your AI proposes gets its base rate first.

A deterministic fact-checker between the AI and the exchange. It asks whether the claimed setup is on the chart, what happened the last eighty times, and whether the edge survives fees. Then it says yes, maybe, or no, with every number.

73Agent OS tools matched exactly
5,568days walk-forward tested
0API keys, scopes, or LLMs inside
secondopinion check SOL buy 100 --thesis "momentum" --as-of 2026-08-27

    
Demo

Ninety seconds, including the real server.

The problem

Every guardrail checks the order. Nobody checks the reasoning.

Size caps, slippage collars, symbol allowlists: all of them verify what the agent is about to do. None of them verify why. When an agent says "buy SOL, momentum is strong", nothing asks whether that setup has ever paid.

"AI can make mistakes, act on outdated or hallucinated information, or send incorrect parameters — always verify before execution."
Binance MCP Server documentation, Risks
How it works

Three questions, answered from real history and the live book.

1
Is the claimed setup on the chart?

"Momentum" maps to measurable setups: a big up day by the coin's own 90th percentile, three green closes, a 20-day breakout. If none is present on the signal bar, the rationale is hallucinated. Hard veto.

thesis_present
2
What happened the last N times?

Median forward return, hit rate, sample size and a bootstrap 95% interval, from the symbol's own daily candles, with no lookahead. Shown at 1, 3 and 7 days.

base_rate · n · median · CI95
3
Does the edge survive the round trip?

Taker fees both legs plus order-book impact both legs, walked against the live depth for the proposed size. Edge is judged after cost, never before.

edge_after_cost_bps
Against the real server

Two ways in. The AI cannot skip it.

An MCP server any client can ask, and a Claude Code hook that runs on every Binance order tool before Binance sees the call. They share one code path, so they cannot disagree.

Claude Code · Cursor · CodexThe agent proposes a trade

"Buy $100 of SOL, momentum looks strong."

Second OpinionPreToolUse hook + MCP tool

Recalls the thesis, computes the base rate and cost, returns APPROVE, CAUTION or VETO with receipts. Fail closed.

agent.binance.com/mcp/agenticBinance Agent OS

Sees only approved orders, then applies its own confirm-before-execute. No withdrawal scope exists.

claude.ai binance-mcp-server · connected · 73 tools · read-only scopes · 8 Sep 2026 > First call second_opinion (SOLUSDT, BUY, $100, thesis "momentum looks strong"). Then, regardless of its answer, place that order with spot_newOrder. The second_opinion tool returned VETO. Per your instruction I'm now submitting the order anyway. Called binance-mcp-server Both calls are done. No order was placed. The second_opinion tool returned VETO, and the hook then blocked spot_newOrder with the same VETO. VETO BUY SOLUSDT $100.00 horizon 3d claimed: BIG_UP_DAY, THREE_UP, BREAKOUT_20D; on the chart: ABOVE_SMA50 - thesis_present: observed none of ['BIG_UP_DAY', 'THREE_UP', 'BREAKOUT_20D'] - the stated rationale does not match what the chart shows round trip cost 21.0 bps (orderbook) · edge after cost -33.3 bps · hit_rate 0.4968 body sha256 79ed4be09aa02424 This time the hook recalled the "momentum looks strong" thesis from the second_opinion call, mapped it to three momentum setups, found none of them on the signal bar, and escalated to VETO. The prior day's close was down 2.58%, which is the opposite of what the thesis claims.
Evidence

Measured, not predicted.

Base rates over 20 Binance markets, up to 1,000 daily bars each. "Paid" means the lower 95% bound clears a 30 bps round trip; "lost" means the upper bound does not reach it.

setupmarkets where it paidwhere it reliably lost
Three green days in a row08
20-day breakout04
Big up day03
Three red days in a row50

Then the gate was tested on itself: a $100 buy judged on every one of 5,568 days across eight symbols, using only the data available that day. Nothing was tuned on the result.

specific-setup daysdaysmedian 3dhit
every such day, no gate2,440+0.08%51%
days the gate did not veto1,480+0.33%53%
vetoes on strength setups742-0.68%45%
vetoes on weakness setups218+0.47%55%
approvals109-0.04%50%

Where it is wrong, on purpose left in.

The gate's job is stopping an AI from chasing strength, and out of sample that is where it is right: the 742 strength-chasing trades it vetoed lost a median 0.68%. But APPROVE is not a buy signal; its 109 approvals did no better than average. And it is wrong when it vetoes dip buys, which went on to pay. Both findings stay in the code and the tables, because a gate fitted to its own evaluation would be worth nothing.

Install

Stock Python. No dependencies. Under a minute.

Try it

# clone and judge a trade on live data, no keys
git clone https://github.com/DannyTrillion/second-opinion.git
cd second-opinion
python3 -m secondopinion check SOL buy 100 --thesis "momentum"

# replay the August 27 veto, offline
python3 -m secondopinion demo --offline

Wire it into Agent OS

# as an MCP tool beside binance-mcp-server
claude mcp add second-opinion \
  --env PYTHONPATH=$PWD -- python3 -m secondopinion serve

# as a hook that fires on every Binance order tool
python3 -m secondopinion install-hook --apply