00 · Foundations
What we're building
Model versus application versus agent, workflow versus agent, and a tour of the Loopline sample app.
Read episode →01 · Foundations
Python project foundations
Typed data models and tests, so every later episode hands data around without guessing.
Read episode →02 · Foundations
The smallest useful LLM call
A provider-neutral message interface with a fake client, built before touching a real API key.
Read episode →03 · Foundations
System prompts and structured output
Turn free-text model output into typed, validated values, with a retry on malformed output.
Read episode →04 · Routing, tools & the loop
Decisions, routing, and workflows
Decide what kind of question it is first—usage, bug, feature, or ambiguous—then route it.
Read episode →05 · Routing, tools & the loop
Tools and safe tool contracts
Read-only tools over docs, source, Git history, the database, and logs, called through a registry with timeouts.
Read episode →06 · Routing, tools & the loop
The agent loop
A loop the model drives—observe, decide, act—choosing one step at a time between calling a tool and answering.
Read episode →07 · Routing, tools & the loop
Conversation state and memory
Bounded conversation context and per-session memory, without confusing “this chat” with “this user”.
Read episode →08 · Evidence & safety
RAG fundamentals
Chunking, BM25, embeddings, and combining rankings—built from scratch so RAG stops being a black box.
Read episode →09 · Evidence & safety
Knowledge graphs for code relationships
A call graph that answers “what would changing this function break?”—a question text search can't.
Read episode →10 · Evidence & safety
Permission-aware search
Make the caller's role a first-class input to retrieval, enforced before the model sees any document.
Read episode →11 · Evidence & safety
Planning and multi-step work: feature feasibility
A plan-first workflow for feasibility questions: decide what evidence would settle it before spending a tool call.
Read episode →12 · Evidence & safety
Human approval and refusal
Recognize command-shaped requests and refuse them honestly, with zero model calls.
Read episode →13 · Evidence & safety
Prompt injection and data-exfiltration defense
Treat retrieved text as data, not instructions, and see an injected command blocked twice over.
Read episode →14 · Ship & prove it
FastAPI application boundary
An HTTP boundary with validated requests, shared resources, request IDs, and clean errors instead of tracebacks.
Read episode →15 · Ship & prove it
Evaluation and observability
A golden question suite run against a real model, plus latency, token usage, and structured logs to catch regressions.
Read episode →16 · Ship & prove it
Local deployment and reproducibility
Docker Compose with MySQL, secrets kept out of source control, and a standalone MCP server for database access.
Read episode →17 · Ship & prove it
Prototype versus production architecture
Draw the line between what the prototype has and what production needs; close one real gap, document the rest.
Read episode →18 · Ship & prove it
Capstone demonstration
One running system and a real model: the same question answered or refused depending on one header's role.
Read episode →Bonus · Method
Prompting this build: how the 19 episodes got written
How an AI coding agent wrote every line: one focused, tested change per prompt, verified before it is written down.
Read episode →