主流 Agent 入门教程 / Claude Code
10. 管理长任务把MealCraft升级到2-0
原文备份 · 第 12 / 28 篇 · 查看极客时间原知识库 ↗
本篇目录 · 15 节
来源:Claude Code
预计用时:90~140 分钟,可分两次完成
本篇目标:用固定规范和测试把 MealCraft 分四阶段升级到 2.0,并实际练习命名、恢复、压缩、对话分支、后台会话和磁盘交接。
长任务的可靠性不来自“一次聊天记住全部细节”,而来自可重复的输入、阶段提交、测试结果和磁盘台账。会话可以退出、压缩甚至更换;MEALCRAFT_2_SPEC.md、UPGRADE_PLAN.md、Git 和测试才是事实来源。
本篇仍是个人本地项目,不引入数据库、账号、云部署或多人协作系统。
开始状态
从完成第 9 篇并已提交的 MealCraft 项目开始。
macOS、Linux 或 WSL2:
cd ~/claude-code-course/mealcraft
git status --short
python3 scripts/verify_project_instructions.py
python3 -m unittest discover -s tests -v
Windows PowerShell:
Set-Location "$HOME\claude-code-course\mealcraft"
git status --short
py scripts/verify_project_instructions.py
py -m unittest discover -s tests -v
预期工作区为空,项目说明检查通过,旧套件 13 项全部通过。若还有未提交修改,先辨认并保存,不要把未知改动混入 2.0。
检查本机能力:
claude --version
claude --help
进入一次会话并运行 /help。本篇会用 /rename、/compact、/branch、/resume、/fork 和 /background,以及外部终端中的 claude agents、attach、logs、stop。命令是否显示取决于版本、平台和环境;若缺少后台会话命令,先按第 2 篇升级并重查。升级后仍不可用时,可以完成 2.0 主线,把后台练习标为“本机不可用”,不要猜旧命令的行为。
一、复制固定 2.0 输入
先退出 Claude Code,设置教程目录变量并复制素材;占位符必须替换。
macOS、Linux 或 WSL2:
export COURSE_SOURCE="/替换为实际路径/claude-code-tutorial-v0.2"
test -f "$COURSE_SOURCE/exercise-assets/mealcraft/2.0-kit/MEALCRAFT_2_SPEC.md"
test ! -e MEALCRAFT_2_SPEC.md
test ! -e UPGRADE_PLAN.md
cp -R "$COURSE_SOURCE/exercise-assets/mealcraft/2.0-kit/." .
Windows PowerShell:
$CourseSource = "C:\替换为实际路径\claude-code-tutorial-v0.2"
if (-not (Test-Path "$CourseSource\exercise-assets\mealcraft\2.0-kit\MEALCRAFT_2_SPEC.md")) { throw "2.0 素材路径错误" }
if (Test-Path MEALCRAFT_2_SPEC.md) { throw "已有 2.0 规范,请先人工比较" }
if (Test-Path UPGRADE_PLAN.md) { throw "已有升级台账,请先人工比较" }
Copy-Item "$CourseSource\exercise-assets\mealcraft\2.0-kit\*" -Destination . -Recurse
素材新增:
MEALCRAFT_2_SPEC.md
UPGRADE_PLAN.md
scripts/verify_2_0.py
tests/test_menu.py
tests/test_shopping.py
tests/test_report.py
先验证固定起点:
python3 scripts/verify_2_0.py --stage starter
python3 -m unittest discover -s tests -v
Windows 把 python3 替换为 py。第一条应输出:
PASS: MealCraft 2.0 固定规范和失败基线已就绪
完整套件此时应只有 3 个收集错误,分别缺少 mealcraft.menu、mealcraft.shopping 和 mealcraft.report。这是确定的红灯基线,不是让你删除新测试的理由。若旧的 1.0 测试也失败,先恢复前篇状态。
把 UPGRADE_PLAN.md 的 Stage 0 勾选为已验证,并在 Latest verified state 记录“完整套件只有上述 3 个预期错误”;不要把红灯写成“全部通过”。
提交固定输入:
git add MEALCRAFT_2_SPEC.md UPGRADE_PLAN.md scripts/verify_2_0.py tests/test_menu.py tests/test_shopping.py tests/test_report.py
git diff --cached --check
git commit -m "add MealCraft 2.0 acceptance baseline"
二、先读固定决策,不重新发明需求
打开新会话并命名:
claude
输入:
/rename mealcraft-2-upgrade
再进入 Plan Mode:
/plan 只读 MEALCRAFT_2_SPEC.md、UPGRADE_PLAN.md 和新增测试,给出四阶段实施顺序。不要修改规范或测试,不要扩大到数据库、账号或云服务。
计划必须保留这些固定决定:
- 3~7 天、1~6 人份;
- 相邻两天不重复,非相邻允许复用;
- 用局部
random.Random(seed)保证可复现; - 只合并名称和单位都相同的可计算数量;
适量、少许逐条保留来源;- 报告拒绝覆盖,源菜谱始终只读;
- 每阶段更新
UPGRADE_PLAN.md中的真实验证记录。
若计划建议改测试、放宽断言或安装第三方库,要求它依据规范修正计划。确认后退出 Plan Mode 再实施。
三、阶段 1:可复现菜单
发送:
只实施 Stage 1:创建 mealcraft/menu.py,满足固定规范和 test_menu.py。不要实现购物清单或报告,不要修改固定规范和测试。完成后运行菜单阶段检查器,再运行完整套件;把实际命令、结果、剩余失败和下一步写入 UPGRADE_PLAN.md,然后停下。
独立验证:
python3 scripts/verify_2_0.py --stage menu
python3 -m unittest discover -s tests -v
git diff --check
git diff -- data/recipes
阶段检查应显示 5 项菜单测试通过并输出 PASS。完整套件仍可因 shopping 和 report 尚不存在而失败,但 1.0 与菜单测试必须通过。data/recipes Diff 应为空。
审查 mealcraft/menu.py:它应使用局部随机数生成器,不应调用全局 random.seed(),也不应为第 7 天复制或写回菜谱 JSON。
git add mealcraft/menu.py UPGRADE_PLAN.md
git diff --cached --check
git commit -m "add deterministic weekly menu planning"
四、用 /branch 安全比较一个想法
/branch 会从当前位置创建对话分支,并把当前终端切到新分支;原对话仍保留,可从 /resume 返回。它分的是对话,不自动建立 Git 分支。
/branch report-layout-notes
在对话分支里只做讨论:
不要调用工具,也不要修改文件。比较“按天列菜单”和“按食材分类优先”两种个人周菜单版式;依据 MEALCRAFT_2_SPEC.md 说明为什么本练习应保留按天版式,不要新增需求。
讨论结束后运行 /resume,在选择器中回到 mealcraft-2-upgrade,再检查:
git status --short
应没有由讨论产生的文件修改。若已经编辑文件,先看实际 Diff;不要以为切回原对话会自动还原磁盘。
五、阶段 2:精确购物清单
回到主对话后发送:
实施 Stage 2:创建 mealcraft/shopping.py。严格按名称和单位合并,使用 Fraction 保持精确数值;不同单位分开,文字用量逐条保留来源。只解决 test_shopping.py,不做报告。完成后运行阶段检查和完整套件,更新 UPGRADE_PLAN.md 后停下。
独立验证:
python3 scripts/verify_2_0.py --stage shopping
python3 -m unittest discover -s tests -v
git diff --check
git diff -- data/recipes
购物清单阶段应有 3 项测试通过。完整套件此时只应剩 mealcraft.report 的缺失错误。重点核对:番茄 3 个 与 番茄 200 克 是两行,1/2 + 1 1/2 精确得到 2,两种盐没有被合成一个数。
git add mealcraft/shopping.py UPGRADE_PLAN.md
git diff --cached --check
git commit -m "build exact shopping list totals"
六、上下文变长时用 /compact
先运行 /context 看使用情况。需要释放窗口时,带着明确保留项压缩:
/compact 保留 MealCraft 2.0 固定规范、Stage 1 和 Stage 2 的已验证结果、剩余 Stage 3/4、禁止修改测试与源菜谱的约束
压缩结束后让 Claude 重新对照磁盘:
只读 MEALCRAFT_2_SPEC.md、UPGRADE_PLAN.md、git status 和最近提交,报告已完成阶段、实际验证、剩余失败和下一步。不要修改文件。
将回答与台账和 Git 比较。摘要若遗漏,以磁盘为准。/compact 继续同一会话,/clear 则开启空上下文,不要混用。
七、中断并从磁盘恢复
在阶段提交后输入 /exit。从同一项目目录恢复最近会话:
claude --continue
若目录中有多个会话,使用选择器或名称:
claude --resume
claude --resume mealcraft-2-upgrade
恢复后的第一条任务是核对,不是立刻写代码:
重新读取 MEALCRAFT_2_SPEC.md 和 UPGRADE_PLAN.md,检查 git status 与最近 4 个提交,并运行当前阶段检查。列出磁盘证实的完成项、失败项和唯一下一步;先不要修改。
如果 --continue 提示 No conversation found to continue,确认当前目录,再用 --resume。即使会话找不到,固定文件与提交仍足以新开会话继续。
八、阶段 3:报告与命令行入口
发送:
实施 Stage 3:创建 mealcraft/report.py 和 scripts/generate_week.py,更新 README。报告必须是 UTF-8、包含规范要求的全部字段并拒绝覆盖;命令直接用 python3 scripts/generate_week.py 可运行。不要修改固定测试。完成后运行完整阶段检查并更新 UPGRADE_PLAN.md。
运行:
python3 scripts/verify_2_0.py --stage complete
python3 scripts/generate_week.py --days 3 --servings 2 --seed 17 --exclude 辣 --date 2026-09-29 --output output/week-17.md
Windows PowerShell:
py scripts/verify_2_0.py --stage complete
py scripts/generate_week.py --days 3 --servings 2 --seed 17 --exclude "辣" --date 2026-09-29 --output output/week-17.md
预期完整套件 23 项通过,生成命令输出类似:
WROTE: output/week-17.md
打开报告,确认日期为 2026-09-29、份数为 2、共有 3 天、没有带“辣”标签的菜谱、食材数量可读。原命令再运行一次应以 FileExistsError 拒绝覆盖;这是预期保护。换文件名才可再次生成。
如果实现偏离太多,可在保留当前提交后使用课程参考覆盖层恢复:
macOS、Linux 或 WSL2:
cp -R "$COURSE_SOURCE/exercise-assets/mealcraft/reference-2.0-overlay/." .
python3 scripts/verify_2_0.py --stage complete
Windows PowerShell:
Copy-Item "$CourseSource\exercise-assets\mealcraft\reference-2.0-overlay\*" -Destination . -Recurse -Force
py scripts/verify_2_0.py --stage complete
参考覆盖层会替换同名 2.0 实现和 README,只在已看懂 Diff、并接受回到课程基准时使用;它不会修改原教程或源菜谱。
九、用 /fork 启动独立只读审计
当前 /fork 会复制当前对话到新的后台会话,原会话继续留在当前终端;它与 /branch 的“切换到对话分支”不同。输入:
/fork 只读审计 MealCraft 2.0:核对固定规范、测试覆盖、UPGRADE_PLAN.md 和 git diff;运行允许的本地检查,但不要编辑、提交、推送或访问网络。最后列出最多 5 个有证据的问题;没有问题就明确写未发现阻塞项。
在另一个终端,从 MealCraft 根目录查看独立会话。
macOS、Linux 或 WSL2:
claude agents --json --cwd "$PWD"
Windows PowerShell:
claude agents --json --cwd $PWD.Path
输出中的短 id 用于管理。下面的 <id> 必须替换,不能原样执行:
以下为参数模板,执行前先将尖括号占位符替换为实际值:
claude logs <id>
claude attach <id>
附加后可以回复审计问题;输入 /exit 只是再次脱离,后台会话仍可继续。只有明确要终止仍在运行的会话时才执行:
以下为参数模板,执行前先将尖括号占位符替换为实际值:
claude stop <id>
claude agents 负责独立后台会话;当前会话内的 /tasks 主要列出该会话自己的后台任务和 Subagent,不是同一个列表。
十、练习 /background 与 shell 启动方式
/background(别名 /bg)把当前整个会话脱离终端继续运行。选择没有写入需求的停点,输入:
/background 只读检查 Stage 4 验收项和当前 Git Diff;不要修改、提交或推送。检查完等待我的下一条消息。
终端返回后,用 claude agents 找到它,再用 attach 回去。这验证了“会话离开终端仍由本机后台服务托管”。后台会话在本机运行、消耗正常用量;电脑关机后不会继续,等待权限确认时也可能停住。
也可以从 shell 直接启动一个新的只读后台会话:
claude --bg --name mealcraft-2-audit "只读运行 MealCraft 2.0 完整测试并报告结果;不要修改、提交、推送或访问网络"
提示文本是位置参数,不能把 --bg 与 -p 混用。启动成功会打印短 ID,以及 agents、attach、logs、stop 命令。Git 仓库中的后台会话在需要编辑前通常会进入隔离 worktree;本篇审计明确只读,因此不应产生新代码。不要关闭 worktree 隔离来省步骤。
后台会话是完整、可独立恢复和附加的 Claude Code 会话。第 13 篇的 Subagent 则由主会话为局部任务派生,使用独立上下文,并把结果汇报回主会话。个人项目中,先用单会话分阶段;只有确实可独立的只读审计才值得并行。
十一、Stage 4 总体验收
在普通终端运行所有独立证据:
python3 -m unittest discover -s tests -v
python3 scripts/verify_2_0.py --stage complete
python3 scripts/verify_release.py
git diff --check
git diff -- data/recipes .claude/settings.json
git status --short
预期:
- 23 项测试全部通过;
- 2.0 检查器输出
PASS,并确认源菜谱哈希未变化; - 1.0 真实 HTTP 发布检查仍通过;
- 菜谱和安全设置没有 Diff;
output/week-17.md因.gitignore不进入提交;- 仅 2.0 模块、命令、README 和已更新台账等待提交。
在 Claude Code 中运行 /diff,人工确认没有改测试来迁就实现。更新 UPGRADE_PLAN.md 的最终状态,只记录实际执行过的命令。然后提交:
git add mealcraft/menu.py mealcraft/shopping.py mealcraft/report.py scripts/generate_week.py README.md UPGRADE_PLAN.md
git diff --cached --check
git commit -m "build MealCraft 2.0 weekly planning"
git status --short
本篇验收清单
- 固定起点检查通过,完整套件最初只有 3 个预期缺失模块错误;
- Stage 1、2、3 分别运行了聚焦检查和完整测试;
- 每个阶段有 Git 提交,
UPGRADE_PLAN.md记录的是实际证据; /branch只用于方案讨论,回到主会话后磁盘状态明确;/compact后通过磁盘文件和 Git 重新校准,而非相信摘要;- 至少用
--continue或--resume完成一次恢复; - 23 项测试、2.0 检查和 1.0 发布检查全部通过;
- 固定命令生成了报告,并证明同名文件不会被覆盖;
- 用
/fork或claude --bg完成一次独立只读审计; - 能解释
/tasks、Subagent 与独立后台会话的区别; - 源菜谱、安全配置和原教程均未被改写。
关键排错
恢复到了错误会话:先退出,确认当前目录,再用 claude --resume 按名称选择。恢复后先查 Git 和台账;不要根据聊天标题判断代码状态。
/branch 后文件也变了:对话分支不是文件快照。查看 git diff,用已提交阶段作为恢复依据;不要盲目回滚用户自己的改动。
后台会话一直 blocked:运行 claude logs <id> 或 attach,通常是权限问题、需要澄清或测试失败。给出最小必要回复,不要改成 bypassPermissions 绕过安全设置。
claude agents 找不到刚启动的会话:去掉 --cwd 查看全部活动会话,核对启动目录;若后台服务无响应,先运行 claude daemon status,再按官方 Agent view 的故障步骤处理。
完整测试数量不是 23:检查三个固定测试文件是否都在 tests/,并确认没有用 -p 过滤完整套件。不要以聚焦测试代替全量回归。
生成命令找不到 mealcraft:必须从项目根目录运行,并确认脚本把项目根目录加入导入路径;参考覆盖层包含这一处理。
本篇小结
MealCraft 2.0 的关键产物不只是菜单和购物清单,而是一条可恢复的工作链:固定输入建立红灯,阶段测试与提交保存进度,磁盘台账跨会话交接,/compact 只压缩聊天,/branch 比较方向,/fork 和后台会话承接真正独立的只读任务。
下一篇会在稳定的 2.0 基线上创建完整 Skill 和 Hook,把“生成周菜单”和提交前检查固化为可重复工作流。
官方参考: