Update learner working-dir path to ~/ai-workflow-course after rename #73
+1
-1
@@ -149,7 +149,7 @@ account, and a working Docker install.
|
|||||||
2. Branch off `main`, named for the issue:
|
2. Branch off `main`, named for the issue:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git switch main && git pull
|
git switch main && git pull
|
||||||
git switch -c 47-due-dates # use your real issue number
|
git switch -c 47-due-dates # use your real issue number
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ beyond a web browser:
|
|||||||
1. Open the course's home page — **`https://git.jpaul.io/justin/ai-workflow-course`** — and use its
|
1. Open the course's home page — **`https://git.jpaul.io/justin/ai-workflow-course`** — and use its
|
||||||
**Download ZIP** (archive) link.
|
**Download ZIP** (archive) link.
|
||||||
2. Unzip it under your home directory so the course's `modules/` folder lands at
|
2. Unzip it under your home directory so the course's `modules/` folder lands at
|
||||||
`~/workflow-course/modules/`. (Rename the unzipped folder to `workflow-course` if your download
|
`~/ai-workflow-course/modules/`. (Rename the unzipped folder to `ai-workflow-course` if your download
|
||||||
named it something else.)
|
named it something else.)
|
||||||
|
|
||||||
You now have every module's files locally, including this one's under
|
You now have every module's files locally, including this one's under
|
||||||
@@ -168,8 +168,8 @@ You now have every module's files locally, including this one's under
|
|||||||
1. Make a working directory and copy in the starter app from this module's `lab/starter/` folder:
|
1. Make a working directory and copy in the starter app from this module's `lab/starter/` folder:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir -p ~/workflow-course/tasks-app
|
mkdir -p ~/ai-workflow-course/tasks-app
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
# copy the three files from modules/01-the-copy-paste-problem/lab/starter/ into here:
|
# copy the three files from modules/01-the-copy-paste-problem/lab/starter/ into here:
|
||||||
# tasks.py cli.py README.md
|
# tasks.py cli.py README.md
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ and your AI assistant.
|
|||||||
1. In your project folder, initialize the repo and make the first commit:
|
1. In your project folder, initialize the repo and make the first commit:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git init -b main # start the repo with its first branch named "main" (Git 2.28+)
|
git init -b main # start the repo with its first branch named "main" (Git 2.28+)
|
||||||
git status # everything shows as "untracked" — Git sees the files but isn't saving them yet
|
git status # everything shows as "untracked" — Git sees the files but isn't saving them yet
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ zero.
|
|||||||
1. Confirm you're starting clean, then create a branch for the ADR:
|
1. Confirm you're starting clean, then create a branch for the ADR:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git status # want: "working tree clean"
|
git status # want: "working tree clean"
|
||||||
git switch -c docs/adr-storage # new branch, named for what it's for
|
git switch -c docs/adr-storage # new branch, named for what it's for
|
||||||
git branch # the * shows you're on docs/adr-storage now
|
git branch # the * shows you're on docs/adr-storage now
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ a model/provider here, this is where the BYO-model choice from above gets made.
|
|||||||
whole point. The convention is **the current working directory is the project**:
|
whole point. The convention is **the current working directory is the project**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app # the repo from Modules 1–2
|
cd ~/ai-workflow-course/tasks-app # the repo from Modules 1–2
|
||||||
your-agent # launch it from inside the project
|
your-agent # launch it from inside the project
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -279,7 +279,7 @@ copy-paste loop back in Module 1, now done right.
|
|||||||
|
|
||||||
1. Install the tool and authenticate it (steps 1–2 in "Wiring it up").
|
1. Install the tool and authenticate it (steps 1–2 in "Wiring it up").
|
||||||
|
|
||||||
2. Point it at the repo (step 3): `cd ~/workflow-course/tasks-app` and launch the agentic CLI from
|
2. Point it at the repo (step 3): `cd ~/ai-workflow-course/tasks-app` and launch the agentic CLI from
|
||||||
there, **or** open that folder in your editor and open the assistant's agent panel.
|
there, **or** open that folder in your editor and open the assistant's agent panel.
|
||||||
|
|
||||||
3. **Confirm read access** (step 4). Ask:
|
3. **Confirm read access** (step 4). Ask:
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ editor-integrated AI (Module 4) for the part where the AI obeys the file.
|
|||||||
(If your tool reads several names, copy it to each, or symlink them.)
|
(If your tool reads several names, copy it to each, or symlink them.)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
# replace <YOUR_TOOL_FILE> with the name your tool actually reads:
|
# replace <YOUR_TOOL_FILE> with the name your tool actually reads:
|
||||||
cp /path/to/modules/05-commit-the-ai-config/lab/instructions-file-starter.md <YOUR_TOOL_FILE>
|
cp /path/to/modules/05-commit-the-ai-config/lab/instructions-file-starter.md <YOUR_TOOL_FILE>
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ deliberately create and resolve a merge conflict — using the AI to help resolv
|
|||||||
1. Confirm you're on `main` and clean, then create an experiment branch and switch to it:
|
1. Confirm you're on `main` and clean, then create an experiment branch and switch to it:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git switch main
|
git switch main
|
||||||
git status # must be clean
|
git status # must be clean
|
||||||
git switch -c experiment/priorities
|
git switch -c experiment/priorities
|
||||||
|
|||||||
@@ -94,17 +94,17 @@ The branch was never the problem. The single working directory is. You need two
|
|||||||
repository, each with its own checked-out branch.** One repo, many checkouts.
|
repository, each with its own checked-out branch.** One repo, many checkouts.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app # your existing repo from Module 2
|
cd ~/ai-workflow-course/tasks-app # your existing repo from Module 2
|
||||||
git worktree add ../tasks-app-remaining -b feature/remaining
|
git worktree add ../tasks-app-remaining -b feature/remaining
|
||||||
```
|
```
|
||||||
|
|
||||||
That command creates a brand-new folder, `~/workflow-course/tasks-app-remaining`, containing a full
|
That command creates a brand-new folder, `~/ai-workflow-course/tasks-app-remaining`, containing a full
|
||||||
checkout of your project on a new branch `feature/remaining`. Your original folder is untouched,
|
checkout of your project on a new branch `feature/remaining`. Your original folder is untouched,
|
||||||
still on its own branch. You now have two real directories you can `cd` into, edit, and run
|
still on its own branch. You now have two real directories you can `cd` into, edit, and run
|
||||||
independently:
|
independently:
|
||||||
|
|
||||||
```
|
```
|
||||||
~/workflow-course/
|
~/ai-workflow-course/
|
||||||
tasks-app/ ← the "main" worktree, on (say) main
|
tasks-app/ ← the "main" worktree, on (say) main
|
||||||
tasks-app-remaining/ ← a "linked" worktree, on feature/remaining
|
tasks-app-remaining/ ← a "linked" worktree, on feature/remaining
|
||||||
```
|
```
|
||||||
@@ -150,9 +150,9 @@ git worktree prune # forget worktrees whose folders were
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ git worktree list
|
$ git worktree list
|
||||||
/home/you/workflow-course/tasks-app a1b2c3d [main]
|
/home/you/ai-workflow-course/tasks-app a1b2c3d [main]
|
||||||
/home/you/workflow-course/tasks-app-remaining d4e5f6a [feature/remaining]
|
/home/you/ai-workflow-course/tasks-app-remaining d4e5f6a [feature/remaining]
|
||||||
/home/you/workflow-course/tasks-app-wipe 7g8h9i0 [feature/wipe]
|
/home/you/ai-workflow-course/tasks-app-wipe 7g8h9i0 [feature/wipe]
|
||||||
```
|
```
|
||||||
|
|
||||||
Three folders, one repo, three branches checked out simultaneously. No stashing, no switching, no
|
Three folders, one repo, three branches checked out simultaneously. No stashing, no switching, no
|
||||||
@@ -241,7 +241,7 @@ branch edit the usage line. (The `sed … > tmp && mv` is just a portable, copy-
|
|||||||
the edit an agent would make.) In your `tasks-app`:
|
the edit an agent would make.) In your `tasks-app`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
|
|
||||||
# Agent A's branch: add `wipe` to the usage line and commit it.
|
# Agent A's branch: add `wipe` to the usage line and commit it.
|
||||||
git switch -c feature/wipe
|
git switch -c feature/wipe
|
||||||
@@ -301,17 +301,17 @@ git worktree list # should show main + feature/wipe + feature/remaining
|
|||||||
|
|
||||||
This is the part to actually *do simultaneously*, not one then the other.
|
This is the part to actually *do simultaneously*, not one then the other.
|
||||||
|
|
||||||
1. Open `~/workflow-course/tasks-app-wipe` in one editor/AI session. Give it the prompt in
|
1. Open `~/ai-workflow-course/tasks-app-wipe` in one editor/AI session. Give it the prompt in
|
||||||
`lab/agent-a-prompt.md` — *add a `wipe` command that removes all tasks.*
|
`lab/agent-a-prompt.md` — *add a `wipe` command that removes all tasks.*
|
||||||
2. Open `~/workflow-course/tasks-app-remaining` in a **second** editor/AI session. Give it the prompt
|
2. Open `~/ai-workflow-course/tasks-app-remaining` in a **second** editor/AI session. Give it the prompt
|
||||||
in `lab/agent-b-prompt.md` — *add a `remaining` command that prints the number of pending tasks.*
|
in `lab/agent-b-prompt.md` — *add a `remaining` command that prints the number of pending tasks.*
|
||||||
3. Let both work at the same time. While they run, prove the isolation from a third terminal — but
|
3. Let both work at the same time. While they run, prove the isolation from a third terminal — but
|
||||||
use commands that **already exist**. (`wipe` and `remaining` don't yet; the agents are still
|
use commands that **already exist**. (`wipe` and `remaining` don't yet; the agents are still
|
||||||
writing them.) Give each worktree its own task and list it:
|
writing them.) Give each worktree its own task and list it:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app-wipe && python cli.py add "from worktree A" && python cli.py list
|
cd ~/ai-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-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" and vice versa. Each
|
Each `list` shows only its own task — worktree A never sees "from worktree B" and vice versa. Each
|
||||||
@@ -322,8 +322,8 @@ This is the part to actually *do simultaneously*, not one then the other.
|
|||||||
4. In each worktree, commit the agent's work on its own branch:
|
4. In each worktree, commit the agent's work on its own branch:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app-wipe && git add . && git commit -m "Add wipe command"
|
cd ~/ai-workflow-course/tasks-app-wipe && git add . && git commit -m "Add wipe command"
|
||||||
cd ~/workflow-course/tasks-app-remaining && git add . && git commit -m "Add remaining command"
|
cd ~/ai-workflow-course/tasks-app-remaining && git add . && git commit -m "Add remaining command"
|
||||||
```
|
```
|
||||||
|
|
||||||
Two agents, two commits, two branches — neither ever saw the other's files.
|
Two agents, two commits, two branches — neither ever saw the other's files.
|
||||||
@@ -331,8 +331,8 @@ This is the part to actually *do simultaneously*, not one then the other.
|
|||||||
5. *Now* the new commands exist — run each in its own worktree to watch it work:
|
5. *Now* the new commands exist — run each in its own worktree to watch it work:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app-wipe && python cli.py wipe # agent A's new command
|
cd ~/ai-workflow-course/tasks-app-wipe && python cli.py wipe # agent A's new command
|
||||||
cd ~/workflow-course/tasks-app-remaining && python cli.py remaining # agent B's new command
|
cd ~/ai-workflow-course/tasks-app-remaining && python cli.py remaining # agent B's new command
|
||||||
```
|
```
|
||||||
|
|
||||||
`remaining` counts a single pending task — the one you added to worktree B in step 3 — because B's
|
`remaining` counts a single pending task — the one you added to worktree B in step 3 — because B's
|
||||||
@@ -343,7 +343,7 @@ This is the part to actually *do simultaneously*, not one then the other.
|
|||||||
Bring both features home to `main` in your original worktree:
|
Bring both features home to `main` in your original worktree:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git switch main
|
git switch main
|
||||||
git merge feature/wipe
|
git merge feature/wipe
|
||||||
git merge feature/remaining
|
git merge feature/remaining
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ the shape is the same:
|
|||||||
3. Point your local repo at it and push:
|
3. Point your local repo at it and push:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git remote add origin <URL-you-copied>
|
git remote add origin <URL-you-copied>
|
||||||
git push -u origin main
|
git push -u origin main
|
||||||
```
|
```
|
||||||
@@ -313,7 +313,7 @@ WSL, or Git Bash on Windows. Continues the `tasks-app` repo from Module 2.
|
|||||||
2. Point your repo at the remote and push:
|
2. Point your repo at the remote and push:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git remote -v # probably empty — no remote yet
|
git remote -v # probably empty — no remote yet
|
||||||
git remote add origin <URL> # paste the URL you copied
|
git remote add origin <URL> # paste the URL you copied
|
||||||
git remote -v # now origin shows, for fetch and push
|
git remote -v # now origin shows, for fetch and push
|
||||||
@@ -346,7 +346,7 @@ independent* copy, history and all — not a snapshot.
|
|||||||
5. Now clone the remote into a *separate* directory, as if you were a teammate on a fresh machine:
|
5. Now clone the remote into a *separate* directory, as if you were a teammate on a fresh machine:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course
|
cd ~/ai-workflow-course
|
||||||
git clone <URL> tasks-app-teammate
|
git clone <URL> tasks-app-teammate
|
||||||
cd tasks-app-teammate
|
cd tasks-app-teammate
|
||||||
git log --oneline # the ENTIRE history is here — every commit, not just the latest
|
git log --oneline # the ENTIRE history is here — every commit, not just the latest
|
||||||
@@ -360,7 +360,7 @@ independent* copy, history and all — not a snapshot.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# from your original repo:
|
# from your original repo:
|
||||||
bash ~/workflow-course/tasks-app/verify-backup.sh # (copied from lab/verify-backup.sh)
|
bash ~/ai-workflow-course/tasks-app/verify-backup.sh # (copied from lab/verify-backup.sh)
|
||||||
```
|
```
|
||||||
|
|
||||||
The script confirms (a) you have a remote configured, (b) your local branch is fully pushed
|
The script confirms (a) you have a remote configured, (b) your local branch is fully pushed
|
||||||
@@ -379,7 +379,7 @@ independent* copy, history and all — not a snapshot.
|
|||||||
7. Edit the README in your *teammate* clone, commit, and push from there:
|
7. Edit the README in your *teammate* clone, commit, and push from there:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app-teammate
|
cd ~/ai-workflow-course/tasks-app-teammate
|
||||||
# edit README.md, then:
|
# edit README.md, then:
|
||||||
git add . && git commit -m "Note the remote in the README"
|
git add . && git commit -m "Note the remote in the README"
|
||||||
git push
|
git push
|
||||||
@@ -388,7 +388,7 @@ independent* copy, history and all — not a snapshot.
|
|||||||
8. Back in your *original* repo, pull it down:
|
8. Back in your *original* repo, pull it down:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git fetch # download the new commit, but don't merge yet
|
git fetch # download the new commit, but don't merge yet
|
||||||
git log main..origin/main # SEE exactly what's incoming before you take it
|
git log main..origin/main # SEE exactly what's incoming before you take it
|
||||||
git pull # now merge it into your local main
|
git pull # now merge it into your local main
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ real change, then review a diff the "AI" produced and catch the trap planted in
|
|||||||
place of `/path/to/`, the same copy-it-in move from Module 5.)
|
place of `/path/to/`, the same copy-it-in move from Module 5.)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir -p ~/workflow-course/review-lab && cd ~/workflow-course/review-lab
|
mkdir -p ~/ai-workflow-course/review-lab && cd ~/ai-workflow-course/review-lab
|
||||||
cp /path/to/modules/10-reviewing-code-you-didnt-write/lab/tasks-app/*.py .
|
cp /path/to/modules/10-reviewing-code-you-didnt-write/lab/tasks-app/*.py .
|
||||||
printf 'tasks.json\n__pycache__/\n' > .gitignore # keep generated runtime state out of your review diffs (Module 2)
|
printf 'tasks.json\n__pycache__/\n' > .gitignore # keep generated runtime state out of your review diffs (Module 2)
|
||||||
git init -qb main && git add . && git commit -qm "base: tasks-app" # -b main so the git switch main / git diff main.. steps below resolve
|
git init -qb main && git add . && git commit -qm "base: tasks-app" # -b main so the git switch main / git diff main.. steps below resolve
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ do them once on purpose now.
|
|||||||
1. Make sure you're on a clean `main`:
|
1. Make sure you're on a clean `main`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git switch main
|
git switch main
|
||||||
git status # should be clean
|
git status # should be clean
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ your machine first.
|
|||||||
run both checks exactly as CI will:
|
run both checks exactly as CI will:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
pip install ruff
|
pip install ruff
|
||||||
python -m unittest # should report all tests passing
|
python -m unittest # should report all tests passing
|
||||||
ruff check . # should report no issues (or fix what it flags)
|
ruff check . # should report no issues (or fix what it flags)
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ containerize and run the app you already have.
|
|||||||
Dockerfile top to bottom — every line is commented. Then build:
|
Dockerfile top to bottom — every line is commented. Then build:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
docker build -t tasks-app .
|
docker build -t tasks-app .
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ config per environment.
|
|||||||
the before-picture:
|
the before-picture:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
python sync.py
|
python sync.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ is the one that lands the concept.
|
|||||||
> global `pip install` is refused on purpose. The clean fix is a virtual environment per project:
|
> global `pip install` is refused on purpose. The clean fix is a virtual environment per project:
|
||||||
>
|
>
|
||||||
> ```bash
|
> ```bash
|
||||||
> cd ~/workflow-course/tasks-app
|
> cd ~/ai-workflow-course/tasks-app
|
||||||
> python3 -m venv .venv # one-time
|
> python3 -m venv .venv # one-time
|
||||||
> source .venv/bin/activate # Windows: .venv\Scripts\activate
|
> source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||||
> python3 -m pip install "mcp[cli]"
|
> python3 -m pip install "mcp[cli]"
|
||||||
@@ -266,7 +266,7 @@ is the one that lands the concept.
|
|||||||
> - **The install interpreter must match the config's launch command.** Your MCP client starts the
|
> - **The install interpreter must match the config's launch command.** Your MCP client starts the
|
||||||
> server by running the `"command"` in its config — *not* your activated shell — so activating a
|
> server by running the `"command"` in its config — *not* your activated shell — so activating a
|
||||||
> venv does nothing to help the client find the SDK. You must point `"command"` at the venv's
|
> venv does nothing to help the client find the SDK. You must point `"command"` at the venv's
|
||||||
> **absolute** python path (e.g. `~/workflow-course/tasks-app/.venv/bin/python`, or
|
> **absolute** python path (e.g. `~/ai-workflow-course/tasks-app/.venv/bin/python`, or
|
||||||
> `...\.venv\Scripts\python.exe` on Windows). If they don't match, the server dies on `import mcp`
|
> `...\.venv\Scripts\python.exe` on Windows). If they don't match, the server dies on `import mcp`
|
||||||
> and your tool just says "not connected" with no obvious reason — the exact failure this lab is
|
> and your tool just says "not connected" with no obvious reason — the exact failure this lab is
|
||||||
> about avoiding.
|
> about avoiding.
|
||||||
@@ -274,7 +274,7 @@ is the one that lands the concept.
|
|||||||
> Before wiring anything, verify with the *same* interpreter the config will launch:
|
> Before wiring anything, verify with the *same* interpreter the config will launch:
|
||||||
>
|
>
|
||||||
> ```bash
|
> ```bash
|
||||||
> ~/workflow-course/tasks-app/.venv/bin/python -c "import mcp; print('mcp ok')"
|
> ~/ai-workflow-course/tasks-app/.venv/bin/python -c "import mcp; print('mcp ok')"
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
### Part A — Connect an existing server (optional warm-up, ~10 min)
|
### Part A — Connect an existing server (optional warm-up, ~10 min)
|
||||||
@@ -348,8 +348,8 @@ That's the entire client/server loop, end to end, with zero code you wrote. Now
|
|||||||
|
|
||||||
```json
|
```json
|
||||||
"tasks": {
|
"tasks": {
|
||||||
"command": "/ABSOLUTE/PATH/TO/workflow-course/tasks-app/.venv/bin/python",
|
"command": "/ABSOLUTE/PATH/TO/ai-workflow-course/tasks-app/.venv/bin/python",
|
||||||
"args": ["/ABSOLUTE/PATH/TO/workflow-course/tasks-app/tasks_mcp_server.py"]
|
"args": ["/ABSOLUTE/PATH/TO/ai-workflow-course/tasks-app/tasks_mcp_server.py"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
"_comment": "Common shape of an MCP server entry for a local (stdio) server. Many agentic tools accept this 'mcpServers' map; yours may use a different key or location (check its docs). IMPORTANT: 'command' must be the ABSOLUTE path to the python interpreter that has the MCP SDK installed (e.g. your venv's python) -- a bare 'python' makes the client launch whatever is on its PATH, which usually does NOT have the SDK, and the server then reports 'not connected'. On Windows the venv python is ...\\.venv\\Scripts\\python.exe. Set 'args' to the ABSOLUTE path to tasks_mcp_server.py in your tasks-app.",
|
"_comment": "Common shape of an MCP server entry for a local (stdio) server. Many agentic tools accept this 'mcpServers' map; yours may use a different key or location (check its docs). IMPORTANT: 'command' must be the ABSOLUTE path to the python interpreter that has the MCP SDK installed (e.g. your venv's python) -- a bare 'python' makes the client launch whatever is on its PATH, which usually does NOT have the SDK, and the server then reports 'not connected'. On Windows the venv python is ...\\.venv\\Scripts\\python.exe. Set 'args' to the ABSOLUTE path to tasks_mcp_server.py in your tasks-app.",
|
||||||
"mcpServers": {
|
"mcpServers": {
|
||||||
"tasks": {
|
"tasks": {
|
||||||
"command": "/ABSOLUTE/PATH/TO/workflow-course/tasks-app/.venv/bin/python",
|
"command": "/ABSOLUTE/PATH/TO/ai-workflow-course/tasks-app/.venv/bin/python",
|
||||||
"args": ["/ABSOLUTE/PATH/TO/workflow-course/tasks-app/tasks_mcp_server.py"]
|
"args": ["/ABSOLUTE/PATH/TO/ai-workflow-course/tasks-app/tasks_mcp_server.py"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ seen, producing all four parts without you listing the steps.
|
|||||||
(e.g. `add-command.md`). If it doesn't, just drop it at the repo root — you'll invoke it by name.
|
(e.g. `add-command.md`). If it doesn't, just drop it at the repo root — you'll invoke it by name.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
cp /path/to/modules/21-skills-teaching-the-ai-your-playbook/lab/add-command-skill.md add-command.md
|
cp /path/to/modules/21-skills-teaching-the-ai-your-playbook/lab/add-command-skill.md add-command.md
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ normal question) and the attacker (you plant content the agent reads).
|
|||||||
a real-looking task with an injection underneath:
|
a real-looking task with an injection underneath:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
python cli.py add "$(cat /path/to/lab/poisoned-task.txt)"
|
python cli.py add "$(cat /path/to/lab/poisoned-task.txt)"
|
||||||
python cli.py list
|
python cli.py list
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ out of the agent's `git add -A`, so the change you review in Part B is clean. Th
|
|||||||
branch:
|
branch:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app
|
cd ~/ai-workflow-course/tasks-app
|
||||||
git checkout -b agent/delete-command
|
git checkout -b agent/delete-command
|
||||||
|
|
||||||
# Simulate an agent that produces a BROKEN change, then run the gate on it:
|
# Simulate an agent that produces a BROKEN change, then run the gate on it:
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ Each agent gets **its own worktree on its own branch tied to its own issue.** Th
|
|||||||
keeps a fleet legible:
|
keeps a fleet legible:
|
||||||
|
|
||||||
```
|
```
|
||||||
~/workflow-course/
|
~/ai-workflow-course/
|
||||||
tasks-app/ ← main worktree, on main (the integration point — no agent works here)
|
tasks-app/ ← main worktree, on main (the integration point — no agent works here)
|
||||||
tasks-app-42-count/ ← worktree for issue #42, branch feature/42-count, agent A
|
tasks-app-42-count/ ← worktree for issue #42, branch feature/42-count, agent A
|
||||||
tasks-app-43-docs/ ← worktree for issue #43, branch feature/43-docs, agent B
|
tasks-app-43-docs/ ← worktree for issue #43, branch feature/43-docs, agent B
|
||||||
@@ -336,9 +336,9 @@ thing you're waiting on.
|
|||||||
5. In each worktree, commit the agent's work on its own branch and push it:
|
5. In each worktree, commit the agent's work on its own branch and push it:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/workflow-course/tasks-app-42-count && git add . && git commit -m "Add count command (#42)" && git push -u origin feature/42-count
|
cd ~/ai-workflow-course/tasks-app-42-count && git add . && git commit -m "Add count command (#42)" && git push -u origin feature/42-count
|
||||||
cd ~/workflow-course/tasks-app-43-docs && git add . && git commit -m "Document commands, add changelog (#43)" && git push -u origin feature/43-docs
|
cd ~/ai-workflow-course/tasks-app-43-docs && git add . && git commit -m "Document commands, add changelog (#43)" && git push -u origin feature/43-docs
|
||||||
cd ~/workflow-course/tasks-app-44-clear && git add . && git commit -m "Add clear command (#44)" && git push -u origin feature/44-clear
|
cd ~/ai-workflow-course/tasks-app-44-clear && git add . && git commit -m "Add clear command (#44)" && git push -u origin feature/44-clear
|
||||||
```
|
```
|
||||||
|
|
||||||
### Part C — Fan in through the funnel
|
### Part C — Fan in through the funnel
|
||||||
@@ -355,7 +355,7 @@ thing you're waiting on.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# via the forge UI, or locally:
|
# via the forge UI, or locally:
|
||||||
cd ~/workflow-course/tasks-app && git switch main
|
cd ~/ai-workflow-course/tasks-app && git switch main
|
||||||
git merge feature/42-count # clean
|
git merge feature/42-count # clean
|
||||||
git merge feature/43-docs # clean — different files entirely
|
git merge feature/43-docs # clean — different files entirely
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user