# Openspec Apply Change

> 实现 OpenSpec 变更中的任务。当用户想要开始实现、继续实现或逐步完成任务时使用。

- Skill: `txyzznc/openspec-apply-change` (Agent Skill)
- Install (CLI): `npx skillmds@latest add txyzznc/openspec-apply-change`
- Raw SKILL.md: https://api.skillmd.com/api/skills/txyzznc/openspec-apply-change/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: txyzznc (https://skillmd.com/u/txyzznc)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/txyzznc/openspec-apply-change

---


实现 OpenSpec 变更中的任务。

**输入**：可选指定变更名称。若未提供，尝试从对话上下文中推断。若含糊不清，**必须**提示用户选择可用的变更。

**步骤**

1. **选择变更**

   若提供了名称则直接使用，否则：
   - 从对话上下文中推断用户提到的变更
   - 若只有一个活跃变更则自动选择
   - 若有歧义，运行 `openspec list --json` 获取可用变更，并使用 **AskUserQuestion 工具**让用户选择

   始终声明："正在使用变更：<name>"，以及如何覆盖（例如 `/opsx:apply <other>`）。

2. **检查状态以了解 schema**
   ```bash
   openspec status --change "<name>" --json
   ```
   解析 JSON 以了解：
   - `schemaName`：正在使用的工作流（例如 "spec-driven"）
   - 哪个 artifact 包含任务（spec-driven 通常是 "tasks"，其他 schema 请查看状态）

3. **获取应用指令**

   ```bash
   openspec instructions apply --change "<name>" --json
   ```

   返回内容包括：
   - 上下文文件路径（因 schema 而异，可能是 proposal/specs/design/tasks 或 spec/tests/implementation/docs）
   - 进度（总数、已完成、剩余）
   - 带状态的任务列表
   - 基于当前状态的动态指令

   **处理各种状态：**
   - 若 `state: "blocked"`（缺少 artifact）：显示提示，建议使用 openspec-continue-change
   - 若 `state: "all_done"`：祝贺用户，建议归档
   - 其他情况：继续实现

4. **读取上下文文件**

   读取应用指令输出中 `contextFiles` 列出的文件。
   文件因所用 schema 而异：
   - **spec-driven**：proposal、specs、design、tasks
   - 其他 schema：遵循 CLI 输出中的 contextFiles

5. **显示当前进度**

   显示：
   - 使用的 schema
   - 进度："N/M 任务已完成"
   - 剩余任务概览
   - CLI 的动态指令

6. **实现任务（循环直到完成或阻塞）**

   对每个待处理任务：
   - 显示正在处理的任务
   - 进行所需的代码更改
   - 保持更改最小化且聚焦
   - 在任务文件中标记任务完成：`- [ ]` → `- [x]`
   - 继续下一个任务

   **在以下情况暂停：**
   - 任务不清晰 → 请求澄清
   - 实现过程中发现设计问题 → 建议更新 artifact
   - 遇到错误或阻塞 → 报告并等待指导
   - 用户中断

7. **完成或暂停时显示状态**

   显示：
   - 本次会话完成的任务
   - 总体进度："N/M 任务已完成"
   - 若全部完成：建议归档
   - 若暂停：解释原因并等待指导

**实现过程中的输出**

```
## 正在实现：<change-name>（schema：<schema-name>）

正在处理任务 3/7：<任务描述>
[...实现进行中...]
✓ 任务完成

正在处理任务 4/7：<任务描述>
[...实现进行中...]
✓ 任务完成
```

**完成时的输出**

```
## 实现完成

**变更：** <change-name>
**Schema：** <schema-name>
**进度：** 7/7 任务已完成 ✓

### 本次会话完成的任务
- [x] 任务 1
- [x] 任务 2
...

所有任务已完成！可以归档此变更了。
```

**暂停时的输出（遇到问题）**

```
## 实现已暂停

**变更：** <change-name>
**Schema：** <schema-name>
**进度：** 4/7 任务已完成

### 遇到的问题
<问题描述>

**选项：**
1. <选项 1>
2. <选项 2>
3. 其他方案

您希望如何处理？
```

**注意事项**
- 持续处理任务直到完成或阻塞
- 开始前始终读取上下文文件（来自应用指令输出）
- 若任务含糊，暂停并请求澄清后再实现
- 若实现过程中发现问题，暂停并建议更新 artifact
- 保持代码更改最小化，聚焦于每个任务
- 完成每个任务后立即更新任务复选框
- 遇到错误、阻塞或需求不明确时暂停，不要猜测
- 使用 CLI 输出中的 contextFiles，不要假设特定文件名

**流式工作流集成**

此 skill 支持"对变更执行操作"模型：

- **随时可调用**：在所有 artifact 完成之前（若任务存在）、部分实现之后、与其他操作交替进行
- **允许更新 artifact**：若实现过程中发现设计问题，建议更新 artifact——不锁定阶段，灵活操作

