Videos

Everything will be on YouTube. Each session below also has its three ideas, the practice task, and the number to write down, so it's useful without pressing play.

First Principles · Series 0 · The Atoms

01

Seven standalone sessions for engineers who just got Claude Code or Codex and aren't sure what to do with it. Ten to fifteen minutes each, three ideas max, one live demo, one practice task, one number you measure yourself. The spine: the context window is a budget. Keep a running card: atoms-card.md.

0.1 It Has Hands Now Next

An agent acts, then reads what happened. Tool results are messages.

Not on YouTube yet. The notes are the session; the video adds the live demo.

ChatGPT answers you. An agent actually goes and does the thing, and then reads what happened. That's a different animal.

“For a long time I was basically talking to a really good autocomplete. This session is the moment it gets hands. Everything after this is about what it can reach.”

Tool results are messages. If you remember that one sentence, the next five sessions are going to feel obvious.

Three ideas

  1. 01
    The loop.

    Every coding agent, Claude Code, Codex, all of them, is the same handful of lines. Call the model, the model asks for a tool, the tool runs, and the result goes back into the conversation. Then you go again until it's done. The vendors differ on what they put into that loop. They don't differ on the loop.

  2. 02
    Tool results are messages.

    This is the one I want you to walk out with. Every file it reads, every command it runs, every test output comes back as a message and sits in the conversation. So the budget fills up without you typing a word. A 2,000-line file read is the same as you pasting 2,000 lines into the chat.

  3. 03
    The unit of work is a folder, not a chat.

    The agent runs in your repo. The browser habit, one long chat and copy-paste out, is the wrong mental model here. Start from the folder, let it read, let it act, let it write there.

Practice · 15 min

In your own repo (or the sample): ask the agent one question that requires reading a real file. Then write three lines in atoms-card.md: the tools it called, in order · which result was largest · the number.

The number

How many tool calls before it answered. Write it on the card with today's date. It's your number, measured today, not a constant.

0.2 The Window Is a Budget Planned

Everything it "remembers" is re-sent; fuller is worse; you can watch it.

Not on YouTube yet. The notes are the session; the video adds the live demo.

The model forgets you after every message. Everything it 'remembers' gets re-sent, every single turn. Once you see that, a lot of weird behavior stops being weird.

“I used to blame the model. Then I actually looked at what it could see, and most of the time that was the whole problem.”

One rule: know what’s in the window before you blame the model.

Three ideas

  1. 01
    What's in the window each turn.

    The vendor's system prompt, which is fixed. Your project files. The list of tools it has. The conversation so far. And every tool result that came back. That's it, and it's a hard limit, input and output both count.

  2. 02
    Fuller is worse, not better.

    This one's counterintuitive. Quality goes down as the window fills, and stuff in the middle gets less attention. So "bigger context" is not a thing you want to max out, it's a thing you want to manage.

  3. 03
    You can watch it and steer it.

    In Claude Code /context shows you the breakdown, /compact summarizes (you can say /compact focus on X), and /clear resets between unrelated tasks. When it fills on its own, the harness auto-compacts: the history becomes a summary, the project file and tool list come back, nested files and skill bodies don't.

Practice · 15 min

In your own environment: /context fresh → read the largest file in your repo → /context again. Add a line to atoms-card.md: the two numbers and which section grew.

The number

Tokens before / after. Today's numbers, not constants. Write it on the card with today's date. It's your number, measured today, not a constant.

0.3 The File It Reads Before You Speak Planned

CLAUDE.md or AGENTS.md is always loaded. Powerful and dangerous for the same reason.

Not on YouTube yet. The notes are the session; the video adds the live demo.

There's a file the agent reads before you say a single word. And it's powerful and dangerous for exactly the same reason.

“I ran /init, got 200 lines back, and felt really productive. Then I measured what it was costing me.”

Project file = what’s always true. Keep it short enough that every line earns its spot on every turn.

Three ideas

  1. 01
    Two layers you never type.

    First the vendor's system prompt, fixed, invisible, always first. Then your project file: CLAUDE.md for Claude Code, AGENTS.md for Codex. It gets read at session start and sent every turn on top of the system prompt. Claude Code does not read AGENTS.md on its own, you import it with @AGENTS.md or symlink it, and Codex doesn't read CLAUDE.md. Same idea, different filename.

  2. 02
    Keep it minimal, because it's always loaded.

    It's the most expensive place you can put anything. Only what the agent can't figure out on its own: which project, which commands, the house rules. It's not a wiki and it's not where knowledge goes. Ten lines you wrote by hand beat two hundred generated ones, and the model still drops some of what you tell it either way.

  3. 03
    It composes, it doesn't override.

    Global (~/.claude/CLAUDE.md) plus repo root plus CLAUDE.local.md get concatenated; files in nested folders load when the agent touches that folder. The precedence details, read the docs when you need them, don't memorize folklore.

Practice · 15 min

Run the planted-rule test in your own repo (both halves). Delete any generated project file; hand-write ≤10 lines you can defend. /context before and after the rewrite. Add to atoms-card.md: planted rule obeyed y/n · strip → gone y/n · the number.

The number

Tokens before / after the rewrite. Write it on the card with today's date. It's your number, measured today, not a constant.

0.4 Skills: A Saved Way of Working Planned

Instructions that cost nothing until invoked.

Not on YouTube yet. The notes are the session; the video adds the live demo.

This is the opposite of the always-loaded file. Instructions that cost you nothing until the moment you actually need them.

“The first time I caught myself doing the same thing twice the same way, I realized I’d been re-typing a procedure the agent could just hold for me.”

Project file: what’s always true. Skill: how we do this thing, when we do it.

Three ideas

  1. 01
    A skill is a folder with a SKILL.md in it.

    A little frontmatter, name and a one-line description, then a short procedure. If you want, scripts and reference files sit next to it and the procedure calls them. Both Claude Code and Codex have this; Codex even has a skills panel.

  2. 02
    Progressive disclosure, and load-time is the lesson.

    At startup only the name and description are in the window. The body loads when you invoke it, either with /name or because the description matched what you asked. So: project file is always-loaded facts, skill is on-demand procedure. That's the thing people mix up the most, and it's really just when it loads.

  3. 03
    It's a written-down procedure, not magic.

    Three sentences can be a skill. The scripts beside it are how a skill does real work the same way every time. Build your own for stuff you repeat, don't go collect a pile of them. One-off jobs stay one-off prompts.

Practice · 15 min

Write a 3 to 6 line skill for something you do weekly (e.g. "summarize this ticket into context.md", "turn a bug report into a test matrix"). Invoke it twice on real inputs. Add to atoms-card.md: skill name · what changed in /context after invoking · the number.

The number

Tokens before / after invoke. Write it on the card with today's date. It's your number, measured today, not a constant.

0.5 What to Hand the Agent Planned

Delegate, pair, or keep. Reading tasks are the safest on-ramp.

Not on YouTube yet. The notes are the session; the video adds the live demo.

Most people who get agent access use it to finish their sentences. That's the Ferrari to the neighbor's house.

“I had a Ferrari and I was driving it to the neighbor’s house. The tool was never the problem. My list of what to ask it was.”

Agentic-first means before you even open a chat you ask: what’s the folder, what’s checkable, what do I hand over?

Three ideas

  1. 01
    Delegate / pair / keep.

    Two questions do most of the work: how checkable is the output, and how much context does it need? Checkable and bounded, delegate it, hand over the folder and review what comes back. Judgment-heavy or it needs stuff that's only in your head, pair, you drive and it drafts. Taste, politics, anything irreversible, keep. The sort itself is the skill.

  2. 02
    Its first job is reading, not writing.

    Summarize a ticket. Map a module. Tell me what this test file actually covers. Draft the test matrix. Explain this stack trace. Reading tasks are bounded, checkable, cheap to verify, so they're the safest on-ramp, and it's already where the hands from 0.1 beat chat: it reads the real files, you don't paste anything.

  3. 03
    One sentence on models.

    Bigger model for judgment and ambiguity, smaller and faster for volume and mechanical stuff. For now default to the capable one and just notice when it feels like overkill.

Practice · 15 min

List five real tasks from this week. Sort them (delegate / pair / keep, one reason each). Run the easiest delegate one, a reading task on a real file, and verify one claim it made against the source. Add to atoms-card.md: the five tasks + sort · the one you ran · the number.

The number

Minutes it took you to verify its answer. Write it on the card with today's date. It's your number, measured today, not a constant.

0.6 Tools, CLIs and MCP Planned

Tools are how it acts; MCP is one front door, and it costs window.

Not on YouTube yet. The notes are the session; the video adds the live demo.

How does an agent talk to Jira, or a browser, or a database? Through a front door with a name on it.

“Everyone asked me about MCP first. It’s the last atom on purpose.”

MCP is one way to hand the agent tools. Know it exists, know it costs, move on.

Three ideas

  1. 01
    Tools are how the agent acts.

    The built-ins, read, edit, run a command, search, cover most of the engineering work you'll do. Everything in the loop from 0.1 is a tool call.

  2. 02
    MCP is a protocol for adding tools from servers.

    A server exposes tools, each with a name, a description and a schema, and you configure servers per project (.mcp.json) or per user. Here's the catch: every tool the agent knows about costs window. Newer harnesses list just the names and load the schemas on demand; older setups loaded everything, and that's where the "MCP ate 12% of my window" demos come from. Know it, don't collect it.

  3. 03
    The honest counter-position.

    A CLI the agent already knows, plus a short readme to prime it, often does the same job for less context. So we're deferring this to a later course, on purpose.

Practice · 15 min

/context in your environment → find the tool listing → add its token count to atoms-card.md.

The number

Tokens for tools. "No servers, 0" is a valid answer. Write it on the card with today's date. It's your number, measured today, not a constant.

0.7 Guardrails: Hooks and Enforcement Planned

A skill is advice the model can ignore; a hook is a rule it can't.

Not on YouTube yet. The notes are the session; the video adds the live demo.

Everything we've done so far is asking nicely. This is the session where you stop asking.

“I kept writing ‘always run the tests before you say done’ in my project file. It listened most of the time. Most of the time isn’t a guarantee.”

If a rule matters enough that “usually” isn’t good enough, it’s not a sentence in a file. It’s a hook.

Three ideas

  1. 01
    Instructions are probabilistic, hooks are deterministic.

    Project file and skills go into the window and the model decides what to do with them. A hook is a script the harness runs around a tool call, before or after, every time, no model in the loop. If the hook says no, the tool doesn't run. That's the difference between "it usually does" and "it can't not."

  2. 02
    Where they fire.

    Before a tool call (block an edit to a file you've frozen, stop a dangerous command), after a tool call (run the linter or the tests every time a file is written, and feed the result back), and at session events like stop or compact. In Claude Code they live in settings.json under hooks.

  3. 03
    What belongs where.

    Context and preferences go in the project file. Procedures go in skills. Anything you'd be upset to see skipped even once goes in a hook: formatting, the test run, "never touch this folder." Keep hooks few and boring. A hook that tries to be clever becomes the thing you debug instead of the agent.

Practice · 15 min

Pick the one rule from your project file you care most about. Turn it into a hook (a post-edit test or lint run is the easy default). Ask the agent to do something that trips it. Add to atoms-card.md: the rule · the hook event · the number.

The number

How many times it fired in your session. Write it on the card with today's date. It's your number, measured today, not a constant.

Want a dedicated workshop for your team? Email me.

Everything else

02
Nothing outside the series yet. This fills in from the channel feed once there's something to list.