[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CD0Y2V7C0YCNCDER2A1H9M":3,"skill-same:01M6CD0Y2V7C0YCNCDER2A1H9M":92},{"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":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":14,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M6CD0Y2V7C0YCNCDER2A1H9M","fix-markdown-fences",null,"Repair malformed markdown code fence closings. Use when markdown files have closing fences with language identifiers or when generating markdown with code blocks to ensure proper fence closure.","loriensleafs\u002Fbrain","loriensleafs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F315385?v=4","01M6CCYZETMCJPTHNS258YRCBC","Peter Kloss","01M6CCYZK25T8516A39S9PCJT7",0,"MIT","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Ffix-markdown-fences\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32],"markdown","fix","fix markdown fences","code","qa","haiku","implementer","use","files","2026-11-10 10:12:30",false,"---\nname: fix-markdown-fences\ndescription: \"Repair malformed markdown code fence closings. Use when markdown files have closing fences with language identifiers or when generating markdown with code blocks to ensure proper fence closure.\"\nlicense: MIT\nagents:\n  - implementer\n  - qa\nmodel: claude-haiku-4-5\nmetadata:\n  version: 1.1.0\n  timelessness: 9\u002F10\n---\n\n# Fix Markdown Code Fence Closings\n\nScan and repair malformed closing fences in markdown files. Closing fences must never contain language identifiers.\n\n## Triggers\n\n| Trigger Phrase                      | Operation                                    |\n| ----------------------------------- | -------------------------------------------- |\n| `fix markdown fences`               | Scan and repair malformed fence closings     |\n| `repair code block closings`        | Fix closing fences with language identifiers |\n| `markdown rendering broken`         | Diagnose and fix fence issues                |\n| `code blocks bleeding into content` | Fix unclosed or malformed fences             |\n| `validate markdown code blocks`     | Check all fences for correctness             |\n\n## Quick Reference\n\n| Symptom                        | Cause                                    | Fix                                  |\n| ------------------------------ | ---------------------------------------- | ------------------------------------ |\n| Code block bleeds into text    | Closing fence has language identifier    | Remove identifier from closing fence |\n| Nested blocks render wrong     | Missing closing fence before new opening | Insert closing fence                 |\n| Content cut off at end of file | Unclosed code block                      | Append closing fence                 |\n\n## When to Use\n\n**Use this skill when:**\n\n- Markdown code blocks render incorrectly or bleed into surrounding content\n- Closing fences have language identifiers (e.g., ` ```python ` instead of ` ``` `)\n- Validating markdown documentation before committing\n\n**Use manual editing instead when:**\n\n- The issue is indentation or content inside the code block (not the fences)\n- You need to change the language identifier on opening fences\n\n## Process\n\nTrack fence state while scanning line by line:\n\n1. **Detect opening fence**: Line matches the opening pattern below outside a block. Record indent level and enter \"inside block\" state.\n2. **Detect malformed closing fence**: While inside a block, line matches the malformed closing pattern below. Insert a proper closing fence before this line.\n3. **Detect valid closing fence**: Line matches the valid closing pattern below. Exit \"inside block\" state.\n\nRegex patterns:\n\n````regex\n^\\s*```[\\w+-]+\n^\\s*```[\\w+-]+\\s*$\n^\\s*```\\s*$\n````\n\n- [ ] No closing fences contain language identifiers\n- [ ] Markdown renders correctly in preview\n- [ ] `git diff` shows only fence-closing changes, no content modifications\n\n## Anti-Patterns\n\n| Avoid                                       | Why                                       | Instead                                 |\n| ------------------------------------------- | ----------------------------------------- | --------------------------------------- |\n| Manually searching for bad fences           | Error-prone in large files                | Use the algorithm or grep pattern       |\n| Copying opening fence line to close a block | Creates the exact bug this skill fixes    | Always use plain ` ``` ` for closing    |\n| Fixing fences without tracking block state  | Misidentifies nested vs sequential blocks | Use the stateful line-by-line algorithm |\n\n## Prevention\n\nWhen generating markdown with code blocks:\n\n1. Always use plain \\`\\`\\` for closing fences\n2. Never copy the opening fence line to close\n3. Track block state when programmatically generating markdown\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Implementation: TypeScript (Recommended)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n````typescript\nconst OPENING_PATTERN = \u002F^(\\s*)```(\\w+)\u002F;\nconst CLOSING_PATTERN = \u002F^(\\s*)```\\s*$\u002F;\n\nfunction repairMarkdownFences(content: string): string {\n  const lines = content.split(\u002F\\r?\\n\u002F);\n  const result: string[] = [];\n  let inCodeBlock = false;\n  let codeBlockIndent = \"\";\n\n  for (const line of lines) {\n    const openingMatch = line.match(OPENING_PATTERN);\n    const closingMatch = line.match(CLOSING_PATTERN);\n\n    if (openingMatch) {\n      if (inCodeBlock) {\n        result.push(codeBlockIndent + \"```\");\n      }\n      result.push(line);\n      codeBlockIndent = openingMatch[1];\n      inCodeBlock = true;\n    } else if (closingMatch) {\n      result.push(line);\n      inCodeBlock = false;\n      codeBlockIndent = \"\";\n    } else {\n      result.push(line);\n    }\n  }\n\n  if (inCodeBlock) {\n    result.push(codeBlockIndent + \"```\");\n  }\n\n  return result.join(\"\\n\");\n}\n````\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Implementation: Bash (Quick Check)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n````bash\n# Find files with potential issues\ngrep -rEn --include=\"*.md\" -- '```\\w+' . | grep -vE \"^[^:]*:[0-9]*:[[:space:]]*```\\w+[[:space:]]*$\"\n````\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Edge Cases Handled\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n1. **Nested indentation**: Preserves indent level from opening fence\n2. **Multiple consecutive blocks**: Each block tracked independently\n3. **File ending inside block**: Automatically closes unclosed blocks\n4. **Mixed line endings**: Accepts both `\\n` and `\\r\\n` as input (normalizes output to `\\n`)\n\n\u003C\u002Fdetails>\n","# Fix Markdown Code Fence Closings\n\nScan and repair malformed closing fences in markdown files. Closing fences must never contain language identifiers.\n\n## Triggers\n\n| Trigger Phrase                      | Operation                                    |\n| ----------------------------------- | -------------------------------------------- |\n| `fix markdown fences`               | Scan and repair malformed fence closings     |\n| `repair code block closings`        | Fix closing fences with language identifiers |\n| `markdown rendering broken`         | Diagnose and fix fence issues                |\n| `code blocks bleeding into content` | Fix unclosed or malformed fences             |\n| `validate markdown code blocks`     | Check all fences for correctness             |\n\n## Quick Reference\n\n| Symptom                        | Cause                                    | Fix                                  |\n| ------------------------------ | ---------------------------------------- | ------------------------------------ |\n| Code block bleeds into text    | Closing fence has language identifier    | Remove identifier from closing fence |\n| Nested blocks render wrong     | Missing closing fence before new opening | Insert closing fence                 |\n| Content cut off at end of file | Unclosed code block                      | Append closing fence                 |\n\n## When to Use\n\n**Use this skill when:**\n\n- Markdown code blocks render incorrectly or bleed into surrounding content\n- Closing fences have language identifiers (e.g., ` ```python ` instead of ` ``` `)\n- Validating markdown documentation before committing\n\n**Use manual editing instead when:**\n\n- The issue is indentation or content inside the code block (not the fences)\n- You need to change the language identifier on opening fences\n\n## Process\n\nTrack fence state while scanning line by line:\n\n1. **Detect opening fence**: Line matches the opening pattern below outside a block. Record indent level and enter \"inside block\" state.\n2. **Detect malformed closing fence**: While inside a block, line matches the malformed closing pattern below. Insert a proper closing fence before this line.\n3. **Detect valid closing fence**: Line matches the valid closing pattern below. Exit \"inside block\" state.\n\nRegex patterns:\n\n````regex\n^\\s*```[\\w+-]+\n^\\s*```[\\w+-]+\\s*$\n^\\s*```\\s*$\n````\n\n- [ ] No closing fences contain language identifiers\n- [ ] Markdown renders correctly in preview\n- [ ] `git diff` shows only fence-closing changes, no content modifications\n\n## Anti-Patterns\n\n| Avoid                                       | Why                                       | Instead                                 |\n| ------------------------------------------- | ----------------------------------------- | --------------------------------------- |\n| Manually searching for bad fences           | Error-prone in large files                | Use the algorithm or grep pattern       |\n| Copying opening fence line to close a block | Creates the exact bug this skill fixes    | Always use plain ` ``` ` for closing    |\n| Fixing fences without tracking block state  | Misidentifies nested vs sequential blocks | Use the stateful line-by-line algorithm |\n\n## Prevention\n\nWhen generating markdown with code blocks:\n\n1. Always use plain \\`\\`\\` for closing fences\n2. Never copy the opening fence line to close\n3. Track block state when programmatically generating markdown\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Implementation: TypeScript (Recommended)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n````typescript\nconst OPENING_PATTERN = \u002F^(\\s*)```(\\w+)\u002F;\nconst CLOSING_PATTERN = \u002F^(\\s*)```\\s*$\u002F;\n\nfunction repairMarkdownFences(content: string): string {\n  const lines = content.split(\u002F\\r?\\n\u002F);\n  const result: string[] = [];\n  let inCodeBlock = false;\n  let codeBlockIndent = \"\";\n\n  for (const line of lines) {\n    const openingMatch = line.match(OPENING_PATTERN);\n    const closingMatch = line.match(CLOSING_PATTERN);\n\n    if (openingMatch) {\n      if (inCodeBlock) {\n        result.push(codeBlockIndent + \"```\");\n      }\n      result.push(line);\n      codeBlockIndent = openingMatch[1];\n      inCodeBlock = true;\n    } else if (closingMatch) {\n      result.push(line);\n      inCodeBlock = false;\n      codeBlockIndent = \"\";\n    } else {\n      result.push(line);\n    }\n  }\n\n  if (inCodeBlock) {\n    result.push(codeBlockIndent + \"```\");\n  }\n\n  return result.join(\"\\n\");\n}\n````\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Implementation: Bash (Quick Check)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n````bash\n# Find files with potential issues\ngrep -rEn --include=\"*.md\" -- '```\\w+' . | grep -vE \"^[^:]*:[0-9]*:[[:space:]]*```\\w+[[:space:]]*$\"\n````\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Edge Cases Handled\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n1. **Nested indentation**: Preserves indent level from opening fence\n2. **Multiple consecutive blocks**: Each block tracked independently\n3. **File ending inside block**: Automatically closes unclosed blocks\n4. **Mixed line endings**: Accepts both `\\n` and `\\r\\n` as input (normalizes output to `\\n`)\n\n\u003C\u002Fdetails>\n",{"name":5,"model":38,"agents":39,"license":15,"metadata":40,"description":7},"claude-haiku-4-5",[30,28],{"version":41,"timelessness":42},"1.1.0","9\u002F10","main","2bd10cb7ca989f88dbf338b57957763718eda59b","templates\u002Fskills\u002Ffix-markdown-fences","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain","https:\u002F\u002Fgithub.com\u002Floriensleafs","2026-03-11 23:51:59",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add loriensleafs\u002Fbrain --skill fix-markdown-fences",{"tool":55,"command":56},"bunx","bunx skills add loriensleafs\u002Fbrain --skill fix-markdown-fences",{"tool":58,"command":59},"pnpm","pnpm dlx skills add loriensleafs\u002Fbrain --skill fix-markdown-fences","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Ffix-markdown-fences\u002FSKILL.md",true,[63,69,74,80,84,88],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"fix_fences.ts","SCRIPT","脚本",3472,"https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Ffix-markdown-fences\u002Ffix_fences.ts",{"path":70,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"LICENSE","许可证",1063,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002F1sh1ro-hyperliquid-public-trader-watch\u002FLICENSE",{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fworkflow.md","REFERENCE","参考文档",1309,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002F1sh1ro-hyperliquid-public-trader-watch\u002Freferences\u002Fworkflow.md",{"path":81,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":82,"sourceHtmlUrl":83},"scripts\u002Ffetch_trader_snapshot.py",6362,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002F1sh1ro-hyperliquid-public-trader-watch\u002Fscripts\u002Ffetch_trader_snapshot.py",{"path":85,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":86,"sourceHtmlUrl":87},"SOURCE.md",364,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002F1sh1ro-hyperliquid-public-trader-watch\u002FSOURCE.md",{"path":89,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":90,"sourceHtmlUrl":91},"TRUST.auto.yaml",2063,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002F1sh1ro-hyperliquid-public-trader-watch\u002FTRUST.auto.yaml",[93,107,124,147,165,189],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":33},"01M6CD3KHDHPR633RVP95G4XWN","validation-authority","Treat upstream validators as authoritative. Align local config to them. Use when validation fails unexpectedly, before modifying validator behavior, or when tempted to change upstream tool code.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fvalidation-authority\u002FSKILL.md",[],[100,101,102,31,30,103,104,105,27,106],"validation authority","validation","config","behavior","tool","architect","change",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":33},"01M6CD3H29Q8FWN9YETT8YVQTS","using-brain-memory","Guidance for using Brain semantic memory effectively. Applies Zettelkasten atomic note principles with observations and relations. Use when deciding whether to query or create notes, structuring note content, or understanding the semantic knowledge graph.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fusing-forgetful-memory\u002FSKILL.md",[],[114,115,116,117,118,119,120,31,121,122,123],"using brain memory","memory","content","create","notes","graph","guidance","context","knowledge","knowledge graph",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":33},"01M6CD3E2KTTMNSWXRJAAZA7D1","threat-modeling","Structured security analysis using OWASP Four-Question Framework and STRIDE methodology. Generates threat matrices with risk ratings, mitigations, and prioritization. Use for attack surface analysis, security architecture review, or when asking what can go wrong.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fthreat-modeling\u002FSKILL.md",[],[131,132,133,31,134,105,135,136,137,138,139,140,141,142,143,144,145,146],"threat","threat modeling","prioritization","question","architecture review","stride","analysis","risk","owasp","methodology","framework","security analysis","architecture","security","go","review",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":156,"publishedAt":33},"01M6CD3BC6G0Q2MDNW6X51XHBQ","taste-lints","Custom lints with agent-readable remediation instructions. Enforces taste invariants (file size, naming conventions, structured logging, complexity) and surfaces errors that agents can act on directly. Use when writing or reviewing code to catch style violations early.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Ftaste-lints\u002FSKILL.md",[153],{"categoryNo":154,"categoryName":155,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[157,30,158,159,31,160,161,162,163,28,27,164],"taste lints","surfaces","complexity","instructions","remediation","file","logging","writing",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":33},"01M6CD37Z7VD22BH42TG0GM66V","style-enforcement","Validate code against style rules from .editorconfig, StyleCop.json, and Directory.Build.props. Detects line ending violations, naming convention issues, indentation problems, and charset mismatches across C#, Python, TypeScript, and JavaScript. Produces JSON reports for pre-commit hooks and CI pipelines.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fstyle-enforcement\u002FSKILL.md",[],[172,173,174,175,176,177,30,178,179,180,181,182,28,183,27,184,185,186,187,188],"style enforcement","enforcement","ci","pipelines","directory","hooks","Rules","json","pre-commit","editorconfig","reports","issues","validate","commit","javascript","python","typescript",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":33},"01M6CD35JW73TPMCZBF9DTDEE8","steering-matcher","Match file paths against steering file glob patterns to determine applicable steering guidance. Use when orchestrator needs to inject context-aware guidance based on files being modified.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fsteering-matcher\u002FSKILL.md",[],[196,31,32,29,121,197,120,162],"steering matcher","orchestrator"]