mcpField
S
speckit-constitution

speckit-constitution

github.com/full-stack-skills开发066 次安装4 周前更新
代码仓库

关于 speckit-constitution

speckit-constitution 是基于 GitHub Spec Kit 官方模板的技能,用于更新项目章程并检查治理规则。它限定修改范围为章程文件,并处理版本、日期、扩展钩子及后续意图。

主要功能

  1. 01更新项目章程内容
  2. 02检查治理与版本规则
  3. 03识别并延后非治理意图
  4. 04处理章程前后扩展钩子

适用场景

  1. 01依据用户输入修订项目治理原则
  2. 02在更新章程时保留适用的现有内容
  3. 03将功能实现等请求留待后续 Spec Kit 命令处理

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/full-stack-skills/speckit-skills --skill speckit-constitution

安装后在 Claude Code 中输入/speckit-constitution确认已加载。

附带文件agents/openai.yamlLICENSE.txt

详细介绍

speckit-constitution

本技能内容源自 GitHub Spec Kit 官方提示词模板。

  • 上游:https://github.com/github/spec-kit
  • 许可:MIT License, Copyright GitHub, Inc.(完整文本见同目录 LICENSE.txt)
  • 适配说明:官方模板面向斜杠命令场景;原文中的 $ARGUMENTS 指用户在对话中给出的请求, 跨命令引用(如 speckit.plan)在本技能体系中对应同名的 speckit-* 技能。 其余内容保持与上游一致,未作改写。

用户输入

$ARGUMENTS

如果用户输入不为空,继续之前必须先考虑用户输入。

范围限制

此命令本身的工作仅限于更新项目章程。依赖的模板和命令会在运行时读取章程,此处不会修改它们。

  • 将用户输入的每个部分分类为章程内容或单独的、非治理意图。
  • 如果输入包含功能实现、代码生成、重构、构建或部署请求,不得执行这些请求。应将其提取为待处理意图。
  • 不得创建、修改或删除应用程序源文件、功能路由、组件、测试、部署文件或其他与章程工作流无关的产物。
  • 如果无法确定某条指令是否属于章程内容,请在进行更改前询问以澄清。
  • 完成章程更新后,为每个待处理意图添加一个 Next Actions 部分。列出原始意图,并建议适当的后续 Spec Kit 命令,例如 __SPECKIT_COMMAND_SPECIFY__,但不要调用该命令。
  • 如果不存在非治理意图,则省略 Next Actions 部分。

执行前检查

检查扩展钩子(更新章程前):

  • 检查项目根目录中是否存在 .specify/extensions.yml。
  • 如果存在,请读取该文件并查找 hooks.before_constitution 键下的条目
  • 如果无法解析 YAML 或 YAML 无效,不得默默跳过:告知用户无法读取 .specify/extensions.yml(包含解析器错误),并说明未检查任何钩子,包括其中注册的任何强制钩子(optional: false),然后正常继续
  • 筛除 enabled 明确设为 false 的钩子。没有 enabled 字段的钩子默认视为已启用。
  • 对其余每个钩子,不要尝试解读或求值钩子的 condition 表达式:
    • 如果钩子没有 condition 字段,或该字段为 null/空值,则视为可执行
    • 如果钩子定义了非空的 condition,则跳过该钩子,并将条件求值留给 HookExecutor 实现
  • 对每个可执行钩子,根据其 optional 标志输出以下内容:
    • 可选钩子(optional: true):
      ## 扩展钩子
      
      **可选前置钩子**:{extension}
      命令:`/{command}`
      描述:{description}
      
      提示词:{prompt}
      执行方式:`/{command}`
      
    • 强制钩子(optional: false):
      ## 扩展钩子
      
      **自动前置钩子**:{extension}
      正在执行:`/{command}`
      EXECUTE_COMMAND: {command}
      
      请等待钩子命令执行完毕,再继续执行大纲中的内容。
      
      输出上述内容后,必须实际调用该钩子,并等待其完成后再继续。调用方式与在此 Agent/会话中自行运行命令的方式相同(调用方式可能与字面上的 {command} 标识不同,例如,技能模式的 Agent 会运行 /skill:speckit-... 或 $speckit-...)。仅输出该内容并不会运行钩子。
  • 如果没有注册钩子或 .specify/extensions.yml 不存在,则静默跳过

大纲

你正在更新项目章程 .specify/memory/constitution.md。当前章程脚手架会在命令执行时,通过 Spec Kit 预设/模板解析栈从 constitution-template 解析得到。

请遵循以下执行流程:

  1. 在仓库根目录运行 {SCRIPT},并将 TEMPLATE_CONTENT 解析为当前模板。

    • 共享解析器会在回退到核心模板之前,应用项目覆盖项,并组合预设层和扩展层。 继续之前,解析必须成功。
    • 如果解析失败,请停止并报告解析错误;不要只使用一个贡献模板层继续操作。
    • 如果 .specify/memory/constitution.md 存在,将其加载为当前项目特定值和修订内容的来源。应用新解析出的脚手架时,保留仍然适用的信息。
    • 如果该文件不存在,则使用解析出的模板作为初始文档。
    • 不要写回任何受版本控制的模板层。
    • 识别所有形如 [ALL_CAPS_IDENTIFIER] 的占位符标记。 重要:用户要求的原则数量可能少于或多于模板中的数量。如果用户指定了数量,请遵照要求,并依照通用模板更新文档。
  2. 收集或推导占位符的值:

    • 如果用户输入(对话)中提供了值,请使用该值。
    • 否则,根据现有仓库上下文(README、文档、嵌入的先前章程版本)推断。
    • 对于治理日期:RATIFICATION_DATE 是最初通过日期(如果未知,请询问或标记为 TODO);如果有更改,LAST_AMENDED_DATE 为今天的日期,否则沿用之前的日期。
    • CONSTITUTION_VERSION 必须按照语义化版本规则递增:
      • MAJOR:不兼容的治理/原则移除或重新定义。
      • MINOR:新增原则/章节,或实质性扩展指导内容。
      • PATCH:澄清、措辞调整、修正拼写错误,以及不涉及语义的改进。
    • 如果版本递增类型存在歧义,请在最终确定之前说明理由。
  3. 使用解析出的模板作为必需结构,起草更新后的章程内容:

    • 将每个占位符替换为具体文本(不得保留方括号标记;项目选择暂不定义且有意保留的模板占位符除外——必须明确说明保留理由)。
    • 保留标题层级;替换后可删除注释,除非其仍能提供澄清指导。
    • 每个原则章节都应包含:简洁的名称行,以及概述不可妥协规则的段落(或项目符号列表);如理由并非显而易见,还应明确说明理由。
    • 治理章节应列出修订流程、版本控制政策和合规审查预期。
  4. 在章程文件更新后的顶部以 HTML 注释形式添加同步影响报告。 此报告是供人工审查修订内容的临时草稿,不属于治理内容;提交修订后的章程文件前,预期将其删除。

    • 版本变更:旧版本 → 新版本
    • 列出修改过的原则(旧标题 → 新标题,如有重命名)
    • 新增的章节
    • 移除的章节
    • 后续 TODO(如有有意暂缓处理的占位符)
  5. 最终输出前进行验证:

    • 不得遗留未说明的方括号标记。
    • 版本行必须与报告一致。
    • 日期必须采用 YYYY-MM-DD 格式。
    • 原则必须采用陈述句,且可检验;不得使用含糊措辞(将“should”替换为 MUST/SHOULD,并在适当处说明理由)。
  6. 将完成后的章程写回 .specify/memory/constitution.md(覆盖原文件)。

  7. 向用户输出最终摘要,包含:

    • 新版本及版本递增理由。
    • 任何需要手动跟进的 TODO 占位符或暂缓事项。
    • 建议的提交消息(例如:docs: amend constitution to vX.Y.Z (principle additions + governance update))。
    • 对任何暂缓的非治理意图,添加 Next Actions 章节。

格式与风格要求:

  • 严格按照模板使用 Markdown 标题(不要降低或提升标题级别)。
  • 为便于阅读,应换行处理过长的说明(最好少于 100 个字符),但不要为了强行满足要求而生硬换行。
  • 各部分之间只保留一个空行。
  • 避免行尾空格。

如果用户只提供了部分更新(例如,只修订了一条原则),仍需执行验证和版本决策步骤。

如果缺少关键信息(例如,确实无法确定批准日期),请插入 TODO(<FIELD_NAME>): explanation,并在同步影响报告的待处理事项中列出。

只写入 .specify/memory/constitution.md;不要创建或修改模板源文件。

执行后检查

检查扩展钩子(更新章程后): 检查项目根目录中是否存在 .specify/extensions.yml。

  • 如果存在,请读取该文件,并查找 hooks.after_constitution 键下的条目
  • 如果 YAML 无法解析或无效,不要默默跳过:请告知用户 .specify/extensions.yml 无法读取(附上解析器错误),并说明未检查任何钩子,包括在该文件中注册的任何强制钩子(optional: false),然后继续正常操作
  • 过滤掉 enabled 明确设为 false 的钩子。未设置 enabled 字段的钩子默认视为启用
  • 对于其余钩子,不要尝试解释或评估钩子的 condition 表达式:
    • 如果钩子没有 condition 字段,或该字段为 null/空值,则视为可执行钩子
    • 如果钩子定义了非空的 condition,则跳过该钩子,并将条件评估留给 HookExecutor 实现
  • 对于每个可执行钩子,根据其 optional 标志输出以下内容:
    • 可选钩子(optional: true):
      ## 扩展钩子
      
      **可选钩子**:{extension}
      命令:`/{command}`
      描述:{description}
      
      提示词:{prompt}
      执行方式:`/{command}`
      
    • 强制钩子(optional: false):
      ## 扩展钩子
      
      **自动钩子**:{extension}
      正在执行:`/{command}`
      EXECUTE_COMMAND: {command}
      
      输出上述内容后,必须实际调用该钩子并等待其完成,然后才能继续。调用方式应与在此 Agent/会话中亲自运行命令时相同(调用形式可能与 {command} ID 的字面形式不同,例如,技能模式 Agent 运行 /skill:speckit-... 或 $speckit-...)。仅输出上述内容并不等于运行钩子。
  • 如果没有注册钩子,或 .specify/extensions.yml 不存在,则静默跳过

评论

支持 Markdown