Tutto. Teaching notes
slide — / 17

Claude Code in Action: teaching notes

Side-by-side notes for 04-praxis-claude-code-in-action.html (17 slides). This is the applied course: a real session start to finish: install, point it at a project, make changes and review the diff, then drive and customise it (context control, custom commands, MCP, GitHub) and lock in the must-haves with hooks, ending at the SDK. Course 02 (Claude Code 101) gave the concepts; this one shows them working. Keep the framing on "what this means for your world", not the engineering. The deck is what the room looks at; this is what you say, where you stop, and how each idea lands for the person in front of you. The source is mostly video, so these notes lean on the deck spine plus the four text lessons (setup, project setup, hook gotchas, useful hooks) plus cross-references to course 02. Slides built that way are flagged. Written against the Praxis teaching library. Method: teaching-notes-method.md.

How to use these notes
  • These are guidance, not a script. Teach the person, not the slides.
  • Each teaching slide has a Pause, then ask block. Put the question, then stop. Do not fill the silence. If they freeze, one line: "Take your time, type anything when you're ready, including 'I don't know'." Then wait again.
  • By background gives you a line per archetype (from tutor/scenarios.md). Reach for the one that matches whoever is in the room and ignore the rest. They are a palette, not a checklist to read out.
  • This course names commands and files (@file, CLAUDE.md, /clear, /compact, /context, /mcp, settings.json, PreToolUse). Say them; do not read code or JSON aloud (framings.md: voice). The point of every command is the outcome, not the keystroke.
  • Hold the voice (train-the-trainer.md Part 4): no "great question", no emoji, one term only: Claude Code. Underclaim. Cost is "about twenty dollars a month" and stop.
  • Run the intake first (train-the-trainer.md) so you know which background you're teaching to. This course assumes course 02 has landed; if it hasn't, plant the bridge fast: this is the agent acting in your own files, the durable on-disk version of the browser Claude.
1
Title

Watch Claude Code actually do the work

The idea

Set the frame: fourteen ideas, one per screen, install to hooks. Course 02 explained the agent; this one shows it working. The watching is the lesson, so you show, you don't lecture.

Say it like this

"Fourteen ideas, one screen each. Last time we talked about what this thing is. Today you watch it actually do the work: installed, pointed at real files, making changes you review, then locked down so the things that must happen always happen. I'll show each piece, then stop and ask where it fits your week."

Open with

The task they named in intake: the recurring grind across many files. Promise you'll come back to it on the make-changes slide and again on hooks, because that is the shape of doing it once and guaranteeing it forever.

2
Spine

The whole course on one screen

The idea

Four moves: see what the agent is, get it running, drive it day to day, then make the must-haves guaranteed. Show the shape so nobody feels lost once the terms start coming.

Say it like this

"Here's the whole thing on one screen. We see what the agent is, we get it running, we drive it day to day (making changes, controlling what it sees, connecting it out), then we make the must-haves guaranteed with hooks, and finish with the SDK. If a word lands and you've no idea where it sits, this slide is the map back."

Cue

Don't teach the spine, just orient. The centrepiece is slide 13, the prompt-versus- hook idea; everything before it builds toward making the work reliable. Twenty seconds, then move.

3
Lesson 1 · Foundation

From autocomplete to a teammate that acts

Flagged: source is video-only; built from the deck slide + course 02 slide 3.

The idea

Coding assistants sit on a spectrum. Autocomplete guesses your next line; a chat assistant answers and you copy it across; an agent reads your project and does the work itself. Claude Code is the agent end.

Say it like this

"There's a spectrum here. At one end, autocomplete: it finishes your line. In the middle, a chat assistant: it answers, and you carry the answer across yourself. At the far end is Claude Code: it reads your files, edits across them, runs the commands, and decides what to do next. Same intelligence you know from the browser, but now it has hands." (Pairs with framings.md, the folder is the memory: the work moves out of a chat you lose and into a place that persists.)

Pause, then ask
  • "Where in your week are you the courier: copying something out of one tool, doing a step, pasting the result back?"
  • "What would change if that middle carrying step just happened?"

(wait)

By background
Investigator
it opens the case file itself instead of you pasting documents one by one.
Analyst
it reads every vendor response in the folder, not the one you hand it.
Designer
it works across the whole brief set, not a single brief you upload.
Knowledge worker
it processes the inbox folder in place, no file-by-file copy.
Reporter
it pulls every team update from where they live and writes the briefing.
Content
it reads the back catalogue on disk to match your voice, unprompted.
Form-filler
it allocates a whole folder of receipts, not one you paste in.
Outreach
it reads every customer file and drafts a proposal per file.
Exec
it assembles the board inputs from the folder instead of you collating them.
Watch for

"Is my data safe once it's in my files?" surfaces the moment they picture it acting. Don't wave it away. The files exist with or without Claude; it sits dormant until you summon it, and it sees only that folder and below. (objections.md: "where is the AI"; full treatment on the MCP slide.)

4
Lesson 2 · Foundation

What a session actually looks like

Flagged: source is video-only; built from the deck slide + course 02 slides 3–4.

The idea

The whole shape of a session in one loop: you ask in plain English, Claude reads the relevant files, makes the edits, runs them to check, and shows the result back for you to review and refine. The course demos this on a small sample app, but nothing is special about it. You can follow on your own files.

Say it like this

"This is what a session looks like, top to bottom. You ask in plain English. It finds the files that matter, edits across them, runs them to check its own work, and shows you the result. You look, you refine, it goes round again. The demo uses a little sample app, but that's just so everyone has the same thing to point at. Your own folder works exactly the same." (patterns.md, the 80/20 expectation: set it here, before any live run, "you'll get ninety percent of the way; you finish the last ten, and even eighty percent is an enormous cut".)

Pause, then ask
  • "Think of a task you'd hand a capable colleague. What's the back-and-forth you'd expect before it's right?"
  • "Where in your work do you most want to see the result before you trust it?"

(wait)

By background
Investigator
"draft the report from this file" → it reads, drafts, you review the sections.
Analyst
"compare these responses" → it builds the table, you check the blanks.
Designer
"list every asset this brief needs" → it produces the manifest, you refine.
Knowledge worker
"pull these invoices into a CSV" → it extracts, you spot-check.
Reporter
"turn these updates into the briefing" → it drafts, you trim.
Content
"draft this in our voice" → it reads the catalogue, drafts, you correct lines.
Form-filler
"allocate these receipts to the template" → it fills, you check totals.
Outreach
"one proposal per customer" → it drafts each, you read before sending.
Exec
"build the one-page brief" → it assembles, you check what it surfaced.
Watch for

They'll expect a finished thing first try and be disappointed. The review- and-refine loop is the method, not a sign it failed. Set 80/20 before anything runs live. (patterns.md: the 80/20 expectation.)

5
Lesson 3 · Foundation

One command to install

Source: text lesson "Claude Code setup" (the one well-documented slide in this course).

The idea

One line in your terminal, whatever the platform, then run claude, pick a theme, sign in with your claude.ai account. The docs' troubleshooting page is the first stop for errors; Bedrock, Vertex or Foundry have their own setup.

Say it like this

"Installing is one line, and which line depends only on your machine: Mac, Linux, Windows. Then you type claude, pick a colour theme, sign in with the account you already have. The fastest way through it, honestly, is to ask Claude itself to walk you through the install. That's how most people get over the line." (framings.md, ask Claude to install Claude: "I'm going to be using Claude Code on my command line to control one of my folders. How do I set that up?")

Pause, then ask
  • "Which machine would you run this on, and is anything on it locked down by IT?"
  • "Who else on your team would you want to get installed once you've seen it work?"

(wait)

By background (the one install gate that matters to them)
Investigator
likely a managed device; this is the IT-discovery conversation, not a dead end.
Analyst
regulated environment; check the install policy before the room, not during.
Designer
usually their own machine; install is a five-minute non-event.
Knowledge worker
their own laptop; the "ask Claude to install" route fits perfectly.
Reporter
their work machine; the desktop app is the gentlest first surface.
Content
their own machine; quick.
Form-filler
their own laptop; quick.
Outreach
their work machine; check whether the CRM is on the same device.
Exec
they won't install it themselves, but the team they sponsor will, with one line.
Watch for

"It won't install on my work machine." For banks and firms this is the IT-discovery conversation, not a no: floor is Claude on the web with no install, ceiling is a local model where nothing leaves the network. (objections.md: IT/compliance; "won't let me install".) For everyone else, a "command not found" or permissions error goes to the docs' troubleshoot page first.

6
Lesson 4 · Get going

Point it at a real project

Source: text lesson "Project setup". Mechanics are sample-specific; keep the teaching on the principle.

The idea

Claude Code is more interesting with something to work on. The course ships a small sample app you download, set up and run, but the real lesson is the principle: you point it at a folder of real work. Node is the one prerequisite; the API key is optional and only powers the sample app's own feature, not Claude Code.

Say it like this

"The course gives you a little app to play with so nobody starts from a blank screen. You download it, run one setup command, and it's live. But don't fixate on the sample. The point is you can point Claude Code at any folder of your own work and start there instead. That folder is the project." (framings.md, the folder is the memory: "you've now put it in your files; the folder is the memory".)

Pause, then ask
  • "Where do the files for that recurring task actually sit on your machine right now?"
  • "If you pointed Claude Code at one folder this week, which folder would it be?"

(wait)

By background (the folder they'd point it at)
Investigator
the case-file folder for one live matter, after the IT conversation.
Analyst
the folder of this quarter's vendor responses.
Designer
one campaign's brief folder.
Knowledge worker
the inbox folder where this month's invoices land.
Reporter
the folder the team drops weekly updates into.
Content
the back-catalogue folder of past posts.
Form-filler
the receipts folder for one filing period.
Outreach
the folder of customer files for one segment.
Exec
the board-inputs folder for one cycle.
Watch for

Don't let the room get lost in the sample app's setup steps. Node, the optional key, the SQLite database are sample plumbing, not the lesson. The transferable idea is "a folder of real work is the project". (objections.md, "real files / doesn't apply to my actual files": the dummy files are plain text for legibility; the pattern transfers to Word, Excel, PDFs.)

7
Lesson 5 · Get going

Context in: how Claude learns your project

Flagged: source is video-only; built from the deck slide + course 02 slides 5 and 8.

The idea

Claude only knows what's in its context window. You get the right things in before you ask: name a file or folder with @file, paste in errors or logs or images, keep standing rules in CLAUDE.md (read every session), and let it search the repo itself. Be specific: the less it has to guess, the less it wanders and the less each run costs.

Say it like this

"Claude knows exactly what's in front of it and nothing more. So before you ask, you put the right things in front of it: point at a file with the @ sign, paste in an error or a screenshot, keep your standing rules in a file it reads every time, and let it search the folder when it needs to. The skill is being specific. Vague prompts cost you, because it goes wandering to fill the gap." (framings.md, context window: the browser chat forgets the beginning once it runs long; here the memory is bounded by your disk, and the rules file keeps working across every file you drop in.)

Pause, then ask
  • "What do you find yourself re-explaining to AI every single time you open it?"
  • "What's the one document it would always need to see to do your task properly?"

(wait)

By background (what they'd pull into context)
Investigator
the house report rules and screening checklist, every matter.
Analyst
the standard column set and the "no data" rule, every review.
Designer
the brand tokens and the retailer spec sheet for the campaign.
Knowledge worker
the CSV schema and the known supplier quirks.
Reporter
the five-section format and the team roster.
Content
the house-voice guide and two past posts as the voice sample.
Form-filler
the template and the category definitions.
Outreach
the knowledge base and the proposal format.
Exec
the KPI definitions and the retainer book.
Watch for

"Does it forget like ChatGPT?" A long chat does, which is exactly why the durable rules go in a file, not the conversation. Worth saying: a vague prompt costs more context, not less. (objections.md: browser / why not ChatGPT.)

8
Lesson 6 · Get going

Making changes: describe it, review the diff

Flagged: source is video-only; built from the deck slide + course 02 slides 6–7.

The idea

You say what you want in plain English; Claude edits across the files and shows you a diff: exactly what changed. You approve or refine, go round again, and only commit when it's right. You stay in control: every edit is reviewable, and you can steer, undo or redirect before anything lands.

Say it like this

"Here's the part people worry about, and it's the part you have the most control over. You describe the change. It makes the edits and shows you a diff: a side-by-side of exactly what it changed, nothing hidden. You approve, or you correct it and it goes again. Nothing gets locked in until you say so. You're never handing it the keys; you're reviewing every change before it lands." (objections.md, permission: confirm-each- step first, you always check the end, switch to faster modes once the pattern is familiar.)

Pause, then ask
  • "On a task that matters to you, would you rather approve each step, or see the finished result and check it?"
  • "Take the task you named in intake, what would 'done right' have to include for you to trust the change?"

(wait)

By background (the change they'd describe, and the review that protects them)
Investigator
"redraft section three" → you check no claim went in uncited.
Analyst
"add the basis column" → you check no blank got guessed.
Designer
"add the mobile variant" → you check the spec wasn't invented.
Knowledge worker
"fix the credit-note sign" → you check the total reconciles.
Reporter
"move the blocker up top" → you check no teammate got dropped.
Content
"tighten the opening" → you check the house voice held.
Form-filler
"re-allocate that receipt" → you check it's in one section only.
Outreach
"soften the second paragraph" → you check no number got invented.
Exec
"cut it to one page" → you check nothing material got truncated.
Watch for

The diff is the trust mechanism; name it. People hear "it edits my files" and picture losing control; the reality is the opposite, you see every change before it's committed. Iterate one change at a time, or they lose track of which note did what.

9
Lesson 7 · Drive & customise

Controlling context: keep the window lean

Flagged: source is video-only; built from the deck slide + course 02 slide 8.

The idea

A long session fills the context window. Three commands keep it focused on what matters now: /clear (wipe it for a new, unrelated task), /compact (summarise but keep the thread on the same task), /context (see what's filling it). Near the limit it auto-compacts; answers drifting is usually a full window.

Say it like this

"Think of its working memory as a desk. Every file it reads, every command it runs, lands on the desk, and the desk has an edge. When you start something unrelated, /clear wipes it clean. When you're mid-task and it's running long, /compact tidies up but keeps the thread. And /context shows you what's taking the space. If answers start drifting, that's usually a full desk." (framings.md, context window: here the memory is bounded by your disk, not a chat that forgets the beginning.)

Pause, then ask
  • "When you've used a chatbot on a long task, have you felt it lose the thread of what you said earlier?"
  • "Which of your tasks are one clean job, and which sprawl across many steps?"

(wait)

By background (when to /clear vs /compact)
Investigator
/clear between unrelated subjects; /compact mid-report on one matter.
Analyst
/clear between vendor reviews; /compact while building one table.
Designer
/clear between campaigns; /compact mid-manifest on one.
Knowledge worker
/clear between months; /compact part-way through a big batch.
Reporter
/clear each new week; /compact while assembling this week's.
Content
/clear between posts; /compact mid-draft on one piece.
Form-filler
/clear between filing periods; /compact part-way through one.
Outreach
/clear between segments; /compact mid-batch on one segment.
Exec
/clear between board cycles; /compact while building one brief.
Watch for

Don't over-teach the commands; the takeaway is "if it starts drifting, the window's full: clear or compact". The durable stuff that should survive every session goes in a file, not the conversation. That's the bridge to context-in (slide 7) and to MCP.

10
Lesson 8 · Drive & customise

Custom commands: save a prompt you reuse

Flagged: source is video-only; built from the deck slide + general Claude Code knowledge.

The idea

A prompt you type often becomes a slash command: a plain Markdown file in .claude/commands/ that Claude runs on demand when you type /name. Pass arguments with a placeholder. Keep the commands in the repo and the whole team gets the same shortcuts.

Say it like this

"Anything you find yourself typing over and over (a review checklist, a release routine, the way you want a report formatted), you write down once as a command. After that you just type a slash and its name, and the whole long prompt expands. Put it in the shared folder and everyone on the team has the same shortcut, the same way, every time." (framings.md, skill file as institutional memory: "those rules lived in your senior person's head and walked out the door at six o'clock; this pulls them onto disk so a new joiner does the work the same way on day one". Adapt the role to the room.)

Pause, then ask
  • "What's the long instruction you re-type to AI most often?"
  • "If your whole team could run that exact instruction with one word, what would it be?"

(wait: this is where "AI tool" becomes "team standard".)

By background (the command they'd save and share)
Investigator
/report: the eight-section background report, run the same every matter.
Analyst
/compare: the fixed-column vendor table with the "no data" rule.
Designer
/manifest: read the briefs, list every asset variant.
Knowledge worker
/extract: invoices to the CSV schema, blanks left blank.
Reporter
/briefing: the five-section weekly briefing.
Content
/draft: a post in house voice, referencing one past piece.
Form-filler
/allocate: receipts to the template, nothing dropped.
Outreach
/proposal: one per customer, fixed five sections.
Exec
/brief: revenue, at-risk, decisions, steady, one page.
Watch for

This is the same idea as CLAUDE.md and skills from course 02 (your method, captured once, reused), just packaged as a slash command. Name the family resemblance or they'll file it as a separate trick. The win is "the team works the same way", not the syntax of a Markdown file.

Key concept: runtime parameters in a custom command Verified against the official Claude Code slash-command docs (June 2026). Not the spoken script; for a room that wants the syntax. File goes in .claude/commands/<name>.md (project, shared) or ~/.claude/commands/<name>.md (user, every project); the filename is the command, subfolders namespace it (git/commit.md → /git:commit). The body is a prompt template; the $ placeholders are the fill-ins. Two ways to take input

Add a changelog entry for version $1, of type "$2", with the message: "$3". `` /changelog 1.4.0 fixed "Handle null user" fills $1/$2/$3 and injects the git log. (Note: the Praxis commands in this repo's own .claude/commands/, /plato, /demo, /socrates`, are exactly this pattern.)

  • $ARGUMENTS: everything the user typed, as one blob. /fix-issue 1234 → 1234. Use when you just forward whatever they passed.
  • $1, $2, $3…: positional args for distinct roles. /open-pr feature/login main → $1=feature/login, $2=main. Supporting pieces: argument-hint: frontmatter shows expected args in autocomplete; ` !command runs a shell command and inlines its output at invocation (needs allowed-tools for that Bash call); @path/to/file pulls a file's contents in. Other frontmatter: description, allowed-tools, model. Worked example: ``markdown
11
Lesson 9 · Drive & customise

MCP: reach the tools outside your code

Flagged: source is video-only; built from the deck slide + course 02 slide 13.

The idea

Most of what you need lives in other systems: issues, docs, databases, repos. MCP is one open standard that connects Claude Code to them as tools. Scope it local, user or project (.mcp.json in the repo). Watch the cost: every server loads its tool definitions whether you use them or not, so add what you need and disable the rest.

Say it like this

"Your real context doesn't all live in one folder. It's in your email, your project tracker, your databases. MCP is the one standard that plugs those in, so Claude Code can reach your actual data instead of starting cold. One thing to know: each connection costs a little memory up front whether you use it or not, so you turn off what you don't need." (objections.md, IT/compliance: it sees only what you can see; connecting your email doesn't expose anyone else's, and you can revoke it.)

Pause, then ask
  • "Where does the data you'd want it to work with actually live today?"
  • "Which one tool, connected, would kill the most copy-paste in your week?"

(wait)

By background (the connection that earns its place)
Investigator
the document store where case files live, after the IT conversation.
Analyst
the warehouse or drive holding vendor responses.
Designer
the design tools, plus the drive for brand assets.
Knowledge worker
the email and drive where invoices land.
Reporter
the project tracker and chat where status updates live.
Content
the CMS or notes app holding the back catalogue.
Form-filler
the drive or email where receipts arrive.
Outreach
the CRM and email for customer context.
Exec
the drive, chat and email for the board-pack inputs.
Watch for

This is the data-safety gate for almost everyone. Slow down. Give the floor (Claude on the web, no install) and the ceiling (a local model, nothing leaves your network), and for banks and firms frame it as the IT-discovery conversation, not a yes/no. (objections.md: IT/compliance/privacy.) On cost: prune unused servers, or the context fills before you've asked anything.

Key concept: MCP servers in GitHub Actions

Verified against the official docs (code.claude.com/docs/en/github-actions and anthropics/claude-code-action docs/configuration.md, June 2026). Not in the spoken script; for the rare room that runs MCP in CI. There's a two-level permission model and both levels are required: 1. Configure the server via --mcp-config inside claude_args (inline JSON or a file path). 2. Allow-list each tool in --allowedTools using the mcp__<server-name>__<tool-name> pattern; the prefix mcp__<server>__* allows every tool from that server. Defining the server alone does nothing: a tool not named in --allowedTools can't be called. That's deliberate defense-in-depth: a misconfigured or hostile server still can't act without explicit per-tool permission. ```yaml

  • uses: anthropics/claude-code-action@v1 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} claude_args: | --mcp-config '{"mcpServers": {"sequential-thinking": {"command": "npx", "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]}}}' --allowedTools mcp__sequential-thinking__sequentialthinking `` Supporting requirements: a workflow permissions: block (contents, issues, pull-requests, plus id-token: write for Bedrock/Vertex OIDC) and the ANTHROPIC_API_KEY secret. Migration note: the beta allowed_tools input moved to claude_args: --allowedTools` in v1.
12
Lesson 10 · Drive & customise

GitHub: from local change to pull request

Flagged: source is video-only; built from the deck slide + general Claude Code knowledge. Most technical/team-scale slide so far. Keep it conceptual for non-technical rooms.

The idea

Two halves. Top row is you, locally: Claude Code drives the version-control tooling to commit, push and open a pull request in one flow. Bottom row is hands-off: tag @claude on an issue or PR and the GitHub app runs Claude Code on a server to triage, review or implement, then reports back to the PR.

Say it like this

"Two things on this slide. The top half is you on your own machine: once a change is right, one flow commits it, pushes it, and opens it for review. The bottom half is where it gets interesting for a team: you can tag Claude on a piece of work, and it goes off and does it on a server, then comes back with the result for someone to review. That's the same agent you've been driving, now working while you're not watching." (Adapt to their world: this is the colleague who picks up the ticket, does the first pass, and leaves it ready for your sign-off.)

Pause, then ask
  • "What gets reviewed before it goes out in your work, and who does the reviewing?"
  • "Where would a 'first pass done, ready for your check' save you the most time?"

(wait)

By background (the "first pass, then your review" they'd hand off)
Investigator
a draft background report raised for the senior to check before it ships.
Analyst
a comparison table prepared and flagged for sign-off.
Designer
an asset manifest drafted and queued for the studio lead.
Knowledge worker
a month's CSV extracted and raised for a spot-check.
Reporter
the weekly briefing drafted and left for the editor.
Content
a post drafted in house voice, queued for the editor's read.
Form-filler
a filing-period allocation prepared for the reviewer.
Outreach
a batch of proposals drafted and held for approval before send.
Exec
a board brief assembled and raised for the principal's final read.
Watch for

This is genuinely technical and team-scale. Most solo, non-technical learners won't wire up the @claude half on day one. Keep it conceptual: the value is "work gets done and comes back ready for review". Name it as where this goes once a team adopts it, then move on; don't get lost in version-control mechanics.

13
Lesson 11 · Hooks & SDK

A prompt is a request. A hook is a guarantee.

The centrepiece of this course. If they take one thing away, it's this.

The idea

Asking Claude to "always run the formatter" is a request it might forget: it sometimes runs, sometimes gets skipped. A hook is a command the harness runs every time at a fixed point, no exceptions. Prompts are probabilistic; hooks are deterministic. If something must happen every single time, don't put it in a prompt, put it in a hook.

Say it like this

"Everything else this session is something you ask for, and usually get. A hook is something that always happens, no asking, no exceptions. The reason it's reliable is that it's run by the machinery around Claude, not by Claude deciding to remember. Format every file. Log every action for compliance. Block a dangerous step before it runs. The rule of thumb: if it has to happen every single time without fail, it doesn't belong in a prompt, it belongs in a hook." (For these learners the headline is the guarantee, not the syntax: some rules are too important to leave to "usually".)

Pause, then ask
  • "What's a rule in your work that has to hold every time, no exceptions, no 'usually'?"
  • "Where has 'someone forgot the last step' actually cost you?"

(wait: making the always-rule explicit is the lesson.)

By background (the always-rule they'd guarantee)
Investigator
log every action for the audit trail; block any report that ships uncited.
Analyst
every output stamped with its sources; block a table with an unexplained blank.
Designer
every export run through the naming convention, automatically.
Knowledge worker
every extracted file checked against the schema before it saves.
Reporter
the briefing always written to the five-section format, never freeform.
Content
every draft auto-checked for the banned constructions before it's shown.
Form-filler
totals always reconciled before a filled template is saved.
Outreach
every proposal scanned for invented numbers before it can send.
Exec
every brief held to one page; nothing board-facing ships without the four sections.
Watch for

This is the conceptual peak of the course, and the one most non-technical learners won't set up alone on day one. That's fine: the value is grasping "guaranteed, not suggested". This is where the system becomes trustworthy at team scale. Don't read JSON aloud; teach the guarantee. (Mirrors course 02 slide 14.)

Key concept: the primary purpose of hooks

To turn what you'd ask Claude to do into what always happens, convert a probabilistic request into a deterministic guarantee. Prompts are run by the model (it usually complies, but "usually" isn't "always"); hooks are run by the harness at a fixed lifecycle point, every time, no exceptions. Rule of thumb: if it must happen every single time without fail, it doesn't belong in a prompt, it belongs in a hook. Three shapes it takes: guarantee an action (format every file, log every call: PostToolUse), block a dangerous one (stop an rm -rf, a commit to main, a read of .env: PreToolUse), inject standing context (SessionStart, UserPromptSubmit). The deeper payoff and the reason this is the course's peak: it's what moves a team from "we'll review it after" to "it can't happen in the first place", the trust that makes unsupervised work safe.

14
Lesson 12 · Hooks & SDK

Defining a hook: event → matcher → command

Source: text lesson "Gotchas around hooks" + deck slide. The most technical slide in the course; for non-technical rooms teach the shape, not the syntax.

The idea

A hook is three things in a settings file: which lifecycle event (e.g. before a tool runs), which tool it matches, and the command to run. A PreToolUse hook that exits with a block code stops the action before it happens. That's how you stop a dangerous delete or a commit to the main branch before it lands, not after. Use absolute paths for the script.

Say it like this

"A hook is three simple decisions. When does it fire, for instance, just before a tool runs. What does it apply to. And what command should run. The powerful case is the 'before' hook: it can look at what's about to happen and stop it. So a dangerous delete, or a change to something protected, gets caught before it happens, not cleaned up afterwards. You're moving from 'we'll review it after' to 'it can't happen in the first place'." (Keep it conceptual; this concept does not vary much by domain; see the shared example below.)

Pause, then ask
  • "What's the action in your work that should simply never be allowed to happen by accident?"
  • "Where would 'caught before, not cleaned up after' have saved you a bad day?"

(wait)

By background: one shared example (this slide's mechanic genuinely doesn't vary by domain)

The universal version: a "before" hook that blocks the irreversible mistake: deleting the wrong folder, overwriting the master file, sending before a check passes. For any of the nine, the picture is the same: the thing you most fear doing by accident, made impossible rather than merely discouraged. Reach for their own near-miss if they named one in the pause; otherwise the master-file overwrite lands for everyone.

Watch for

Do not get lost in the settings file. The teachable idea is the gate: some actions should be impossible, not just reviewed. Name absolute paths once (it's a security recommendation) and move on. The how-to-share-it problem is the next slide.

Key concept: which hook blocks a tool call Verified against the official Claude Code hooks docs (June 2026). The blocking hook is PreToolUse. It's the only one that runs before a tool executes, so it's the only one positioned to stop it. (PostToolUse runs after; UserPromptSubmit, Stop, Notification, SessionStart fire at unrelated points.) It receives the tool name and its input, so you gate on conditions: match Bash against a deny-list, block any Edit/Write touching .env, secrets, or prod paths. Two ways to block
  • Exit code 2 → tool call blocked; the hook's stderr is returned to Claude as the reason.
  • JSON on stdout with a permission decision (the structured form the slide doesn't show): ``json { "hookSpecificOutput": { "hookEventName": "PreToolUse", "permissionDecision": "deny", "permissionDecisionReason": "Editing of .env files is not allowed" } } ` "allow" auto-approves, "deny" blocks, "ask"` prompts the user.
15
Lesson 13 · Hooks & SDK

Hooks in practice: share them, debug them

Source: text lessons "Gotchas around hooks" + "Useful hooks!". Two real, concrete problems. Keep them grounded.

The idea

Two practical problems the course solves. One, sharing hooks across machines: absolute paths are recommended for security, but your path isn't my path, so the project ships an example settings file with a $PWD placeholder that the setup step expands into real local paths. Two, knowing what a hook actually receives: the input on stdin changes per event and per tool, so log it first with a simple command before you write the real one. There are nine lifecycle events in all.

Say it like this

"Two real-world snags. First, sharing: the secure way to write a hook uses the full path to a script, but my full path won't match yours, so the project uses a placeholder that gets filled in automatically when each person sets up. That's how a team shares the same guarantees without hand-editing paths. Second, debugging: a hook gets fed information, and the shape of it changes depending on what triggered it, so the trick is to log it first and look, then write the real rule against what you actually saw." (Concrete, not abstract: this is the "measure twice, cut once" of hooks.)

Pause, then ask
  • "When you've shared a working setup with a colleague before, what broke when it landed on their machine?"
  • "Where in your work do you wish you could see exactly what a process received before it acted?"

(wait)

By background: one shared example (this is tooling hygiene, not domain logic)

The shared picture: a team wants the same guarantee on every machine (say, "every output gets logged for the audit trail"), and the placeholder-and-setup trick is what lets one person write it and everyone inherit it without breaking on their own paths. For a regulated room (Investigator, Analyst, Exec) lean on the audit-trail framing; for the rest, "everyone gets the same safety rail" carries it. The debugging half is the same for all nine: look before you build.

Watch for

This is the most "engineering" of the hook slides. Most non-technical learners won't author this themselves, and that's the honest reason a Praxis trainer or a developer sets the shared settings up once, after which the team just inherits it. Frame it as "this is the part someone does for the team, once" rather than a day-one solo task.

16
Lesson 14 · Hooks & SDK

The SDK: Claude Code as a building block

Flagged: source is video-only; built from the deck slide + general Claude Code knowledge. Furthest from the nine non-technical archetypes. Keep it brief and conceptual.

The idea

The same agent you run in the terminal (the loop, the tools, the context, the permissions) can be embedded inside your own software through the SDK (TypeScript or Python). That turns Claude Code from a thing you sit at into a component you build on: code-review bots, batch refactors, custom agents in your pipeline.

Say it like this

"Last idea, and it's a horizon, not a homework. Everything you've watched Claude Code do at the terminal can also be wired inside other software, so instead of you sitting and driving it, it runs as a part of a bigger system you build. That's how your one repeatable workflow could eventually run on a schedule, or on every new file, with nobody at the keyboard. You don't need this today; it's where the road goes." (Hold the one term: it's Claude Code, and the SDK is the same agent as a library.)

Pause, then ask
  • "Which of your tasks would you most want running automatically, with nobody at the keyboard?"
  • "What would it free you up to do if that one job just ran itself?"

(wait)

By background (the workflow they'd eventually want running itself)
Investigator
screening that runs the moment a new file lands in the matter folder.
Analyst
the comparison rebuilt automatically whenever a new response arrives.
Designer
the manifest regenerated each time a brief is added.
Knowledge worker
invoices extracted automatically as they hit the inbox.
Reporter
the briefing assembled on a schedule, every Monday, unattended.
Content
a house-voice check run on every draft before it reaches the editor.
Form-filler
receipts allocated as they arrive, not in one end-of-period scramble.
Outreach
a prospect brief built automatically when a new lead is added.
Exec
the board brief refreshed on a schedule from the latest inputs.
Watch for

This is the only slide that points squarely at developers, and it's the farthest from a non-technical learner's day one. Don't oversell it. Frame it as the ceiling (the same workflow they'll build by hand can later run itself), then bring them back to the one task they'll actually do this week. (Points to the deeper SDK material if a technical person in the room wants it.)

17
Close

See it act. Drive it daily. Make it guaranteed.

The idea

The whole course in three lines: you saw the agent act (install, point it at a project, change and review), you drove it daily (control context, custom commands, MCP, GitHub), and you made the must-haves guaranteed (hooks), with the SDK as where it goes next.

Say it like this

"If you keep one thing, keep the shape: you watched it act, you learned to drive it day to day, and you learned how to make the things that must happen always happen. The durable version of your task isn't a chat you lose; it's a folder, a set of reusable commands, and a guarantee or two that hold every single time."

Close with

Their task from intake, and the next concrete step: "Next time we open your real folder and build the workflow for the one you named, and decide which one rule is important enough to make a guarantee." Then the session-improvement habit: "at the end of any session, tell it to look back at what went badly and save how you fixed it, so it's better next time." (patterns.md: close every session by teaching the system to improve. framings.md, cost: about twenty dollars a month, and stop.)