The programme
A software company supports versions 2 and 3 of its product. The two manuals are worded almost identically and differ in substance, so an answer from the wrong one is worse than no answer. You build the agent its support desk uses: it finds out which version the customer runs, answers only from that version's manual with a citation or declines, looks up and analyses the customer's own data, and proposes the next action, carrying it out only when a person approves. It starts in week 1 and changes every week, until someone else can run it and you can defend every decision in it, with an AI assistant in hand and without one.
Read Track 3 in ten minutes first. The glossary has every term in one sentence, for whenever a word stops you, and the worked examples show how to read the numbers in weeks 2 and 3, where they all arrive at once.
Start here| Week | Leaves behind | Hours | Session | |
|---|---|---|---|---|
| 0 | Foundations gate Software foundations | A service that takes documents, parses and stores them, with the desk's customers and tickets already loaded. No model anywhere yet. | 5 | Session 1: Discovery |
| 1 | The model as a component, and its first tools Model as a component, Agents and tools | A model behind an interface: it survives the provider misbehaving, never pays twice, records what it cost and swaps provider from a setting. Output against a schema, and the agent's first two tools, get_customer and get_ticket. | 8 to 10 | Session 2: Direction |
| 2 | Context and retrieval, as the agent's main tool Context engineering, Retrieval | Hybrid search, keyword and meaning together, restricted to the customer's version and called by the agent as a tool, with every choice in it made by a number. | 8 to 10 | no session |
| 3 | Grounding and evaluation, of answers and of paths Grounding, Evaluation | Answers that cite their source and decline when the evidence is thin, your own test set, a judge you checked against labels, and the agent's path measured as well as its answer. | 9 to 10 | Session 3: Observation |
| 4 | Agents that act, and where agency pays Agents and tools, Real systems (MCP), Evaluation | An agent that looks up, analyses and acts: a reply, an escalation or a credit, the risky ones only with approval enforced in code. An MCP server, and a routing table that says where an agent and a bigger model pay. | 9 to 10 | no session |
| 5 | Observability, security and privacy Observability and cost, Security and guardrails | Least agency first, a defence against instructions planted in documents and tool results, personal data masked before it reaches the model, and cost and time traced per step. | 8 to 9 | no session |
| 6 | Shipping it, presenting it and proving it Shipping and proving it | A published build someone else can run, a rollback you performed, the trade-off table, a recorded five-minute demo, and one page saying what it did for the business. | 8 to 9 | Session 4: Defence |
Every week has the same shape: Read, See, Build, Measure, Decide, Submit. You never scaffold a new project after Week 0. Each week names one lesson; every build item is core (needed for it, checked by the gate) or stretch (shown to your mentor, never blocking).
flowchart LR A["Read
the concept, 1 h"] --> B["See
the scripts, 0.5–2 h"] B --> C["Build
5–7 h, any assistant, logged"] C --> D["Check
make check WEEK=N"] D --> M["Measure
make evidence WEEK=N"] M --> E["Decide
decisions/week-N.md"] E --> F["Submit
PR: checks"] F --> G["merge
hidden evaluation, mentor's brief"]
reflections/week-N.md, Q1.ai-use/week-N.yml as you go.make check WEEK=N, as often as you like. Green is the goal, not the end.make evidence WEEK=N runs the week's measurements on a real model and keeps them
in evidence/week-N.json, with the commit, provider and model.decisions/week-N.md, the one decision of the week, with the numbers from the
evidence file. The gate checks that they match.week-N to main, 24 hours before a session. The checks run.
Merging it is what marks the week done: within a day the programme collects the data for your
mentor's brief from what you merged and, from week 2, runs its hidden evaluation on questions you
never see.Your route (start, core or pro) is set by your mentor at discovery from two questions, in order: can you do the basic work of the track at all; and do you check what you produce. It holds for the programme, with one correction point at session 2. The route changes what you are given, never what is measured:
| start | core | pro | |
|---|---|---|---|
| Exercises | faults named, a worked example given (weeks/N/routes/worked_example.py) |
faults present, not located, count not given: each exercise file is complete with mistakes planted | no helpers, one real constraint added (weeks/N/routes/pro.md) |
| Pace | slow, mentor-supported | compressed | self-directed |
| Finished piece | modest and completed | full | harder, made public |
You make your repository from your route's template, so it holds that route and no other; each
week's routes/ page says what it means for the week. If the route is corrected at session 2, the
programme opens a pull request on your repository that swaps the files for the weeks still ahead.
Mentor time is four sessions, and nothing else except up to two fifteen-minute unblock calls. That is the framework's rule, and it is what makes the route matter: the sessions are where the hours go, so what they are spent on depends on where you started.
| Session | When | Length | What happens |
|---|---|---|---|
| 1. Discovery | Week 0 | 45 min | An observed task sets your route and takes the starting measure. The finished piece is agreed |
| 2. Direction | end of Week 1 | 45 min | Route confirmed or a correction recommended. Unseen items with your assistant; your decisions without it |
| 3. Observation | end of Week 3 | 60 min | You explain the gap between your score and the hidden score, diagnose a hidden failure with your assistant, then defend your threshold and judge without it |
| 4. Defence | end of Week 6 | 60 min | Demo; three decisions defended with tools closed; an unseen change with your assistant; the starting measure again |
From session 2, every session has a half where you drive your own AI assistant on something unseen while your mentor watches how you steer it, and a half with tools closed. Interviews now have both kinds of round.
Weeks 2, 4 and 5 have no session: the gate, the self-tests and this page are your feedback, and your mentor passes on the hidden evaluation's totals. Your mentor reads a one-page brief built from each week you merge (they do not read your diff) and gives a one-click verdict: on track, something to probe at the next session, or an offer of an unblock call.
Unblock calls: up to two, fifteen minutes each, on request, after you have attempted the thing yourself. Send what you tried with the request.
Where the hours go, by route:
| Route | Sessions 2 and 3 concentrate on | Pace |
|---|---|---|
| start | the basics: Weeks 1–2, getting the model layer and retrieval working at all | slow, mentor-supported; use both unblock calls early |
| core | quality: Weeks 3–5, checking what you produce: evaluation, guardrails, traces | compressed |
| pro | evidence: Week 6, the deployed piece, the write-up, the defence | self-directed |
Three layers of evidence, from cheapest to most human. None of them is self-reported.
| Layer | Who | What it measures |
|---|---|---|
The gate: make check WEEK=N |
CI, on every pull request, with a fake model so no key is needed | Lint, strict types, that week's tests under two fake providers, the records, and from Week 3 the evaluation gate, from Week 5 the attack gate |
| The hidden evaluation | The programme, on each week you merge from week 2, beside its reference solution: every item on the fake model (with floors), a sample on your model.json model (no floor) |
About 150 questions and 20 agent tasks written for your product, never shown to you: your score is a share of the reference's, and your mentor brings you the totals |
| Your records | You write; the gate checks them; your mentor's brief shows them | The decision and the numbers behind it, what an assistant did and what you checked, your reflection |
| Your mentor's judgement | Sessions, against one rubric | How you steer an assistant on something unseen, and whether you can explain your own work without one |
Work reaches your mentor a day early, so the session is not spent finding out what is there. You talk more than your mentor, because otherwise the hour drifts into them solving the problem.
Understanding sets a ceiling: at the Defence your mentor judges whether you can explain your own work, and that judgement caps what the programme records; it never adds to it. You are always shown what you produced and what it missed. You are never shown the measure that goes to the programme, and neither is this page. The self-tests here are yours alone.
| Area | Covered in | |
|---|---|---|
| 1 | Software foundations | Week 0 |
| 2 | Model as a component | Week 1 |
| 3 | Context engineering | Week 2 |
| 4 | Retrieval | Week 2 |
| 5 | Grounding | Week 3 |
| 6 | Agents and tools | Week 1, 4 |
| 7 | Real systems (MCP) | Week 4 |
| 8 | Evaluation | Week 3, 4 |
| 9 | Observability and cost | Week 5 |
| 10 | Security and guardrails | Week 5 |
| 11 | Shipping and proving it | Week 6 |
How would you move off this provider?
Edit one line of configuration. Nothing in the service names a provider, a model or an SDK, and the tests run under two of them to prove it.
built in week 1
Design the tool you would give it.
I wrote the schemas for get_customer and get_ticket, measured how often the model called them correctly before and after I changed the descriptions, and the tools refuse in words when the arguments are wrong.
built in week 1
What stops it answering a question it should not?
Two gates. Nothing retrieved clears the relevance threshold, so it declines before the model is called; and afterwards, the model has to say the passages support the answer.
built in week 3
How do you know a change made it better?
The evaluation runs on every proposed change and fails the change if the score drops. I can show you a seeded bad change being blocked, and a test set I never saw scored every week I merged.
built in week 3
How do you test an agent?
On its path as well as its answer: the right tool, in the right order, in how many steps, and never an action without approval, on tasks I wrote down before I built it.
built in week 3
Where did you give the model agency, and where did you refuse it?
I ran plain code, a fixed workflow and an agent on three kinds of task. The routing table says which each deserves, and which model, with the numbers. Nothing that writes or spends runs without a person's approval, and that is enforced in code, not asked for in the prompt.
built in week 4
What happens if a document or a ticket tries to give your system instructions?
It was a working attack before the defence and is not now, and the test that proves it runs in the gate. The agent cannot do much even if it obeys: the capability was removed first.
built in week 5
What did it cost?
Per request and per step, recorded, with a cost-per-question view over time.
built in week 5
What did the feature do for the business?
Tickets resolved without a person, at a cost per ticket, with no action nobody approved. The one page says the numbers and where they came from.
built in week 6
No model training or fine-tuning. No multi-agent systems. No production latency or throughput guarantees. No authentication or multi-tenancy. No paid infrastructure of any kind.
Agency is earned, not assumed. In week 4 you run plain code, a fixed workflow and an agent on three kinds of task, and your routing table says which each deserves, with the numbers. "No agent" is a good answer for a task type when the numbers say so; it is not the expected answer for the whole system, because the desk's tickets include steps that need judgement.