关于 okf
OKF 技能指导 Agent 按 Open Knowledge Format v0.2 创建、维护和读取 Markdown 知识包,强调先查阅规范并用确定性检查器验证。适用于需要将项目知识与代码一同管理的工作流。
主要功能
- 01按规范创建和维护知识包
- 02支持生成、维护与读取模式
- 03按概念拆分 Markdown 文件
- 04记录来源、信任与生命周期信息
- 05运行检查器验证格式
适用场景
- 01从代码或文档整理项目知识
- 02随代码变更维护知识包
- 03将知识包作为任务上下文读取
- 04验证 OKF 文件是否符合规范
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scaccogatto/ okf-skills --skill okf安装后在 Claude Code 中输入/okf确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreference/APACHE-2.0.txtSPEC.mdscripts/okf_init.pytemplates/concept.mdindex.mdlog.md详细介绍
Open Knowledge Format(OKF)技能
OKF 将知识表示为由带有 YAML frontmatter 的 Markdown 文件组成的目录。 它在设计上力求精简:没有架构注册表、运行时或 SDK。你的任务是生成、 维护和使用符合规范的 OKF bundle,而不是依赖你对规范的记忆。
在开展非简单工作前,务必先阅读规范原文: reference/SPEC.md。这是 OKF v0.2 规范的逐字原文, 也是下列所有规则的权威依据。
唯一硬性规则
当且仅当满足以下条件时,bundle 才符合规范(§11):每个非保留的 .md
文件都有可解析的 YAML frontmatter 块,且每个这样的块都包含非空的 type
字段。其他内容都只是建议。使用方 MUST 容忍缺失的可选字段、未知类型和损坏的链接——绝不能因此拒绝 bundle。
应遵循的约定
- 一个概念对应一个文件。 文件路径(去掉
.md)就是概念 ID。 - Frontmatter:
type为必填项。添加title、description、tags有助于使用时,再添加这些字段;仅当概念绑定到真实资源时,才添加resource(规范 URI)——抽象概念应省略该字段。 - 正文: 优先使用结构化 Markdown(标题、表格、列表、围栏代码块)。
常用标题:
# Schema、# Examples、# Computation。 - 交叉链接: 使用标准 Markdown 链接;优先采用相对于 bundle 的绝对路径(
/services/auth-api.md)。链接表示一种关系;关系的类型应写在周围的正文中,而不是链接里。 - 保留文件:
index.md(目录列表,不带 frontmatter;bundle 根目录下的索引除外,它可以包含okf_version和此插件的upkeep: enforced自选启用标记,以及recursive: true(或深度n:根目录以下的层级数,true表示 6),以便让钩子监视嵌套的 git 仓库)和log.md(按 ISO 日期记录历史,最新的在前)。切勿将这些名称用于概念。 log.md中记录的内容: 仅记录生命周期事件,写入 bundle 根目录的log.md:bundle 创建、概念弃用或退役、一个概念取代另一个概念、概念在其来源变更后重新生成,以及一次验证。对概念的常规编辑不应记录:generated和 git 已经记录了这些变更。日志只能追加,因此切勿改写或删除已有条目。
v0.2 系列(均为可选项,但都值得填写)
- 信任 (§5.2):
generated: { by, at }— 谁生成了当前内容,以及何时生成。verified: [{ by, at }]— 此后由谁确认过(单独的映射项视为一条记录)。by按照 参与者约定 (§7) 填写:Agent 使用<producer>/<version>,个人使用human:<id>,自动化任务使用process:<id>。只要内容由个人撰写或签字确认,就使用human:——消费者会根据此前缀划分信任等级。 - 生命周期 (§5.4–5.5):
status: draft|stable|deprecated(缺省表示 stable)和stale_after,即绝对 ISO 8601 日期时间(可使用单独的日期),而非 TTL。 - 溯源 (§5.1):
sources: [{ id, resource, title, author, usage_count, last_modified }],以及与sources同级的usage_window: { from, to },用于界定每个usage_count的统计范围(条目可包含自己的统计范围以覆盖它);没有统计范围的usage_count会触发警告。每个条目都必须包含resource,其值可以是 URL、捆绑包路径或范围描述符。使用 Markdown 脚注标注特定声明,脚注标签使用来源的id:…sharded daily.[^ga4-schema],并添加[^ga4-schema]: …定义。该标签是关联键,必须与sources[].id相匹配。 - 认证 (§10): 经认可的计算是独立概念,类型为
type: Attested Computation,须包含runtime(必填)、parameters、executor、attester,并将计算本身放在# Computation下(或computation:路径中)。需要该值的概念应链接到它。切勿将某个数字对应的 SQL 内联到描述该数字的概念中。
读取 v0.1 捆绑包? 两种结构已被取代 (§13.1):timestamp 现在是 generated.at,正文中的 # Citations 列表现在是 sources。读取时兼容二者,写入时使用 v0.2;并且在 maintain 模式下编辑旧版概念时,将其 frontmatter 一并迁移。验证器会对二者发出警告。
默认捆绑包位置
除非项目已使用其他位置,否则在仓库根目录使用 .okf/。将其与所描述的代码一起提交——知识即代码。
模式
produce — 创建或扩展捆绑包
要从头创建捆绑包? 使用 init 快速路径,而不是手动编写首批文件——它会一次性生成符合规范的 index.md、log.md 和 getting-started.md 概念,并填入完整的推荐 frontmatter:
uv run "${CLAUDE_SKILL_DIR}/scripts/okf_init.py" <target-dir> [--title "..."]
除非提供 --force,否则如果目录中已有 .md 文件,它将拒绝进行修改。然后扩展捆绑包:
- 阅读 reference/SPEC.md。
- 选择来源:code(从源代码、README、文档字符串和配置中提炼概念)、docs/wiki(将页面提炼为概念,并在
sources中记录原始资料)、manual(决策、操作手册、指标)。 - 按领域选择目录布局(例如
services/、datasets/、decisions/)。每个文件对应一个概念。 - 根据 templates/concept.md 编写每个概念:设置描述性
type,填写推荐字段,记录generated和实际阅读过的sources,并交叉链接相关概念。 - 为每个目录添加或更新
index.md(并在根索引中设置okf_version: "0.2")。新建的捆绑包要在log.md中添加带日期的 Creation 条目。扩展已有捆绑包则不需要。 - 验证(见下文)。完成前修复所有错误。
维护 — 让知识包与实际情况保持同步
- 确定此次更改影响哪些概念(按
resource、路径或主题搜索)。这类整理工作正是 Agent 擅长的——一次性更新所有受影响的文件。 - 更新正文和
generated.at(在generated.by中填写你自己的操作者);修复或添加交叉链接;为新资产创建概念;将已移除资产标记为status: deprecated,并在log.md中注明弃用情况,不要悄悄删除上下文。要处理的是整个 v0.1 知识包,而不是某个零散字段?不要手动编辑——运行一次验证器的--migrate。 - 更新相关的
index.md文件。只有当更改属于生命周期事件时,才在log.md中追加带日期的条目(参见log.md中应记录的内容)。 - 验证。
使用 — 将知识包用作上下文
- 首先阅读知识包根目录的
index.md,以渐进式披露信息;然后只沿链接查看与任务相关的概念。 - 审慎评估所读内容:
status: draft/deprecated、已经过期的stale_after,或缺少verified条目,都表示“依赖前请先核实”。将失效链接视为尚未编写的知识,而不是错误。 - 需要一个由
Attested Computation覆盖的数值?使用绑定到已声明parameters的值来运行其计算——绝不要自行编写查询。 - 如果工作过程中了解到某些持久有用的信息,请切换到维护并将其写回。
验证(宣布完成前执行)
不要凭目测判断是否符合要求——运行确定性检查器。调用配套的 validate 技能(/okf:validate <bundle-dir> --strict),该技能会提供检查器。如果未安装该技能,请直接运行:
uv run "${CLAUDE_SKILL_DIR}/../validate/scripts/okf_validate.py" <bundle-dir> --strict
解决所有 ERROR(§11 中的硬性失败项)。在 --strict 模式下,警告也会导致运行失败(退出码为 1),因此也要清除警告;如果只想检查是否符合 §11 的要求,可移除 --strict(或使用 --max-warnings N)。