learn-by-running-code · diff
git:20260826.b74dd38 to git:20260914.b0e3473
11 added, 7 removed. Audit A to A.
---
name: learn-by-running-code
- description: 将一个 Python 学习主题设计成按 01_、02_ 编号的渐进式可运行代码仓库,通过阅读、运行和修改极简示例掌握知识。用户只要提到“做一个学习仓库”“按章节用代码学”“边运行边学”“把某个 Python 主题拆成可运行示例”或希望用项目化方式系统学习 Python 库、框架、协议和工程概念,就应使用本 Skill。它负责从主题调研、课程大纲确认到 uv 仓库生成与逐章验证;不用于单纯讲解已有仓库或把现有项目改造成作业课程。
+ description: 将一个 Python 学习主题设计成按 01_、02_ 编号的渐进式可运行代码仓库;每章先讲清最小必要知识,再通过 worked example 映射到代码,并用运行、修改、检索和自我解释完成学习。用户只要提到“做一个学习仓库”“按章节用代码学”“边运行边学”“把某个 Python 主题拆成可运行示例”或希望用项目化方式系统学习 Python 库、框架、协议和工程概念,就应使用本 Skill。它负责从主题调研、课程大纲确认到 uv 仓库生成、AGENTS.md 导师指南与逐章验证;不用于单纯讲解已有仓库或把现有项目改造成作业课程。
---
# Learn by Running Code
- 把一个待学习的 Python 主题变成一套小而完整的代码课程。学习者先看到可运行结果,再从代码中理解概念;每章只增加一个认知负担。
+ 把一个待学习的 Python 主题变成一套小而完整的代码课程。每章先讲清一个最小知识块,再把知识映射到可运行代码,并通过修改与解释完成实践;每章只增加一个认知负担。
## 边界
使用本 Skill:
- 从一个知识主题创建新的教学仓库;
- 把 Python 库、框架、协议或工程概念拆成渐进章节;
- 生成能够独立运行、便于修改和观察的极简代码。
不要使用本 Skill:
- 用户只想理解一个现有仓库:改用项目学习类 Skill;
- 用户要从现有源码提炼讲义、作业和判题:改用课程化或 ProMentor 类 Skill;
- 用户只问一个可以直接回答的概念问题,不需要创建仓库。
## 按需加载的资源
- 规划大纲前读取 [references/curriculum-design.md](references/curriculum-design.md)。
+ - 设计 agent 的逐章教学节奏前读取 [references/teaching-method.md](references/teaching-method.md)。
- 创建文件前读取 [references/repository-contract.md](references/repository-contract.md)。
- - 生成仓库时复用 `assets/` 中的模板,但要按主题替换占位符,不要原样复制。
+ - 生成仓库时复用 `assets/` 中的模板,但要按主题替换占位符,不要原样复制;`AGENTS.template.md` 必须据课程实情填充为根目录 `AGENTS.md`。
- 生成后运行 `scripts/validate_learning_repo.py <repo>` 做确定性检查。
## 工作流
### 1. 明确学习任务
先从对话中提取以下信息,已有答案就不要重复询问:
- 主题和明确排除的内容;
- 学习者已有知识;
- 学完后希望能构建、解释或调试什么;
- 是否允许联网、调用付费 API、使用数据库或安装本地服务;
- 目标目录。
只有会改变课程结构的信息缺失时才提问。默认值为:懂基础 Python、不熟悉目标主题、Python 3.12、uv、5~7 章、中文教学说明、英文代码标识符、优先离线免费示例。
### 2. 用一手资料校准内容
第三方库和快速变化的 API 不能只凭记忆设计课程:
1. 查看官方文档、官方仓库、发布说明或当前安装版本;
2. 确认推荐 API、最低 Python 版本和安装包名;
3. 区分“官方事实”“根据资料做出的课程设计”和“尚未验证的假设”;
4. 记录资料链接、核对日期和最终选用版本,供根 README 使用。
不要为了堆砌资料扩大主题。调研的目的只是保证示例不过时、命令能运行。
### 3. 先提交课程大纲
创建任何仓库文件之前,先在对话中给出:
- 一句话课程目标;
- 学习者画像和完成标准;
- 统一贯穿案例;
- - 章节表:序号、章节名、本章唯一新增概念、前置章节、运行后能观察到什么、是否需要网络或凭据;
+ - 章节表:序号、章节名、本章唯一新增概念、开始实践前必须讲清的最小知识块、前置章节、运行后能观察到什么、是否需要网络或凭据;
- 最终项目和明确不包含的内容;
- 计划采用的 Python 与关键依赖版本。
必要时用 Mermaid 表示非线性依赖,不要用字符树。等待用户明确确认这份具体大纲。用户只说“帮我创建一个学习仓库”不等于确认;用户已经提供并明确确认过完整大纲时可以直接进入下一步。
### 4. 安全地创建仓库
用户确认后再写文件:
1. 检查目标路径;目标不存在时创建,目标为空时使用,目标非空时先报告冲突,不覆盖已有文件;
2. 按仓库契约创建 uv 项目和连续编号的章节目录;
3. 用同一个小型场景贯穿课程,但每章必须能从仓库根目录直接运行,不能依赖先执行上一章产生的状态;
- 4. 代码先展示核心机制,再解释抽象。保留能帮助理解“为什么”的注释,删除逐字复述语法的注释;
+ 4. 先用“解决什么问题 → 输入 → 处理 → 输出 → 边界”讲清本章最小知识块,再用 worked example 把知识映射到关键代码;随后让学习者预测、运行和修改。代码用于验证知识,不替代知识讲解;保留能解释“为什么”的注释,删除逐字复述语法的注释;
5. 不在关键路径使用 `...`、伪代码或未定义占位函数;
6. 仅把真正跨章稳定的配置和假数据放入 `shared/`,不要为了追求目录层次拆散小示例;
- 7. 需要密钥时只提交 `.env.example`,示例值必须是假值;在 README 标注网络、费用和数据外发风险。
+ 7. 需要密钥时只提交 `.env.example`,示例值必须是假值;在 README 标注网络、费用和数据外发风险;
+ 8. 生成根目录 `AGENTS.md` 教学指令文件(内容契约见 repository-contract.md):课程的最终消费者通常是给学习者当导师的 agent,该文件必须让任何进入仓库的 LLM 获得导师角色、逐章教学卡、教学节奏与环境边界。
### 5. 验证而不是声称
从干净状态验证:
1. 运行 `uv lock` 和 `uv sync`;
2. 运行本 Skill 自带的结构验证脚本;
3. 逐章运行所有不需要凭据或外部服务的命令,并核对 README 中的预期现象;
4. 对在线章节至少完成 Python 语法、导入和缺少配置时的错误提示检查;
5. 不把“读过代码”写成“运行通过”。分别报告已运行、仅静态检查和因何未验证。
遇到失败时先修复最小示例或文档,再交付。不要把失败命令留给学习者自行猜测。
### 6. 交付学习路线
最终简洁报告:
- 仓库位置;
- 30 秒启动命令;
- 推荐从哪一章开始;
- 实际运行通过的章节;
- 需要用户自行提供凭据或服务的章节;
- - 采用的主要资料与版本。
+ - 采用的主要资料与版本;
+ - 提示用户:让支持 `AGENTS.md` 的 agent 进入仓库并说“教我这个课程”即可开课。
不要一次性把所有章节重新讲一遍,仓库本身就是主要教学产物。
## 完成标准
只有同时满足以下条件才算完成:
- 用户确认过课程大纲;
- 章节编号连续,每章只承担一个主要新增概念;
- 根 README 中的每条章节运行命令都存在;
- `uv.lock` 已生成,离线章节在同一干净环境中实际运行通过;
+ - 根目录存在 `AGENTS.md`,逐章教学卡覆盖全部章节且与 README、实际验证结果一致;
- 外部依赖、费用、凭据和未验证项均已明确说明;
- 没有覆盖用户原有文件,也没有写入真实密钥。