{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "obsidian-skills",
  "built": "2026-10-26",
  "control_level": 4,
  "control_level_label": "L4 高权限",
  "capabilities": [
    "execute_command",
    "network",
    "write_file"
  ],
  "required_controls": {
    "agent": [
      "sandbox_recommended",
      "graded_authorization"
    ],
    "admin": [
      "approval_process",
      "rollback_support",
      "full_audit"
    ]
  },
  "evidence": [
    {
      "file": "scripts/",
      "summary": "Local script or command execution: No executable assets inside the repository (no .sh/.py/.js/.mjs among the 13 tracked files). External CLIs executed at runtime: obsidian / defuddle"
    },
    {
      "file": "网络端点",
      "summary": "Declared external network access: defuddle parse <url>: Fetches arbitrary user-specified web pages and extracts main content (core purpose of this skill; destination = user-supplied URL)."
    },
    {
      "file": "本地工作目录",
      "summary": "File read/write and artifact output: obsidian create / append / property:set / daily:append writes directly to target vault notes (supports silent operations)"
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 反查（换角度抓第一遍的错）：① git ls-tree -r HEAD 取全量受控文件（13 个：README.md、LICENSE、.claude-plugin/{plugin.json,marketplace.json}、6 个 skills/*/SKILL.md、5 个 skills/*/references/*.md），逐一核对，确认不存在 scripts/、无二进制、无 CI workflow；② 全仓 token 扫描（curl|wget|https?://|api[_-]?key|API_KEY|secret|os\\.environ|process\\.env|subprocess|child_process|eval |exec\\(|npm install|pip install）逐条定位命中：https 命中全部为文档/规范链接与 README 安装说明，npm install 命中仅 defuddle/knap 的『未安装时』前置说明，eval 命中仅 obsidian-cli 的 `obsidian eval code=` 示例（无本地 exec/eval/spawn）；③ 逐个读 6 个 SKILL.md 全文或关键段（obsidian-cli/knap/defuddle 全读；obsidian-bases/json-canvas/obsidian-markdown 读到 schema 与工作流核心段）+ 读 README 全文，核对 description 与正文能力是否一致；④ 检查『6 个 skill』是否真为 6：find -name SKILL.md 得 6，与 README 技能表 6 行、plugin/README 叙述一致；⑤ 功能声明 vs 实际：README 宣称 'Agent skills for Obsidian. Teach your agent to use Obsidian CLI and open formats including Markdown, Bases, JSON Canvas.'，正文确有对应三个格式 skill + CLI skill，无夸大；⑥ gh api repos/kepano/obsidian-skills 复核 stars=48365、pushed_at=2026-09-10T23:20:01Z、license MIT；本地 git HEAD 8ccef29ae862 == pin 8ccef29ae862。",
    "second_pass": [
      {
        "item": "skill.path 定位（任务表标『待定位』）；合集条目指向哪个具体 skill",
        "status": "ok",
        "detail": "本条目展示名『Obsidian Skills』对应的是 6 个 skill 的合集，仓库根无集合级 SKILL.md。skill.path 现指向其中的代表 skill：skills/obsidian-markdown —— 它是 README 技能表首项、覆盖面最广（Obsidian Flavored Markdown，含 wikilinks/embeds/callouts/properties），也是『Claude Skills for Obsidian 笔记与知识管理』这一展示描述的最直接载体。其余 5 个并列 skill 为：skills/obsidian-bases（.base）、skills/json-canvas（.canvas）、skills/obsidian-cli（官方 CLI）、skills/defuddle（网页正文抽取）、skills/knap（模板渲染/批量生成）；本 JSON 的 capabilities 与 internal_assets 覆盖的是全部 6 个（逐条 evidence 均指向对应子目录），analysis 亦按合集口径书写。"
      },
      {
        "item": "官方 description 取哪一份（集合无单一 frontmatter description）",
        "status": "discrepancy",
        "detail": "本条目代表的是一个 6-skill 集合，仓库内不存在『集合级 frontmatter description』。meta.official_desc 因此采用 .claude-plugin/plugin.json 的 description 原文（对集合范围的官方表述），并在字段内注明口径来源与『子 skill description 见别处』。6 个子 skill 的 frontmatter description 各自原文已逐条取证（例如 knap: 'Render Markdown templates from structured data using Knap CLI...'、defuddle: 'Extract clean markdown content from web pages using Defuddle CLI...'），未被改写或合并。"
      },
      {
        "item": "official_desc 取哪一份（合集无集合级 frontmatter description）",
        "status": "discrepancy",
        "detail": "合集在仓库根没有集合级 SKILL.md/frontmatter description（6 个 skill 各有自己的 description）。本条目 official_desc 采用代表 skill skills/obsidian-markdown 的 frontmatter description 逐字原文（与 skill.path 指向的具体 skill 一致，满足『official_desc = SKILL.md frontmatter 原文』的取证规则）；集合级口径（.claude-plugin/plugin.json 的 'Create and edit Obsidian vault files including Markdown, Bases, and Canvas. Use when working with .md, .base, or .canvas files in an Obsidian vault.'）已逐字记入 internal_assets 的 plugin.json 条目说明，不丢失信息。"
      },
      {
        "item": "『零脚本』结论的反例搜索",
        "status": "ok",
        "detail": "13 个受控文件的后缀全为 .md/.json；无 .sh/.py/.js/.mjs/.ts；仓库无 .github（无 CI 引入的第三方 action）。所有可执行动作均来自外部 CLI（obsidian/defuddle/knap），它们的代码不在本仓，本仓无法审。"
      },
      {
        "item": "『无凭证读取』是否漏网",
        "status": "ok",
        "detail": "对 api_key/API_KEY/token/secret/.env/os.environ/process.env/keychain 全仓扫描零命中。obsidian CLI 依赖的是本机 Obsidian 登录/本地会话，SKILL.md 未要求读取任何 key 或 cookie。"
      },
      {
        "item": "网络外发清单是否有遗漏",
        "status": "ok",
        "detail": "出现的 http(s) 串共 3 类：① help.obsidian.md（文档指针，SKILL.md 里作为『命令清单永远最新』的说明而非抓取指令）；② jsoncanvas.org / github.com/obsidianmd/jsoncanvas（规范出处）；③ defuddle 示例中的 https://example.com/article 与 knap 示例（示例数据 URL）。真正的运行时抓取只有 defuddle parse <用户 URL> 一条。"
      },
      {
        "item": "obsidian eval 的定级是否过轻",
        "status": "ok",
        "detail": "重新核对：`obsidian eval code=\"app.vault.getFiles().length\"` 确为 SKILL.md 中的示例，属官方 CLI 文档化子命令；本集合既不自行注入代码也不隐藏该能力，且其作用域是本机运行中的 Obsidian（用户自己的应用）。按六档范式，red 针对『安全降级/反反爬/任意代码执行面』的自造绕过；此处是官方 CLI 功能的常规使用，故维持 yellow 并在 scripts_executed 中显式点名，让读者知情。"
      },
      {
        "item": "写入门禁（--dry-run / --overwrite）是真实契约还是文档口号",
        "status": "ok",
        "detail": "knap SKILL.md 原文明确 'Use `--dry-run` to validate and list output paths without writing files. Existing files require `--overwrite`, including during a dry run.' 与 'Duplicate output names within a batch are errors even with `--overwrite`.'；`-o` 的行为也写明 '`-o` creates parent directories and overwrites the destination after rendering succeeds'。均为外部 CLI 的行为描述，本仓无代码可验，属『依赖第三方 CLI 实现』。"
      },
      {
        "item": "多宿主分发说明是否与目录结构自洽",
        "status": "ok",
        "detail": "README 要求 OpenCode 用 ~/.opencode/skills/obsidian-skills/skills/<skill-name>/SKILL.md，与本仓实际结构（skills/<name>/SKILL.md）一致；Claude/Codex 路径说明亦与 .claude-plugin/plugin.json 的 skills 装载方式不冲突。"
      },
      {
        "item": "stars / last_push 两源比对",
        "status": "ok",
        "detail": "gh api 实时 stars=48365、pushed_at=2026-09-10T23:20:01Z；pool/queue 快照为 48365 / 2026-09-10，一致。"
      },
      {
        "item": "无法定位项",
        "status": "unlocatable",
        "detail": "obsidian CLI 与 defuddle/knap 的实现代码不在本仓（属 Obsidian 应用与 npm 包），因此『这些 CLI 内部是否读凭证、是否回传遥测』无法从本仓源码定位，本 JSON 不对其内部行为下结论——这类判断需另查上游包源码。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "8ccef29ae8624eccc734e77ced4a6e54baf5d83a",
    "sha256": "e2fbc06a174fb6bfe588a4f0bae642c01f15787e4519b6d738525b131c99904b",
    "reviewed_by": null,
    "reviewed_at": null
  },
  "assessed_at": "2026-10-25",
  "method_version": "2.0",
  "mirror": {
    "archive": "https://skillpub.pages.dev/r2/v/2026-09-15/obsidian-skills.tar.gz",
    "sha256": "e2fbc06a174fb6bfe588a4f0bae642c01f15787e4519b6d738525b131c99904b",
    "commit": "8ccef29ae8624eccc734e77ced4a6e54baf5d83a"
  },
  "original": {
    "github": "https://github.com/kepano/obsidian-skills/tree/main/skills/obsidian-markdown",
    "path": "skills/obsidian-markdown",
    "commit": "8ccef29ae8624eccc734e77ced4a6e54baf5d83a"
  }
}