[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6NSVPQR3CNT1QP9XFTCF50R":3,"skill-same:01M6NSVPQR3CNT1QP9XFTCF50R":77},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":53,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M6NSVPQR3CNT1QP9XFTCF50R","canvas",null,"Create, inspect, and update Obsidian JSON Canvas boards with text, file, link, group, and edge nodes. Use for canvas status, canvas lists, visual maps, zones, spatial layouts, adding vault notes or media to a .canvas file, and requests such as create canvas, add to canvas, or put this on the canvas.","AgriciDaniel\u002Fclaude-obsidian","AgriciDaniel","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F223140489?v=4","01M6NSV41N5002GVCNZH16EN21","Agrici Daniel","01M6NSV45ZB53JY0AVD3F7GPY0",16492,"MIT","https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian\u002Fblob\u002Fmain\u002Fskills\u002Fcanvas\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"text","for","inspect","with","add","as","visual","maps","Nodes","use","Media","json canvas","edge","file","update","create","notes","status","obsidian","2026-11-10 10:12:30",false,"---\nname: canvas\ndescription: Create, inspect, and update Obsidian JSON Canvas boards with text, file, link, group, and edge nodes. Use for canvas status, canvas lists, visual maps, zones, spatial layouts, adding vault notes or media to a .canvas file, and requests such as create canvas, add to canvas, or put this on the canvas.\n---\n\n# Canvas\n\nTreat a canvas as a vault-scoped JSON Canvas document. Keep reads read-only and\nroute every requested mutation through one recoverable transaction.\n\nResolve the installed product root from this skill's own location, not from the\nvault or current working directory:\n\n```bash\nPRODUCT_ROOT=\u002Fabsolute\u002Fpath\u002Fto\u002Finstalled\u002Fclaude-obsidian\nCORE=\"$PRODUCT_ROOT\u002Fscripts\u002Fclaude-obsidian.py\"\ntest -f \"$CORE\"\n```\n\nEvery `..\u002Fwiki\u002Freferences\u002F` link in this file resolves the same way, relative\nto this skill's own directory under `$PRODUCT_ROOT`, never relative to the\nselected vault's `wiki\u002F` directory.\n\n## Choose the syntax source\n\nPrefer a separately installed `kepano\u002Fobsidian-skills` `json-canvas` skill for\nformat details. Otherwise read [references\u002Fcanvas-spec.md](references\u002Fcanvas-spec.md).\nThe open standard is [JSON Canvas 1.0](https:\u002F\u002Fjsoncanvas.org\u002Fspec\u002F1.0\u002F).\n\nUse this skill for vault workflow and transaction safety even when an upstream\nsyntax skill is available.\n\n## Scope\n\n- Resolve the user vault before reading. Never derive it from plugin files.\n- Store boards under `wiki\u002Fcanvases\u002F`; use `wiki\u002Fcanvases\u002Fmain.canvas` only as\n  the default when the user did not name a board.\n- Treat `wiki\u002Fcanvases\u002F_index.md` as an optional catalog. Add a new board to it\n  in the same transaction when a catalog exists. Node or edge edits inside an\n  existing board do not require a catalog change.\n- The transaction engine supports file creation and replacement only. A board\n  file cannot be deleted or renamed through this skill. Explain that boundary\n  for a file-removal or file-rename request and return a separate cleanup plan;\n  do not substitute host file tools or silently turn a rename into a copy.\n- Use vault-relative paths in `file` and `background`; reject absolute paths,\n  `..` traversal, home shortcuts, and paths that escape through symlinks.\n- Reference only files already inside the vault or created in the same reviewed\n  transaction. If an optional capture or\n  media capability is detected, compose with it and consume its returned\n  vault-relative path. Do not assume a particular plugin, command, or session\n  log, and do not download or copy assets in this skill.\n- Use `link` nodes for URLs. Accept HTTPS URLs only; a link node does not grant\n  permission to fetch the page. Creating its JSON makes no request, but opening\n  it in Obsidian may fetch Open Graph metadata from that URL's host. Disclose\n  that render-time egress and confirm it is acceptable; otherwise use a text\n  node containing the URL.\n\n## Read-only operations\n\nFor status or list requests, parse the selected `.canvas` files and report node\ncounts, group labels, broken edge endpoints, and missing vault-relative file\ntargets. If the default canvas is absent, report that fact and offer a creation\npreview; do not create it during a status request.\n\n## Draft a mutation\n\n1. Read the entire canvas and any catalog target. Record each expected SHA-256,\n   or `null` for a file that must be absent.\n2. Preserve unknown JSON fields and existing array order. The node array is\n   bottom-to-top z-order.\n3. Draft the requested nodes or edges:\n   - Give every node and edge a unique ID. Prefer a random 16-character\n     lowercase hexadecimal ID and verify it is unused.\n   - Require integer `x`, `y`, `width`, and `height` values for every node.\n   - Use `text`, `file`, `link`, or `group` exactly as defined by JSON Canvas.\n   - Require every `fromNode` and `toNode` to reference an existing or newly\n     drafted node.\n4. Position new content deliberately. A group is a visual container, not a\n   parent. Use 20 px inner padding and 40 px gaps, wrap to a new row when\n   needed, and preview any group expansion.\n5. Serialize valid UTF-8 JSON with top-level `nodes` and `edges` arrays.\n\nMinimal node examples:\n\n```json\n{\n  \"nodes\": [\n    {\n      \"id\": \"6f0ad84f44ce9c17\",\n      \"type\": \"text\",\n      \"text\": \"# Research map\\n\\nA concise orientation card.\",\n      \"x\": 0,\n      \"y\": 0,\n      \"width\": 400,\n      \"height\": 180\n    },\n    {\n      \"id\": \"a1b2c3d4e5f67890\",\n      \"type\": \"file\",\n      \"file\": \"wiki\u002Fconcepts\u002FContextual Retrieval.md\",\n      \"x\": 460,\n      \"y\": 0,\n      \"width\": 400,\n      \"height\": 240\n    }\n  ],\n  \"edges\": []\n}\n```\n\nUse `file` plus optional `subpath: \"#Heading\"` for notes, images, PDFs, and\nother vault files. Use `url` only on a `link` node. Escape line breaks in JSON\nstrings as `\\n`, not as literal backslash-plus-`n` text.\n\n## Preview and apply\n\nValidate before showing the preview:\n\n- JSON parses and uses supported node types.\n- IDs are unique and edge endpoints exist.\n- dimensions are positive integers;\n- file and background paths are safe, vault-relative, and present;\n- new nodes do not unintentionally overlap or overflow their requested group.\n\nBuild one `claude-obsidian.transaction.v1` bundle with operation type `canvas`.\nInclude the canvas and the catalog in that same bundle when the catalog changes.\nRead [operation-transactions.md](..\u002Fwiki\u002Freferences\u002Foperation-transactions.md),\nthen inspect the bundle before applying it:\n\n```bash\npython3 \"$CORE\" transaction inspect BUNDLE --vault VAULT\n# Set APPROVAL_SHA256 to the inspect result's approval_sha256 after review.\npython3 \"$CORE\" transaction apply BUNDLE --vault VAULT \\\n  --approved-plan-sha256 \"$APPROVAL_SHA256\"\n```\n\nFor destructive edits within a board, including node or edge removal, obtain\nexplicit consent after presenting the preview. These edits replace the board\nfile through the transaction engine. Report the operation ID, exact\nchanged paths, board name, node IDs, and final positions. Do not commit Git.\n","# Canvas\n\nTreat a canvas as a vault-scoped JSON Canvas document. Keep reads read-only and\nroute every requested mutation through one recoverable transaction.\n\nResolve the installed product root from this skill's own location, not from the\nvault or current working directory:\n\n```bash\nPRODUCT_ROOT=\u002Fabsolute\u002Fpath\u002Fto\u002Finstalled\u002Fclaude-obsidian\nCORE=\"$PRODUCT_ROOT\u002Fscripts\u002Fclaude-obsidian.py\"\ntest -f \"$CORE\"\n```\n\nEvery `..\u002Fwiki\u002Freferences\u002F` link in this file resolves the same way, relative\nto this skill's own directory under `$PRODUCT_ROOT`, never relative to the\nselected vault's `wiki\u002F` directory.\n\n## Choose the syntax source\n\nPrefer a separately installed `kepano\u002Fobsidian-skills` `json-canvas` skill for\nformat details. Otherwise read [references\u002Fcanvas-spec.md](references\u002Fcanvas-spec.md).\nThe open standard is [JSON Canvas 1.0](https:\u002F\u002Fjsoncanvas.org\u002Fspec\u002F1.0\u002F).\n\nUse this skill for vault workflow and transaction safety even when an upstream\nsyntax skill is available.\n\n## Scope\n\n- Resolve the user vault before reading. Never derive it from plugin files.\n- Store boards under `wiki\u002Fcanvases\u002F`; use `wiki\u002Fcanvases\u002Fmain.canvas` only as\n  the default when the user did not name a board.\n- Treat `wiki\u002Fcanvases\u002F_index.md` as an optional catalog. Add a new board to it\n  in the same transaction when a catalog exists. Node or edge edits inside an\n  existing board do not require a catalog change.\n- The transaction engine supports file creation and replacement only. A board\n  file cannot be deleted or renamed through this skill. Explain that boundary\n  for a file-removal or file-rename request and return a separate cleanup plan;\n  do not substitute host file tools or silently turn a rename into a copy.\n- Use vault-relative paths in `file` and `background`; reject absolute paths,\n  `..` traversal, home shortcuts, and paths that escape through symlinks.\n- Reference only files already inside the vault or created in the same reviewed\n  transaction. If an optional capture or\n  media capability is detected, compose with it and consume its returned\n  vault-relative path. Do not assume a particular plugin, command, or session\n  log, and do not download or copy assets in this skill.\n- Use `link` nodes for URLs. Accept HTTPS URLs only; a link node does not grant\n  permission to fetch the page. Creating its JSON makes no request, but opening\n  it in Obsidian may fetch Open Graph metadata from that URL's host. Disclose\n  that render-time egress and confirm it is acceptable; otherwise use a text\n  node containing the URL.\n\n## Read-only operations\n\nFor status or list requests, parse the selected `.canvas` files and report node\ncounts, group labels, broken edge endpoints, and missing vault-relative file\ntargets. If the default canvas is absent, report that fact and offer a creation\npreview; do not create it during a status request.\n\n## Draft a mutation\n\n1. Read the entire canvas and any catalog target. Record each expected SHA-256,\n   or `null` for a file that must be absent.\n2. Preserve unknown JSON fields and existing array order. The node array is\n   bottom-to-top z-order.\n3. Draft the requested nodes or edges:\n   - Give every node and edge a unique ID. Prefer a random 16-character\n     lowercase hexadecimal ID and verify it is unused.\n   - Require integer `x`, `y`, `width`, and `height` values for every node.\n   - Use `text`, `file`, `link`, or `group` exactly as defined by JSON Canvas.\n   - Require every `fromNode` and `toNode` to reference an existing or newly\n     drafted node.\n4. Position new content deliberately. A group is a visual container, not a\n   parent. Use 20 px inner padding and 40 px gaps, wrap to a new row when\n   needed, and preview any group expansion.\n5. Serialize valid UTF-8 JSON with top-level `nodes` and `edges` arrays.\n\nMinimal node examples:\n\n```json\n{\n  \"nodes\": [\n    {\n      \"id\": \"6f0ad84f44ce9c17\",\n      \"type\": \"text\",\n      \"text\": \"# Research map\\n\\nA concise orientation card.\",\n      \"x\": 0,\n      \"y\": 0,\n      \"width\": 400,\n      \"height\": 180\n    },\n    {\n      \"id\": \"a1b2c3d4e5f67890\",\n      \"type\": \"file\",\n      \"file\": \"wiki\u002Fconcepts\u002FContextual Retrieval.md\",\n      \"x\": 460,\n      \"y\": 0,\n      \"width\": 400,\n      \"height\": 240\n    }\n  ],\n  \"edges\": []\n}\n```\n\nUse `file` plus optional `subpath: \"#Heading\"` for notes, images, PDFs, and\nother vault files. Use `url` only on a `link` node. Escape line breaks in JSON\nstrings as `\\n`, not as literal backslash-plus-`n` text.\n\n## Preview and apply\n\nValidate before showing the preview:\n\n- JSON parses and uses supported node types.\n- IDs are unique and edge endpoints exist.\n- dimensions are positive integers;\n- file and background paths are safe, vault-relative, and present;\n- new nodes do not unintentionally overlap or overflow their requested group.\n\nBuild one `claude-obsidian.transaction.v1` bundle with operation type `canvas`.\nInclude the canvas and the catalog in that same bundle when the catalog changes.\nRead [operation-transactions.md](..\u002Fwiki\u002Freferences\u002Foperation-transactions.md),\nthen inspect the bundle before applying it:\n\n```bash\npython3 \"$CORE\" transaction inspect BUNDLE --vault VAULT\n# Set APPROVAL_SHA256 to the inspect result's approval_sha256 after review.\npython3 \"$CORE\" transaction apply BUNDLE --vault VAULT \\\n  --approved-plan-sha256 \"$APPROVAL_SHA256\"\n```\n\nFor destructive edits within a board, including node or edge removal, obtain\nexplicit consent after presenting the preview. These edits replace the board\nfile through the transaction engine. Report the operation ID, exact\nchanged paths, board name, node IDs, and final positions. Do not commit Git.\n",{"name":5,"description":7},"main","2e545563172f97f02ecaaaab376ceea1246a0583","skills\u002Fcanvas",1619,"https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian","skool.com\u002Fai-marketing-hub-pro","https:\u002F\u002Fgithub.com\u002FAgriciDaniel","AI Marketing Systems Architect. Building open-source Claude & Codex skills for SEO, ads & content.","2026-10-26 06:24:31",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add AgriciDaniel\u002Fclaude-obsidian --skill canvas",{"tool":63,"command":64},"bunx","bunx skills add AgriciDaniel\u002Fclaude-obsidian --skill canvas",{"tool":66,"command":67},"pnpm","pnpm dlx skills add AgriciDaniel\u002Fclaude-obsidian --skill canvas","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian\u002Fblob\u002Fmain\u002Fskills\u002Fcanvas\u002FSKILL.md",true,[71],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"references\u002Fcanvas-spec.md","REFERENCE","参考文档",9007,"https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian\u002Fblob\u002Fmain\u002Fskills\u002Fcanvas\u002Freferences\u002Fcanvas-spec.md",[78,88,114,137,158,178],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":43},"01M6NT0DAAX3MYEFY0KAHHB8ZM","example","Hermetic contract-validation fixture.","https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcontracts\u002Fvalid\u002Fskills\u002Fexample\u002FSKILL.md",[],[80,85,86,87],"validation","fixture","contract",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":97,"publishedAt":43},"01M6NSZXSXYVNAP466EJM5VYSW","wiki","Initialize, adopt, and route work for a separate Obsidian knowledge vault through the portable claude-obsidian core. Use for vault setup, scaffolding, workspace selection, cross-project configuration, or choosing the correct wiki sub-skill. Triggers: \u002Fwiki, set up wiki, scaffold vault, create knowledge base, adopt this vault, Obsidian vault, second brain setup, persistent wiki.","https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian\u002Fblob\u002Fmain\u002Fskills\u002Fwiki\u002FSKILL.md",[94],{"categoryNo":95,"categoryName":96,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[90,42,98,39,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,25],"core","SET","obsidian vault","knowledge","correct","work","initialize","up","second brain","selection","route","scaffolding","knowledge base","project","brain","adopt",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":43},"01M6NSZ8X3MMTK7SHXR75G6GEB","wiki-retrieve","Build and query a vault-local contextual BM25 retrieval index with optional multilingual Nomic cosine reranking; use for retrieve, hybrid retrieval, BM25, rerank, contextual retrieval, chunk search, vault search, semantic search, find relevant passages, or retrieval diagnostics. Derived caches stay under .vault-meta, remote egress requires explicit consent, and unavailable reranking falls back deterministically.","https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian\u002Fblob\u002Fmain\u002Fskills\u002Fwiki-retrieve\u002FSKILL.md",[],[90,121,122,123,124,125,126,127,33,128,129,130,131,132,133,134,135,27,25,136],"wiki retrieve","semantic search","diagnostics","chunk","search","Meta","vault","multilingual","build","back","query","local","bm25","relevant","remote","hybrid",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":146,"publishedAt":43},"01M6NSYHAKKYH5XM3ABQRAJ8P9","wiki-query","Answer an explicitly vault-scoped question from an Obsidian wiki without changing it. Use when the user selects the vault as the evidence source: query the wiki, query quick, query deep, explain from the wiki, summarize the vault, find in wiki, search the wiki, or based on the wiki. Do not route ordinary general-knowledge questions here.","https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian\u002Fblob\u002Fmain\u002Fskills\u002Fwiki-query\u002FSKILL.md",[143],{"categoryNo":144,"categoryName":145,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[147,90,131,42,125,127,101,148,149,33,150,151,152,108,153,29,154,155,156,157],"wiki query","explain","question","evidence","general","do","deep","quick","answer","source","scoped",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":43},"01M6NSYCX1THMPAAX3EWNQDKVE","wiki-mode","Read or configure the vault filing methodology and suggest destinations for planned knowledge creation under Generic, LYT, PARA, or Zettelkasten. Use for wiki mode, methodology mode, what is my vault mode, set vault mode, switch to PARA, use LYT, Zettelkasten setup, change mode, configure mode, or methodology routing. This skill does not save content or migrate notes.","https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian\u002Fblob\u002Fmain\u002Fskills\u002Fwiki-mode\u002FSKILL.md",[],[90,165,166,167,40,168,99,127,169,101,170,171,172,33,173,174,175,176,177,25],"mode","wiki mode","change","routing","save","migrate","configure","read","switch","creation","filing","zettelkasten","my",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":187,"publishedAt":43},"01M6NSY916ASYAVW53W6A78AWT","wiki-lint","Run a deterministic, read-only health check on an Obsidian wiki. Use for lint, vault health check, audit wiki health, find orphans, find dead links, frontmatter audit, provenance audit, or wiki audit. Reports graph, link, frontmatter, provenance-ledger, empty-section, and stale-index findings; it does not reason broadly or repair files.","https:\u002F\u002Fgithub.com\u002FAgriciDaniel\u002Fclaude-obsidian\u002Fblob\u002Fmain\u002Fskills\u002Fwiki-lint\u002FSKILL.md",[184],{"categoryNo":185,"categoryName":186,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",[188,189,90,42,190,191,192,193,172,33,194,195,196,197,198,199,200,25,201,202],"lint","wiki lint","run","graph","audit","provenance","only","reports","files","deterministic","repair","read-only","links","frontmatter","section"]