AI CoursePilot

🛠️ Release Notes

Every update to AI CoursePilot, logged like a good flight engineer would.

v0.9.3 29 July 2026

# v0.9.3 — Cassandra drafts through the course, and two ideas for the pocket

The "Draft the asks" button no longer asks Isabelle to make and cap her own

Anthropic key. It now POSTs to a new endpoint, `/api/draft-asks.php`, and the

course does the drafting with the same key the Co-pilot already uses —

server-side, where it stays. A draft click spends one of her daily Co-pilot

messages, so every existing cap (per-user and site-wide, in `chat_usage`)

holds without new accounting. Her setup shrinks to one step: copy the

**drafting token** from her Profile page into Cassandra's Settings box.

The endpoint is deliberately narrow. Auth is the per-user token (migration

027) because a `file://` page has no cookies to send — which is also why the

wildcard CORS origin is safe; the token is the whole credential, and at worst

it spends a day's questions. The system prompt — the Lesson 29 message

anatomy as machine standing orders — lives server-side, closing the open-proxy

hole: it drafts resourcing messages and nothing else. And it refuses with a

422 if the recommendation box is empty: the human-decides doctrine, enforced

at the API. Mock mode returns canned drafts and spends nothing, so the whole

flow works on a keyless install. Four new tests cover the token round-trip,

the mock path, and the empty-tank block (48 total).

The lesson's AI sections were rewired accordingly — the brief got simpler, the

raw browser-key pattern stays as an advanced aside — and gained **two pocket

ideas** to mention (never build): a Slack/Telegram channel agent that turns

ambient chat into human-approved board updates, and a new-business radar that

files trigger-moment leads with drafted openers into the pipeline. Both close

with the kicker: ideas are cheap now, which is exactly why she built one.

v0.9.2 29 July 2026

# v0.9.2 — Cassandra gets an AI button, wired the safe way

Lesson 33 gains a 21:25 build step: a **"Draft the asks"** button under the

smart panel's recommendation box, powered by the Claude API. The division of

labour is the whole point: Isabelle types the decision into the box — the AI

never touches it — and only then does Claude draft the two messages that carry

the decision out (one to whoever approves it, one to whoever it moves), in the

Wednesday Task message anatomy. Her Lesson 29 homework becomes the system

prompt, verbatim: yes first, clash named once, consequences priced, a deadline

on every ask, no exclamation marks. Each draft gets a Copy button. There is no

send button, and there never will be.

**Demo-safe by construction.** The button is the lesson's one networked

feature, and it fails soft: no key, no wifi, or any error at all instantly

shows two built-in example drafts, honestly labelled as examples — so the

forty-five-second demo path still never touches the network. In the room it's

the demonstrated answer to "where does the AI go next?", never the opener.

**Key hygiene as doctrine.** The API key is created in the Anthropic Console

and capped (£5) *before* it's pasted anywhere; it lives in the browser's

localStorage only — never in the file, never in git, never on the GitHub Pages

copy. The browser call uses the deliberately-named

`anthropic-dangerous-direct-browser-access` header, which exists for exactly

this pattern: your own key, your own machine. Model `claude-opus-5` at low

effort — a click costs a penny or two and takes a few seconds.

Also: the module 7 Pilot brief now knows the module has seven lessons (33 —

Build Cassandra, 34 — The Interview), a gap left by v0.9.0.

v0.9.1 29 July 2026

# v0.9.1 — Cassandra stops preaching and starts computing

Two fixes to Lesson 33, both prompted by a fair review: the panel title was

cringe, and the tool was a bit basic.

**The mantra comes off the screen.** The click-a-clash panel was titled "Hand

back a decision, not a problem" — printing the course's own coaching principle

on the UI, where it would read as a lecture aimed at the two people who set the

task. The panel is now titled in the product's own deadpan register — *"Four

ways out. One is a trap."* — and the principle moves to where it belongs:

Isabelle's mouth. The screen speaks product; she speaks principle.

**The smart layer.** Cassandra now does everything a computer genuinely beats a

person at, while still refusing to choose:

  • the panel prices each move with live arithmetic from the data ("2 days ×

£450 = £900", from a DAY_RATE constant);

  • it states computed facts, not advice — "Free on Thursday: Jonah (2/10

booked), Elif (5/10)";

  • the banner gains a foresight line — "Next pressure point: Monday — four of

the six fully booked" — because detection is table stakes and prophecy is

what earns the name;

  • booked-day tallies (7/10) sit under every name, surfacing over-servicing as

the same three names full every week.

The utilisation tallies graduating to core scope frees Stretch A for the

**what-if engine**: click a move, see the fortnight as it would look after it,

dimmed, with an Undo — consequences are the tool's job, choosing stays human.

The recommendation box stays blank; that is still the whole argument. And the

prepared "where does the AI go next?" answer arrives with the doctrine intact:

version two reads the week's Slack threads and *drafts* grid updates for a

human to approve, because boards die of typing, not of stupidity.

All still one offline file, still buildable tonight, still shown once.

v0.9.0 29 July 2026

# v0.9.0 — Build Cassandra, and lessons that end in a build

Module 7 gains a practical: **Lesson 33, Build Cassandra**, slotted between The

Growth Half and The Interview (which moves to 34, still the finale). The night

before the interview, instead of more revision, Isabelle builds the thing her

Wednesday Task answer already promises — "the first thing I'd build in this

role is that view" — as a one-file, works-offline resourcing board that

announces double-bookings in deadpan type days before they happen: *"Ravi is in

two places on Thursday. He has not yet been informed."*

The lesson carries the complete master brief (in the course's

PURPOSE/SECTIONS/STYLE/CONSTRAINTS format), an hour-by-hour build plan with a

hard stop at ten, the forty-five-second demo script, prepared answers for the

questions it will start — including an honest "did you actually build this?" —

and four timeboxed stretch options of which she may pick exactly one. The

pre-loaded clash is pinned to *next* week's Thursday with the days-to-solve

count computed live, so the board is correct on build night and again in the

interview room, and the countdown ticking down overnight proves the date maths

is real. The demo data is invented, labelled as invented on screen, and the

decision panel's recommendation box is deliberately blank — the tool finds the

crash; a person still chooses.

**New lesson type: practical.** A lesson with `"practical": true` in its meta

may omit `quiz.json` entirely — its homework is a build, not questions. The

importer allows the omission (and clears any ghost questions if a quizzed

lesson later converts), the lesson page swaps the quiz card for a practical

card framed by `homework_intro`, and the final exam simply draws nothing from

it. Three new importer tests cover the omission, the conversion, and the rule

that ordinary lessons still require their quiz. Documented in CONTENT_SPEC.

Also: two new glossary terms (MVP, prototype), a new module 7 recap bullet, and

the module 7 story now runs 28–34.

v0.6.2 26 July 2026

# v0.6.2 — Four releases of CSS were never reaching anybody

A bugfix release, and an uncomfortable one: the v0.6.1 diagrams rendered as

solid black boxes on the live site, and the cause had been sitting there since

v0.5.1.

## The bug

Assets were cache-busted with `?v=<View::VERSION>`, a hand-maintained constant.

It was last bumped at **0.5.1**. Everything since — v0.5.2, v0.5.3, v0.6.0 and

v0.6.1 — shipped CSS and JS changes to browsers that were still being told to

load `app.css?v=0.5.1`, so they served their cached copy and never fetched the

new one. The footer had also been advertising v0.5.1 for four releases.

The new lesson diagrams made it visible for the first time. SVG's initial `fill`

is **black**, so with the `.dg-*` rules missing every shape painted black and

every label inside a shape went black-on-black. The diagram didn't look broken,

it looked deleted — only "the click" survived, because it sits outside a box.

Everything else in v0.6.1 was live and correct throughout; the server was

serving the right files. The pages just weren't asking for them.

## The fix, in two layers

**1. Cache-busting that can't go stale.** New `View::asset()` stamps each URL

with the file's own `filemtime`, per asset. Change a file and its URL changes

with it — there is no constant left to forget. Applied to `app.css`, every

`<script>` tag, per-page CSS/JS, and the OG image.

**2. Diagrams that degrade instead of disappearing.** The `.dg-*` classes stay

for theming (dark mode still works), but every shape and label now also carries

plain `fill`/`stroke`/`font-size` presentation attributes. CSS overrides them

when it loads; when it doesn't, you get a fully readable light-theme diagram

instead of black rectangles. Verified by rendering the diagrams with no

stylesheet at all.

Relying on an external stylesheet for whether a diagram is legible was the

underlying mistake. Fixing the cache-buster alone would have hidden it until the

next time something stopped CSS from loading.

## Note for the next deploy

Two kinds of state don't travel with `git pull`, and both bit this release:

  • `releases` rows are written by `scripts/add-release.php` — run it on the server.
  • `lesson_videos` is gated by `lessons.videos_seeded`, so `import-content.php`

will not pick up a new video. Use `refresh-videos.php --only=<slug> --apply`,

and dry-run it first to check nothing gets parked.

v0.6.1 26 July 2026

# v0.6.1 — Straight answers, clear signposts, first real diagrams

A correctness-and-clarity pass, mostly aimed at the moment a non-coder loses

confidence: being told something they can't check, or being marked wrong when

they weren't.

## Corrected a claim we couldn't stand behind

Lesson 8's advanced flavour asserted that dropping "No libraries, no build step"

from the Snake brief would *get* you a `package.json`, a bundler and a dev

server, "unopenable by double-click". That isn't true — Snake is small enough

that current models overwhelmingly hand back a single self-contained file

anyway. The quiz was worse: the false claim was the marked-correct answer.

Rewritten to the honest argument, which is also the more useful one:

constraints buy **predictability**, not rescue from a certain disaster. The same

brief without that clause can come back as one file, three files, a framework

component, or something with an install step first — and you don't know which

until it's written. That reasoning scales to bigger asks, where it actually

starts to bite. Fixed in the lesson prose, the multiple-choice question and the

short-answer model answer.

## Prompt labs no longer mark good answers wrong

The `[[promptlab]]` checklist matches keywords, so a learner who covered a point

in their own words got a hollow circle and a verdict reading "the hollow circles

are what is still missing" — flatly false, and aimed at exactly the audience

least able to push back.

  • The widget now explains what the circles are **before** you score, and says

plainly that it's a word-check rather than a mark.

  • The verdict no longer claims authority: "if you covered them in your own

words, you covered them. Ask your Co-pilot for a real read."

  • Applies to all four prompt labs (lessons 8, 11, 13, 23).

## "Where you are" signposts reach modules 4–6

The orientation banner existed in lessons 8 and 9 only, and stopped dead before

the most command-heavy lessons in the course. Lessons 19, 20 and 21 asked people

to paste shell commands, edit a JSON config and type `/newbot` into Telegram

with nothing marking which was which — lesson 21 had to patch it in prose

("not your terminal"), which was the tell.

  • New `is-app` variant (violet) for "you're in a phone or desktop app, not a

terminal" — the app-versus-shell mix-up is a category error, not a skill gap.

  • Banners added through lessons 19, 20 and 21 in both flavours, including the

hand-off points where Telegram gives way to the shell and back.

## First teaching diagrams

Three inline SVGs, theme-aware from CSS vars, no external assets and no build

step (per `IMAGE_PLAN.md` — diagrams where they teach, not where they decorate).

Reusable `.ls-diagram` / `.dg-*` classes so the next ones are cheap.

  • **Lesson 16** — before the click, after the click, and paying for the click.

The lesson already stated this as its rule of thumb; now you can see it.

  • **Lesson 18** — prompt injection: your instruction and a stranger's hidden

one arriving at the agent as the same kind of thing. The hardest idea in the

module, previously prose only.

  • **Lesson 25** — the diffusion strip: a picture emerging from static across

four frames, drawn with an SVG turbulence filter. A lesson about image

generation now contains an image.

## Also

  • Module 4's tagline still advertised "Images, video, marketing analytics and

your job" after lesson 25 moved to module 6 and became optional. Migration 019

caught modules 3 and 6 and missed this one; migration 021 fixes it.

  • Lesson 20 gains a fifth video: *Self-Host Your Own AI Agent on Mac & Control

It From Telegram* (MrKnowledgeShare, 16 min) — the closest match to the

lesson's own framing, slotted second among the beginner picks.

v0.6.0 26 July 2026

# v0.6.0 — Lesson 26: The Agent Showcase

  • New optional lesson at the end of Module 6: **The Agent Showcase — What People

Actually Do With These**. Eight real automations to steal, each with the exact

message to send your agent: the morning briefing, the inbox bouncer (drafts,

never sends), Monkey & Olive's night shift (weekly GA4 report via the lesson 16

connector, Friday Instagram captions in the brand voice), watchers & nudgers,

a community-skills tour with a trust check, and party tricks that are secretly

useful. Closer: pick one, build it tonight, save it as a skill.

  • Advanced flavour teaches the pattern behind them all — trigger → gather →

think → deliver — plus the engineering of not nagging (thresholds, debounce,

silence policy) and ninety-second due diligence on community skills.

  • Safety thread throughout: draft-never-send, approval on anything outbound,

and "installing a skill is hiring a stranger" (lessons 18 and 21, applied).

  • New glossary term: **cron**. Five new quiz questions.
  • Lesson 22's closers now point honestly at what follows (23, the optional

24–25, and the showcase) instead of calling lesson 23 "the finale".

v0.5.3 25 July 2026

# v0.5.3 — Modules 4–6 review: the fixes

An 11-agent review of every lesson in modules 4–6 surfaced 55 findings; this

release ships the high-severity ones (flow bugs, failing commands, wrong claims).

  • Lesson 16: MCP reintroduced inline (Module 3 is optional, so no "remember?"),

a no-connector route (export a CSV, paste it in — or Google's free GA4 demo

account), prompts section renamed "Seven prompts to steal" to match reality,

destination stated ("type these into the connected Claude Code/Desktop chat"),

Ads-linking note before the two ads prompts, honest setup-time estimate.

  • Lesson 17: prompts now say where they go (ordinary chat, with the 14:00

analytics prompt flagged as the connected-agent exception); Claude Code

anchored to lesson 7 instead of optional lesson 13.

  • Lesson 18: no longer claims to be "the last lesson" (Module 6 follows);

Module 3 achievements hedged; new guardrail warning — agents with file/inbox

access need written "ask before destructive actions, confirm before sending"

rules in their instructions; copy-prompts say where to paste them.

  • Lesson 19: npm explained before the npm installs (beginners have no Node);

"personal agent from lesson 15" made conditional; API-key advice no longer

puts the key into shell history while claiming to keep it out.

  • Lesson 20: Telegram setup no longer dead-ends (re-run `hermes setup` to paste

the token, BotFather impostor warning, desktop-Telegram tip, t.me link);

install quiz question tests understanding instead of memorising a URL.

  • Lesson 21: config edit is followed by the required `openclaw gateway restart`;

pairing flow reordered (DM first, then approve — the list was always empty

before); BotFather located inside the Telegram app; hidden config opened via

`open -e`; MCP glossed inline.

  • Lesson 22: worked example no longer assumes the optional Module 3 website;

the two file-content copy blocks now say "this is a file, not a prompt".

  • Lesson 24: jailbreak vs prompt injection contrast added (the quiz asked it,

the lesson never taught it); "published yesterday" video note dated properly.

  • Stale docs.anthropic.com links moved to platform.claude.com (lessons 17, 23).

v0.5.2 25 July 2026

# v0.5.2 — AI slop & clearer image-prompt instructions

  • Lesson 18 (Ethics, Gotchas & Guardrails): new "AI slop" section in both flavours —

what slop is, why it's a prompting failure rather than a model failure, and how

specific prompts (lesson 11) plus taste written into CLAUDE.md/skills (lessons 10

and 22) keep output from being generic. Monkey & Olive used as the worked example.

  • Gotchas checklist grows to 11 points (slop test added); new quiz question on

fixing generic AI output (final quiz is now 8 questions).

  • New glossary term: **AI slop**.
  • Lesson 25 (Image & Video AI): both image-prompt copy blocks now say exactly where

to paste the prompt (ChatGPT, Gemini, Canva — not the terminal, Claude Code

doesn't paint pictures).

  • Lesson 24 (AI in the Headlines): every "API" mention now carries the ? glossary

popover, and a repeated paragraph in the advanced flavour now says something new.

v0.4.0 25 July 2026

# AI CoursePilot v0.4.0 — "Build Something" 🐍💍

*Released 2026-07-25*

Module 2 stopped being all theory. You install Claude Code in lesson 7 — now

lessons 8 and 9 make you *use* it, twice, and you finish holding something that

runs in a browser.

## Two new lessons (both optional)

**8. Your First Build: Snake** 🐍 — one folder, one prompt, a playable game.

Arrow keys, growing tail, score, game over. The point isn't Snake: it's that a

brief has four parts (artefact, behaviour, constraints, audience), that one

`.html` file is a finished program because every browser ships a JavaScript

engine, and that you iterate *one change at a time*. Then you make it ridiculous

— emoji food, tabloid death headlines, a chaos button.

**9. Monkey & Olive: Build a Brand** 💍 — a jewellery shop from an empty folder.

The brand already has a logo (a pencil-drawn pug in an olive wreath); the learner

`curl`s it down, writes BRAND.md from the exact palette read out of the artwork,

pulls five product photographs, and builds a five-file storefront with a basket

that survives navigation and a checkout that says, loudly, that it is a

simulation.

Both are marked **✨ Optional bonus** and neither gates anything. Lessons 8–23

renumbered to 10–25 to make room; lessons are keyed by slug, so nobody's progress

moved.

## Builder awards 🏆

Three gold-tier badges for the lessons that end with a working artefact:

  • **Game Builder** 🕹️ — built a playable browser game from a written brief
  • **E-commerce Builder** 💍 — built a brand, a shop and a working checkout
  • **Website Builder** 🌐 — briefed, built and shipped a real site to the internet

Gold awards get their own ceremony (denser gold rays, a bigger medal, a "★ Top

award unlocked ★" kicker) and a trophy shelf at the top of the profile page,

separate from the everyday badges.

## Word Snake 🐍

Module 2's round-up gains a **second** game alongside Command Line Hero: steer a

snake into the right answer. Twelve rounds of terminal, git and steering-file

vocabulary, DOM cells rather than canvas so the food is real text, and every

round is also answerable by clicking a button for anyone not using arrow keys.

## Simulators

  • The practice terminal now ships with `~/snakegame` and `~/monkeyandolive`

already built, so any lesson can say "cd into your project" and mean it.

  • New `head [-n N]` command; `open` now tells you what would actually have

happened, with a bit of ceremony inside the two project folders.

  • Two new Claude Code simulator scenes: the Snake build, and the Monkey & Olive

brand-first session.

## Reference builds

`public/training_material/demos/` holds what the prompts actually produce, built

by running the briefs as written and verified in a browser — the game's collision

and restart behaviour, and the shop's basket, totals and zero-network checkout.

Not linked from the lessons: the logo is meant to be a surprise.

## Fixes

  • Optional lessons no longer gate module round-ups or module badges — adding a

bonus lesson can't re-lock a module somebody had already finished.

  • Module 6 finally has its own badge (**Levelled Up** 🛰️); it had been missing

since the module was added.

  • 22 stale cross-lesson references corrected ("see lesson 15" pointing at the

wrong lesson), several of which predated this release.

  • Four new glossary terms with airport analogies: working directory, canvas,

SVG, curl.