with one click
ob-compile
将 raw/ 层已有的资料编译到 wiki/{theme}/,支持增量更新和按主题合并编译
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
将 raw/ 层已有的资料编译到 wiki/{theme}/,支持增量更新和按主题合并编译
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
在需要打包、签名、OTA、APK/IPA、GitHub Release、商店提交、部署、回滚或验活时使用;支持独立窄任务,也支持作为 app-flow 的当前行动。它核对具体渠道授权,可复用用户明确记录的项目级 preview OTA 持续授权并在验证通过后自动发布;未获授权只做预检。
把自然语言 App 需求、模块说明和参考截图一路推进到经验证的代码与当次授权交付;用于需要长时间自主开发、持续排障和跨上下文恢复的移动端或跨端 App 任务。它不固定技术栈、阶段或交付形式,也不会把无人值守理解为远端发布授权。
在需要与生产者分离的独立评审、复核、验收,或对 App 方案、UI、代码、体验或交付准备度做质量判断时使用;支持独立窄任务,也支持作为 app-flow 的当前行动。它只做只读评判并绑定真实证据,不创建或修改产物,也不做第一方定位根因或直接改代码。
在设计、开发或交付 App 时按需参考 Happy/Paws 经验,包括移动端架构、React Native/Expo 取舍、验证、OTA、安装包与 Release 边界。用于用户明确要求参考 Happy/Paws,或当前问题与这些真实工程经验高度匹配时;它只提供上下文,不是 App Workflow,也不强制复制 Happy 的技术栈。
在需要创建、修改、重构、修复 App 代码,或只读诊断崩溃、定位根因、给出候选补丁时使用;支持独立窄任务,也支持作为 app-flow 的当前行动。它不做产品调研、原型/设计、独立评审或打包发布,除非当前行动本身就是改代码。
作为 self-learning 的 HyperFrames 产出能力,自主学习本地教学音视频或公开视频链接,把教程讲授的方法、可观察动效和屏幕代码转成有证据、可恢复、可渲染的 HyperFrames Demo,并记录实际使用的内容、Skills、工具与可复用经验。仅在 self-learning 调用,或用户明确要求从教学素材制作 HyperFrames Demo 时使用;普通学习任务不要单独触发。
| name | ob-compile |
| description | 将 raw/ 层已有的资料编译到 wiki/{theme}/,支持增量更新和按主题合并编译 |
触发词:
- 编译到 wiki / 编译 raw / 编译归纳
- ob-compile / compile
- 把 raw 编译到 wiki
- 增量编译 / 更新 wiki
- 重新编译 / 全量编译
示例:
- "ob-compile 王站岗"
- "编译王站岗的 raw 到 wiki"
- "增量编译王站岗新视频"
- "重新编译王站岗全部 wiki"
- "把 raw/战国时代_姜汁汽水/ 编译到 wiki"
gsd:workflow gsd:meta ob-compile 编译到 wiki、ob-compile、编译 raw、增量编译、重新编译 OBSIDIAN_REPO,Read,Write,Edit,Bash,Glob,Grep,AskUserQuestion 已确认编译目标和模式 已确认主题分类方案 编译完成并验证输出 只读取 raw/ 层已有文件,不执行采集 主题合并编译的文件名不加日期前缀(活文档) 增量更新时不覆盖已有 wiki 的结构,追加新内容 全量重编译时覆盖已有 wiki 文件 每个 wiki 文件必须有唯一 article_id 编译完成后将 raw 文件 frontmatter status 改为 compiled(这是 ob-index 判断是否已编译的依据) </gsd:meta>
gsd:goal将 raw/ 层资料编译归纳到 wiki/{theme}/,更新索引。</gsd:goal>
<gsd:phase name="scan" order="1"> gsd:step委托 ob-router skill 解析当前激活仓库路径</gsd:step> gsd:step扫描 raw/{author}/ 下的文件,统计已编译和未编译数量</gsd:step> gsd:step确认编译模式和目标范围</gsd:step> gsd:checkpoint用户确认编译目标和模式</gsd:checkpoint> </gsd:phase>
<gsd:phase name="classify" order="2"> gsd:step按文件标题/内容关键词自动分类到主题</gsd:step> gsd:step展示分类结果供用户调整</gsd:step> gsd:checkpoint用户确认主题分类方案</gsd:checkpoint> </gsd:phase>
<gsd:phase name="compile" order="3"> gsd:step按主题分组,并行启动 Sub Agent 编译</gsd:step> gsd:step每个 Sub Agent 读取 raw 文件并生成 wiki 归纳笔记</gsd:step> gsd:step验证所有输出文件和 article_id 唯一性</gsd:step> gsd:checkpoint编译完成并验证</gsd:checkpoint> </gsd:phase>
<gsd:phase name="index" order="4"> gsd:step更新 wiki/{theme}/index.md</gsd:step> gsd:step更新 wiki/index.md</gsd:step> gsd:step更新 wiki/log.md</gsd:step> gsd:step更新 raw/index.md(作者索引)</gsd:step> gsd:step将已编译的 raw 文件 status 改为 compiled</gsd:step> </gsd:phase> </gsd:workflow>
【硬约束】仓库路径一律委托 ob-router skill 解析,本 skill 不自行读取路径文件。
调用 ob-router skill 获取 $OBSIDIAN_REPO:
ob-router init 持久化将 ob-router 返回的路径保存为 $OBSIDIAN_REPO,后续全程使用此变量。
4. 确认 raw/ 和 wiki/ 目录存在
根据用户输入确定编译目标:
| 输入 | 目标 |
|---|---|
ob-compile 王站岗 | raw/王站岗/ 下所有文件 |
ob-compile --author 王站岗 | 同上 |
ob-compile (无参数) | 扫描所有 raw/{author}/ 和 raw/{category}/,展示可编译列表供选择 |
通过 raw 文件的 frontmatter status 字段判断编译状态(uncompiled / compiled)。
# 统计目标目录下文件数量和编译状态
grep -l "status: uncompiled" raw/{author}/*.md | wc -l # 未编译
grep -l "status: compiled" raw/{author}/*.md | wc -l # 已编译
ls raw/{author}/*.md | wc -l # 总数
状态追踪约定:不使用
.kb/manifest.json,统一通过 raw 文件的statusfrontmatter 字段追踪编译状态。ob-index 也依赖此字段判断未编译内容。
| 模式 | 触发条件 | 行为 |
|---|---|---|
| 增量 (incremental) | 默认;已有 wiki 存在时 | 只编译 status: uncompiled 的 raw 文件,通过观点对齐流程合并到已有 wiki(详见 3.6) |
| 全量 (full) | 用户说"重新编译"/--mode full | 重新编译所有 raw 文件,覆盖已有 wiki(覆盖前自动备份) |
| 主题合并 (thematic) | raw 文件 ≥ 20 篇时默认推荐 | 按主题分组,每组生成一篇综合 wiki(活文档) |
展示扫描结果,让用户确认编译模式。
⚠️ Checkpoint — 用户确认编译目标和模式后继续
读取所有 raw 文件的 frontmatter(标题、tags、source)和前 20 行内容,按关键词自动分类:
| 主题 | 目录 | 关键词 |
|---|---|---|
| AI 技术 | wiki/ai/ | AI, LLM, GPT, transformer, 机器学习 |
| Claude 生态 | wiki/claude/ | Claude, Claude Code, Skills, MCP |
| 开发工具 | wiki/dev-tools/ | VSCode, IDE, CLI, Git |
| 前端开发 | wiki/front-end/ | React, JavaScript, TypeScript, CSS |
| 时事分析 | wiki/current-affairs/ | 经济, 政治, 金融, 投资, 股市 |
| 职业发展 | wiki/career/ | 职级, 面试, 职业规划 |
| Obsidian | wiki/obsidian/ | Obsidian, 知识管理 |
无匹配时归入最接近的主题,或自动创建新主题目录。
在主题目录内,进一步按内容关键词分组。例如时事分析下的子主题:
📁 编译分类方案:
├── 时事分析 (current-affairs/)
│ ├── 投资哲学与方法论 → 王站岗-投资哲学与方法论.md (21 篇)
│ ├── 个股分析与估值 → 王站岗-个股分析与估值.md (53 篇)
│ ├── 美股港股与商品投资 → 王站岗-美股港股与商品投资.md (36 篇)
│ ├── 实盘操作与战绩 → 王站岗-实盘操作与战绩.md (19 篇)
│ └── A股市场复盘编年 → 王站岗-A股市场复盘编年.md (163 篇)
└── [其他主题...]
⚠️ Checkpoint — 用户确认分类方案后继续(可调整分组、合并或拆分)
| 任务数 | 策略 |
|---|---|
| 1-4 篇 raw → 1 篇 wiki | 主会话直接处理 |
| 5-50 篇 raw → 1 篇 wiki | 1 个 Sub Agent |
| 多组主题 | 并行 Sub Agent(≤ 4 并发) |
每个 Sub Agent 接收:
---
article_id: OBA-{随机8位}
tags: [{主题标签}, {作者名}, 归纳]
type: summary
updated_at: {YYYY-MM-DD}
---
# {作者}:{主题标题}
> **作者**: {author}
> **来源**: {来源平台}
> **提取时间**: {date}
> **涵盖视频/文章**: {N} 个
---
## 核心观点
### 1. {观点标题}
简明扼要地概括这个观点(2-5句话)。
→ [[raw/{author}/{filename}#M:SS]]
### 2. {观点标题}
...
## 关键引用
> [原文金句1] — [[raw/{author}/{filename}]]
## 我的思考
[待补充]
---
#音频笔记 #{author} #{主题} #归纳
---
article_id: OBA-{随机8位}
tags: [{主题标签}, {作者名}, 归纳]
type: summary
updated_at: {YYYY-MM-DD}
---
# {标题} - 归纳
> **作者**: {author}
> **来源**: {url}
> **原文**: [[raw/{author}/{filename}]]
## 核心观点
### 1. {观点标题}
概括 + [[raw/{author}/{filename}#M:SS]]
## 关键引用
> [金句] — [[raw/{author}/{filename}]]
## 我的思考
[待补充]
[[raw/{author}/{filename}#M:SS]] 链接# 生成
python3 -c "import random,string; print(''.join(random.choices(string.ascii_lowercase+string.digits,k=8)))"
# 验证唯一性
grep -rh "OBA-{生成的ID}" "$OBSIDIAN_REPO/wiki/" --include="*.md"
incremental 模式不是机械追加,必须做「观点对齐」避免内容碎裂。
| 与 existing 的关系 | 处理方式 |
|---|---|
| 重复(讨论同一论点) | 不新增观点,把新 raw 引用追加到该 existing 观点的「raw 引用列表」 |
| 补充(深化某 existing 观点的细节/案例) | 不新增观点,把新内容 merge 到该 existing 观点的描述段落 |
| 反驳/矛盾(与 existing 观点对立) | 保留为新观点,并在原 existing 观点处加注「← 与观点 #N 冲突」 |
| 全新角度 | 追加为新观点 #M |
判断标准:使用语义相似度,不靠字面匹配。建议:
updated_at、涵盖视频/文章 数量## [{date}] +{N} 篇 raw / 新增 {X} 观点 / 强化 {Y} 观点 / 冲突 {Z}compiled当新增 raw 的主题与现有所有 thematic wiki 都不匹配时:
| 累积同新主题的 uncompiled raw 数 | 行为 |
|---|---|
| ≥ 5 篇 | 自动开新主题 — 新建一篇 thematic wiki,归入对应 wiki/{theme}/ |
| < 5 篇 | 暂存 — raw 保持 uncompiled 状态,等达到阈值或用户主动触发 full 模式 |
提示用户:
检测到 N 篇 raw 不匹配现有 thematic wiki,暂存中(等达到 5 篇阈值后自动开新主题)。
当前暂存:{主题猜测} - {N} 篇
incremental 反复增量更新会让 wiki 越来越臃肿。当累积新增达到阈值时,提示用户考虑 full 模式重新综合:
| 累积新增 raw / 原 raw 总数 | 行为 |
|---|---|
| < 20% | 静默继续 incremental |
| 20% - 50% | 提示「累积新增达 N%,建议考虑 full 模式重新综合」 |
| > 50% | 强烈建议 full 模式,需要用户明确确认是否继续 incremental |
full 模式会覆盖已有 wiki,会丢失用户在「## 我的思考」段落的手写内容——所以必须用户明确确认。建议在覆盖前自动备份到 wiki/{theme}/.archive/{filename}-{date}.md。
直接覆盖已有 wiki 文件,重新生成全部内容。
⚠️ Checkpoint — 所有 Sub Agent 完成后,验证输出文件
| 文件 | 操作 |
|---|---|
wiki/{theme}/index.md | 追加新文章条目 |
wiki/index.md | 更新文章总数、主题篇数 |
wiki/log.md | 追加编译日志 |
raw/index.md | 添加或更新作者条目 |
将已编译的 raw 文件的 frontmatter status 从 uncompiled 改为 compiled。
## [{date}] compile | {标题}
### 批次概要
- **来源**: raw/{author}/
- **编译模式**: thematic/incremental/full
- **输出目录**: wiki/{theme}/
### 生成文件
| 主题 | 文件 | article_id | raw 篇数 |
|------|------|-----------|----------|
| {主题} | {filename} | OBA-{id} | {N} |
| 编译模式 | 命名格式 | 示例 |
|---|---|---|
| 主题合并 | {作者}-{主题}.md(无日期前缀) | 王站岗-投资哲学与方法论.md |
| 单篇编译 | {YYYY-MM-DD}-{slug}.md | 2026-04-30-大电池单日涨15%-归纳.md |
| 增量更新 | 保持原文件名不变 | — |