项目配置
只需在 config.yaml 中写几行,即可让工作流按你的意愿规划变更。
openspec/config.yaml 告诉工作流你希望如何规划变更。
例如,以下配置会更新 tasks.md 工件的创建规则:
rules:
tasks:
- End every task with a commit当智能体运行时,它会读取这些规则,并确保每个任务都以提交步骤结束。
规则要简短。这里的所有内容都会进入智能体的上下文,冗长的规则可能会使输出变差。
工作原理
config.yaml 包含智能体在创建工件或执行工作流时收到的指令。
每次运行都会发生以下过程:
- 你运行一个工作流(例如
/openspec-propose)。 - 智能体调用
openspec instructions命令。 - 该命令从 config.yaml 中读取你的上下文和规则。
- OpenSpec 的内置指令与你的自定义内容会合并为一个提示词,提供给智能体。
- 智能体按照该提示词编写工件。
例如,假设有一个 context 字段以及本页顶部的规则,以下是 openspec instructions 针对 tasks.md 返回的内容(已精简并标注):
<artifact id="tasks" change="add-dark-mode" schema="spec-driven">
<!-- 来自你的 config.yaml:context -->
<project_context>
Designs and tasks must cover Windows, macOS, and Linux
Write all artifacts in Spanish
</project_context>
<!-- 来自你的 config.yaml:tasks 的规则 -->
<rules>
- End every task with a commit
</rules>
<!-- 来自 OpenSpec:内置指导 -->
<instruction>
...how to write a good tasks.md...
</instruction>
<template>
...the tasks.md structure to fill in...
</template>
</artifact>你的配置会先送达,然后才是 OpenSpec 的内置指令和模板。规则会追加到内置内容中,绝不会替换它们。对 config.yaml 的修改会在下一次运行时传递给智能体。
字段
有三个字段会影响智能体收到的内容。每个字段的精确约定(类型、限制、校验)见 项目配置(config.yaml)。
| 字段 | 作用 | 注入到 |
|---|---|---|
context | 智能体始终会收到的指令 | 所有环节:每个工件、apply、archive |
rules | 针对单个工件的额外指令 | 仅该工件的创建过程 |
operations | 关于如何执行某个工作流步骤的指导 | 仅 apply 和 archive |
config.yaml 的其他字段(schema、store、references)用于选择项目使用哪个 schema 以及哪个 OpenSpec 根目录。约定页面中涵盖了这些内容。
最后一列是精确的,因此某个字段只会到达其中列出的步骤。特别是,verify 永远不会收到 rules。它会根据工件中写明的内容来检查实现。
context
context 是智能体在创建工件、执行任务或归档变更时收到的背景信息。
context: |
We ship cross-platform. Designs and tasks must cover Windows, macOS, and Linux
Write all artifacts in Spanish使用 context 来提供应当影响工作流输出的事实和约束。将长期有效的项目文档放在项目的文档文件中,并省略智能体通过阅读代码就能了解的任何内容。
其他语言:由于上下文会到达每个工件,你可以添加 Write all artifacts in Spanish.,指示智能体用西班牙语编写 proposal、spec、design 和 tasks 工件。
rules
rules 附加到单个工件,并以工件 id 作为键。每一行都会添加到该工件的内置指导中:
rules:
proposal:
- Keep proposals under 500 words
tasks:
- Every UI task includes a Playwright test这样 proposal 会保持简短,tasks.md 也始终会规划浏览器测试。其他所有工件都不受影响。
operations
operations 指导智能体如何执行 apply 和 archive,而不是规定工件的内容:
operations:
apply:
guidance:
- Run the linter before marking a task complete
archive:
guidance:
- Summarize what shipped before archiving在执行 apply 期间,智能体会在完成任务时运行 lint 检查。在 archive 期间,它会以摘要收尾。
当 config.yaml 不够用时
配置会在标准工作流之上添加指令,但无法改变存在哪些工件或它们的结构方式。当你需要这种级别的控制,或者规则无法稳定地引导行为时,请复刻一个 schema。