Communitygithub.com

AmanVarshney01/tcut

更新 OpenSpec 变更的现有规划制品并保持它们之间的一致性。当用户想要修改变更计划、融入新决策或编辑后协调制品时使用。绝不编辑代码。

tcut 是什么?

`tcut` 技能专为 AI 代理(如 Claude Code、Cursor、Codex)设计,用于维护 OpenSpec 变更中的规划制品(如设计文档、规范、任务列表)。它确保这些制品在面向用户的修改后保持一致,例如当“设计现在使用 X”时,它会更新相关文件并检查所有现有制品是否存在矛盾、遗漏或重复。该技能强调用户确认,不会自动更改,并严格遵守现有文件,不会创建新制品——将新制品的创建推迟给 `/opsx:continue`。它在 OpenSpec 生态系统中运行,通过 `openspec` CLI 命令(`status`、`list`、`instructions`)管理操作,并支持本地或指定存储库。`tcut` 专注于规划制品,绝不触及实现代码,必要时建议使用 `/opsx:apply`,从而在敏捷工作流中实现清晰、可控的变更演进。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AmanVarshney01/tcut/tree/HEAD/.claude/skills/openspec-update-change

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

修改变更的现有规划制品并保持它们之间的一致性。绝不编辑代码。

存储选择: 如果用户指定了一个存储(存储是在本机上注册的独立 OpenSpec 仓库)或者工作在其中,运行 openspec store list --json 来发现已注册的存储 ID,然后在读取或写入规范和变更的命令(new change、status、instructions、list、show、validate、archive、doctor、context)上传递 --store <id>。其他命令不需要此标志。命令打印的提示信息已经包含该标志;请在其后的操作中保留它。如果没有存储,命令将对最近的本地 openspec/ 根目录进行操作。

输入: 可选地指定变更名称。如果省略,检查是否可以从对话上下文中推断出来。如果含糊不清或模棱两可,你必须提示用户从可用的变更中选择。

步骤

  1. 如果没有提供变更名称,提示用户选择

    运行 openspec list --json 获取按最近修改时间排序的可用变更。然后使用 AskUserQuestion 工具 让用户选择要更新哪个变更。

    展示最近修改的前 3-4 个变更作为选项,显示:

    • 变更名称
    • 模式(来自 schema 字段(如果存在),否则为 "spec-driven")
    • 状态(例如 "0/5 个任务"、"已完成"、"无任务")
    • 最近修改时间(来自 lastModified 字段)

    将最近修改的变更标记为 "(推荐)",因为这很可能是用户想要更新的。

    重要:不要猜测或自动选择变更。始终让用户选择。

  2. 获取变更的制品

    openspec status --change "<名称>" --json
    

    解析 JSON 以了解当前状态。响应包括:

    • schemaName:正在使用的工作流模式(例如 "spec-driven")
    • artifacts:制品数组,包含其状态("done"、"ready"、"blocked")
    • isComplete:布尔值,指示所有制品是否已完成
    • planningHome、changeRoot、artifactPaths 和 actionContext:路径和作用域上下文。使用这些而不是假定仓库本地路径。

    制品 ID 和路径来自活动模式——不要假设它们,也不要根据硬编码的制品名称进行分支。自定义模式必须能够无需修改地工作。

    要编辑的文件是 artifactPaths.<id>.existingOutputPaths——磁盘上存在的具体文件,已为通配符制品(例如 specs/**/*.md)展开了通配符。不要写入 resolvedOutputPath:对于通配符制品,它仍然是通配符模式,而不是真实文件。

  3. 理解请求

    • 如果用户要求进行特定修订(“设计现在使用 X”),则以此为起始编辑。
    • 如果他们只说“更新”/“保持一致性”,则将其视为一致性审查:读取现有制品并检查它们彼此之间是否存在矛盾、遗漏和重复。
  4. 读取并协调

    • 读取请求涉及的制品以及变更的其他现有制品。
    • 应用请求的编辑。然后对照检查每个其他现有制品——以任何方向:对后面制品的编辑可能需要修改前面的制品,反之亦然。构建顺序是建议的阅读顺序,而不是哪些制品可以修订的约束。
    • 记录所有现在不一致、缺失或矛盾的内容。
    • 仅修改已存在的文件(existingOutputPaths)。不要创建尚不存在的制品,也不要在通配符制品下发明新文件——记录它们并提示用户使用 /opsx:continue 来创建它们。
    • 如果变更已经一致,则说明情况并不做任何编辑。
  5. 确认并应用,一次一个制品

    • 展示每个提议的修订及其原因。仅在用户确认后才写入。
    • 如果用户拒绝修订,则不写入——保持该制品不变。
    • 当需要大量重写时,首先获取该制品的规则和模板:
      openspec instructions <制品-id> --change "<名称>" --json
      
  6. 指向下一步(仅指导——绝不执行)

    • 仍然缺失的制品 -> 建议使用 /opsx:continue 来创建它们。
    • 变更已实施(任务已勾选/已应用)-> 代码可能不再与修订后的计划匹配;建议使用 /opsx:apply 将差异引入代码。
    • 所有内容已完成并已实施 -> 建议使用 /opsx:archive。

输出

每次调用后,显示:

  • 哪些制品被修订(以及哪些提议的修订被拒绝)
  • 任何推迟到 /opsx:continue 的内容(尚未创建的制品或文件)
  • 变更的当前状态以及推荐的下一步命令

护栏

  • 仅限规划制品——绝不编辑实现代码。如果修订后的计划意味着代码更改,立即停止并指向 /opsx:apply。
  • 使用 openspec status 报告的制品 ID 和路径;绝不要根据硬编码的制品名称进行分支。
  • 仅编辑 existingOutputPaths 中的具体文件;绝不要写入通配符的 resolvedOutputPath。
  • 不要推进构建前沿:没有新制品,通配符制品下没有新文件——这是 /opsx:continue 的工作。
  • 在写入之前与用户确认每个编辑。
  • 如果请求更改了变更的意图而不是完善它,建议使用 /opsx:new 重新开始(“更新 vs. 重新开始”启发式规则)。

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

相关技能