Claude Skill

textbook-init

动笔写教材前要先规划并创建工作目录时用它:规划单本教材项目目录或多教材工作区,可选 git 版本管理与 README 工作说明,建好后把产出交接给 textbook。触发语如"初始化教材项目"、"创建教材工作目录"、"规划教材工作区"、"建一个写教材的目录"。只搭目录骨架,不创建流水线文件(.progress.json、00-教材设计.md、术语表.md)。写正文用 textbook(不经 init 它也会自建默认目录),续写已有项目直接用 textbook。需与 textbook 系列其余 skill 装在同一 skills 目录下。

LLM Mart · 0 points · 7 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download cabbage2000-lab-textbook-writer-skills-skills_textbook-init-7dc21ea.zip · 6 KB
Part of cabbage2000-lab/textbook-writer-skills — 5 skills

Install

skills CLI npx skills add https://github.com/cabbage2000-lab/textbook-writer-skills/tree/main/skills/textbook-init
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install cabbage2000-lab-textbook-writer-skills@llmmart
Git git clone https://github.com/cabbage2000-lab/textbook-writer-skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole cabbage2000-lab/textbook-writer-skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

textbook-init

动笔前的工作目录规划师:一轮提问弄清作者要写一本还是多本、放在哪里、要不要版本管理,呈现目录方案等确认后创建目录骨架(可含 git 仓库与 README 工作说明),最后把作者交给 textbook 主流程开写。教材项目内部的文件构成以 ../textbook/references/handoff-contract.md(下称"契约文档")第 3 节为唯一权威定义,本 skill 只引用不重复定义。

何时不触发

  • 已有教材项目要续写(目录里有 .progress.json)——直接用 textbook,它会按状态文件定位续点;
  • 作者直接开写、不关心目录规划——textbook 启动时自会询问一次并默认 ./<教材名>/,无需先走本 skill;
  • 整理与教材写作无关的目录——本 skill 只服务教材项目的开局。

与流水线的关系

本 skill 只独立触发:不被 textbook 调度,不进五阶段契约链,产出是"就绪的空工作目录 + 启动指引"。

流水线文件一律不建不改:.progress.json(主 skill 是唯一写者,这是项目红线)、00-前言.md(阶段 5 派生生成)、00-教材设计.md(textbook-outline 写入)、NN-<章标题>.md(逐章生成)、98-参考答案.md(逐章追加)、99-表现性任务.md(阶段 5 派生生成)、术语表.md(主 skill 追加维护)。动机:主 skill 的重入判定靠"这些文件存不存在、内容有没有"定位续点(契约文档第 4 节),预建空文件会让它把全新项目误判成半成品;空壳文件混进交付物也违背"交付即可用"的底线。本 skill 创建的只有目录本身、.gitignore 和 README 工作说明——均在契约之外。

工作流

第 1 步:一轮提问

用 AskUserQuestion 一轮收集四项(触发语已说明的项不再问):

  1. 教材名:如《线性代数入门》——将成为项目目录名;
  2. 规划范围:a) 只写这一本 b) 未来还会写多本(追加:工作区名,默认"教材工作区");
  3. 位置:项目/工作区建在哪个目录下,默认当前目录 ./;
  4. git 版本管理:默认要(教材写作周期以周计,版本保护值回票价);作者明确不要则跳过。

若当前环境没有 AskUserQuestion 工具,降级为编号提问并等待文本回复:

请回答以下问题(回复格式如 "1 线性代数入门 2b 教材工作区 3 ./ 4 要"):
1. 教材名?
2. 规划范围? a) 只写这一本  b) 未来还会写多本(请给工作区名,默认"教材工作区")
3. 建在哪个目录下?(默认当前目录 ./)
4. 要 git 版本管理吗?(默认要)

按语义宽松解析回复,只就有歧义的一项追问。

第 2 步:方案呈现与确认

按 references/workspace-layout.md 第 1、2 节的布局规则组装方案,完整呈现后停下:

  • 目录树预览:含流水线随后会生成的文件,逐项注明"由 textbook 流水线创建"——让作者看到最终形态,同时不误以为本 skill 会建它们;
  • 关键选择及理由:单本还是工作区分层、git 建在哪一层、.gitignore 为什么不忽略 .progress.json;
  • 停点格式沿用契约文档第 5 节:

⏸ 等待确认:工作目录方案(回复"确认"开始创建,或直接提出修改)

作者提出修改 → 更新方案后重新完整呈现再等确认,循环直到明确确认;"确认,但把位置改一下"这类混合答复按修改分支处理(修改优先于确认,判定语义同契约文档第 5 节)。确认前不创建任何东西。

第 3 步:创建与交接

  1. 建目录:按确认的方案 mkdir -p;
  2. git 判重:在目标位置检查是否已处于某个 git 仓库内(方法见 references/workspace-layout.md 第 3 节)——已在,则跳过 git init 并向作者说明原因;
  3. git 初始化(作者要 git 且未命中判重):git init + 写 .gitignore + 首次提交,层级与内容规范见 references/workspace-layout.md 第 3、4 节;
  4. README 工作说明:按 references/workspace-layout.md 第 5 节模板实例化——所有字段填当前项目的真实值,写完通读确认没有残留尖括号或待填空白;
  5. 打印成果与下一步指引:
✅ 工作目录就绪:<实际路径>
接下来对我说:写教材《<教材名>》,落盘目录用 <项目目录路径>
(textbook 会在该目录里创建 .progress.json 并从教学定位开始五阶段流程)

安全边界

  • 目标目录已存在且非空:呈现现有内容清单,绝不覆盖、移动或删除任何既有文件;其中若发现 .progress.json,说明这是进行中的教材项目,提示作者直接对 textbook 说续写,本 skill 就此打住;
  • README / .gitignore 已存在:保留原文件不动,仅提示作者自行核对是否需要补充;
  • 本 skill 的全部动作只增不删:创建目录、创建新文件、git init 与提交——不含任何删除、移动、覆盖操作。
Files (textbook-writer-skills)
  • references
    • workspace-layout.md 5.9 KB
      # 工作目录布局规则
      
      本文件是 textbook-init 的操作细节底座:两种布局的选择依据、git 层级规则、`.gitignore` 与首次提交规范、README 工作说明模板。教材项目内部的文件构成(哪些文件、谁创建、固定标题)以 [../../textbook/references/handoff-contract.md](../../textbook/references/handoff-contract.md) 第 3 节为准,本文件不重复定义、不擅自增删。
      
      ## 1. 两种布局与选择依据
      
      **单本布局**(作者只写这一本):
      
      ```text
      <位置>/<教材名>/           ← git 仓库根建在这一层(若要 git)
      ├── .gitignore             # init 创建
      ├── README.md              # 工作说明,init 创建
      ├── 00-前言.md              # ↓ 以下均由 textbook 流水线创建,init 一律不建
      ├── 00-教材设计.md
      ├── 01-<章标题>.md …
      ├── 98-参考答案.md
      ├── 99-表现性任务.md
      ├── 术语表.md
      └── .progress.json
      ```
      
      **多教材工作区布局**(未来还会写多本):
      
      ```text
      <位置>/<工作区名>/          ← git 仓库根建在这一层(一库多书)
      ├── .gitignore              # init 创建,工作区级一份即可
      ├── README.md               # 工作区级工作说明,init 创建
      └── <教材名>/                # 每本教材一个子目录,内部构成同单本布局
          └── (流水线文件,init 不建;本次先建首本教材的空目录)
      ```
      
      选择依据(呈现方案时向作者讲清):
      
      - **教材项目目录必须直接以教材名命名**——textbook 的默认约定就是 `./<教材名>/`,目录名与教材名一致时,交接给 textbook 的启动指引最短、最不易错;
      - **多本时 git 建在工作区根而非每本各建**:写作历史集中一处可查,跨教材共用的记号约定、参考素材有统一归属,作者也不必维护 N 个仓库;
      - **工作区只做两层,不按学科再分层**:层级越深,「落盘目录用 <路径>」的指引越长越易写错;真到几十本教材需要分类时再重组也不迟。
      
      ## 2. 目录与命名规则
      
      - 教材名直接当目录名:不含路径分隔符、不以 `.` 开头;书名号《》只出现在对话与 README 正文里,目录名不带;
      - 位置默认当前目录 `./`;作者给绝对路径或 `~` 路径时原样使用,不做二次猜测;
      - 目标目录已存在时的处理见 SKILL.md「安全边界」,本文件不重复。
      
      ## 3. git 初始化规范
      
      1. **先判重**:在目标位置运行 `git rev-parse --show-toplevel 2>/dev/null`——有输出说明该位置已处于某个 git 仓库内。此时跳过 `git init`,并向作者说明:外层仓库会直接跟踪教材文件,再嵌一层反而会让外层看不到教材内容(嵌套仓库对多数人是坑不是功能);
      2. **层级**:`git init` 在布局规则决定的层级执行——单本在项目根,多本在工作区根;
      3. **首次提交**:`.gitignore` 与 README 一起提交,提交信息用 `init: 教材工作目录(textbook-init 创建)`,让历史第一条就说清目录从哪来。
      
      ## 4. .gitignore 内容与理由
      
      ```gitignore
      # 系统与编辑器杂项
      .DS_Store
      Thumbs.db
      *.swp
      ```
      
      **`.progress.json` 必须入库,不许写进 .gitignore**:它是断点续写的状态文件,随仓库走才能换一台机器接着写;忽略它等于把「中断可续」锁死在单台机器上。同理,教材正文、设计文档、术语表全部入库——教材仓库里没有"构建产物",一切都是手稿。
      
      ## 5. README 工作说明模板
      
      实例化规则:尖括号项全部替换为当前项目真实值;多教材工作区版把首段主语换成工作区,并在文件表加「所属教材」列、列出已规划的教材清单。写完通读一遍,确保没有残留尖括号或待填空白。
      
      以《线性代数入门》单本布局为例:
      
      ```markdown
      # 线性代数入门 · 教材写作工作目录
      
      本目录由 textbook-init 创建,是《线性代数入门》的教材写作工作目录,配合 textbook skill 组合使用(Claude Code / Codex / WorkBuddy 等宿主装好该组合后均可)。
      
      ## 怎么开始写 / 续写
      
      - 首次开写:对你的 AI 编程助手说 `写教材《线性代数入门》,落盘目录用 ./线性代数入门/`
      - 中断后续写:再说一遍同样的话即可——textbook 会读 `.progress.json` 从断点继续,已完成的章不会被重写。
      
      ## 目录里的文件
      
      | 文件 | 谁创建/维护 | 说明 |
      | ---- | ----------- | ---- |
      | README.md、.gitignore | textbook-init | 本说明与版本管理配置 |
      | 00-前言.md | textbook(主 skill) | **读者从这里进入**:本书写给谁、怎么用这本书、带链接的目录,阶段 5 定稿时生成 |
      | 00-教材设计.md | textbook-outline | 教学定位、UbD 五件套、章节树与梯度规划(两处 gate 确认后写入)——作者向设计文档,不必给读者 |
      | 01-….md 等章文件 | textbook-chapter | 每章一个文件,四段式结构;独立习题只留题干,答案在 98 |
      | 98-参考答案.md | textbook(主 skill) | 独立习题的答案与验证记录,逐章追加——与题目分开放,读者才能先做后对 |
      | 99-表现性任务.md | textbook(主 skill) | 综合任务与评分标准,阶段 5 定稿时生成 |
      | 术语表.md | textbook(主 skill) | 术语与符号约定两节,逐章追加——读者查词、查记号都在这里 |
      | .progress.json | textbook(主 skill) | 写作进度状态,断点续写的唯一依据,请勿手动编辑 |
      
      ## 注意
      
      - 正文中带 `⚠️ 需作者确认` 标注的题目,表示答案未通过验证(该题型的验证手段或降级路径都走不通),出版前须逐条人工核对;
      - 全部文件(含 `.progress.json`)纳入 git 版本管理,随时可回看与回退。
      ```
      
      模板只是省心默认:作者团队若已有 README 惯例,以作者的为准。
      
  • SKILL.md 6 KB
    ---
    name: textbook-init
    description: 动笔写教材前要先规划并创建工作目录时用它:规划单本教材项目目录或多教材工作区,可选 git 版本管理与 README 工作说明,建好后把产出交接给 textbook。触发语如"初始化教材项目"、"创建教材工作目录"、"规划教材工作区"、"建一个写教材的目录"。只搭目录骨架,不创建流水线文件(.progress.json、00-教材设计.md、术语表.md)。写正文用 textbook(不经 init 它也会自建默认目录),续写已有项目直接用 textbook。需与 textbook 系列其余 skill 装在同一 skills 目录下。
    slug: textbook-init
    displayName: 教材写作·项目初始化
    version: 0.6.2
    summary: 动笔前规划并创建教材工作目录(可选 git 与 README 工作说明),只搭目录骨架、不碰流水线文件,产出交接给 textbook。需与 textbook 同级安装。
    ---
    
    # textbook-init
    
    动笔前的工作目录规划师:一轮提问弄清作者要写一本还是多本、放在哪里、要不要版本管理,呈现目录方案等确认后创建目录骨架(可含 git 仓库与 README 工作说明),最后把作者交给 textbook 主流程开写。教材项目内部的文件构成以 [../textbook/references/handoff-contract.md](../textbook/references/handoff-contract.md)(下称"契约文档")第 3 节为唯一权威定义,本 skill 只引用不重复定义。
    
    ## 何时不触发
    
    - 已有教材项目要续写(目录里有 `.progress.json`)——直接用 textbook,它会按状态文件定位续点;
    - 作者直接开写、不关心目录规划——textbook 启动时自会询问一次并默认 `./<教材名>/`,无需先走本 skill;
    - 整理与教材写作无关的目录——本 skill 只服务教材项目的开局。
    
    ## 与流水线的关系
    
    本 skill 只独立触发:不被 textbook 调度,不进五阶段契约链,产出是"就绪的空工作目录 + 启动指引"。
    
    **流水线文件一律不建不改**:`.progress.json`(主 skill 是唯一写者,这是项目红线)、`00-前言.md`(阶段 5 派生生成)、`00-教材设计.md`(textbook-outline 写入)、`NN-<章标题>.md`(逐章生成)、`98-参考答案.md`(逐章追加)、`99-表现性任务.md`(阶段 5 派生生成)、`术语表.md`(主 skill 追加维护)。动机:主 skill 的重入判定靠"这些文件存不存在、内容有没有"定位续点(契约文档第 4 节),预建空文件会让它把全新项目误判成半成品;空壳文件混进交付物也违背"交付即可用"的底线。本 skill 创建的只有目录本身、`.gitignore` 和 README 工作说明——均在契约之外。
    
    ## 工作流
    
    ### 第 1 步:一轮提问
    
    用 AskUserQuestion **一轮**收集四项(触发语已说明的项不再问):
    
    1. **教材名**:如《线性代数入门》——将成为项目目录名;
    2. **规划范围**:a) 只写这一本  b) 未来还会写多本(追加:工作区名,默认"教材工作区");
    3. **位置**:项目/工作区建在哪个目录下,默认当前目录 `./`;
    4. **git 版本管理**:默认要(教材写作周期以周计,版本保护值回票价);作者明确不要则跳过。
    
    若当前环境没有 AskUserQuestion 工具,降级为编号提问并等待文本回复:
    
    ```text
    请回答以下问题(回复格式如 "1 线性代数入门 2b 教材工作区 3 ./ 4 要"):
    1. 教材名?
    2. 规划范围? a) 只写这一本  b) 未来还会写多本(请给工作区名,默认"教材工作区")
    3. 建在哪个目录下?(默认当前目录 ./)
    4. 要 git 版本管理吗?(默认要)
    ```
    
    按语义宽松解析回复,只就有歧义的一项追问。
    
    ### 第 2 步:方案呈现与确认
    
    按 [references/workspace-layout.md](references/workspace-layout.md) 第 1、2 节的布局规则组装方案,完整呈现后停下:
    
    - **目录树预览**:含流水线随后会生成的文件,逐项注明"由 textbook 流水线创建"——让作者看到最终形态,同时不误以为本 skill 会建它们;
    - **关键选择及理由**:单本还是工作区分层、git 建在哪一层、`.gitignore` 为什么不忽略 `.progress.json`;
    - 停点格式沿用契约文档第 5 节:
    
    `⏸ 等待确认:工作目录方案(回复"确认"开始创建,或直接提出修改)`
    
    作者提出修改 → 更新方案后**重新完整呈现**再等确认,循环直到明确确认;"确认,但把位置改一下"这类混合答复按修改分支处理(修改优先于确认,判定语义同契约文档第 5 节)。**确认前不创建任何东西。**
    
    ### 第 3 步:创建与交接
    
    1. **建目录**:按确认的方案 `mkdir -p`;
    2. **git 判重**:在目标位置检查是否已处于某个 git 仓库内(方法见 references/workspace-layout.md 第 3 节)——已在,则跳过 git init 并向作者说明原因;
    3. **git 初始化**(作者要 git 且未命中判重):git init + 写 `.gitignore` + 首次提交,层级与内容规范见 references/workspace-layout.md 第 3、4 节;
    4. **README 工作说明**:按 references/workspace-layout.md 第 5 节模板实例化——所有字段填当前项目的真实值,写完通读确认没有残留尖括号或待填空白;
    5. **打印成果与下一步指引**:
    
    ```text
    ✅ 工作目录就绪:<实际路径>
    接下来对我说:写教材《<教材名>》,落盘目录用 <项目目录路径>
    (textbook 会在该目录里创建 .progress.json 并从教学定位开始五阶段流程)
    ```
    
    ## 安全边界
    
    - **目标目录已存在且非空**:呈现现有内容清单,绝不覆盖、移动或删除任何既有文件;其中若发现 `.progress.json`,说明这是进行中的教材项目,提示作者直接对 textbook 说续写,本 skill 就此打住;
    - **README / .gitignore 已存在**:保留原文件不动,仅提示作者自行核对是否需要补充;
    - 本 skill 的全部动作**只增不删**:创建目录、创建新文件、git init 与提交——不含任何删除、移动、覆盖操作。
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related