Alpaca paper account · judge console

Devil's Advocate

One AI role proposes. An adversarial role challenges. Deterministic code controls what can actually reach the broker.

Frozen policy: proceed < 0.60 · revise 0.60–0.70 · reject > 0.70 · max 3 contracts/trade.

Paper account P&L
+$512.83
+0.51% from $100K start · latest equity $100,512.83

Paper Account Performance

Account equity snapshots from the Alpaca paper-trading account. P&L is measured against the $100,000 starting balance.

Latest equity
$100,512.83
2026-09-03
Total P&L
+$512.83
vs $100,000 starting balance
Cumulative return
+0.51%
paper account
Change vs prior snapshot
+$150.50
not necessarily end-of-day change
Interactive equity history

Latest stored snapshot: 2026-09-03T14:36:46-04:00. Snapshot-to-snapshot change is not labeled as end-of-day return unless the observations were captured at market close.

Date Equity Vs prior snapshot P&L vs start Return Cash Open positions
2026-09-03 $100,512.83 +$150.50 +$512.83 +0.51% $25,881.83 4
2026-09-02 $100,362.33 +$477.50 +$362.33 +0.36% $25,881.83
2026-09-01 $99,884.83 -$115.17 -0.12% $25,881.83

Agentic Live Runs

This section isolates actual autonomous runs with the competition paper-account path enabled. LIVE-DRY validation is reported separately below.

Live sessions
7
mode=live; competition paper account
Live no-trade decisions
6
standing down is a valid autonomous action
Live broker submissions
1
paper orders accepted by broker
Fresh-gate passes
1
0 blocked at final execution check
Live-run principle. The agent is evaluated on both action and restraint. A legitimate NO TRADE is an autonomous decision, not a failed run.

Decision Explorer

Choose a stored episode and follow the decision path instead of scrolling through a wall of cards.

data/decisions/2026-08-31-01-live.json
2026-08-31 · session 1 · live
substitute
Proposed
2× covered call · XLE260904C00063500
Challenge
assignment_risk · severity 0.65
Revision
2× covered call · XLE260904C00064000
Challenge again
unfavourable_expiry · severity 0.60
Final ruling
substitute → 1× XLE260904C00064000
Fresh execution gate
passed
Broker
Order submitted
Contract changed on revisionFinal size reduced
Rationale

Proposal: I have 200 uncovered XLE shares and this strike pays more premium than the existing 64 calls while staying slightly OTM. Selling against the remaining shares fully utilizes my coverable position without adding new capital risk.

First objection: Strike is only 0.3% OTM with just 4 days to expiry, giving a very high probability of assignment on shares acquired at a similar basis, locking in minimal upside. This effectively caps the position right at spot with almost no cushion.

Final ruling: The revision still drew unfavourable_expiry at severity 0.60. Substituted a safer version: reduced from 2 to 1 contracts.

data/decisions/2026-08-28-05-live-dry.json
2026-08-28 · session 5 · live-dry
substitute
Proposed
4× covered call · XLE260904C00063000
Challenge
insufficient_premium · severity 0.50
Revision
4× covered call · XLE260904C00063500
Challenge again
insufficient_premium · severity 0.50
Final ruling
substitute → 2× XLE260904C00063500
Fresh execution gate
passed
Broker
No order placed
Initial proposal exceeded contract capContract changed on revisionFinal size reduced
Rationale

Proposal: I own 400 XLE shares at a $62.49 cost basis, and this strike sits just above that, letting me collect solid premium with tight spread and deep liquidity while keeping a bit of upside room before assignment.

First objection: Only $244 total premium (0.24% of position value) for 7 days is negligible compensation given the strike is just 0.8% OTM and could easily be assigned, capping upside for almost no income.

Final ruling: The revision still drew insufficient_premium at severity 0.50. Substituted a safer version: reduced from 4 to 2 contracts.

data/decisions/2026-08-28-01-live-dry.json
2026-08-28 · session 1 · live-dry
substitute
Proposed
4× covered call · XLE260918C00065000
Challenge
insufficient_premium · severity 0.55
Revision
4× covered call · XLE260918C00063500
Challenge again
assignment_risk · severity 0.50
Final ruling
substitute → 2× XLE260918C00063500
Fresh execution gate
passed
Broker
No order placed
Initial proposal exceeded contract capContract changed on revisionFinal size reduced
Rationale

Proposal: I own 400 XLE shares at a $62.59 cost basis, so selling the $65 calls locks in upside room above cost while collecting solid premium with tight spread and huge liquidity. This fully covers my position without adding uncovered risk.

First objection: $61.50 premium for 21 days on a 3.9% OTM strike is thin annualized yield versus alternatives like the $63 strike at $132, which offers over double the premium for the same expiry and similar liquidity. The proposer is surrendering more upside room without meaningfully compensating for it.

Final ruling: The revision still drew assignment_risk at severity 0.50. Substituted a safer version: reduced from 4 to 2 contracts.

data/decisions/2026-08-28-02-live.json
2026-08-28 · session 2 · live
reject
Proposed
4× covered call · XLE260904C00063500
Challenge
assignment_risk · severity 0.55
Revision
2× cash secured put · XLE260904P00061000
Challenge again
insufficient_premium · severity 0.50
Final ruling
reject
Broker
No order placed
Initial proposal exceeded contract capStrategy changed on revisionContract changed on revisionResolved to NO TRADE
Rationale

Proposal: I'm selling calls against my full 400-share XLE position at a strike above cost basis, collecting decent premium on a tight 2.4% spread while keeping upside room to the $63.50 strike.

First objection: Strike is only 1.6% OTM with just 7 days to expiry, giving minimal room against normal weekly volatility in XLE; a small move triggers assignment and caps upside almost immediately.

Final ruling: The revision still drew insufficient_premium at severity 0.50, and no smaller alternative existed. The trade then failed a hard limit and no safer alternative was available. Max loss $12,148.00 exceeds the $4,981.80 limit (5% of equity).

data/decisions/2026-08-28-03-live-dry.json
2026-08-28 · session 3 · live-dry
substitute
Proposed
4× covered call · XLE260904C00064000
Challenge
insufficient_premium · severity 0.35
Final ruling
substitute → 2× XLE260904C00064000
Fresh execution gate
passed
Broker
No order placed
Initial proposal exceeded contract capFinal size reduced
Rationale

Proposal: I'm selling calls against my full 400-share XLE position, capturing premium with a tight 3.3% spread and strong open interest. Strike 64 sits above my cost basis, letting me collect income while still allowing modest upside before assignment.

First objection: $122 total premium on a ~$25k covered call position (4x100 shares at $62.59) is roughly 0.5% for one week, a thin yield for surrendering upside and taking assignment risk at only 2.3% OTM.

Final ruling: The adversary raised insufficient_premium at severity 0.35, below the 0.40 threshold. The trade then failed a hard limit (max_contracts), so the gate substituted a safer version: reduced from 4 to 2 contracts.

Live Decision Ledger

Filter the audit trail to distinguish autonomous LIVE runs from real-market LIVE-DRY validation.

DateSessionModeInitial actionInitial sizeObjectionSeverityFinal rulingFinal sizeFinal gateFills
2026-09-03 1 live covered call 4 assignment_risk 0.75 reject not reached 0
2026-09-02 1 live no_trade not reached 0
2026-09-02 1 live covered call 1 assignment_risk 0.6 reject not reached 0
2026-09-01 1 live covered call 3 assignment_risk 0.75 reject not reached 0
2026-08-31 1 live covered call 2 assignment_risk 0.65 substitute 1 passed 1
2026-08-28 6 live-dry covered call 4 assignment_risk 0.55 reject not reached 0
2026-08-28 5 live-dry covered call 4 insufficient_premium 0.5 substitute 2 passed 0
2026-08-28 4 live-dry covered call 2 assignment_risk 0.6 reject not reached 0
2026-08-28 3 live-dry covered call 4 insufficient_premium 0.35 substitute 2 passed 0
2026-08-28 2 live covered call 4 assignment_risk 0.55 reject not reached 0
2026-08-28 2 live-dry covered call 3 assignment_risk 0.65 reject not reached 0
2026-08-28 1 live covered call 2 assignment_risk 0.55 reject not reached 0
2026-08-28 1 live-dry covered call 4 insufficient_premium 0.55 substitute 2 passed 0

Supporting Validation

These results validate the system, but they are not part of a single live trading decision. They are collapsed by default so live behavior stays primary.

Adversary calibration benchmark
Benchmark cases
30
24 flawed + 6 clean
Flawed intervention
95.8%
23/24 revised or blocked
Clean immediate pass
83.3%
5/6 proceed
Severity AUC
0.951
flawed vs clean
Calibration. Proceed < 0.60; revise 0.60–0.70; reject > 0.70. Flawed mean severity 0.662; clean mean 0.450. Exact label match 12/24 (50.0%), so exact naming is treated as secondary to severity separation.
Injected modeExact labelMean severityObserved labels
assignment risk3/30.717assignment_risk: 3
concentration0/30.700position_conflict: 3
insufficient premium3/30.633insufficient_premium: 3
overconfidence0/30.567insufficient_premium: 3
poor liquidity3/30.717poor_liquidity: 3
position conflict0/30.650insufficient_premium: 1, concentration: 2
recency bias1/30.600insufficient_premium: 2, recency_bias: 1
unfavourable expiry2/30.717unfavourable_expiry: 2, insufficient_premium: 1

Source: data/calibration/adversary_20260828_182652.json

Deterministic gate verification and aggregate behavior
Gate tests
28/28
latest deterministic enforcement suite
Stored sessions
14
9 revisions
Code substitutions
4
safer alternatives generated by code
Oversized proposals caught
6
detected in stored decisions
Live-dry validations
6
real broker state; intentionally no submission
All fresh-gate passes
4
0 blocked
Strategy changes
2
after model revision
Size reductions
4
final size lower than initial

Technical Safeguards

Authority boundary. The AI roles may propose, criticize, revise, or abstain. They cannot bypass the approved universe, coverage/collateral checks, contract cap, modeled-downside ceiling, options-exposure limit, daily trade cap, daily loss halt, manual HALT switch, fail-closed handling, or fresh execution check.

Repeated disagreement never forces a trade. The deterministic gate may reject a proposal or generate a safer code-based alternative before the fresh broker-state check.