[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71Q83FF373XB6JZ5XZRQT4H":3,"skill-same:01M71Q83FF373XB6JZ5XZRQT4H":57},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":24,"linkOnly":25,"markdownContent":26,"markdownBody":27,"frontMatter":28,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":34,"ownerHtmlUrl":35,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":36,"install":37,"resources":50},"01M71Q83FF373XB6JZ5XZRQT4H","scaffold-exercises",null,"创建包含章节、题目、答案和讲解的练习目录结构，并确保通过 linting。适用于用户想 scaffold exercises、创建 exercise stubs，或设置新的课程章节时。","vinvcn\u002Fmattpocock-skills-zh-CN","vinvcn","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F120928190?v=4","01M71Q60C4V98DEXHGN2VXFSZB","01M71Q60D6PRAJHKQRY33ZNE59",5797,"MIT","https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN\u002Fblob\u002Fmain\u002Fskills\u002Fmisc\u002Fscaffold-exercises\u002FSKILL.md",[],[18,19,20,21,22,23],"scaffold","scaffold exercises","exercises","exercise","linting","目录","2026-11-10 13:02:02",false,"---\nname: scaffold-exercises\ndescription: 创建包含章节、题目、答案和讲解的练习目录结构，并确保通过 linting。适用于用户想 scaffold exercises、创建 exercise stubs，或设置新的课程章节时。\n---\n\n# 搭建练习\n\n创建能通过 `pnpm ai-hero-cli internal lint` 的 exercise directory structures，然后用 `git commit` 提交。\n\n## 目录命名\n\n- **Sections**：`exercises\u002F` 下的 `XX-section-name\u002F`（例如 `01-retrieval-skill-building`）\n- **Exercises**：section 下的 `XX.YY-exercise-name\u002F`（例如 `01.03-retrieval-with-bm25`）\n- Section number = `XX`，exercise number = `XX.YY`\n- Names 使用 dash-case（小写、连字符）\n\n## Exercise 变体\n\n每个 exercise 至少需要这些 subfolders 中的一个：\n\n- `problem\u002F` - student workspace，包含 TODOs\n- `solution\u002F` - reference implementation\n- `explainer\u002F` - conceptual material，不含 TODOs\n\n创建 stub 时，除非 plan 指定其他 variant，否则默认使用 `explainer\u002F`。\n\n## 必需文件\n\n每个 subfolder（`problem\u002F`、`solution\u002F`、`explainer\u002F`）都需要一个 `readme.md`，要求：\n\n- **非空**（必须有真实内容，即使只有一行 title 也可以）\n- 没有 broken links\n\n创建 stub 时，生成带 title 和 description 的最小 readme：\n\n```md\n# Exercise Title\n\nDescription here\n```\n\n如果 subfolder 有 code，还需要 `main.ts`（>1 行）。但对 stubs 来说，readme-only exercise 可以接受。\n\n## 工作流\n\n1. **Parse the plan** - 提取 section names、exercise names 和 variant types\n2. **Create directories** - 对每个 path 执行 `mkdir -p`\n3. **Create stub readmes** - 每个 variant folder 一个带 title 的 `readme.md`\n4. **Run lint** - 执行 `pnpm ai-hero-cli internal lint` 验证\n5. **Fix any errors** - 迭代直到 lint 通过\n\n## Lint 规则摘要\n\nlinter（`pnpm ai-hero-cli internal lint`）检查：\n\n- 每个 exercise 有 subfolders（`problem\u002F`、`solution\u002F`、`explainer\u002F`）\n- 至少存在 `problem\u002F`、`explainer\u002F` 或 `explainer.1\u002F` 之一\n- primary subfolder 中存在非空 `readme.md`\n- 没有 `.gitkeep` files\n- 没有 `speaker-notes.md` files\n- readmes 中没有 broken links\n- readmes 中没有 `pnpm run exercise` commands\n- 除非是 readme-only，否则每个 subfolder 都需要 `main.ts`\n\n## 移动\u002F重命名 exercises\n\n重新编号或移动 exercises 时：\n\n1. 使用 `git mv`（不是 `mv`）重命名 directories，保留 git history\n2. 更新 numeric prefix 以维持顺序\n3. 移动后重新运行 lint\n\nExample:\n\n```bash\ngit mv exercises\u002F01-retrieval\u002F01.03-embeddings exercises\u002F01-retrieval\u002F01.04-embeddings\n```\n\n## 示例：从 plan 生成 stubs\n\n给定这样的 plan：\n\n```\nSection 05: Memory Skill Building\n- 05.01 Introduction to Memory\n- 05.02 Short-term Memory (explainer + problem + solution)\n- 05.03 Long-term Memory\n```\n\n创建：\n\n```bash\nmkdir -p exercises\u002F05-memory-skill-building\u002F05.01-introduction-to-memory\u002Fexplainer\nmkdir -p exercises\u002F05-memory-skill-building\u002F05.02-short-term-memory\u002F{explainer,problem,solution}\nmkdir -p exercises\u002F05-memory-skill-building\u002F05.03-long-term-memory\u002Fexplainer\n```\n\n然后创建 readme stubs：\n\n```\nexercises\u002F05-memory-skill-building\u002F05.01-introduction-to-memory\u002Fexplainer\u002Freadme.md -> \"# Introduction to Memory\"\nexercises\u002F05-memory-skill-building\u002F05.02-short-term-memory\u002Fexplainer\u002Freadme.md -> \"# Short-term Memory\"\nexercises\u002F05-memory-skill-building\u002F05.02-short-term-memory\u002Fproblem\u002Freadme.md -> \"# Short-term Memory\"\nexercises\u002F05-memory-skill-building\u002F05.02-short-term-memory\u002Fsolution\u002Freadme.md -> \"# Short-term Memory\"\nexercises\u002F05-memory-skill-building\u002F05.03-long-term-memory\u002Fexplainer\u002Freadme.md -> \"# Long-term Memory\"\n```\n","# 搭建练习\n\n创建能通过 `pnpm ai-hero-cli internal lint` 的 exercise directory structures，然后用 `git commit` 提交。\n\n## 目录命名\n\n- **Sections**：`exercises\u002F` 下的 `XX-section-name\u002F`（例如 `01-retrieval-skill-building`）\n- **Exercises**：section 下的 `XX.YY-exercise-name\u002F`（例如 `01.03-retrieval-with-bm25`）\n- Section number = `XX`，exercise number = `XX.YY`\n- Names 使用 dash-case（小写、连字符）\n\n## Exercise 变体\n\n每个 exercise 至少需要这些 subfolders 中的一个：\n\n- `problem\u002F` - student workspace，包含 TODOs\n- `solution\u002F` - reference implementation\n- `explainer\u002F` - conceptual material，不含 TODOs\n\n创建 stub 时，除非 plan 指定其他 variant，否则默认使用 `explainer\u002F`。\n\n## 必需文件\n\n每个 subfolder（`problem\u002F`、`solution\u002F`、`explainer\u002F`）都需要一个 `readme.md`，要求：\n\n- **非空**（必须有真实内容，即使只有一行 title 也可以）\n- 没有 broken links\n\n创建 stub 时，生成带 title 和 description 的最小 readme：\n\n```md\n# Exercise Title\n\nDescription here\n```\n\n如果 subfolder 有 code，还需要 `main.ts`（>1 行）。但对 stubs 来说，readme-only exercise 可以接受。\n\n## 工作流\n\n1. **Parse the plan** - 提取 section names、exercise names 和 variant types\n2. **Create directories** - 对每个 path 执行 `mkdir -p`\n3. **Create stub readmes** - 每个 variant folder 一个带 title 的 `readme.md`\n4. **Run lint** - 执行 `pnpm ai-hero-cli internal lint` 验证\n5. **Fix any errors** - 迭代直到 lint 通过\n\n## Lint 规则摘要\n\nlinter（`pnpm ai-hero-cli internal lint`）检查：\n\n- 每个 exercise 有 subfolders（`problem\u002F`、`solution\u002F`、`explainer\u002F`）\n- 至少存在 `problem\u002F`、`explainer\u002F` 或 `explainer.1\u002F` 之一\n- primary subfolder 中存在非空 `readme.md`\n- 没有 `.gitkeep` files\n- 没有 `speaker-notes.md` files\n- readmes 中没有 broken links\n- readmes 中没有 `pnpm run exercise` commands\n- 除非是 readme-only，否则每个 subfolder 都需要 `main.ts`\n\n## 移动\u002F重命名 exercises\n\n重新编号或移动 exercises 时：\n\n1. 使用 `git mv`（不是 `mv`）重命名 directories，保留 git history\n2. 更新 numeric prefix 以维持顺序\n3. 移动后重新运行 lint\n\nExample:\n\n```bash\ngit mv exercises\u002F01-retrieval\u002F01.03-embeddings exercises\u002F01-retrieval\u002F01.04-embeddings\n```\n\n## 示例：从 plan 生成 stubs\n\n给定这样的 plan：\n\n```\nSection 05: Memory Skill Building\n- 05.01 Introduction to Memory\n- 05.02 Short-term Memory (explainer + problem + solution)\n- 05.03 Long-term Memory\n```\n\n创建：\n\n```bash\nmkdir -p exercises\u002F05-memory-skill-building\u002F05.01-introduction-to-memory\u002Fexplainer\nmkdir -p exercises\u002F05-memory-skill-building\u002F05.02-short-term-memory\u002F{explainer,problem,solution}\nmkdir -p exercises\u002F05-memory-skill-building\u002F05.03-long-term-memory\u002Fexplainer\n```\n\n然后创建 readme stubs：\n\n```\nexercises\u002F05-memory-skill-building\u002F05.01-introduction-to-memory\u002Fexplainer\u002Freadme.md -> \"# Introduction to Memory\"\nexercises\u002F05-memory-skill-building\u002F05.02-short-term-memory\u002Fexplainer\u002Freadme.md -> \"# Short-term Memory\"\nexercises\u002F05-memory-skill-building\u002F05.02-short-term-memory\u002Fproblem\u002Freadme.md -> \"# Short-term Memory\"\nexercises\u002F05-memory-skill-building\u002F05.02-short-term-memory\u002Fsolution\u002Freadme.md -> \"# Short-term Memory\"\nexercises\u002F05-memory-skill-building\u002F05.03-long-term-memory\u002Fexplainer\u002Freadme.md -> \"# Long-term Memory\"\n```\n",{"name":5,"description":7},"main","c5c5e87cc1df26aeb7dba345ad9f846434d2b3d4","skills\u002Fmisc\u002Fscaffold-exercises",450,"https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN","https:\u002F\u002Fskills.sh\u002Fvinvcn\u002Fmattpocock-skills-zh-CN","https:\u002F\u002Fgithub.com\u002Fvinvcn","2026-11-10 17:40:42",{"source":8,"skillName":5,"commands":38,"prompt":48,"zipAvailable":49},[39,42,45],{"tool":40,"command":41},"npx","npx skills add vinvcn\u002Fmattpocock-skills-zh-CN --skill scaffold-exercises",{"tool":43,"command":44},"bunx","bunx skills add vinvcn\u002Fmattpocock-skills-zh-CN --skill scaffold-exercises",{"tool":46,"command":47},"pnpm","pnpm dlx skills add vinvcn\u002Fmattpocock-skills-zh-CN --skill scaffold-exercises","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN\u002Fblob\u002Fmain\u002Fskills\u002Fmisc\u002Fscaffold-exercises\u002FSKILL.md",true,[51],{"path":52,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":55,"sourceHtmlUrl":56},"agents\u002Fopenai.yaml","REFERENCE","参考文档",108,"https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN\u002Fblob\u002Fmain\u002Fskills\u002Fmisc\u002Fscaffold-exercises\u002Fagents\u002Fopenai.yaml",[58,82,92,102,112,121],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":77,"publishedAt":24},"01M71Q8F3M8YFP6WYVYQP61KBT","writing-for-agents","为 agent 编写文档。适用于创建或编辑 skills，或修改 AGENTS.md 或 CLAUDE.md 时。","https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fwriting-for-agents\u002FSKILL.md",[64,69,72],{"categoryNo":65,"categoryName":66,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":70,"categoryName":71,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[78,79,80,81],"for","writing for agents","writing","文档",{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":24},"01M71Q8DHRPYE6R648CQ7NAHYN","wait-what","停一下：刚才那条消息没有说清楚，重新表述一遍。","https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fwait-what\u002FSKILL.md",[],[89,90,91],"wait","wait what","true",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":24},"01M71Q8C8CBSRJRP8Y0JRZ7RJ7","to-questionnaire","把你无法完整回答的 decision 转成一份交给他人填写的 questionnaire。","https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fto-questionnaire\u002FSKILL.md",[],[99,100,101,91],"questionnaire","to questionnaire","decision",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":111,"publishedAt":24},"01M71Q8ASS9A6P84PSC02YFKHB","teach","在这个工作区中教用户一个新技能或概念。","https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fteach\u002FSKILL.md",[108],{"categoryNo":109,"categoryName":110,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000039","教师与教育",[104,91],{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":24},"01M71Q89C2C2QRR3J3H64ZKH0P","handoff","把当前对话压缩成交接文档，让另一个代理接手。","https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fhandoff\u002FSKILL.md",[],[114,91,119,120,81],"对话","压缩",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":24},"01M71Q883CXWF0BGDQC3Y8TJZ2","grilling","围绕计划、decision 或 idea 持续追问用户。适用于用户想对自己的思路做压力测试，或使用任何 “grill” 触发措辞时。","https:\u002F\u002Fgithub.com\u002Fvinvcn\u002Fmattpocock-skills-zh-CN\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fgrilling\u002FSKILL.md",[],[123,128,129,101,130],"idea","grill","testing"]