关于 speckit-constitution
speckit-constitution 是基于 GitHub Spec Kit 官方模板的技能,用于更新项目章程并检查治理规则。它限定修改范围为章程文件,并处理版本、日期、扩展钩子及后续意图。
主要功能
- 01更新项目章程内容
- 02检查治理与版本规则
- 03识别并延后非治理意图
- 04处理章程前后扩展钩子
适用场景
- 01依据用户输入修订项目治理原则
- 02在更新章程时保留适用的现有内容
- 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):
输出上述内容后,必须实际调用该钩子,并等待其完成后再继续。调用方式与在此 Agent/会话中自行运行命令的方式相同(调用方式可能与字面上的## 扩展钩子 **自动前置钩子**:{extension} 正在执行:`/{command}` EXECUTE_COMMAND: {command} 请等待钩子命令执行完毕,再继续执行大纲中的内容。{command}标识不同,例如,技能模式的 Agent 会运行/skill:speckit-...或$speckit-...)。仅输出该内容并不会运行钩子。
- 可选钩子(
- 如果没有注册钩子或
.specify/extensions.yml不存在,则静默跳过
大纲
你正在更新项目章程 .specify/memory/constitution.md。当前章程脚手架会在命令执行时,通过 Spec Kit 预设/模板解析栈从 constitution-template 解析得到。
请遵循以下执行流程:
-
在仓库根目录运行
{SCRIPT},并将TEMPLATE_CONTENT解析为当前模板。- 共享解析器会在回退到核心模板之前,应用项目覆盖项,并组合预设层和扩展层。 继续之前,解析必须成功。
- 如果解析失败,请停止并报告解析错误;不要只使用一个贡献模板层继续操作。
- 如果
.specify/memory/constitution.md存在,将其加载为当前项目特定值和修订内容的来源。应用新解析出的脚手架时,保留仍然适用的信息。 - 如果该文件不存在,则使用解析出的模板作为初始文档。
- 不要写回任何受版本控制的模板层。
- 识别所有形如
[ALL_CAPS_IDENTIFIER]的占位符标记。 重要:用户要求的原则数量可能少于或多于模板中的数量。如果用户指定了数量,请遵照要求,并依照通用模板更新文档。
-
收集或推导占位符的值:
- 如果用户输入(对话)中提供了值,请使用该值。
- 否则,根据现有仓库上下文(README、文档、嵌入的先前章程版本)推断。
- 对于治理日期:
RATIFICATION_DATE是最初通过日期(如果未知,请询问或标记为 TODO);如果有更改,LAST_AMENDED_DATE为今天的日期,否则沿用之前的日期。 CONSTITUTION_VERSION必须按照语义化版本规则递增:- MAJOR:不兼容的治理/原则移除或重新定义。
- MINOR:新增原则/章节,或实质性扩展指导内容。
- PATCH:澄清、措辞调整、修正拼写错误,以及不涉及语义的改进。
- 如果版本递增类型存在歧义,请在最终确定之前说明理由。
-
使用解析出的模板作为必需结构,起草更新后的章程内容:
- 将每个占位符替换为具体文本(不得保留方括号标记;项目选择暂不定义且有意保留的模板占位符除外——必须明确说明保留理由)。
- 保留标题层级;替换后可删除注释,除非其仍能提供澄清指导。
- 每个原则章节都应包含:简洁的名称行,以及概述不可妥协规则的段落(或项目符号列表);如理由并非显而易见,还应明确说明理由。
- 治理章节应列出修订流程、版本控制政策和合规审查预期。
-
在章程文件更新后的顶部以 HTML 注释形式添加同步影响报告。 此报告是供人工审查修订内容的临时草稿,不属于治理内容;提交修订后的章程文件前,预期将其删除。
- 版本变更:旧版本 → 新版本
- 列出修改过的原则(旧标题 → 新标题,如有重命名)
- 新增的章节
- 移除的章节
- 后续 TODO(如有有意暂缓处理的占位符)
-
最终输出前进行验证:
- 不得遗留未说明的方括号标记。
- 版本行必须与报告一致。
- 日期必须采用 YYYY-MM-DD 格式。
- 原则必须采用陈述句,且可检验;不得使用含糊措辞(将“should”替换为 MUST/SHOULD,并在适当处说明理由)。
-
将完成后的章程写回
.specify/memory/constitution.md(覆盖原文件)。 -
向用户输出最终摘要,包含:
- 新版本及版本递增理由。
- 任何需要手动跟进的 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):
输出上述内容后,必须实际调用该钩子并等待其完成,然后才能继续。调用方式应与在此 Agent/会话中亲自运行命令时相同(调用形式可能与## 扩展钩子 **自动钩子**:{extension} 正在执行:`/{command}` EXECUTE_COMMAND: {command}{command}ID 的字面形式不同,例如,技能模式 Agent 运行/skill:speckit-...或$speckit-...)。仅输出上述内容并不等于运行钩子。
- 可选钩子(
- 如果没有注册钩子,或
.specify/extensions.yml不存在,则静默跳过