Session 1. Configure the assistant and the repository instructions — Mon 14 Sep
Day one: the mental model, then two prompts
What this bootcamp is
Three weeks, fifteen sessions, one capstone: a source-grounded research assistant. Every class ends with something that runs and a check that says so. The last week connects your assistant to real external APIs, safely. One coherent stack, built and tested by you.
The vocabulary (pin this)
| Word | Means |
|---|---|
| Model | The probabilistic text engine |
| Prompt | Everything the model sees this call |
| Tool | A bounded capability the app executes |
| Workflow | Fixed steps, no decisions |
| Agent | A loop where the model decides |
| MCP server | Tools packaged behind a protocol |
| Coding assistant | An agent whose tools edit code |
Request → context → model → tool → verification
Every call through every framework has the same five parts.
| Part | Who controls it |
|---|---|
| Request | the user, or the previous step of a loop |
| Context | you: the files, the policy, the retrieved text |
| Model | the provider. It fills one gap, probabilistically |
| Tool | you: what it may call, with what arguments, capped how |
| Verification | you: the parser, the test, the check cell, the reviewer |
Where the model is probabilistic: the same question, phrased twice, returns two answers. A confident tone is not correct content. It cannot reliably say "I don't know" unless you engineer the refusal. Everything else in the row is deterministic and yours. That ratio is the whole course.
The smallest call
from bootcamp_agent.llm import FakeLLM
hello_llm = FakeLLM(
responses={"hello": "Hello! I am a deterministic stand-in for a language model."},
default="I have no canned answer for that — a real model would improvise here.",
)
print(hello_llm.complete(system="You are concise.", user="Say hello to the bootcamp"))
Hello! I am a deterministic stand-in for a language model.
system: how to behave. user: the task. The return: text. This is the
boundary every framework wraps, and FakeLLM answers from a keyword table, so
tests can assert on it. Session 2 puts the real providers behind the same seam.
The capstone, and its bar
src/bootcamp_agent/ is the final shape. You rebuild the pieces week by week.
By session 12 it is a research assistant that answers from a versioned
six-document corpus, cites doc ids the code verifies, refuses unsupported
questions, and shows its trace and its eval results.
A coding assistant is the same shape pointed at your repository. Its request is your instruction. Its context is the policy file you write today. Its tools edit files and run commands. Its verification is you. Today is about the context and the verification, because those are the two parts you own.
The same assistant, two prompts
Weak:
add a search feature
Output: invents an architecture, touches five files, adds a dependency,
writes a test that asserts the mock.
Project-aware:
read AGENTS.md, then propose a plan to add a tags filter to search_documents in src/bootcamp_agent/tools.py. Plan only, no edits.
Output: names the file, follows the conventions in AGENTS.md,
lists the three lines it would change, waits for approval.
The difference is not the model. It is the harness.
What changed between the two
| Weak | Project-aware | |
|---|---|---|
| Context | none | the policy file, read first |
| Scope | open | one function, one file |
| Output | edits | a plan |
| Who decides | the assistant | you |
Run both in your own assistant during the warm-up. Paste short excerpts into the notebook's first logbook cell. The rest of the session is about making the second prompt the default without typing it every time.