Asking a model directly
A paragraph of plausible market commentary, assembled from whatever the model happened to remember. No sources, no timestamps, no record of what it concluded, and no way to find out later whether it was right.
Project
An evidence-backed second opinion on an options position
Market tools tend to fail in one of two directions — they bury you in raw data and leave the thinking to you, or they hand you a confident opinion with nothing underneath it. This one does the part in between.
It gathers the evidence and proposes structures.
It never places a trade.
The problem
Ask a model what it thinks about a symbol and it will tell you, fluently, every time. It will not tell you which data it actually had, which of it was stale, what it ignored, or whether the last twenty times it said this it was right. So the answer is unfalsifiable — and an unfalsifiable answer is worthless for a decision involving your own money.
A paragraph of plausible market commentary, assembled from whatever the model happened to remember. No sources, no timestamps, no record of what it concluded, and no way to find out later whether it was right.
A dated, schema-checked read across five horizons, built from named sources with their freshness stated, on evidence computed before the model was ever called — and written down, so the call can be graded against what actually happened.
How it works
The order matters more than any single piece. Everything mechanical happens before the model gets a turn, so the model is reasoning over prepared evidence rather than doing the gathering, the arithmetic, and the judgment all at once and hoping.
Price bars, option chains, macro series, company filings, news, Bitcoin on-chain and derivatives data, the Federal Reserve meeting calendar, and — if you turn it on — public discussion volume. Each source is a separate provider you enable and rank yourself.
Deterministic calculators turn that pile into versioned, immutable snapshots — trend, volatility, liquidity, options structure and positioning, macro regime, event risk. Then a rule engine reads them and flags regimes, signals, and — this is the useful part — the places where the evidence contradicts itself.
Only now does an LLM get called, and it gets a compiled brief rather than raw data. A second pass criticises the first. What comes back is checked against a schema and a set of quality gates before it is allowed to exist, and it covers five horizons from one day out to a quarter.
A second stage reads that thesis plus a read-only view of the account and proposes concrete options-income structures — covered calls, cash-secured puts, collars, protective puts, or the recommendation to sit in cash and do nothing, which it does make.
What it reads
None of it is simulated and none of it is scraped from somewhere it shouldn't be. Every lane is a documented provider with its own rate-limiting, retry, and health check, and the whole set is enabled per source in one config file.
Daily price bars and full option chains — strikes, expiries, implied volatility, open interest — which is what any income structure actually gets priced off.
Inflation, core PCE, unemployment, jobless claims, credit spreads, the ten-year and the funds rate, plus every Federal Reserve meeting date out to 2028, so proximity to a rate decision is a computed feature and not a thing you forgot.
Company filings straight from the regulator, and a headline feed joined to the symbol, so a thesis can point at an event rather than a vibe.
On-chain metrics, mempool and fee pressure, and funding and open interest from the futures market — because a Bitcoin ETF position is a Bitcoin position wearing a ticker. Public discussion volume is there too, opt-in, measured as volume and spikes rather than sentiment.
The discipline
Any tool like this is one shortcut away from being an expensive random number generator. These are the constraints that stop that, and they are enforced in code rather than promised in a prompt.
There is no execution path in the codebase. Not disabled, not gated behind a flag — absent. Every surface analyses, scores, and recommends; the human places the order, or doesn't.
It receives a compiled brief. That keeps the reasoning auditable, keeps the cost predictable, and means a bad answer can be traced to the evidence that produced it rather than to a black box.
When a thesis resolves, the outcome is scored and each rule's hit rate is updated. Those hit rates go back into the next brief, with an instruction to discount the rules that have been wrong. Being wrong makes it quieter, which is the behaviour you want.
Freshness, coverage, and market-halt gates run before the model does, and quality gates run after. A thesis built on thin evidence says so in its own confidence score instead of sounding just as sure as a good one.
The part I'm proudest of
The broker issues no read-only credential. The same username and password that read your positions can also trade them, which means every "read-only integration" against it is a naming convention — right up until something misbehaves.
The credential sits in the same environment as the agent. Read-only is a comment in the code and a good intention. A prompt injection, a bad tool call, or an ordinary bug is all that stands between the two.
The credential lives with a separate operating-system user that has no shell and no login. That user runs the account fetch on a schedule; my account — and anything running as me, including the agent — reads the resulting database and cannot read the credential or reach the broker at all. The separation is enforced by the OS, not by the code asking nicely.
Status
Pre-1.0 and private — a personal tool I use on my own positions, not a product and not for sale. It runs locally as a command-line tool with its own database, its own health check, and about 1,680 tests, built out over twelve milestones from the data layer up through the strategist.
Nothing it produces is financial advice, and nothing on this page is either. It is a thinking instrument for one person who is responsible for his own decisions.