[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7BJ74PRMMSVAT5WNKCNK9TP":3,"skill-same:01M7BJ74PRMMSVAT5WNKCNK9TP":81},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":13,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M7BJ74PRMMSVAT5WNKCNK9TP","excalidraw",null,"Hand-drawn Excalidraw JSON diagrams (arch, flow, seq).","darkmatter\u002Fhermes","darkmatter","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F17834193?v=4","01M7BHSAW99WRAMTSSHNHX73V0","01M7BHSAXDR4PY4NA2DY5PN6W8",0,"MIT","https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fdevbox\u002Fprofiles\u002Fworker\u002Fskills\u002Fcreative\u002Fexcalidraw\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: excalidraw\ndescription: \"Hand-drawn Excalidraw JSON diagrams (arch, flow, seq).\"\nversion: 1.0.1\nauthor: Hermes Agent\nlicense: MIT\ndependencies: []\nplatforms: [linux, macos, windows]\nmetadata:\n  hermes:\n    tags: [Excalidraw, Diagrams, Flowcharts, Architecture, Visualization, JSON]\n    related_skills: []\n\n---\n\n# Excalidraw Diagram Skill\n\nCreate diagrams by writing standard Excalidraw element JSON and saving as `.excalidraw` files. These files can be drag-and-dropped onto [excalidraw.com](https:\u002F\u002Fexcalidraw.com) for viewing and editing. No accounts, no API keys, no rendering libraries -- just JSON.\n\n## When to use\n\nGenerate `.excalidraw` files for architecture diagrams, flowcharts, sequence diagrams, concept maps, and more. Files can be opened at excalidraw.com or uploaded for shareable links.\n\n## Workflow\n\n1. **Load this skill** (you already did)\n2. **Write the elements JSON** -- an array of Excalidraw element objects\n3. **Save the file** using `write_file` to create a `.excalidraw` file\n4. **Optionally upload** for a shareable link using `scripts\u002Fupload.py` via `terminal`\n\n### Saving a Diagram\n\nWrap your elements array in the standard `.excalidraw` envelope and save with `write_file`:\n\n```json\n{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"hermes-agent\",\n  \"elements\": [ ...your elements array here... ],\n  \"appState\": {\n    \"viewBackgroundColor\": \"#ffffff\"\n  }\n}\n```\n\nSave to any path, e.g. `~\u002Fdiagrams\u002Fmy_diagram.excalidraw`.\n\n### Uploading for a Shareable Link\n\nRun the upload script (located in this skill's `scripts\u002F` directory) via terminal:\n\n```bash\npython skills\u002Fcreative\u002Fexcalidraw\u002Fscripts\u002Fupload.py ~\u002Fdiagrams\u002Fmy_diagram.excalidraw\n```\n\nThis uploads to excalidraw.com (no account needed) and prints a shareable URL. Requires the `cryptography` pip package (`pip install cryptography`).\n\n---\n\n## Element Format Reference\n\n### Required Fields (all elements)\n`type`, `id` (unique string), `x`, `y`, `width`, `height`\n\n### Defaults (skip these -- they're applied automatically)\n- `strokeColor`: `\"#1e1e1e\"`\n- `backgroundColor`: `\"transparent\"`\n- `fillStyle`: `\"solid\"`\n- `strokeWidth`: `2`\n- `roughness`: `1` (hand-drawn look)\n- `opacity`: `100`\n\nCanvas background is white.\n\n### Element Types\n\n**Rectangle**:\n```json\n{ \"type\": \"rectangle\", \"id\": \"r1\", \"x\": 100, \"y\": 100, \"width\": 200, \"height\": 100 }\n```\n- `roundness: { \"type\": 3 }` for rounded corners\n- `backgroundColor: \"#a5d8ff\"`, `fillStyle: \"solid\"` for filled\n\n**Ellipse**:\n```json\n{ \"type\": \"ellipse\", \"id\": \"e1\", \"x\": 100, \"y\": 100, \"width\": 150, \"height\": 150 }\n```\n\n**Diamond**:\n```json\n{ \"type\": \"diamond\", \"id\": \"d1\", \"x\": 100, \"y\": 100, \"width\": 150, \"height\": 150 }\n```\n\n**Labeled shape (container binding)** -- create a text element bound to the shape:\n\n> **WARNING:** Do NOT use `\"label\": { \"text\": \"...\" }` on shapes. This is NOT a valid\n> Excalidraw property and will be silently ignored, producing blank shapes. You MUST\n> use the container binding approach below.\n\nThe shape needs `boundElements` listing the text, and the text needs `containerId` pointing back:\n```json\n{ \"type\": \"rectangle\", \"id\": \"r1\", \"x\": 100, \"y\": 100, \"width\": 200, \"height\": 80,\n  \"roundness\": { \"type\": 3 }, \"backgroundColor\": \"#a5d8ff\", \"fillStyle\": \"solid\",\n  \"boundElements\": [{ \"id\": \"t_r1\", \"type\": \"text\" }] },\n{ \"type\": \"text\", \"id\": \"t_r1\", \"x\": 105, \"y\": 110, \"width\": 190, \"height\": 25,\n  \"text\": \"Hello\", \"fontSize\": 20, \"fontFamily\": 1, \"strokeColor\": \"#1e1e1e\",\n  \"textAlign\": \"center\", \"verticalAlign\": \"middle\",\n  \"containerId\": \"r1\", \"originalText\": \"Hello\", \"autoResize\": true }\n```\n- Works on rectangle, ellipse, diamond\n- Text is auto-centered by Excalidraw when `containerId` is set\n- The text `x`\u002F`y`\u002F`width`\u002F`height` are approximate -- Excalidraw recalculates them on load\n- `originalText` should match `text`\n- Always include `fontFamily: 1` (Virgil\u002Fhand-drawn font)\n\n**Labeled arrow** -- same container binding approach:\n```json\n{ \"type\": \"arrow\", \"id\": \"a1\", \"x\": 300, \"y\": 150, \"width\": 200, \"height\": 0,\n  \"points\": [[0,0],[200,0]], \"endArrowhead\": \"arrow\",\n  \"boundElements\": [{ \"id\": \"t_a1\", \"type\": \"text\" }] },\n{ \"type\": \"text\", \"id\": \"t_a1\", \"x\": 370, \"y\": 130, \"width\": 60, \"height\": 20,\n  \"text\": \"connects\", \"fontSize\": 16, \"fontFamily\": 1, \"strokeColor\": \"#1e1e1e\",\n  \"textAlign\": \"center\", \"verticalAlign\": \"middle\",\n  \"containerId\": \"a1\", \"originalText\": \"connects\", \"autoResize\": true }\n```\n\n**Standalone text** (titles and annotations only -- no container):\n```json\n{ \"type\": \"text\", \"id\": \"t1\", \"x\": 150, \"y\": 138, \"text\": \"Hello\", \"fontSize\": 20,\n  \"fontFamily\": 1, \"strokeColor\": \"#1e1e1e\", \"originalText\": \"Hello\", \"autoResize\": true }\n```\n- `x` is the LEFT edge. To center at position `cx`: `x = cx - (text.length * fontSize * 0.5) \u002F 2`\n- Do NOT rely on `textAlign` or `width` for positioning\n\n**Arrow**:\n```json\n{ \"type\": \"arrow\", \"id\": \"a1\", \"x\": 300, \"y\": 150, \"width\": 200, \"height\": 0,\n  \"points\": [[0,0],[200,0]], \"endArrowhead\": \"arrow\" }\n```\n- `points`: `[dx, dy]` offsets from element `x`, `y`\n- `endArrowhead`: `null` | `\"arrow\"` | `\"bar\"` | `\"dot\"` | `\"triangle\"`\n- `strokeStyle`: `\"solid\"` (default) | `\"dashed\"` | `\"dotted\"`\n\n### Arrow Bindings (connect arrows to shapes)\n\n```json\n{\n  \"type\": \"arrow\", \"id\": \"a1\", \"x\": 300, \"y\": 150, \"width\": 150, \"height\": 0,\n  \"points\": [[0,0],[150,0]], \"endArrowhead\": \"arrow\",\n  \"startBinding\": { \"elementId\": \"r1\", \"fixedPoint\": [1, 0.5] },\n  \"endBinding\": { \"elementId\": \"r2\", \"fixedPoint\": [0, 0.5] }\n}\n```\n\n`fixedPoint` coordinates: `top=[0.5,0]`, `bottom=[0.5,1]`, `left=[0,0.5]`, `right=[1,0.5]`\n\n### Drawing Order (z-order)\n- Array order = z-order (first = back, last = front)\n- Emit progressively: background zones → shape → its bound text → its arrows → next shape\n- BAD: all rectangles, then all texts, then all arrows\n- GOOD: bg_zone → shape1 → text_for_shape1 → arrow1 → arrow_label_text → shape2 → text_for_shape2 → ...\n- Always place the bound text element immediately after its container shape\n\n### Sizing Guidelines\n\n**Font sizes:**\n- Minimum `fontSize`: **16** for body text, labels, descriptions\n- Minimum `fontSize`: **20** for titles and headings\n- Minimum `fontSize`: **14** for secondary annotations only (sparingly)\n- NEVER use `fontSize` below 14\n\n**Element sizes:**\n- Minimum shape size: 120x60 for labeled rectangles\u002Fellipses\n- Leave 20-30px gaps between elements minimum\n- Prefer fewer, larger elements over many tiny ones\n\n### Color Palette\n\nSee `references\u002Fcolors.md` for full color tables. Quick reference:\n\n| Use | Fill Color | Hex |\n|-----|-----------|-----|\n| Primary \u002F Input | Light Blue | `#a5d8ff` |\n| Success \u002F Output | Light Green | `#b2f2bb` |\n| Warning \u002F External | Light Orange | `#ffd8a8` |\n| Processing \u002F Special | Light Purple | `#d0bfff` |\n| Error \u002F Critical | Light Red | `#ffc9c9` |\n| Notes \u002F Decisions | Light Yellow | `#fff3bf` |\n| Storage \u002F Data | Light Teal | `#c3fae8` |\n\n### Tips\n- Use the color palette consistently across the diagram\n- **Text contrast is CRITICAL** -- never use light gray on white backgrounds. Minimum text color on white: `#757575`\n- Do NOT use emoji in text -- they don't render in Excalidraw's font\n- For dark mode diagrams, see `references\u002Fdark-mode.md`\n- For larger examples, see `references\u002Fexamples.md`\n","# Excalidraw Diagram Skill\n\nCreate diagrams by writing standard Excalidraw element JSON and saving as `.excalidraw` files. These files can be drag-and-dropped onto [excalidraw.com](https:\u002F\u002Fexcalidraw.com) for viewing and editing. No accounts, no API keys, no rendering libraries -- just JSON.\n\n## When to use\n\nGenerate `.excalidraw` files for architecture diagrams, flowcharts, sequence diagrams, concept maps, and more. Files can be opened at excalidraw.com or uploaded for shareable links.\n\n## Workflow\n\n1. **Load this skill** (you already did)\n2. **Write the elements JSON** -- an array of Excalidraw element objects\n3. **Save the file** using `write_file` to create a `.excalidraw` file\n4. **Optionally upload** for a shareable link using `scripts\u002Fupload.py` via `terminal`\n\n### Saving a Diagram\n\nWrap your elements array in the standard `.excalidraw` envelope and save with `write_file`:\n\n```json\n{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"hermes-agent\",\n  \"elements\": [ ...your elements array here... ],\n  \"appState\": {\n    \"viewBackgroundColor\": \"#ffffff\"\n  }\n}\n```\n\nSave to any path, e.g. `~\u002Fdiagrams\u002Fmy_diagram.excalidraw`.\n\n### Uploading for a Shareable Link\n\nRun the upload script (located in this skill's `scripts\u002F` directory) via terminal:\n\n```bash\npython skills\u002Fcreative\u002Fexcalidraw\u002Fscripts\u002Fupload.py ~\u002Fdiagrams\u002Fmy_diagram.excalidraw\n```\n\nThis uploads to excalidraw.com (no account needed) and prints a shareable URL. Requires the `cryptography` pip package (`pip install cryptography`).\n\n---\n\n## Element Format Reference\n\n### Required Fields (all elements)\n`type`, `id` (unique string), `x`, `y`, `width`, `height`\n\n### Defaults (skip these -- they're applied automatically)\n- `strokeColor`: `\"#1e1e1e\"`\n- `backgroundColor`: `\"transparent\"`\n- `fillStyle`: `\"solid\"`\n- `strokeWidth`: `2`\n- `roughness`: `1` (hand-drawn look)\n- `opacity`: `100`\n\nCanvas background is white.\n\n### Element Types\n\n**Rectangle**:\n```json\n{ \"type\": \"rectangle\", \"id\": \"r1\", \"x\": 100, \"y\": 100, \"width\": 200, \"height\": 100 }\n```\n- `roundness: { \"type\": 3 }` for rounded corners\n- `backgroundColor: \"#a5d8ff\"`, `fillStyle: \"solid\"` for filled\n\n**Ellipse**:\n```json\n{ \"type\": \"ellipse\", \"id\": \"e1\", \"x\": 100, \"y\": 100, \"width\": 150, \"height\": 150 }\n```\n\n**Diamond**:\n```json\n{ \"type\": \"diamond\", \"id\": \"d1\", \"x\": 100, \"y\": 100, \"width\": 150, \"height\": 150 }\n```\n\n**Labeled shape (container binding)** -- create a text element bound to the shape:\n\n> **WARNING:** Do NOT use `\"label\": { \"text\": \"...\" }` on shapes. This is NOT a valid\n> Excalidraw property and will be silently ignored, producing blank shapes. You MUST\n> use the container binding approach below.\n\nThe shape needs `boundElements` listing the text, and the text needs `containerId` pointing back:\n```json\n{ \"type\": \"rectangle\", \"id\": \"r1\", \"x\": 100, \"y\": 100, \"width\": 200, \"height\": 80,\n  \"roundness\": { \"type\": 3 }, \"backgroundColor\": \"#a5d8ff\", \"fillStyle\": \"solid\",\n  \"boundElements\": [{ \"id\": \"t_r1\", \"type\": \"text\" }] },\n{ \"type\": \"text\", \"id\": \"t_r1\", \"x\": 105, \"y\": 110, \"width\": 190, \"height\": 25,\n  \"text\": \"Hello\", \"fontSize\": 20, \"fontFamily\": 1, \"strokeColor\": \"#1e1e1e\",\n  \"textAlign\": \"center\", \"verticalAlign\": \"middle\",\n  \"containerId\": \"r1\", \"originalText\": \"Hello\", \"autoResize\": true }\n```\n- Works on rectangle, ellipse, diamond\n- Text is auto-centered by Excalidraw when `containerId` is set\n- The text `x`\u002F`y`\u002F`width`\u002F`height` are approximate -- Excalidraw recalculates them on load\n- `originalText` should match `text`\n- Always include `fontFamily: 1` (Virgil\u002Fhand-drawn font)\n\n**Labeled arrow** -- same container binding approach:\n```json\n{ \"type\": \"arrow\", \"id\": \"a1\", \"x\": 300, \"y\": 150, \"width\": 200, \"height\": 0,\n  \"points\": [[0,0],[200,0]], \"endArrowhead\": \"arrow\",\n  \"boundElements\": [{ \"id\": \"t_a1\", \"type\": \"text\" }] },\n{ \"type\": \"text\", \"id\": \"t_a1\", \"x\": 370, \"y\": 130, \"width\": 60, \"height\": 20,\n  \"text\": \"connects\", \"fontSize\": 16, \"fontFamily\": 1, \"strokeColor\": \"#1e1e1e\",\n  \"textAlign\": \"center\", \"verticalAlign\": \"middle\",\n  \"containerId\": \"a1\", \"originalText\": \"connects\", \"autoResize\": true }\n```\n\n**Standalone text** (titles and annotations only -- no container):\n```json\n{ \"type\": \"text\", \"id\": \"t1\", \"x\": 150, \"y\": 138, \"text\": \"Hello\", \"fontSize\": 20,\n  \"fontFamily\": 1, \"strokeColor\": \"#1e1e1e\", \"originalText\": \"Hello\", \"autoResize\": true }\n```\n- `x` is the LEFT edge. To center at position `cx`: `x = cx - (text.length * fontSize * 0.5) \u002F 2`\n- Do NOT rely on `textAlign` or `width` for positioning\n\n**Arrow**:\n```json\n{ \"type\": \"arrow\", \"id\": \"a1\", \"x\": 300, \"y\": 150, \"width\": 200, \"height\": 0,\n  \"points\": [[0,0],[200,0]], \"endArrowhead\": \"arrow\" }\n```\n- `points`: `[dx, dy]` offsets from element `x`, `y`\n- `endArrowhead`: `null` | `\"arrow\"` | `\"bar\"` | `\"dot\"` | `\"triangle\"`\n- `strokeStyle`: `\"solid\"` (default) | `\"dashed\"` | `\"dotted\"`\n\n### Arrow Bindings (connect arrows to shapes)\n\n```json\n{\n  \"type\": \"arrow\", \"id\": \"a1\", \"x\": 300, \"y\": 150, \"width\": 150, \"height\": 0,\n  \"points\": [[0,0],[150,0]], \"endArrowhead\": \"arrow\",\n  \"startBinding\": { \"elementId\": \"r1\", \"fixedPoint\": [1, 0.5] },\n  \"endBinding\": { \"elementId\": \"r2\", \"fixedPoint\": [0, 0.5] }\n}\n```\n\n`fixedPoint` coordinates: `top=[0.5,0]`, `bottom=[0.5,1]`, `left=[0,0.5]`, `right=[1,0.5]`\n\n### Drawing Order (z-order)\n- Array order = z-order (first = back, last = front)\n- Emit progressively: background zones → shape → its bound text → its arrows → next shape\n- BAD: all rectangles, then all texts, then all arrows\n- GOOD: bg_zone → shape1 → text_for_shape1 → arrow1 → arrow_label_text → shape2 → text_for_shape2 → ...\n- Always place the bound text element immediately after its container shape\n\n### Sizing Guidelines\n\n**Font sizes:**\n- Minimum `fontSize`: **16** for body text, labels, descriptions\n- Minimum `fontSize`: **20** for titles and headings\n- Minimum `fontSize`: **14** for secondary annotations only (sparingly)\n- NEVER use `fontSize` below 14\n\n**Element sizes:**\n- Minimum shape size: 120x60 for labeled rectangles\u002Fellipses\n- Leave 20-30px gaps between elements minimum\n- Prefer fewer, larger elements over many tiny ones\n\n### Color Palette\n\nSee `references\u002Fcolors.md` for full color tables. Quick reference:\n\n| Use | Fill Color | Hex |\n|-----|-----------|-----|\n| Primary \u002F Input | Light Blue | `#a5d8ff` |\n| Success \u002F Output | Light Green | `#b2f2bb` |\n| Warning \u002F External | Light Orange | `#ffd8a8` |\n| Processing \u002F Special | Light Purple | `#d0bfff` |\n| Error \u002F Critical | Light Red | `#ffc9c9` |\n| Notes \u002F Decisions | Light Yellow | `#fff3bf` |\n| Storage \u002F Data | Light Teal | `#c3fae8` |\n\n### Tips\n- Use the color palette consistently across the diagram\n- **Text contrast is CRITICAL** -- never use light gray on white backgrounds. Minimum text color on white: `#757575`\n- Do NOT use emoji in text -- they don't render in Excalidraw's font\n- For dark mode diagrams, see `references\u002Fdark-mode.md`\n- For larger examples, see `references\u002Fexamples.md`\n",{"name":5,"author":23,"license":14,"version":24,"metadata":25,"platforms":35,"description":7,"dependencies":39},"Hermes Agent","1.0.1",{"hermes":26},{"tags":27,"related_skills":34},[28,29,30,31,32,33],"Excalidraw","Diagrams","Flowcharts","Architecture","Visualization","JSON",[],[36,37,38],"linux","macos","windows",[],"main","81189f70e1089f9b3a944ffc480e6887efd831b9","devbox\u002Fprofiles\u002Fworker\u002Fskills\u002Fcreative\u002Fexcalidraw","https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes","https:\u002F\u002Fgithub.com\u002Fdarkmatter","dm.sh","2026-09-14 08:11:52",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add darkmatter\u002Fhermes --skill excalidraw",{"tool":53,"command":54},"bunx","bunx skills add darkmatter\u002Fhermes --skill excalidraw",{"tool":56,"command":57},"pnpm","pnpm dlx skills add darkmatter\u002Fhermes --skill excalidraw","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fdevbox\u002Fprofiles\u002Fworker\u002Fskills\u002Fcreative\u002Fexcalidraw\u002FSKILL.md",true,[61,67,71,75],{"path":62,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":65,"sourceHtmlUrl":66},"references\u002Fcolors.md","REFERENCE","参考文档",1777,"https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fdevbox\u002Fprofiles\u002Fworker\u002Fskills\u002Fcreative\u002Fexcalidraw\u002Freferences\u002Fcolors.md",{"path":68,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":69,"sourceHtmlUrl":70},"references\u002Fdark-mode.md",2281,"https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fdevbox\u002Fprofiles\u002Fworker\u002Fskills\u002Fcreative\u002Fexcalidraw\u002Freferences\u002Fdark-mode.md",{"path":72,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":73,"sourceHtmlUrl":74},"references\u002Fexamples.md",14225,"https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fdevbox\u002Fprofiles\u002Fworker\u002Fskills\u002Fcreative\u002Fexcalidraw\u002Freferences\u002Fexamples.md",{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"scripts\u002Fupload.py","SCRIPT","脚本",3817,"https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fdevbox\u002Fprofiles\u002Fworker\u002Fskills\u002Fcreative\u002Fexcalidraw\u002Fscripts\u002Fupload.py",[82,89,96,103,110,117],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":18},"01M7BMC2PYBVXM6FQEZMBQZB4G","plan","Write a markdown plan to .hermes\u002Fplans\u002F; no execution.","https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fskills\u002Fsoftware-development\u002Fplan\u002FSKILL.md",[],[],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":18},"01M7BMBSEKDVQ09Z666RCWT7BR","monorepo-fleet-sync","Sync docs and configs when a Flue monorepo fleet changes.","https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fskills\u002Fsoftware-development\u002Fmonorepo-fleet-sync\u002FSKILL.md",[],[],{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":18},"01M7BMBNWFJT2TJZ2AKA64GEV9","inspecting-hermes-desktop-dom","Read the live Hermes desktop DOM\u002FCSS over CDP.","https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fskills\u002Fsoftware-development\u002Finspecting-hermes-desktop-dom\u002FSKILL.md",[],[],{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":18},"01M7BMAZM4VJ97K7JD0FDN58M8","grounded-citations","Ground answers and documents in cited, verifiable sources.","https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fskills\u002Fresearch\u002Fgrounded-citations\u002FSKILL.md",[],[],{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":18},"01M7BMATPEDZ4BPP67Y4ZS0BMM","competitor-news-monitor","Watch named companies for material news; cited digests.","https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fskills\u002Fresearch\u002Fcompetitor-news-monitor\u002FSKILL.md",[],[],{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":18},"01M7BMAQZV7YFA2SFPT7HCVCTX","blocked-page-recovery","Recover blocked\u002Fpaywalled\u002FWAF'd pages via fallbacks.","https:\u002F\u002Fgithub.com\u002Fdarkmatter\u002Fhermes\u002Fblob\u002Fmain\u002Fskills\u002Fresearch\u002Fblocked-page-recovery\u002FSKILL.md",[],[]]