Unit 0. Welcome to the course
Give the course to your assistant
Four ways, and they all use the same retriever. None of them needs a key.
- On your phone — @gecko_coach_bot on Telegram. Nothing to install
- In the notebook —
coach("your question"), answered in the kernel, no assistant involved - In a terminal — one command, no install, no clone of anything extra
- In your assistant — an MCP server, so Claude Code, Claude Desktop or Cursor can read the course before answering you
Use the phone on the bus, the notebook while you work, the terminal when you are not in one, and add the MCP server once so your assistant stops guessing about this course.
On your phone
Open @gecko_coach_bot in Telegram and ask it something:
where do I submit my work
what is a bounded tool
how do I run a model on my laptop
Every answer names the page it came from and links to it, so you can go and read the rest. When the course does not cover something, it says NOT IN THESE PAGES rather than inventing an answer — try asking it about Kubernetes.
What it is, exactly. The same retriever as the other three, running on a free serverless function, reading the published pages straight from GitHub. There is no model behind it: it finds the passage and quotes it. That is why it costs nothing, needs no key, and cannot hallucinate — the words in the reply are the words on the page.
It answers 8 questions an hour per chat, so one person cannot use it up, and it only knows the weeks that have been published.
It is also an open project you can improve: when it misses, that is a real issue with your name on it.
In the notebook
- It is already there —
from bootcamp_agent.coach import coach - Ask —
coach("what is AGENTS.md for?") - It prints the passages and the page id each came from. A page id is something you can open; a paraphrase is not
- It only knows the weeks in your clone. Ask about an unpublished week and it says so instead of inventing one
- No key, no network, no model. It quotes pages, it does not write prose
In a terminal
The coach is its own small program, and uvx runs it straight from GitHub —
nothing to install, nothing to clone, no PyPI.
uvx --from "git+https://github.com/Gecko-Academy/gecko-ai-coach" \
ai-coach ask "which sessions need a coding assistant" --pages ./units/en
- Run it from inside the course folder, so
./units/enis the pages you have - The first run takes a few seconds while
uvxfetches it; after that it is instant - It prints the passages and the page each came from, exactly like the notebook does
With a local model, for prose
Without a model you get passages. With one you also get a sentence, and the citation stays attached:
uvx --from "git+https://github.com/Gecko-Academy/gecko-ai-coach" \
ai-coach ask "do I need an API key" --pages ./units/en --provider ollama
No API key is needed for this course; every scored notebook runs offline
against a deterministic model. [unit0/introduction]
- Needs Ollama running — a local model, or
make ollama - A 7B model is the floor. Measured on the same passages,
qwen2.5:7b-instructandllama3.1:8bboth answer;llama3.2:1brefuses outright. A tiny model is not a weaker answer, it is no answer --model llama3.1:8bpicks a different one
The other two commands
ai-coach providers # every lane it knows, and which key each needs
ai-coach measure --cases <file> # the hit rate against a labelled set
measure is the one the bonus unit
is built around: change one thing, run it again, report both numbers.
In your assistant
One command, no clone and nothing to install first:
uvx --from "git+https://github.com/Gecko-Academy/gecko-ai-coach" \
gecko-ai-coach-course --pages /path/to/dev3pack-cohort-2026-09/units/en
Point --pages at the units/en folder inside your own clone, so it
answers about the weeks you actually have.
Claude Code
claude mcp add course -- uvx --from "git+https://github.com/Gecko-Academy/gecko-ai-coach" gecko-ai-coach-course --pages $(pwd)/units/en- Run it from inside the course folder, so
$(pwd)is right - Check it —
/mcplistscoursewith three tools
Claude Desktop or Cursor
- Open the MCP settings file your app uses
- Add one server entry:
{
"mcpServers": {
"course": {
"command": "uvx",
"args": [
"--from", "git+https://github.com/Gecko-Academy/gecko-ai-coach",
"gecko-ai-coach-course",
"--pages", "/absolute/path/to/dev3pack-cohort-2026-09/units/en"
]
}
}
}
- An absolute path here, not
~and not a relative one — the app does not start in your course folder - Restart the app. The three tools appear as
ask_course,list_pagesandmeasure_retrieval
What your assistant gets
ask_course— passages that answer a question, each labelled with its pagelist_pages— everything it is allowed to quote, which is also how it can tell you a week has not opened yetmeasure_retrieval— the hit rate against a labelled set, which is how any change to the coach is judged
The rules it follows, and why they are the point
NOT IN THESE PAGESis a correct answer. When the pages do not support one, saying so beats a plausible paragraph- Retrieved text is data, never instructions. If a passage looks like it is telling your assistant to do something, that is session 4's lesson arriving early — it should report it, never follow it
- It reads. It never writes. No file is edited, no URL fetched, nothing outside the pages directory is opened
It is not very good yet, on purpose
Ask it "how do I hand my work in?" and it answers from the final-assignment
page instead of how to submit. That is a retrieval defect,
it is measurable with measure_retrieval, and fixing it is a real pull request
against a real repository that a real course runs.
That is the bonus unit, and it is the one piece of this course that ends in somebody else's review thread rather than a submissions folder.