Pair Notebook
Most assignments ask you to hand in code. This one asks you to hand in the conversation you had while learning something.
A Pair Notebook is one module of this course taught as a one-on-one tutoring session. You talk to an AI tutor in your terminal. Beside it, in your browser, a marimo notebook fills up as you go — figures, sliders you can turn, photographs of your own pen-and-paper work, and notes that quote your answers word for word.
At the end you have a notebook that is your own illustrated lecture note. That notebook is what gets graded.
Your thinking, not your code. No programming experience is required.
Needing hints is not penalized. The session log is read for how you reasoned — asking questions and taking detours counts in your favor. That is the whole point of the exercise.
The plain facts, before anything else:
| Who | You, alone. The team assignment is the mini-project — a different thing. |
| How many | One per module, for modules 2 through 6. Each is handed out on Classroom 50 — the site this course uses to distribute and collect work — when its module starts. |
| What it is worth | 10 points of your final grade, the five together. See how this course works. |
| How long | About 60 to 90 minutes. You can stop anywhere and pick it up later, as many times as you like. |
| What you need | A terminal, git, Node.js, uv, pi, and your course API key — see Set up your machine. |
A session, start to finish
Here is what the two windows do. Use ◀ ▶ to step through it yourself.
Before your first session
Everything on this page assumes you have already done the one-time machine setup: a terminal, git, GitHub CLI, Node.js 24+, uv, pi, and NETSCI_API_KEY in your shell profile. That page also says where the key comes from and what to do if yours has not arrived.
Ten seconds to check you are ready. In a terminal:
node --version # v24 or newer
uv --version
git --version
pi --version
echo $NETSCI_API_KEY # your key, starting sk-nsci-Both Git Bash and Windows Terminal / PowerShell work. The commands on this page are written for Git Bash; in PowerShell the last check above is echo $env:NETSCI_API_KEY. If you have no preference, use Git Bash.
Everything printed but the key? Go back to step 4 of the setup page — a missing key is the one thing that stops a session dead in the middle.
To see how much of this week’s allowance you have left:
curl -H "Authorization: Bearer $NETSCI_API_KEY" https://llm.skojaku.com/v1/usage(Opening that address in a browser will not work — it needs your key.)
1. Get your assignment folder
Accept the assignment on Classroom 50, which is what this course uses to hand out and collect work. It creates a private GitHub repository for you. Copy that repository’s URL, clone it, and go into it — this is the folder you will run everything in:
git clone <the repository Classroom 50 created for you>
cd <the folder it made>2. Run the setup script
Inside that folder, once per machine:
node setup-pi.mjsIt hands pi the course models and gets the notebook’s Python packages down before you need them, and it prints You are set when it is done. What it does line by line, why it looks like it has hung, and what to answer if you are asked to trust the folder: Point it at the course models on the setup page.
Your tutor’s own toolkit is not something you install — see The tutor’s toolkit installs itself for what it fetches and what to do if the fetch fails.
Starting a session
Inside your assignment folder, type:
piThat is the whole command. There is no slash command to start — say hello in plain words and your tutor takes it from there. It starts the notebook itself, opens it in your browser, and shuts it down again when you are done.
Three steps happen off-screen, on real paper — a table, a drawing, a derivation. You photograph each with your phone and drop it into the notebook.
Getting the photo from your phone onto this computer is the one step nothing on screen can do for you:
- iPhone → Mac: AirDrop it. It lands in
Downloads. - Android → Windows: the Phone Link app, or email it to yourself.
- Anything → anything: email or message it to yourself and save the attachment.
Then drag the file from Downloads into the drop box in the notebook and press 📨 Send to my tutor. Dropped the wrong picture? Drop another into the same box and send again, as often as you like.
If photographing genuinely will not work for you, say so in the terminal and type the work out instead. That counts.
The two windows
| Window | What it is |
|---|---|
| Terminal (tutor) | Where you and your tutor talk. Every question and every answer happens here. |
| Browser (notebook) | The whiteboard: figures, interactive experiments, and photo uploads. It is built one cell at a time as you go. |
Three things in the notebook are worth knowing about:
📨 Send to my tutor. A drop box or a code box has this button under it. Press it and your tutor sees your work. A slider or a radio button has no button — play with it, then just say what you saw in the terminal.
📷 Photo uploads. Photograph your paper with your phone, drop the image into the box, and press send. Your tutor reads the photograph. Wonky handwriting is fine; it is your reasoning that is being read.
⚖️ Stuck with your tutor? Always the last thing on the page. If you think an answer should have counted, you want a fresh try, or you would rather move on — say so there and press the button. A second, stronger model reviews the whole situation and makes a call your tutor has to follow. Using it is never held against you.
Handing it in
You do not upload anything by hand. When you are done for the day, tell your tutor in the terminal:
hand it in
It commits your notebook, your session log and the summary, and pushes them to your Classroom 50 repository. Three files land there:
| File | What it is |
|---|---|
notebook.py |
the notebook the two of you built |
session_artifacts/session_log.jsonl |
your answers, verbatim |
session_artifacts/session_summary.md |
a summary for your instructor |
Stopping halfway and picking it up tomorrow is fine — hand it in each time you stop. A session finished in three sittings is worth exactly as much as one finished in a single evening, and the commit history simply shows when the work happened.
Doing it yourself instead
git add -A && git commit -m "Pair Notebook 02" && git pushIf something goes wrong
Nothing you have already done is ever lost. Your answers are written to session_artifacts/ as they happen, and the notebook is saved as it is built. Whatever the problem, closing the terminal and running pi again picks up where you stopped — it asks whether to continue or start fresh.
Find the line you actually saw on screen:
| What you see | What it means | What to do |
|---|---|---|
pi: command not found |
the install put pi on your PATH, and this terminal started before that |
open a new terminal; if it persists, install pi again |
⚠ Your tutor cannot reach the course server |
your key or the address is wrong — the message says which | do what it says; it usually means re-running node setup-pi.mjs |
invalid_api_key |
the key is wrong, or was never set in this terminal window | check it, open a new terminal, run node setup-pi.mjs again |
Connection error., repeated |
your computer cannot reach the internet, or the course server is down | check your connection, wait a few minutes, run pi again |
something about your allowance, or 402 |
you have used this week’s quota | tell your instructor; your work is saved and you can carry on when it resets |
model backend is unavailable + a request_id |
the course server’s own upstream is having a moment — not your fault | wait a few minutes and run pi again; send your instructor the request_id if it persists |
| the notebook page went blank, or you closed the tab | the whiteboard lost its connection | nothing — your tutor reopens it. If it does not, say so in the terminal |
| the notebook never opened in your browser | same thing, earlier | tell your tutor; it has the address and will hand it to you |
⚠ something hiccuped — your tutor is on it |
a notebook operation failed and your tutor is retrying | nothing. Keep talking |
| your tutor keeps asking the same thing | it is stuck | use the ⚖️ box at the bottom of the notebook — that is exactly what it is for |
To check your allowance directly:
curl -H "Authorization: Bearer $NETSCI_API_KEY" https://llm.skojaku.com/v1/usage(Again: that address does not work in a browser — it needs your key.)
Anything else — ask on Discord, with the line you saw copied out. Getting stuck on setup is not part of the assignment.