// personal project | running daily
vertigo
An AI system that runs without me. Every holding in my portfolio carries a written reason for owning it and a condition that would prove that reason wrong. Each morning a scheduled job checks those conditions and sends me a short brief.
Every line in the brief says where it came from: calculated from data (ƒ) or written by a language model (AI). Numbers are never generated. Calculated, not generated.
Python | OpenAI API | GitHub Actions | 560+ commits | one user, by design
How it works
- Written firstEach holding has a thesis and two conditions that would prove it wrong, written before any news arrives. Where a condition can be checked by a machine, it gets a small Python function.
- Gathered (ƒ)Early every weekday morning a GitHub Actions job pulls prices from Yahoo Finance, macro series from FRED, headlines for each holding and the morning newsletters over IMAP.
- Calculated (ƒ)Python evaluates every machine-checkable condition, builds the positions table and a macro regime strip. No model touches these numbers.
- Read (AI)The OpenAI API reads the headlines and newsletters against the written theses and cites each event it raises. It may not state a number it was not given, and it gives no buy or sell advice.
- DeliveredOne email, also committed to a private repository. A cache carries state from one run to the next, so the same story is not raised twice. If the model call fails, the calculated half still ships.
The code is public: the brief automation only, with an invented example portfolio. My own positions and briefs stay private. Code on GitHub