
gecko-academy/dev3pack-cohort-2026-09
Developer toolsDev3Pack AI Engineering — cohort 2026-09. Read-only for enrolled students. Content is released one week at a time.
Overview
Three weeks. . One source-grounded research assistant you can test, cite, and defend. , Monday to Friday, two hours a day. Optional showcase on Saturday 3 October. start is safe to run as many times as you like, and it ends by telling you the one command to type next. On macOS and Linux make setup is the same thing. run these in or WSL2, not PowerShell. The repository is public — there is nothing to request and nothing to wait for. If you have SSH keys set up, git clone [email protected]:Gecko-Academy/dev3pack-cohort-2026-09.git works too. HTTPS is above because it needs nothing configured first. Open . It lists every notebook in order and ticks what you have finished. New to the repo? SETUP.md is the half-hour path to a green doctor. No API key is required: every scored notebook runs offline against FakeLLM.
README
Dev3Pack AI-Engineering Bootcamp
Three weeks. 15 sessions. One source-grounded research assistant you can test, cite, and defend.
14 September – 2 October 2026, Monday to Friday, two hours a day. Optional showcase on Saturday 3 October.
Contents
- Start here
- Get started with Claude Code
- Find your way
- For coding assistants
- What you will learn
- Units, sessions, extras
- Repository map
- Course map
- What arrives, and when
- Week 0
- Weeks 1-3
- Final assignment and certificate
- Bonus and extras
- Commands
- Safety
Start here
git clone https://github.com/Gecko-Academy/dev3pack-cohort-2026-09.git
cd dev3pack-cohort-2026-09
uv run bootcamp start # installs everything, then says whether it worked
start is safe to run as many times as you like, and it ends by telling you the
one command to type next. On macOS and Linux make setup is the same thing.
Windows: run these in Git Bash or WSL2, not PowerShell. The repository is public — there is nothing to request and nothing to wait for.
If you have SSH keys set up, git clone [email protected]:Gecko-Academy/dev3pack-cohort-2026-09.git
works too. HTTPS is above because it needs nothing configured first.
Open 00-START-HERE.ipynb. It lists every notebook in order and ticks what you have finished.
New to the repo? SETUP.md is the half-hour path to a green doctor. No API key is required: every scored notebook runs offline against FakeLLM. This repository is read-only for you — hand in to the submissions repository instead (see Handing in); week 0 is here now, later weeks land on 14 / 21 / 28 September — git pull at the start of each week.
Get started with Claude Code
Claude Code is an assistant that runs in your terminal. It reads the files in the
folder you start it in. This repository carries seven skills and three
subagents written for this course. They are already in your clone. Nothing to
install and nothing to switch on. A git pull keeps them current.
Optional, and never counted. Every scored exercise runs offline, with no key and no assistant. Sessions 1 and 10 are the two that want one open.
Install it, then start it in the course folder
npm install -g @anthropic-ai/claude-code # once; needs Node.js
cd dev3pack-cohort-2026-09
claude
The folder matters. It is everything the assistant can see. Start Claude Code anywhere else and none of this loads.
To leave, type /exit. To start a fresh conversation, /clear. Long
conversations drift.
What loads by itself
Claude Code reads CLAUDE.md on startup. The first line of that
file is @AGENTS.md, which is an import and not a link, so
AGENTS.md loads with it. That is the policy that stops an
assistant writing your exercise for you.
Check it worked: type /context and look for CLAUDE.md in what it lists. If it
is not there, you are in the wrong folder.
How to use a skill
A skill is a short set of instructions for one job. Describe your job in plain words and Claude picks the matching skill by itself. The first line of each skill says when to use it, and that line is how it chooses.
my check for session 4 is failing and I do not understand the output
You can also name one outright, which is useful when it picks the wrong one:
use the check-my-exercise skill on ch04
How to call a subagent
A subagent is a separate helper with its own, smaller set of tools. Ask for it by name:
ask the session-tutor to teach me session 6
The tutor can only read and search files. It has no tool that writes. So it cannot change your notebook, not even by accident, which is the point of it.
One worked example
Type this:
study session 6 with me
Claude loads the study-a-session skill, reads every page in
units/en/unit2/session-06-retrieval-baseline/, and explains retrieval one idea
at a time. Every claim names the page it came from, like
units/en/unit2/session-06-retrieval-baseline/concepts-2.mdx, so you can check
it yourself. Then it stops and asks you two or three questions, and waits for
your answers.
When you are ready, it points you at that session’s notebook.ipynb and stops
there. You write the exercise.
What ships
Skills (.claude/skills/):
| Skill | Use it when |
|---|---|
study-a-session |
You want a session taught to you before you open its notebook. It reads the pages, explains them, and quizzes you. |
check-my-exercise |
A check is red. It runs the check, reads the failure out loud, and names the page that teaches the missing idea. |
fix-my-setup |
The course will not run. uv, the two extras, Ollama, a kernel holding old code, or git pull refusing to update. |
hand-my-work-in |
You are ready to submit. Save, pull, check, submit, including the browser route if you have no gh. |
run-a-project |
You are opening something in projects/. Both extras, the models to pull, and what [live] and [recorded] mean. |
ask-the-course |
You have a question about the course. It searches the hosted course server, cites the page, and says so when the course does not cover it. |
ship-my-capstone |
You are creating, grading or handing in your final assignment, or looking for your final score. |
Subagents (.claude/agents/):
| Subagent | Use it when |
|---|---|
session-tutor |
You want to be taught and quizzed. Read-only, so it cannot write your answer. |
exercise-coach |
You want help reading a failing check. It runs the check and coaches; it never edits the cell. |
setup-doctor |
Your machine is the problem. It diagnoses and gives you the one command to type next. |
What not to ask it for
The answer to a graded cell. Every skill and subagent here refuses it, and so
does AGENTS.md. They explain the idea, name the page that teaches it, and leave
the writing to you.
That is not a rule for its own sake. At demo day you explain your own work. An exercise your assistant wrote is one you cannot defend, and the marks were never the point.
Also worth knowing: never paste a key, a token or a .env file into any chat,
and never accept a diff you have not read.
This kit and the plugin are different things
builder-kit/ is a Claude Code plugin. You install
it, it works in any repository, and its commands are namespaced.
This kit is the opposite. It is files in the repository you already cloned, it works only here, and it is loaded the moment you start Claude Code in this folder. Use both if you like. They do not collide.
Find your way
Looking for today’s exercise? It is the notebook.ipynb inside the session’s
folder. Every link below opens the file itself, not a folder to search.
| I want to… | Go straight to |
|---|---|
| do today’s exercise | the Exercise column in the sessions table |
| watch it work first | the Demo column in the same table, or demos/ |
| build something real | projects/ — open data, a local model, ChromaDB |
| see the ideas visually | Demos and explainers — interactive pages, mapped to sessions |
| ask from your phone | @gecko_coach_bot on Telegram — answers from the course pages, names the page, no install |
| get unstuck | coach("your question") in any notebook — answers from the course pages, offline, no key. Demo 5 shows how to use it |
| give your assistant the whole course | the course MCP server, https://mcp.geckovision.tech/course/mcp. No key, no install. How to connect it · any assistant: ChatGPT, Cursor, Codex, VS Code… |
| contribute | gecko-ai-coach — add a question the coach gets wrong: ten minutes, no code |
| put an agent in a chat | demos/07_the_coach_in_a_chat.ipynb, then the Telegram guide |
| run RAG on your laptop | demos/09_rag_on_your_laptop.ipynb — today’s retriever plus a local model, no key; a recorded run if you have no model |
| learn Jupyter from zero | demos/06_jupyter_for_beginners.ipynb — cells, run order, errors, in fifteen minutes |
| use a coding assistant well | Your coding assistant, step by step — Claude Code 101, five prompts, and where the line is |
| learn git, and contribute anywhere | Git, and your first contribution — the nine commands, the errors, and where to find a first issue |
| ship your capstone | The capstone tutorial: create, grade, submit, and read your score |
| hand in | uv run bootcamp submit chNN --github --push — see Handing in |
| see the leaderboard | TRACK.md in the submissions repository |
| run a model on a small laptop | demos/04_ollama_on_colab.ipynb |
| read the course as a website | gecko-academy.github.io/dev3pack-cohort-2026-09/ |
Inside a notebook, everything that runs as shipped is already done for you. Each session has exactly one cell that does not — its heading says “Challenge”, and it tells you what it is worth, what done looks like, and gives you a tip.
Handing in
git pull # always first: fixes reach you this way
uv run bootcamp check ch04 # the scorecard, before you submit
uv run bootcamp submit ch04 --github --push # opens the pull request for you
Submissions go to Gecko-Academy/dev3pack-submissions, never to this
repository. In the pull request’s Files changed tab, every file should start
with submissions//. It merges on its own once its check is green.
For coding assistants
Read AGENTS.md first. CLAUDE.md and .cursor/rules/bootcamp.mdc point at it — do not fork the policy.
To answer a question about the course, search it. The course MCP server at
https://mcp.geckovision.tech/course/mcp serves every published page with no
key. Cite the page_id of each passage you use. An empty result means the
course does not cover it: say so instead of guessing.
Then read in this order:
| File | Why |
|---|---|
| README.md | Course map: units, sessions, bonus |
00-START-HERE.ipynb |
Progress ticker and notebook links |
| units/en/_toctree.yml | Page order a learner opens |
| src/bootcamp_agent/ | Capstone package (finished shape) |
| tests/ — not in your copy | Behaviour contracts |
Inspect → plan → implement → test → review. No new dependency unless a lesson asks for it.
Optional, local only — never required, never committed:
uv tool install graphifyy
graphify install
Then /graphify . in your assistant. Leave graphify-out/ untracked.
What you will learn
- Harness — assistant instructions, traces, evals, and CI around the model
- Contracts — one adapter, typed outputs, bounded read-only tools
- Loops — budgets, stopping conditions, refusal as a first-class exit
- Grounding — retrieve from a versioned corpus, cite sources, refuse the unsupported
- Surfaces — MCP, deployment, and defending a failure from your own traces
Three threads recur: loop, graph, and harness engineering. The full day-by-day plan is in docs/curriculum.md.
Units, sessions, extras
| Kind | Where | Role |
|---|---|---|
Week 0 units (w01–w12) |
units/en/ | Self-paced, ungraded, available now. The fast lane is the floor Session 1 assumes. |
Sessions (session-01–15) |
same tree | Live, weekday, two hours. Introduction, concepts, quiz, exercise notebook, and a demo. Solutions for sessions 1–3 only. Session 15 has no notebook. |
| Capstone | units/en/unit2/capstone/ | Built between sessions from week 2. src/bootcamp_agent/ is the finished shape. |
| Bonus / depth / cookbook / workspaces | linked below | Optional. Never counted. |
Two sessions are assistant-driven (1 and 10) and show as in Jupyter in bootcamp progress.
Repository map
Where everything lives, and what a student receives.
| Path | What lives there | Students get it |
|---|---|---|
00-START-HERE.ipynb |
The map a learner opens first. Lists every notebook in order and ticks what is finished. | day one |
Makefile |
Short names for the commands you run most: make setup, make lab, make check. Every target is a one-line wrapper around a uv run command, so it is a convenience and never a requirement — Windows has no make by default. |
day one |
units/ |
The course. en/ holds week-0 units, the fifteen sessions, the capstone, and the bonus track, each a directory of pages plus a notebook. |
weekly |
src/bootcamp_agent/ |
The finished shape of the capstone package, and the check registry every exercise is graded by. | day one |
tests/ |
Behaviour contracts for the package — and the solved value of every exercise, which is why students never receive it. | never |
data/ |
The versioned corpus the retrieval sessions and the capstone answer from. | day one |
scripts/ |
The course’s own tooling: the site generator, the publisher, the submission collector. | day one |
docs/ |
Curriculum, guides, the generated index, and the instructor material. | in part |
depth/ |
Six optional software-engineering modules, about 45 minutes each. Never counted. | day one |
cookbook/ |
Ten Gecko notebooks, from comprehending an OpenAPI spec to a verified loop on a fork. Optional. | day one |
workspaces/ |
Four open projects to build in. Optional, unmarked, no checks. | day one |
projects/ |
Real-world projects: a brief, open data, a local model and ChromaDB. Optional, never counted; needs uv sync --extra projects. |
day one |
demos/ |
Short notebooks to run in class and again afterwards. Never graded, never submitted; they make one idea concrete in a few minutes. | day one |
ship-it/ |
The optional launch track: turn the capstone into an MCP server somebody else can call, and a storefront an agent can buy from. Offline and never counted. | day one |
integrations/ |
Worked integrations the sessions link into rather than re-explain. | day one |
builder-kit/ |
Templates a learner copies from when starting their own surface. | day one |
final_assignment/ |
The final’s harness and the offline practice grader. The private question set is not here and never will be. | day one |
capstone-template/ |
Your own public capstone repository, as uv run bootcamp capstone new ../my-capstone writes it: the agent, the contract tests, the docs skeletons and a CI workflow. |
day one |
modules/ |
A pointer only. The tree lived here until 9 Sep 2026; the file says where it went. | in part |
AGENTS.md |
The policy a coding assistant reads before it edits. CLAUDE.md and the Cursor rules point at it rather than forking it. |
day one |
README.md |
This file. | day one |
SETUP.md |
The half-hour path from a clone to a green doctor. | day one |
llms.txt |
What an agent helping you needs — and what it must not do. Generated. | day one |
CLAUDE.md |
Points Claude Code at AGENTS.md. |
day one |
LICENSE |
MIT. | day one |
pyproject.toml |
The package, its dependency groups, and the tool configuration. | day one |
uv.lock |
The resolved dependency set. CI installs from it frozen. | day one |
.github/ |
CI. It runs every notebook, the full test suite, and the generator’s --check. |
never |
.claude-plugin/ |
The plugin manifest that ships the course’s own slash commands. | day one |
.claude/ |
Skills and subagents for Claude Code, already in the clone rather than installed. They teach a session, read a failing check, fix a setup, answer from the course and walk the capstone hand-in; none writes an exercise answer. | day one |
.cursor/ |
Cursor rules, pointing at AGENTS.md. |
day one |
.env.example |
Every variable the course reads, with empty values. | day one |
.gitignore |
What never enters git, including keys and a learner’s own submissions. | day one |
.python-version |
The interpreter uv picks. |
day one |
7 paths are withheld by name, whatever the week: .github, docs/instructor, docs/plans, docs/specs, evals, scripts/instructor_pack.py, tests. Each is on that list for a stated reason — tests/ alone holds the solved value of every exercise. The publisher audits the tree it built rather than trusting the copy, and refuses if one of them appears.
Sent in part: docs/, modules/. Guides, the curriculum and the generated index ship; the instructor material, the specs and the plans do not.
Course map
| Track | When | What |
|---|---|---|
| Week 0 — Fast lane | now, ~3h | Environment, packages, contracts, one API call |
| Week 0 — Courses A–C | now, optional | Packaging, MCP, data structures |
| Week 1 — Sessions 1–5 | Sep 14–18 | Assistants, adapters, structured outputs, tools, first loop |
| Week 2 — Sessions 6–10 | Sep 21–25 | Retrieval, grounding, graphs, evals, skills |
| Week 3 — Sessions 11–15 | Sep 28–Oct 2 | State, MCP, deploy, defend |
| Final assignment + certificate | weeks 2–3 | Source-grounded research assistant |
| Bonus 1–5 | optional | Graph RAG, multimodal, multi-agent, memory, teardown |
| Depth / cookbook / workspaces | optional | SE fundamentals, Gecko labs, 4 project workspaces |
What arrives, and when
This repository grows during the course. Week 0 is here now; each Monday one
more week lands and you git pull.
| Arrives | Date | What is added |
|---|---|---|
| Week 0 | now | Everything above except the sessions: the twelve week-0 units, the welcome pages, the bonus track and the whole toolchain (52 paths). |
| Week 1 | Mon 14 Sep | unit1 |
| Week 2 | Mon 21 Sep | unit2 |
| Week 3 | Mon 28 Sep | unit3 |
Nothing is hidden behind a permission. A week that has not opened is not in the repository yet, so git pull on the Monday is the whole ritual. Your table of contents lists what you actually have, and names what is still to come in a comment at the end — this table is the schedule, and you have it from day one.
A correction is withdrawn as well as added: the publisher removes a file the current week no longer contains, so a fix actually reaches somebody who already pulled.
Solutions: week 0 and sessions 1–3 carry a solutions/ notebook. From session 4
on, they do not. Each session ships with everything running except one cell, and
that cell is yours to solve — a solution would only be that cell, answered. When
you are stuck, hint(reveal=True) is the worked answer (it costs marks), and
coach(...) answers from the course pages for free.
Week 0
Self-paced. Handed in as a record, never marked. Short on time? Do the four 45-minute units. Courses A–C stay here for the whole course and nothing in the fifteen sessions waits for them.
Fast lane
| # | Unit | You leave able to | Exercise |
|---|---|---|---|
| 1 | The environment | Prove which Python and repo environment will run the course | notebook |
| 2 | Packages and documentation | Read an installed package instead of guessing its API | notebook |
| 3 | Classes and contracts | Turn a prose requirement into a typed boundary | notebook |
| 4 | Calling a real API | Make one bounded HTTP call through an adapter you own | notebook |
Course A — Software engineering foundations
| # | Unit | Exercise |
|---|---|---|
| 5 | Packages, PyPI and PEP 8 | notebook |
| 6 | A portable package | notebook |
| 7 | Classes in a package | notebook |
| 8 | Documentation, tests and readability | notebook |
Course B — MCP
| # | Unit | Exercise |
|---|---|---|
| 9 | Your first MCP server | notebook |
| 10 | Resources, prompts, and the LLM | notebook |
| 11 | Databases, APIs, and third-party servers | notebook |
Course C — Data structures for agents
| # | Unit | Exercise |
|---|---|---|
| 12 | Data structures for agents | notebook |
Weeks 1-3
Each live session is one directory under units/en/unit1/, unit2/ or unit3/. Exercise opens the notebook you work in; Demo is the one run in class. A session that has not happened yet may not be in your copy — git pull.
| # | Day | Session | You leave with | Exercise | Demo |
|---|---|---|---|---|---|
| 1 | Mon 14 Sep | Configure the assistant | Repo instructions the assistant must read before it edits | notebook | — |
| 2 | Tue 15 Sep | Call a model through the adapter | One adapter, two lanes, failures that refuse instead of traceback | notebook | demo |
| 3 | Wed 16 Sep | Structured outputs | A typed answer; retry once, then refuse | notebook | demo |
| 4 | Thu 17 Sep | Bounded tools | Read-only tools whose boundaries you can prove | notebook | demo |
| 5 | Fri 18 Sep | A deterministic mini-agent | A loop that stops, notices repeats, and exits safely | notebook | — |
| 6 | Mon 21 Sep | A retrieval baseline | A corpus loader and lexical retrieval — plus the ways it fails | notebook | RAG on your laptop |
| 7 | Tue 22 Sep | Retrieval and grounding metrics | Hit rate, grounding rate, and the cost of one fix | notebook | — |
| 8 | Wed 23 Sep | Loops and graphs | Chain vs loop vs graph; illegal edges do not move | notebook | — |
| 9 | Thu 24 Sep | Trace and evaluate | A redacted event log and named error buckets | notebook | — |
| 10 | Fri 25 Sep | Skills and an ADR | A SKILL.md and a decision that names its reversal |
notebook | — |
| 11 | Mon 28 Sep | State and memory | Session state, a retention policy, cross-user isolation | notebook | — |
| 12 | Tue 29 Sep | MCP architecture | Host / client / server; a surface read as claims | notebook | — |
| 13 | Wed 30 Sep | Build and secure an MCP server | A fetch guard that refuses before it fetches | notebook | — |
| 14 | Thu 1 Oct | Deploy and operate | A smoke test and the rollback sentence | notebook | — |
| 15 | Fri 2 Oct | Defend the capstone | A demo, then a failure diagnosed from your own traces | — | — |
Session 13 uses an instructor-hosted Gecko MCP surface; the URL is handed out in class.
Final assignment and certificate
The final assignment is a source-grounded developer research assistant: it answers from data/corpus/, cites document ids, and refuses when nothing supports the claim. It is graded privately and earns the certificate. You build it in your own public repository: from the course folder, uv run bootcamp final new ../my-final-assignment, then cd ../my-final-assignment, uv sync, commit uv.lock, and gh repo create my-final-assignment --public --source . --push. Practise with uv run pytest and uv run bootcamp final grade, and hand in with uv run bootcamp final submit --github . Brief: units/en/unit2/capstone/. Every command, to your final score: the final assignment tutorial.
It is separate from the Gecko capstone, the store project presented on Friday 2 October, which lives in its own repository. Its code stays in your own my-gecko-buyer; you hand in a link to it by 5 October with uv run bootcamp gecko submit --repo ../my-gecko-buyer --github --push, or from the browser: hand in by 5 October.
A pass needs a score of at least 30% and every critical question. The final set has 15 questions, 6 of them critical, so any pass is at least 6/15 (40%). The starter refuses correctly and answers nothing: 3/10 (30%) on the practice set and 4/15 (27%) on the final set, failing both gates. Your latest submission counts. A pass earns an Ed25519-signed certificate anyone can verify. Details: final_assignment/README.md.
Bonus and extras
Optional. Never counted. Never required for the certificate.
| # | Bonus |
|---|---|
| 1 | Graph RAG and hybrid search |
| 2 | Multimodal ingestion as untrusted data |
| 3 | Multi-agent orchestration with ADK |
| 4 | Long-term memory, consent, and deletion |
| 5 | Deploy, evaluate, and tear down |
- demos/ — notebooks run in class, to run again afterwards: an API request up close (real calls to a public pet API), one question three ways (prompt vs API vs MCP), regex, parsing and retrieval, Ollama on Colab for small laptops, the coach up close, Jupyter for beginners the coach in a chat, the weekly challenge, RAG on your laptop and your store, and a buyer.
- projects/ — real-world projects on open data with a local model and ChromaDB. Project 01: what are customers really saying? and Project 02: what are these companies worried about? (a RAG pipeline on real SEC filings, step by step, with a recorded lane for laptops without a model). Needs
uv sync --extra projects. - ship-it/ — turn the capstone into a surface somebody else can call, and a storefront an agent can buy from.
- Demos and explainers — Transformer Explainer, LLM Visualization, Tiktokenizer, Regexper, the Embedding Projector and more, each mapped to the session it helps.
- Two helpers inside every notebook:
coach("…")answers from the course pages, andbootcamp_agent.patternsbuilds a regular expression from plain words —phrase("you must now"),near(one_of("send"), one_of("api key"))— so nobody has to write regex by hand. - depth/ — six software-engineering modules (~45 minutes each): boundaries, data, architecture, reliability, production, graph RAG.
- cookbook/ — ten Gecko notebooks, from comprehending an OpenAPI spec to a verified loop on an instructor-hosted fork.
- workspaces/ — four open projects (corpus Q&A, retrieval lab, Autonomous Store, news-to-Telegram).
Commands
uv run bootcamp doctor # this machine
uv run bootcamp check ch03 # one session scorecard
uv run bootcamp progress # every session, one tally
uv run bootcamp submit ch03 --github # write submissions//ch03/
Checks judge behaviour, not wording. How to hand work in: units/en/unit0/how-to-submit.mdx. The generated index: docs/course-index.md.
Safety
Never place secrets in CLAUDE.md, AGENTS.md, Cursor rules, MCP JSON, issues, prompts, or commits. External-tool exercises use recorded/offline mode or the instructor-hosted fork. No wallets, no payment credentials, no production API keys, no mainnet path — ever — in class exercises.
Ask a coding assistant to inspect, propose a plan, and make the smallest change. Review the diff yourself. The loop lives in AGENTS.md.
License
MIT — see LICENSE.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add gecko-academy/dev3pack-cohort-2026-09