cyxj-obsidian-build — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cyxj-obsidian-build (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<!-- 给人看的建议:此 skill 涉及大量语义关联,主流程建议 Opus,子代理扫描可用 Sonnet -->
灵感来源:Andrej Karpathy 的 LLM Wiki 方法论 核心理念:LLM 增量构建并维护一个持久的 Wiki — 一个结构化、互相链接的 Markdown 文件集合。知识编译一次,持续维护,而不是每次查询时重新推导。
全文的 $VAULT 指 Obsidian 库的根目录。确认方式:
.obsidian/ 目录 → 该目录即 $VAULT.obsidian/)→ 停下来问用户库路径,不要猜.obsidian/ → 终止并报告,不要在错误的目录里建任何东西「首次运行」的建目录、写 CLAUDE.md 等动作,必须在确认 `$VAULT` 之后才能执行。
Layer 1: Raw Sources(原始资料)— 用户写的,LLM 只读不写
↓ LLM 编译
Layer 2: Wiki(知识层)— LLM 全权维护,用户只读
↑ 规则来自
Layer 3: Schema(配置层)— SKILL.md + $VAULT/CLAUDE.md用户的原始笔记。完全不可变 — LLM 读取但绝不修改这些文件。库根 CLAUDE.md 除外(仅首次运行或用户要求时可写,见「权限边界」)。
包括:日记、灵感、收藏的文章、资源笔记等。具体目录结构由 $VAULT/CLAUDE.md 定义。
LLM 维护的知识产物,存放在 $VAULT/资源库/Wiki/(默认,可在 CLAUDE.md 中自定义)。
Wiki 层包含:
所有跨笔记的链接关系都在 Wiki 页面里维护。原始笔记不需要写任何链接 — Obsidian 的反向链接面板会自动显示哪些 Wiki 页面引用了它。
分两部分:
用户在 Obsidian 库目录启动 Claude Code 时,CLAUDE.md 被自动读取。
前提:已按「定位库」确认 $VAULT。如果 $VAULT/CLAUDE.md 不存在,先生成它再开始工作:
${CLAUDE_PLUGIN_ROOT}/skills/cyxj-obsidian-build/templates/vault-claude-md.md,按实际目录调整后生成 CLAUDE.md同时创建 Wiki/index.md 和 Wiki/log.md(格式见 ${CLAUDE_PLUGIN_ROOT}/skills/cyxj-obsidian-build/templates/index-and-log.md)。
将原始资料编译进 Wiki。一篇资料可能触及 10-15 个 Wiki 页面。
用户指定一篇笔记(或刚添加的新笔记):
$VAULT/CLAUDE.md 获取目录结构和分类体系obsidian-cli read 读取指定笔记obsidian-cli search 检查是否已有 Wiki 页面obsidian-cli read 读取,用 obsidian-cli append 追加新信息obsidian-cli create 创建新概念页,模板与规则见${CLAUDE_PLUGIN_ROOT}/skills/cyxj-obsidian-build/templates/concept-page.md
Wiki/index.md,添加新页面条目Wiki/log.md用户要求全量整理或扫描某个目录:
Wiki/log.md 获取上次操作时间,以 log.md 最后一条的日期为界,用 find $VAULT -name "*.md" -newermt "该日期"(或按文件 mtime)过滤出未处理的笔记概念筛选标准:
摄入日记时,额外提取有认知价值的洞察:
提炼: 原创观点、方法论总结、项目决策和复盘、有启发的失败 忽略: 生活流水账、纯情绪宣泄、已在其他笔记中记录的内容
提炼的洞察写入对应概念页的"日记洞察"区块,附带日期和关键原文。
对知识库提问,好的答案存回 Wiki。
obsidian-cli search 在 Wiki 中查找相关页面obsidian-cli read 读取相关的 Wiki 页面和原始资料${CLAUDE_PLUGIN_ROOT}/skills/cyxj-obsidian-build/templates/synthesis-page.md创建合成页,更新 index.md,追加 log.md
这样你的提问和思考也会沉淀到知识库里,而不是消失在聊天记录中。
健康度检查,发现问题但不自动修复。
| 检查项 | 方法 | 说明 |
|---|---|---|
| 孤岛 Wiki 页 | obsidian-cli backlinks | 没有被任何笔记引用的 Wiki 页面 |
| 断裂链接 | obsidian-cli search + 验证 | [[链接]] 指向不存在的文件 |
| 概念页过时 | 以 log.md 最后一条日期为判据 | 该日期之后的新资料提到某概念但页面未更新 |
| 缺失概念 | 分析原始资料 | 高频出现但没有 Wiki 页面的概念 |
| 矛盾内容 | 读取相关页面对比(仅抽查本次操作涉及的概念页,不做全库比对) | 同一概念在不同页面有矛盾描述 |
| 空文件 | 扫描 Wiki/ | 文件存在但内容为空或只有标题 |
| 数据缺口 | 分析概念页 | 概念页内容单薄,建议补充的方向 |
所有页面模板都在 ${CLAUDE_PLUGIN_ROOT}/skills/cyxj-obsidian-build/templates/ 下,写文件前读对应的那份:
| 文件 | 什么时候读 |
|---|---|
vault-claude-md.md | 首次运行,生成库根 CLAUDE.md |
concept-page.md | Ingest 创建/更新概念页(含 aliases、链接、只追加不删的规则) |
synthesis-page.md | Query 的答案要存回 Wiki |
index-and-log.md | 更新 Wiki/index.md 或 Wiki/log.md |
开始前先探测 obsidian-cli 是否可用(如跑一次 obsidian-cli tags,或检查命令是否存在);不可用则全程走下表的兜底列,不要反复尝试失败的命令。
优先使用 Obsidian CLI(通过 obsidian:obsidian-cli skill),文件系统工具作为兜底:
| 操作 | Obsidian CLI 命令 | 兜底方案 |
|---|---|---|
| 读取笔记 | read file="笔记名" | Read 工具 |
| 搜索内容 | search query="关键词" limit=20 | Grep 工具 |
| 创建页面 | create name="页面名" content="..." silent | Write 工具 |
| 追加内容 | append file="页面名" content="..." | Edit 工具 |
| 设置属性 | property:set file="页面名" name="key" value="val" | Edit 工具 |
| 查反向链接 | backlinks file="笔记名" | Grep \[\[笔记名\]\] |
| 查标签 | tags | Grep #tag |
.md 文件用于分析.obsidian/ 目录下的配置[[wikilink]]| 场景 | 流程 |
|---|---|
| 首次运行 | 生成 CLAUDE.md → 用户确认 → 批量 Ingest → 创建 index.md + log.md |
| 日常使用 | 用户添加新笔记后单条 Ingest;随时 Query;定期 Lint |
| 全量刷新 | 用户明确要求时,基于 log.md 增量处理 |
用户确认点:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.