Join the Latticework AI Bootcamp and progress at your own pace. Participation is open to members and paid subscribers.
A note before we begin: This is the last lesson in a 16-lesson experiment. I have been doing every lesson alongside you, on the same tools, with the same constraints. Some lessons have landed cleanly. Some have lead to dead ends and needed rework. We’ve figured out what works, together.
If you are catching up, here’s what came before today’s lesson:
Intro: Build Your Own Investment Idea Engine
Lesson 1: How LLMs Work, and How to Defend Against Hallucinations
Lesson 2: Prompt Patterns That Outperform Casual Prompting
Lesson 3: Tools, Agents, and Structured Output
Lesson 4: SEC EDGAR, the Primary Source
Lesson 5: FRED Macro and Sector Data, the Free Read
Lesson 6: FMP API Key and the First Checked Data Pull
Lesson 7: Other Data Sources, and Idea Engine Formats
Lesson 8: Spaces, Projects, and Connectors
Lesson 9: Memory, Sub-Agents, and Parallel Research
Lesson 10: Wide Research for Screening at Scale
Lesson 11: Iterating Prompts and Structured Idea Write-Ups
Lesson 12: Claude Code, and Building Your First Useful Script
Lesson 13: Git, GitHub, and a Real Screener on FMP
Lesson 14: Layer On EDGAR, FRED, and a Scoring Layer
Lesson 15: Engine Spec, Narrative Layer, and End-to-End Run
Why This Matters for Investors
During most of our AI bootcamp, the engine has been a thing we ran by hand. Yesterday it became a pipeline: one driver, one dated CSV, one dated Markdown deliveries file, a YAML front matter block recording the spec version, the config version, the FRED observation dates, the EDGAR user-agent string, and the FMP endpoints used. The pipeline runs cleanly when we sit at the keyboard and type the command.
Today the engine stops needing us to start it. It runs on a clock. The output lands in the channel of our choice (e.g., our email inbox). The repository has a README that we can open in three months without re-deriving today’s reasoning. The first scheduled run produces an artifact we read critically, any issues get fixed in the My Analyst prompt file or the scoring config rather than in the script, and the retrospective writes down what surprised us while building and what we will change over the next three months or so. By the end of today the engine is durable enough for the future, not just usable in the present.
The reason this is the right place to end the bootcamp is the same reason we have been writing things down throughout. The engine that survives the test of time is not the engine with the cleverest scoring layer. It is the engine whose owner can still explain, three months in, why each box exists and how to change it. The durability is in the spec, in the diagram, in the My Analyst prompt file, in the YAML scoring config, in the .env file, and in the README we write today. The scoring weights will move. The exclusions will sharpen. The narrative questions will mature. The infrastructure underneath, version-controlled, source-grounded, parameter-driven, is what we keep. The discipline that keeps the engine trustworthy outlives the bootcamp.
There is one more reason today matters. The first lesson asked us to learn when an AI model is being merely fluent versus when it is being right. Every step since has been a small repetition of that question, applied to a different layer: defending against hallucinations, grounding every claim in a source, naming provenance, refusing to commit secrets, naming a user-agent string on every SEC.gov call, separating filter from score, requiring the narrative layer to earn the right to be investigated rather than recommend action. The retrospective at the end of today is where we read back the answer in our own voice. The verification habit is what made the engine worth running in the first place.
Let’s launch into today’s lesson.









