
Most trading agents show you what they bought. Ours also shows you, in dollars, what it refused and whether refusing was right. The Refusal Ledger marks every trade the risk engine blocks to market against real Alpaca option quotes, on the same horizon it would have run. It is a counterfactual, never a fill, and it never touches the broker. Across 101 refusals it produced a finding we could not have reached from P&L alone: our council-confidence floor blocked trades that would have lost, while our portfolio premium cap blocked trades that would have made money. One rule is earning its keep; the other is a capacity constraint doing a selection job. That is our own risk engine, audited by its own instrumentation. Architecture: agents propose, deterministic code disposes. Two LLM agents (bull and bear) argue a thesis and call a guarded trade tool; they cannot place an order. Every call re-runs a deterministic Python risk stack of named veto rules contract liquidity, chain depth, delta band, premium caps, sizing, PDT, drawdown halt and the first veto wins. A six-stage contract funnel narrows a full option chain to one contract, and every stage count is persisted, so a HOLD explains itself. It trades long calls and long puts on Alpaca paper, opens bracketed equity shorts, and manages exits with a trailing ratchet plus broker-side resting stops. Deterministic screening is unlimited; only a capped handful of symbols per day ever reach a paid model call. Alpaca's CLI is wired into the scheduler for market-clock awareness. We are not claiming an edge two sessions is noise. We are claiming something rarer: an agent that can tell you which of its own rules to delete.
4 Sep 2026