From 3671541d6bc540427c321fb2d49b62e52bd4c7c4 Mon Sep 17 00:00:00 2001 From: claude Date: Mon, 22 Jun 2026 19:15:32 -0400 Subject: [PATCH] Fill blog course-link placeholders with the course URL (#76) Co-authored-by: claude Co-committed-by: claude --- blog/01-announcing-the-workflow.md | 2 +- ...-getting-started-the-copy-paste-problem.md | 4 ++-- blog/03-version-control-safety-net.md | 4 ++-- blog/04-version-control-for-words.md | 4 ++-- blog/05-getting-the-ai-out-of-the-browser.md | 4 ++-- blog/06-commit-the-ai-config.md | 2 +- blog/07-branches-sandboxes.md | 4 ++-- blog/08-worktrees-parallel-agents.md | 22 +++++++++---------- blog/09-remotes-and-hosting.md | 6 ++--- blog/10-issues-task-layer.md | 2 +- blog/11-reviewing-code-you-didnt-write.md | 2 +- blog/12-collaboration-humans-and-agents.md | 2 +- blog/13-revert-reset-recovery.md | 4 ++-- blog/14-unit3-automate-checking-shipping.md | 2 +- blog/15-unit4-extend-the-ai.md | 2 +- blog/16-unit5-ai-in-the-loop.md | 2 +- blog/17-capstone-the-full-loop.md | 2 +- blog/README.md | 8 +++++-- 18 files changed, 41 insertions(+), 37 deletions(-) diff --git a/blog/01-announcing-the-workflow.md b/blog/01-announcing-the-workflow.md index 3ba2fe6..26a1c47 100644 --- a/blog/01-announcing-the-workflow.md +++ b/blog/01-announcing-the-workflow.md @@ -72,7 +72,7 @@ One more bit of honesty, because that's how I like to write: the early modules w ## Start here -The course is free and lives here: **[COURSE LINK]**. +The course is free and lives here: **https://git.jpaul.io/justin/ai-workflow-course**. Over the next few weeks I'm going to walk through it here on the blog, roughly a post per module, so you can follow along even if you never clone the repo. Next up: the copy-paste problem in detail, and how to get your workspace set up to fix it. diff --git a/blog/02-getting-started-the-copy-paste-problem.md b/blog/02-getting-started-the-copy-paste-problem.md index ba00a8a..1b52b10 100644 --- a/blog/02-getting-started-the-copy-paste-problem.md +++ b/blog/02-getting-started-the-copy-paste-problem.md @@ -10,7 +10,7 @@ Tags: AI, developer workflow, getting started, terminal, VS Code, # The Copy-Paste Problem (and How to Actually Get Started) -In the [announcement post]([COURSE LINK]) I made the case that the AI writing your code isn't your problem — everything *around* the code is. This post gets specific about that, and then gets you set up to do something about it. It's the first real lesson in [The Workflow]([COURSE LINK]), and it's the one that costs you almost nothing to follow along with. +In the [announcement post](https://git.jpaul.io/justin/ai-workflow-course) I made the case that the AI writing your code isn't your problem — everything *around* the code is. This post gets specific about that, and then gets you set up to do something about it. It's the first real lesson in [The Workflow](https://git.jpaul.io/justin/ai-workflow-course), and it's the one that costs you almost nothing to follow along with. If you've ever built anything with an AI chat assistant beyond a one-off script, the failure I'm about to describe is going to feel uncomfortably familiar. That's the point. Naming it precisely is what makes the fix obvious later. @@ -60,7 +60,7 @@ Here's what to get in place. You'll use all of it for the rest of the course. ### Grab the course materials -Everything you'll run lives in one repo. Grab it once, up front — no tools required beyond a web browser. Open the course home page at **[COURSE LINK]**, use its **Download ZIP** link, and unzip it under your home directory so the `modules/` folder lands somewhere tidy like `~/workflow-course/modules/`. +Everything you'll run lives in one repo. Grab it once, up front — no tools required beyond a web browser. Open the course home page at **https://git.jpaul.io/justin/ai-workflow-course**, use its **Download ZIP** link, and unzip it under your home directory so the `modules/` folder lands somewhere tidy like `~/ai-workflow-course/modules/`. That's it — you now have every module's files locally, including a small running example app called `tasks-app` that the whole course is built around. (There's a cleaner, *updatable* way to get the repo — `git clone` — but that arrives a couple of modules in, once you've actually learned Git. A one-time ZIP is all you need today.) diff --git a/blog/03-version-control-safety-net.md b/blog/03-version-control-safety-net.md index 8cd6e0f..33a4af3 100644 --- a/blog/03-version-control-safety-net.md +++ b/blog/03-version-control-safety-net.md @@ -14,7 +14,7 @@ A few months back I watched an AI confidently delete about an hour of my work in It wasn't. I retyped it from memory. -That's the moment this module exists to kill forever. If you've been following along with [The Workflow]([COURSE LINK]) — my free course on the toolchain *around* AI coding — the last post got you set up and had you feel the three places the copy-paste loop breaks. This post fixes the worst one: no undo, no record, no safety. It's the big one. Almost everything riskier in the rest of the course only becomes safe to attempt *because* of what we install here. +That's the moment this module exists to kill forever. If you've been following along with [The Workflow](https://git.jpaul.io/justin/ai-workflow-course) — my free course on the toolchain *around* AI coding — the last post got you set up and had you feel the three places the copy-paste loop breaks. This post fixes the worst one: no undo, no record, no safety. It's the big one. Almost everything riskier in the rest of the course only becomes safe to attempt *because* of what we install here. And here's my pitch up front: you probably already know this tool, or think you do. It's Git. But I want to convince you to think about it in a way nobody taught me when I learned it — not as the thing you use to push code to GitHub, but as two things you need far more in the AI era than you ever did before. **Undo for the AI. And memory the AI can read back.** @@ -87,7 +87,7 @@ Reading about a safety net is nothing like feeling one catch you. So the lab run **First checkpoint.** In your project folder, turn it into a repo and save your first snapshot: ```bash -cd ~/workflow-course/tasks-app +cd ~/ai-workflow-course/tasks-app git init -b main # first branch named "main" (needs Git 2.28+) git status # everything shows as "untracked" — Git sees it but isn't saving it yet git add . diff --git a/blog/04-version-control-for-words.md b/blog/04-version-control-for-words.md index 2012a4d..ed50f95 100644 --- a/blog/04-version-control-for-words.md +++ b/blog/04-version-control-for-words.md @@ -14,9 +14,9 @@ I want to start with a file I'm genuinely embarrassed about. Somewhere on an old That little graveyard of filenames is what "version control" looked like for me for years. Not for code — I'd long since made peace with Git for code. For *words*. The runbooks, the design docs, the "why did we decide this" notes. All of it lived in Word, on a drive, and every time two of us touched the same file we'd email it back and forth and pray. -Here's the thing I wish someone had told me sooner: prose is the *safest possible place* to learn Git, and learning it there fixes that graveyard for good. That's what this post is about — and it's the first lesson in [The Workflow]([COURSE LINK]) that you can genuinely use on Monday with zero new tools. +Here's the thing I wish someone had told me sooner: prose is the *safest possible place* to learn Git, and learning it there fixes that graveyard for good. That's what this post is about — and it's the first lesson in [The Workflow](https://git.jpaul.io/justin/ai-workflow-course) that you can genuinely use on Monday with zero new tools. -A quick callback for anyone just landing here: in the [last post]([COURSE LINK]) we installed the safety net — Git as *undo for the AI*, a checkpoint you can always get back to. This post takes that same net and points it at something where a mistake costs you absolutely nothing: a markdown document. +A quick callback for anyone just landing here: in the [last post](https://git.jpaul.io/justin/ai-workflow-course) we installed the safety net — Git as *undo for the AI*, a checkpoint you can always get back to. This post takes that same net and points it at something where a mistake costs you absolutely nothing: a markdown document. ## Why words are the perfect practice ground diff --git a/blog/05-getting-the-ai-out-of-the-browser.md b/blog/05-getting-the-ai-out-of-the-browser.md index 2e0c09b..0b9b6f3 100644 --- a/blog/05-getting-the-ai-out-of-the-browser.md +++ b/blog/05-getting-the-ai-out-of-the-browser.md @@ -11,7 +11,7 @@ Tags: AI, developer workflow, agentic tools, git, code review, ter # Let the AI Edit Your Files (Yes, Really — Here's Why It's Safe) -A few posts back I named the thing that makes building software with a chat window feel like work: *you* are the integration layer. The AI hands you text, you copy it, you paste it into the right file, you notice it forgot the second file, you fix that by hand. Describe, copy, paste, run, paste the error back, repeat. We called it the copy-paste loop, and the whole point of [The Workflow]([COURSE LINK]) is to dismantle it. +A few posts back I named the thing that makes building software with a chat window feel like work: *you* are the integration layer. The AI hands you text, you copy it, you paste it into the right file, you notice it forgot the second file, you fix that by hand. Describe, copy, paste, run, paste the error back, repeat. We called it the copy-paste loop, and the whole point of [The Workflow](https://git.jpaul.io/justin/ai-workflow-course) is to dismantle it. This is the post where we actually do that. Not soften it. Not make the pasting a little faster. End it. @@ -62,7 +62,7 @@ The exact clicks differ per tool and drift constantly, so here's the *shape* eve 3. **Point it at the repo.** This is the step with no equivalent in the browser, and it's the entire point. The convention is *the current working directory is the project*: ```bash - cd ~/workflow-course/tasks-app # the repo from earlier modules + cd ~/ai-workflow-course/tasks-app # the repo from earlier modules your-agent # launch from inside the project ``` diff --git a/blog/06-commit-the-ai-config.md b/blog/06-commit-the-ai-config.md index a432888..e0afb2c 100644 --- a/blog/06-commit-the-ai-config.md +++ b/blog/06-commit-the-ai-config.md @@ -16,7 +16,7 @@ The AI would nod (figuratively), do exactly that, and we'd have a great session. This is the fix, and it's almost embarrassingly simple: write the speech down once, put it in a file, and **commit it**. That's the whole module. But the *why* underneath it is bigger than "save yourself some typing," and that's the part I want to talk about. -(New here? This is the next stop in [The Workflow]([COURSE LINK]), my free course on the engineering scaffolding around AI coding. Earlier posts installed version control as a safety net — this one builds on it. You can follow along without having read them.) +(New here? This is the next stop in [The Workflow](https://git.jpaul.io/justin/ai-workflow-course), my free course on the engineering scaffolding around AI coding. Earlier posts installed version control as a safety net — this one builds on it. You can follow along without having read them.) ## The file your tool is already looking for diff --git a/blog/07-branches-sandboxes.md b/blog/07-branches-sandboxes.md index b857d20..ff087ee 100644 --- a/blog/07-branches-sandboxes.md +++ b/blog/07-branches-sandboxes.md @@ -16,7 +16,7 @@ You've got an idea — *rewrite the storage layer*, *try a completely different That hesitation is the tax you pay for not having a sandbox. This post is about removing it. -If you're new here: this is part of [The Workflow]([COURSE LINK]), a free course about all the engineering scaffolding *around* AI-generated code — the version control, the editor integration, the review reflex — that the model itself doesn't give you. A couple of posts back we [installed the safety net]([COURSE LINK]): Git, framed as undo for the AI. That safety net was perfect for *one* bad edit — commit, then `git restore` if the AI makes a mess. Today we go one size up: isolating a *whole line of experimental work* so you can keep it or throw it away as a single unit. That's a branch. +If you're new here: this is part of [The Workflow](https://git.jpaul.io/justin/ai-workflow-course), a free course about all the engineering scaffolding *around* AI-generated code — the version control, the editor integration, the review reflex — that the model itself doesn't give you. A couple of posts back we [installed the safety net](https://git.jpaul.io/justin/ai-workflow-course): Git, framed as undo for the AI. That safety net was perfect for *one* bad edit — commit, then `git restore` if the AI makes a mess. Today we go one size up: isolating a *whole line of experimental work* so you can keep it or throw it away as a single unit. That's a branch. ## What a branch actually is (it's less than you think) @@ -64,7 +64,7 @@ One more thing that feels like magic the first time: when you `git switch` to an Enough theory. The course runs on a tiny example app called `tasks-app` — a little command-line to-do tracker — and this is where branches stop being abstract. Make sure you're on a clean `main` first (`git status` should say "nothing to commit"), then spin up an experiment: ```bash -cd ~/workflow-course/tasks-app +cd ~/ai-workflow-course/tasks-app git switch main git status # must be clean git switch -c experiment/priorities diff --git a/blog/08-worktrees-parallel-agents.md b/blog/08-worktrees-parallel-agents.md index 01a9cc6..761baa5 100644 --- a/blog/08-worktrees-parallel-agents.md +++ b/blog/08-worktrees-parallel-agents.md @@ -16,7 +16,7 @@ I had one agent halfway through adding a feature, and a bug report came in that Within about ninety seconds they were overwriting each other's edits to the same file, neither one aware the other existed. I'd turned two competent agents into one confused mess. The fix wasn't a better prompt or a smarter model. It was a piece of plumbing Git has shipped since 2015 that almost nobody talks about: **worktrees.** -This is the last post in the first unit of [The Workflow]([COURSE LINK]), my free course on the engineering scaffolding that makes AI-assisted coding actually work. In the [last post]([COURSE LINK]) we covered branches — letting one agent try something risky on its own line of history with zero danger to `main`. Worktrees are the natural next step: the move that turns "I run an agent" into "I run *agents*." +This is the last post in the first unit of [The Workflow](https://git.jpaul.io/justin/ai-workflow-course), my free course on the engineering scaffolding that makes AI-assisted coding actually work. In the [last post](https://git.jpaul.io/justin/ai-workflow-course) we covered branches — letting one agent try something risky on its own line of history with zero danger to `main`. Worktrees are the natural next step: the move that turns "I run an agent" into "I run *agents*." ## Where branches alone run out @@ -54,14 +54,14 @@ The branch was never the problem. The single working directory is. You need two `git worktree` gives you exactly that: **additional working directories attached to the same repository, each with its own checked-out branch.** One repo, many checkouts. ```bash -cd ~/workflow-course/tasks-app +cd ~/ai-workflow-course/tasks-app git worktree add ../tasks-app-remaining -b feature/remaining ``` -That creates a brand-new folder, `~/workflow-course/tasks-app-remaining`, with a full checkout of your project on a new branch. Your original folder is untouched, still on its own branch. You now have two real directories you can `cd` into, edit, and run independently: +That creates a brand-new folder, `~/ai-workflow-course/tasks-app-remaining`, with a full checkout of your project on a new branch. Your original folder is untouched, still on its own branch. You now have two real directories you can `cd` into, edit, and run independently: ``` -~/workflow-course/ +~/ai-workflow-course/ tasks-app/ ← the "main" worktree, on main tasks-app-remaining/ ← a "linked" worktree, on feature/remaining ``` @@ -86,9 +86,9 @@ And `git worktree list` is the map: ```bash $ git worktree list -/home/you/workflow-course/tasks-app a1b2c3d [main] -/home/you/workflow-course/tasks-app-wipe 7g8h9i0 [feature/wipe] -/home/you/workflow-course/tasks-app-remaining d4e5f6a [feature/remaining] +/home/you/ai-workflow-course/tasks-app a1b2c3d [main] +/home/you/ai-workflow-course/tasks-app-wipe 7g8h9i0 [feature/wipe] +/home/you/ai-workflow-course/tasks-app-remaining d4e5f6a [feature/remaining] ``` Three folders, one repo, three branches checked out at once. No stashing, no switching, no collisions. @@ -110,7 +110,7 @@ You don't reach for worktrees because you read about them. You reach for them th The course lab has you run two AI sessions *simultaneously* on the `tasks-app` — one adding a `wipe` command, one adding `remaining` — each in its own worktree. Set up: ```bash -cd ~/workflow-course/tasks-app +cd ~/ai-workflow-course/tasks-app git worktree add ../tasks-app-wipe -b feature/wipe git worktree add ../tasks-app-remaining -b feature/remaining git worktree list @@ -119,14 +119,14 @@ git worktree list Then you point one editor/AI session at `tasks-app-wipe` and a second at `tasks-app-remaining`, and let both work at the same time. While they run, you can prove the isolation from a third terminal: ```bash -cd ~/workflow-course/tasks-app-wipe && python cli.py add "from worktree A" && python cli.py list -cd ~/workflow-course/tasks-app-remaining && python cli.py add "from worktree B" && python cli.py list +cd ~/ai-workflow-course/tasks-app-wipe && python cli.py add "from worktree A" && python cli.py list +cd ~/ai-workflow-course/tasks-app-remaining && python cli.py add "from worktree B" && python cli.py list ``` Each `list` shows only its own task. Worktree A never sees "from worktree B." Each worktree even has its own `tasks.json` runtime state — separate files, separate state, while both agents work. Total isolation. When they're done, each commit lands on its own branch, and bringing both home is trivial because it's all already in one repo: ```bash -cd ~/workflow-course/tasks-app +cd ~/ai-workflow-course/tasks-app git switch main git merge feature/wipe git merge feature/remaining diff --git a/blog/09-remotes-and-hosting.md b/blog/09-remotes-and-hosting.md index 4105bf2..3903933 100644 --- a/blog/09-remotes-and-hosting.md +++ b/blog/09-remotes-and-hosting.md @@ -15,7 +15,7 @@ I run my own Git forge. Not GitHub — an actual server I keep at `git.jpaul.io` I'm telling you that up front not to flex, but because this post is the one where I'm most in my own wheelhouse, and I want you to know the punchline before I prove it: **it does not matter where you push.** GitHub, GitLab, a box in my closet — the commands are identical, and the reason they're identical is the whole lesson. -This post opens Unit 2 of [The Workflow]([COURSE LINK]) — the team layer. Up to now the course has been about getting *you* and your AI working safely on one machine: version control as undo, the AI editing real files, your config committed as a durable artifact. All of that lives on one disk. This module gets it *off* that disk. If you've been following along, this is the moment the safety net stops being local. +This post opens Unit 2 of [The Workflow](https://git.jpaul.io/justin/ai-workflow-course) — the team layer. Up to now the course has been about getting *you* and your AI working safely on one machine: version control as undo, the AI editing real files, your config committed as a durable artifact. All of that lives on one disk. This module gets it *off* that disk. If you've been following along, this is the moment the safety net stops being local. ## A remote is just another copy @@ -42,7 +42,7 @@ git clone # make a brand-new local copy, full history and al The one thing those commands assume is that a remote repo *exists* to push into. On every host the shape is identical: in the web UI, create a **new, empty** repository — do **not** let it add a README, license, or `.gitignore`, because you want your local history to be the first thing that lands in it. Copy the URL it hands you (HTTPS or SSH), then: ```bash -cd ~/workflow-course/tasks-app +cd ~/ai-workflow-course/tasks-app git remote add origin git push -u origin main ``` @@ -103,7 +103,7 @@ A four-person team pushing to one remote is sitting on five-plus complete, indep You can watch it happen with your own eyes in the lab. Push your `tasks-app`, then clone it into a separate directory as if you were a teammate on a fresh machine, and count the commits in each: ```bash -cd ~/workflow-course +cd ~/ai-workflow-course git clone tasks-app-teammate cd tasks-app-teammate git log --oneline | wc -l # compare to your original repo — they match diff --git a/blog/10-issues-task-layer.md b/blog/10-issues-task-layer.md index 090ad5a..8d26eef 100644 --- a/blog/10-issues-task-layer.md +++ b/blog/10-issues-task-layer.md @@ -16,7 +16,7 @@ Git only ever tells you what *happened*. Settled history, and whatever's in flig For most people, the honest answer is: in their head, a Slack thread, and a chat tab they'll lose. Which is exactly the evaporating-memory problem we just spent all that effort fixing, sneaking back in through a side door. -This post is about the durable home for that forward-looking work. It's the next module in [The Workflow]([COURSE LINK]), and the tool is one you already half-know under a different name: the issue tracker. +This post is about the durable home for that forward-looking work. It's the next module in [The Workflow](https://git.jpaul.io/justin/ai-workflow-course), and the tool is one you already half-know under a different name: the issue tracker. ## An issue is just a written unit of work that lives next to the code diff --git a/blog/11-reviewing-code-you-didnt-write.md b/blog/11-reviewing-code-you-didnt-write.md index 37539b6..73845ce 100644 --- a/blog/11-reviewing-code-you-didnt-write.md +++ b/blog/11-reviewing-code-you-didnt-write.md @@ -14,7 +14,7 @@ Here's a thing I had to unlearn the hard way: I'd spent years using how *clean* Then I started reviewing code an AI wrote, and that instinct walked me straight into a wall. -This is the eleventh post in my walk through [The Workflow]([COURSE LINK]), my free course on the toolchain *around* AI coding. And I'll say this plainly, the way the course does: reviewing a diff you didn't write is one of the most important and least-taught skills in this whole space. If you take one habit from the entire series, I'd be tempted to point at this one. So this post gets the weight it deserves. +This is the eleventh post in my walk through [The Workflow](https://git.jpaul.io/justin/ai-workflow-course), my free course on the toolchain *around* AI coding. And I'll say this plainly, the way the course does: reviewing a diff you didn't write is one of the most important and least-taught skills in this whole space. If you take one habit from the entire series, I'd be tempted to point at this one. So this post gets the weight it deserves. ## Why your review instinct is now lying to you diff --git a/blog/12-collaboration-humans-and-agents.md b/blog/12-collaboration-humans-and-agents.md index c417880..b23bf12 100644 --- a/blog/12-collaboration-humans-and-agents.md +++ b/blog/12-collaboration-humans-and-agents.md @@ -16,7 +16,7 @@ So here's the thing I want you to see in this post, because once you see it you That's not a cute observation. It's the most useful property of the whole system right now. The exact tooling you learned to coordinate human teammates turns out to be the tooling that lets you safely put an agent to work. Same loop. Same gate. Same rules. Let me walk you through it — and then point at the spot where some of the "contributors" running through it are machines, and it doesn't matter one bit. -(New here? This is part of [The Workflow]([COURSE LINK]), a free course about the engineering scaffolding around AI coding. You can read this one standalone, but if "file an issue" or "open a PR" feels fuzzy, the earlier posts have you covered.) +(New here? This is part of [The Workflow](https://git.jpaul.io/justin/ai-workflow-course), a free course about the engineering scaffolding around AI coding. You can read this one standalone, but if "file an issue" or "open a PR" feels fuzzy, the earlier posts have you covered.) ## Two loops, not one diff --git a/blog/13-revert-reset-recovery.md b/blog/13-revert-reset-recovery.md index 6d8bc1e..5c39089 100644 --- a/blog/13-revert-reset-recovery.md +++ b/blog/13-revert-reset-recovery.md @@ -14,7 +14,7 @@ Let me paint you a picture I've actually lived. You hand an agent a tidy little Your pulse does a thing. -Here's what I want you to take from this post: that moment is survivable, and which command you reach for *next* is the entire ballgame. Recovery is its own discipline — not a vibe, not Ctrl-Z mashing, but a small set of tools where picking the right one is the difference between a clean five-second fix and force-pushing your teammate's work into the void. This is the last stop in Unit 2 of [The Workflow]([COURSE LINK]), my free course for IT folks who can already get an AI to write code but keep getting bitten by everything *around* it. Back in the earlier posts we installed the safety net — version control as undo for the AI. This is the day you learn to actually *use* the net when you fall. +Here's what I want you to take from this post: that moment is survivable, and which command you reach for *next* is the entire ballgame. Recovery is its own discipline — not a vibe, not Ctrl-Z mashing, but a small set of tools where picking the right one is the difference between a clean five-second fix and force-pushing your teammate's work into the void. This is the last stop in Unit 2 of [The Workflow](https://git.jpaul.io/justin/ai-workflow-course), my free course for IT folks who can already get an AI to write code but keep getting bitten by everything *around* it. Back in the earlier posts we installed the safety net — version control as undo for the AI. This is the day you learn to actually *use* the net when you fall. ## Three undos, three blast radii @@ -109,7 +109,7 @@ The habit worth building: **before you turn an agent loose on a large, sweeping ## Try it for real (the part that sticks) -Reading about this is nothing like doing it, so the [course lab]([COURSE LINK]) has you stage the disaster on purpose, on the little `tasks-app` we use throughout. The short version, abridged: +Reading about this is nothing like doing it, so the [course lab](https://git.jpaul.io/justin/ai-workflow-course) has you stage the disaster on purpose, on the little `tasks-app` we use throughout. The short version, abridged: ```bash # Part A — merge a bad change, then revert the merge diff --git a/blog/14-unit3-automate-checking-shipping.md b/blog/14-unit3-automate-checking-shipping.md index 43f7d79..acdf372 100644 --- a/blog/14-unit3-automate-checking-shipping.md +++ b/blog/14-unit3-automate-checking-shipping.md @@ -12,7 +12,7 @@ Tags: AI, CI/CD, testing, security scanning, containers, secrets, Here's a thing that should worry you a little more than it does: AI is *fast*, and most of what makes it fast also makes it dangerous. It writes a function in three seconds. It also writes a *wrong* function in three seconds, one that reads beautifully, uses the right names, follows your conventions, and ships a flipped comparison you'll never catch by skimming. The generation got cheap. The *catching* didn't — unless you make it. -That's this whole unit, and it's the post where [The Workflow]([COURSE LINK]) shifts gears. The first half of the course was about getting out of the chat window and making your work shareable and recoverable — Git as undo for the AI, hosting, review. Useful, foundational, a little slow-burn. This is where it speeds up. Seven modules, one job: **build the machine that checks AI's work and ships it, automatically, so AI's speed becomes shipped software instead of shipped risk.** +That's this whole unit, and it's the post where [The Workflow](https://git.jpaul.io/justin/ai-workflow-course) shifts gears. The first half of the course was about getting out of the chat window and making your work shareable and recoverable — Git as undo for the AI, hosting, review. Useful, foundational, a little slow-burn. This is where it speeds up. Seven modules, one job: **build the machine that checks AI's work and ships it, automatically, so AI's speed becomes shipped software instead of shipped risk.** If you run infrastructure for a living, the punchline lands early and it lands hard, so I'll spoil it now: by the end of this unit you own a pipeline end to end. Tests, gates, containers, deploys, and the actual compute underneath. Not "I use someone's CI." *Yours.* Let me walk the arc. diff --git a/blog/15-unit4-extend-the-ai.md b/blog/15-unit4-extend-the-ai.md index 065cdf8..0d64026 100644 --- a/blog/15-unit4-extend-the-ai.md +++ b/blog/15-unit4-extend-the-ai.md @@ -14,7 +14,7 @@ I'll admit this is the unit I was most excited to write, because it's the part I So if the earlier units felt like careful infrastructure homework — version control, branches, review, CI — this is where it starts to feel like the future you were promised. Up to now everything we did kept the AI inside one box: **files in your repo.** It could read them, edit them, commit them. That's a lot. But the moment your question pointed one inch outside that box, the AI went blind. -This is the arc of **Unit 4 of [The Workflow]([COURSE LINK])** — four modules that take the AI from "edits my files" to "operates in my world." MCP gives it hands. Skills teach those hands a playbook. Then we secure the whole thing, because the day you give an AI hands is the day a stranger's code can use them. And finally we point all of it at the hardest, most common target there is: a giant codebase you didn't write. If you're new here, the [first post]([COURSE LINK]) lays out the thesis; this one stands on its own. +This is the arc of **Unit 4 of [The Workflow](https://git.jpaul.io/justin/ai-workflow-course)** — four modules that take the AI from "edits my files" to "operates in my world." MCP gives it hands. Skills teach those hands a playbook. Then we secure the whole thing, because the day you give an AI hands is the day a stranger's code can use them. And finally we point all of it at the hardest, most common target there is: a giant codebase you didn't write. If you're new here, the [first post](https://git.jpaul.io/justin/ai-workflow-course) lays out the thesis; this one stands on its own. ## MCP: the wall, and the way through it diff --git a/blog/16-unit5-ai-in-the-loop.md b/blog/16-unit5-ai-in-the-loop.md index 366fdc3..f83bde4 100644 --- a/blog/16-unit5-ai-in-the-loop.md +++ b/blog/16-unit5-ai-in-the-loop.md @@ -14,7 +14,7 @@ For fifteen posts now I've been telling you to keep the AI on a short leash. Rev This is the post where I tell you to walk away and let it work. -Not because the leash was wrong — because the leash is exactly what makes walking away safe. That's the whole idea of Unit 5 of [The Workflow]([COURSE LINK]), the final unit before the capstone, and it's the part people skip straight to and then wonder why it goes badly. They want the agent that fixes its own failing build at 3am. They don't want the eight modules of review reflexes, CI gates, security scanning, and recovery muscle that are the *only reason* that agent isn't a liability. You can't have the second thing without the first. The whole back half of this course was load-bearing for this exact moment. +Not because the leash was wrong — because the leash is exactly what makes walking away safe. That's the whole idea of Unit 5 of [The Workflow](https://git.jpaul.io/justin/ai-workflow-course), the final unit before the capstone, and it's the part people skip straight to and then wonder why it goes badly. They want the agent that fixes its own failing build at 3am. They don't want the eight modules of review reflexes, CI gates, security scanning, and recovery muscle that are the *only reason* that agent isn't a liability. You can't have the second thing without the first. The whole back half of this course was load-bearing for this exact moment. So let me walk you up the ladder, because Unit 5 is a ladder — four modules, each handing the AI a little more rope, and each rung only reachable because the one below it held. diff --git a/blog/17-capstone-the-full-loop.md b/blog/17-capstone-the-full-loop.md index 5cc1b92..371ffbe 100644 --- a/blog/17-capstone-the-full-loop.md +++ b/blog/17-capstone-the-full-loop.md @@ -86,6 +86,6 @@ We started seventeen posts ago with a loop that broke at three seams, and a prom The model wrote the code. **You built the workflow that made the code matter** — and that's the part that's still yours when the next model ships, and the one after that. -So here's my actual ask, and it's the last one. If you've only been reading along here on the blog: go take [The Workflow]([COURSE LINK]). It's free, it's self-paced, every module ends at a concrete "you're done when," and the capstone above is waiting for you at the end of it. And when you've shipped your own version of this loop — your own feature, your own three surfaces, your own green pipeline — come back and **tell me what you built.** Drop it in the comments. I read every one of them, and watching people close their own copy-paste loop is genuinely the whole reason I made this. +So here's my actual ask, and it's the last one. If you've only been reading along here on the blog: go take [The Workflow](https://git.jpaul.io/justin/ai-workflow-course). It's free, it's self-paced, every module ends at a concrete "you're done when," and the capstone above is waiting for you at the end of it. And when you've shipped your own version of this loop — your own feature, your own three surfaces, your own green pipeline — come back and **tell me what you built.** Drop it in the comments. I read every one of them, and watching people close their own copy-paste loop is genuinely the whole reason I made this. Go build something. Then ship it the right way. diff --git a/blog/README.md b/blog/README.md index 9d82c6d..9e4714a 100644 --- a/blog/README.md +++ b/blog/README.md @@ -47,7 +47,11 @@ alt title in its metadata block. ## Before publishing — checklist -- Replace every `[COURSE LINK]` placeholder with the public course URL (the GitHub mirror - once it's live, or the git.jpaul.io repo). +- [x] `[COURSE LINK]` placeholders filled with the course URL + `https://git.jpaul.io/justin/ai-workflow-course`. At public launch: (a) if the GitHub + mirror becomes the public home, swap these to the mirror URL; (b) inline cross-post + references ("announcement post", "last post", "course lab") currently all point at the + course home — repoint them to the specific jpaul.me post URLs (or wiki module pages) + once those exist. - Fill every `[insert a screenshot referencing XYZ here]` placeholder with a real image. - Decide whether to keep or strip the top-of-file metadata comment block.