[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K58NNCS5Z13KB8YBMJQ6JM":3,"skill-same:01M6K58NNCS5Z13KB8YBMJQ6JM":63},{"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":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":14,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M6K58NNCS5Z13KB8YBMJQ6JM","json-canvas",null,"Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.","macrosoft3\u002Fsecond-brain_","macrosoft3","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F107292560?v=4","01M6K57MP3ZGKWJPP9YWKJ1A54","macrosoft","01M6K57MSZBRTT5SYD80EADJWN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fmacrosoft3\u002Fsecond-brain_\u002Fblob\u002Fmain\u002Fskills\u002Fjson-canvas\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37],"canvas","json canvas","json","obsidian","create","edit","user","use","Nodes","files","maps","connections","visual","with","2026-11-10 10:12:30",false,"---\nname: json-canvas\ndescription: Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.\n---\n\n# JSON Canvas Skill\n\n> Third-party attribution: This content includes material derived from\n> kepano\u002Fobsidian-skills. See THIRD_PARTY_NOTICES.md.\n\n## File Structure\n\nA canvas file (`.canvas`) contains two top-level arrays following the [JSON Canvas Spec 1.0](https:\u002F\u002Fjsoncanvas.org\u002Fspec\u002F1.0\u002F):\n\n```json\n{\n  \"nodes\": [],\n  \"edges\": []\n}\n```\n\n## Common Workflows\n\n1. Create a `.canvas` file with the base structure `{\"nodes\": [], \"edges\": []}`\n2. Generate unique 16-character hex IDs for each node (e.g., `\"6f0ad84f44ce9c17\"`)\n3. Add nodes with required fields: `id`, `type`, `x`, `y`, `width`, `height`\n4. Add edges referencing valid node IDs via `fromNode` and `toNode`\n5. Verify all `fromNode`\u002F`toNode` values exist in the nodes array\n\n## Nodes\n\n### Generic Node Attributes\n\n| Attribute | Required | Type | Description |\n|-----------|----------|------|-------------|\n| `id` | Yes | string | Unique 16-char hex identifier |\n| `type` | Yes | string | `text`, `file`, `link`, or `group` |\n| `x` | Yes | integer | X position in pixels |\n| `y` | Yes | integer | Y position in pixels |\n| `width` | Yes | integer | Width in pixels |\n| `height` | Yes | integer | Height in pixels |\n| `color` | No | canvasColor | Preset `\"1\"`-`\"6\"` or hex (e.g., `\"#FF0000\"`) |\n\n### Text Node\n\n```json\n{\n  \"id\": \"6f0ad84f44ce9c17\",\n  \"type\": \"text\",\n  \"x\": 0, \"y\": 0, \"width\": 400, \"height\": 200,\n  \"text\": \"# Hello World\\n\\nThis is **Markdown** content.\"\n}\n```\n\n**Newline pitfall**: Use `\\n` for line breaks in JSON strings.\n\n### File Node\n\n```json\n{\n  \"id\": \"a1b2c3d4e5f67890\",\n  \"type\": \"file\",\n  \"x\": 500, \"y\": 0, \"width\": 400, \"height\": 300,\n  \"file\": \"Attachments\u002Fdiagram.png\"\n}\n```\n\n### Link Node\n\n```json\n{\n  \"id\": \"c3d4e5f678901234\",\n  \"type\": \"link\",\n  \"x\": 1000, \"y\": 0, \"width\": 400, \"height\": 200,\n  \"url\": \"https:\u002F\u002Fobsidian.md\"\n}\n```\n\n### Group Node\n\n```json\n{\n  \"id\": \"d4e5f6789012345a\",\n  \"type\": \"group\",\n  \"x\": -50, \"y\": -50, \"width\": 1000, \"height\": 600,\n  \"label\": \"Project Overview\",\n  \"color\": \"4\"\n}\n```\n\n## Edges\n\n```json\n{\n  \"id\": \"0123456789abcdef\",\n  \"fromNode\": \"6f0ad84f44ce9c17\",\n  \"fromSide\": \"right\",\n  \"toNode\": \"a1b2c3d4e5f67890\",\n  \"toSide\": \"left\",\n  \"toEnd\": \"arrow\",\n  \"label\": \"leads to\"\n}\n```\n\n| Attribute | Required | Values |\n|-----------|----------|--------|\n| `fromSide`\u002F`toSide` | No | `top`, `right`, `bottom`, `left` |\n| `fromEnd`\u002F`toEnd` | No | `none`, `arrow` (toEnd defaults to `arrow`) |\n\n## Colors\n\n| Preset | Color  |\n|--------|--------|\n| `\"1\"` | Red    |\n| `\"2\"` | Orange |\n| `\"3\"` | Yellow |\n| `\"4\"` | Green  |\n| `\"5\"` | Cyan   |\n| `\"6\"` | Purple |\n\n## Layout Guidelines\n\n- Coordinates can be negative (canvas extends infinitely)\n- `x` increases right, `y` increases down; position is the top-left corner\n- Space nodes 50-100px apart; leave 20-50px padding inside groups\n- Align to grid (multiples of 10 or 20) for cleaner layouts\n\n## Validation Checklist\n\n1. All `id` values are unique across nodes and edges\n2. Every `fromNode`\u002F`toNode` references an existing node ID\n3. `type` is one of: `text`, `file`, `link`, `group`\n4. Required type-specific fields are present\n5. JSON is valid and parseable\n\n## References\n\n- [JSON Canvas Spec 1.0](https:\u002F\u002Fjsoncanvas.org\u002Fspec\u002F1.0\u002F)\n","# JSON Canvas Skill\n\n> Third-party attribution: This content includes material derived from\n> kepano\u002Fobsidian-skills. See THIRD_PARTY_NOTICES.md.\n\n## File Structure\n\nA canvas file (`.canvas`) contains two top-level arrays following the [JSON Canvas Spec 1.0](https:\u002F\u002Fjsoncanvas.org\u002Fspec\u002F1.0\u002F):\n\n```json\n{\n  \"nodes\": [],\n  \"edges\": []\n}\n```\n\n## Common Workflows\n\n1. Create a `.canvas` file with the base structure `{\"nodes\": [], \"edges\": []}`\n2. Generate unique 16-character hex IDs for each node (e.g., `\"6f0ad84f44ce9c17\"`)\n3. Add nodes with required fields: `id`, `type`, `x`, `y`, `width`, `height`\n4. Add edges referencing valid node IDs via `fromNode` and `toNode`\n5. Verify all `fromNode`\u002F`toNode` values exist in the nodes array\n\n## Nodes\n\n### Generic Node Attributes\n\n| Attribute | Required | Type | Description |\n|-----------|----------|------|-------------|\n| `id` | Yes | string | Unique 16-char hex identifier |\n| `type` | Yes | string | `text`, `file`, `link`, or `group` |\n| `x` | Yes | integer | X position in pixels |\n| `y` | Yes | integer | Y position in pixels |\n| `width` | Yes | integer | Width in pixels |\n| `height` | Yes | integer | Height in pixels |\n| `color` | No | canvasColor | Preset `\"1\"`-`\"6\"` or hex (e.g., `\"#FF0000\"`) |\n\n### Text Node\n\n```json\n{\n  \"id\": \"6f0ad84f44ce9c17\",\n  \"type\": \"text\",\n  \"x\": 0, \"y\": 0, \"width\": 400, \"height\": 200,\n  \"text\": \"# Hello World\\n\\nThis is **Markdown** content.\"\n}\n```\n\n**Newline pitfall**: Use `\\n` for line breaks in JSON strings.\n\n### File Node\n\n```json\n{\n  \"id\": \"a1b2c3d4e5f67890\",\n  \"type\": \"file\",\n  \"x\": 500, \"y\": 0, \"width\": 400, \"height\": 300,\n  \"file\": \"Attachments\u002Fdiagram.png\"\n}\n```\n\n### Link Node\n\n```json\n{\n  \"id\": \"c3d4e5f678901234\",\n  \"type\": \"link\",\n  \"x\": 1000, \"y\": 0, \"width\": 400, \"height\": 200,\n  \"url\": \"https:\u002F\u002Fobsidian.md\"\n}\n```\n\n### Group Node\n\n```json\n{\n  \"id\": \"d4e5f6789012345a\",\n  \"type\": \"group\",\n  \"x\": -50, \"y\": -50, \"width\": 1000, \"height\": 600,\n  \"label\": \"Project Overview\",\n  \"color\": \"4\"\n}\n```\n\n## Edges\n\n```json\n{\n  \"id\": \"0123456789abcdef\",\n  \"fromNode\": \"6f0ad84f44ce9c17\",\n  \"fromSide\": \"right\",\n  \"toNode\": \"a1b2c3d4e5f67890\",\n  \"toSide\": \"left\",\n  \"toEnd\": \"arrow\",\n  \"label\": \"leads to\"\n}\n```\n\n| Attribute | Required | Values |\n|-----------|----------|--------|\n| `fromSide`\u002F`toSide` | No | `top`, `right`, `bottom`, `left` |\n| `fromEnd`\u002F`toEnd` | No | `none`, `arrow` (toEnd defaults to `arrow`) |\n\n## Colors\n\n| Preset | Color  |\n|--------|--------|\n| `\"1\"` | Red    |\n| `\"2\"` | Orange |\n| `\"3\"` | Yellow |\n| `\"4\"` | Green  |\n| `\"5\"` | Cyan   |\n| `\"6\"` | Purple |\n\n## Layout Guidelines\n\n- Coordinates can be negative (canvas extends infinitely)\n- `x` increases right, `y` increases down; position is the top-left corner\n- Space nodes 50-100px apart; leave 20-50px padding inside groups\n- Align to grid (multiples of 10 or 20) for cleaner layouts\n\n## Validation Checklist\n\n1. All `id` values are unique across nodes and edges\n2. Every `fromNode`\u002F`toNode` references an existing node ID\n3. `type` is one of: `text`, `file`, `link`, `group`\n4. Required type-specific fields are present\n5. JSON is valid and parseable\n\n## References\n\n- [JSON Canvas Spec 1.0](https:\u002F\u002Fjsoncanvas.org\u002Fspec\u002F1.0\u002F)\n",{"name":5,"description":7},"main","dd185e10b02348a52bd2285c443802e6ef81e6ac","skills\u002Fjson-canvas","https:\u002F\u002Fgithub.com\u002Fmacrosoft3\u002Fsecond-brain_","https:\u002F\u002Fgithub.com\u002Fmacrosoft3","2026-07-12 20:07:16",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add macrosoft3\u002Fsecond-brain_ --skill json-canvas",{"tool":55,"command":56},"bunx","bunx skills add macrosoft3\u002Fsecond-brain_ --skill json-canvas",{"tool":58,"command":59},"pnpm","pnpm dlx skills add macrosoft3\u002Fsecond-brain_ --skill json-canvas","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmacrosoft3\u002Fsecond-brain_\u002Fblob\u002Fmain\u002Fskills\u002Fjson-canvas\u002FSKILL.md",true,[],[64,81,108,124,130,139],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":73,"publishedAt":38},"01M6K591M6BEBFCRY9D6TNTQ4G","obsidian-markdown","Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax. Use when working with .md files in Obsidian, or when the user mentions wikilinks, callouts, frontmatter, tags, embeds, or Obsidian notes.","https:\u002F\u002Fgithub.com\u002Fmacrosoft3\u002Fsecond-brain_\u002Fblob\u002Fmain\u002Fskills\u002Fobsidian-markdown\u002FSKILL.md",[70],{"categoryNo":71,"categoryName":72,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[27,74,75,76,77,28,78,29,30,31,79,33,80,37],"obsidian markdown","markdown","frontmatter","notes","syntax","properties","tags",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":92,"publishedAt":38},"01M6K58XMC9DEZ9S1B82E5GMC4","obsidian-cli","Interact with Obsidian vaults using the Obsidian CLI to read, create, search, and manage notes, tasks, properties, and more. Also supports plugin and theme development with commands to reload plugins, run JavaScript, capture errors, take screenshots, and inspect the DOM. Use when the user asks to interact with their Obsidian vault, manage notes, search vault content, perform vault operations from the command line, or develop and debug Obsidian plugins and themes.","https:\u002F\u002Fgithub.com\u002Fmacrosoft3\u002Fsecond-brain_\u002Fblob\u002Fmain\u002Fskills\u002Fobsidian-cli\u002FSKILL.md",[87],{"categoryNo":88,"categoryName":89,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[93,27,94,95,31,96,97,98,28,99,100,37,101,102,103,104,105,106,77,107],"cli","obsidian cli","obsidian vault","development","manage","search","themes","theme","errors","more","inspect","tasks","javascript","debug","plugin",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":38},"01M6K58SG7T0V68W471FV8H2YA","obsidian-bases","Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries. Use when working with .base files, creating database-like views of notes, or when the user mentions Bases, table views, card views, filters, or formulas in Obsidian.","https:\u002F\u002Fgithub.com\u002Fmacrosoft3\u002Fsecond-brain_\u002Fblob\u002Fmain\u002Fskills\u002Fobsidian-bases\u002FSKILL.md",[],[115,116,27,30,77,28,117,118,29,31,119,33,120,121,37,122,123],"bases","obsidian bases","database","table","filters","base","card","formulas","summaries",{"skillNo":125,"name":126,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":38},"01M6K58M207K38HB3WP694ZM9T","init","https:\u002F\u002Fgithub.com\u002Fmacrosoft3\u002Fsecond-brain_\u002Fblob\u002Fmain\u002Fskills\u002Finit\u002FSKILL.md",[],[126],{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":38},"01M6K58FRQ644ZW3A3SZRS4KA7","hello","Greet the user with a personalized message","https:\u002F\u002Fgithub.com\u002Fmacrosoft3\u002Fsecond-brain_\u002Fblob\u002Fmain\u002Fskills\u002Fhello\u002FSKILL.md",[],[132,30,137,138,37],"greet","message",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":38},"01M6K58DW3MQ2JM8WP91MS7YHE","distill","Distill today's session notes into a concise Daily summary","https:\u002F\u002Fgithub.com\u002Fmacrosoft3\u002Fsecond-brain_\u002Fblob\u002Fmain\u002Fskills\u002Fdistill\u002FSKILL.md",[],[141,77,146,147,148,149],"session","daily","summary","concise"]