"AAPL looks like a buy" is the easy half of a trade. The hard half — which expiration, which strike, is the premium fair, does the delta fit — is a human options trader's job. We gave that job to an LLM agent, then wrapped it in a deterministic system that assumes the model can be wrong, or adversarial. Three agents run as a live trading floor on Kubernetes. The Analyst screens the market each morning and sets the day's universe. The Dealer polls every symbol every 600s for a BUY/HOLD/SELL signal, then launches Alpaca's own alpaca-mcp-server as a read-only stdio subprocess and runs a bounded tool-calling loop: the agent reads the live chain — expirations, strikes, quotes, Greeks — and returns one structured contract pick. It can propose; it can never place an order. The Floor Broker re-validates that pick server-side, submits it, and runs its own synthetic stop-loss / take-profit / expiry exit loop, since Alpaca has no server-side brackets for options. Eight deterministic gates sit between "the LLM said BUY" and a live order: confidence threshold, macro-event blackout, stop-loss cooldown, win-rate throttle, daily P&L halt, kill switch, DTE/delta re-validation, and a hard notional cap checked against the live market. Reconciliation overwrites every number in the pick with the chain's real values; only the reasoning is trusted. If structured output comes back empty, a deterministic fallback picks from the same chain rows. Everything runs on one NVIDIA DGX Spark — k3s, Ollama serving qwen2.5 32B, Postgres for cross-cycle memory, self-hosted CI/CD — on 100% solar power. No external LLM API. Config re-fetches from GitHub every 60s, so tuning risk is a git push. Live and continuous on a $100,000 Alpaca paper account since 1 Sep — not a backtest. By the 3 Sep close: equity $103,709 (+3.7%), the first two automated take-profit exits both winners (+$2,270 realised), all five open positions green. Public, MIT-licensed, real dated commits across the week.
Category tags: