[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C695XS2D65QP5DN52VGMMK":3,"skill-same:01M6C695XS2D65QP5DN52VGMMK":69},{"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":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M6C695XS2D65QP5DN52VGMMK","vault-templates",null,"Obsidian Templater drift repair. Use when fixing unrendered `\u003C% tp.file.cursor() %>` markers or replacing `{{title}}`\u002F`{{date}}` placeholders.","laurigates\u002Fclaude-plugins","laurigates","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13014001?v=4","01M6C59YHWS9C7KMXKSRX1YXNP","Lauri Gates","01M6C59YP2APG9YAM4DWYQYGFJ",59,"MIT","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fobsidian-plugin\u002Fskills\u002Fvault-templates\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"templates","vault","vault templates","use","2026","when","title","templater","markers","false","repair","drift","obsidian","cursor","edit","write","read","grep","file","2026-11-10 10:12:30",false,"---\ncreated: 2026-04-17\nmodified: 2026-05-09\nreviewed: 2026-04-25\nname: vault-templates\ndescription: \"Obsidian Templater drift repair. Use when fixing unrendered `\u003C% tp.file.cursor() %>` markers or replacing `{{title}}`\u002F`{{date}}` placeholders.\"\nuser-invocable: false\nallowed-tools: Read, Edit, Write, Grep, Glob\n---\n\n# Templater Convention & Drift Repair\n\n## When to Use This Skill\n\n| Use this skill when... | Use the alternative instead when... |\n|---|---|\n| Repairing unrendered `\u003C% tp.file.cursor() %>` \u002F `{{title}}` markers committed in note **bodies** | Stripping the same kind of markers inside YAML frontmatter — use `vault-frontmatter` |\n| Auditing daily-note structure drift against the canonical Templater template | Creating new daily notes interactively via the running CLI — use `vault-files` |\n| Fixing notes committed before Templater finished rendering | Reconnecting the cleaned-up notes into a hub afterwards — use `vault-mocs` |\n\nObsidian's Templater plugin renders placeholder syntax when a new note is created. When rendering fails (plugin error, user dismissal, manual copy-paste), the literal markers get committed and persist. Fixing them is mechanical.\n\n## Unrendered Markers\n\n| Marker | Meaning | Fix |\n|--------|---------|-----|\n| `\u003C% tp.file.cursor(N) %>` | Cursor position placeholder | Strip the entire tag |\n| `\u003C% tp.file.title %>` | Filename stem | Replace with actual filename (no `.md`) |\n| `\u003C% tp.date.now(\"YYYY-MM-DD\") %>` | Today's date | Replace with the creation date from frontmatter, or the filename date for daily notes |\n| `{{title}}` | Filename stem (legacy) | Replace with filename stem |\n| `{{date}}` | Today's date (legacy) | Same as above |\n| `\u003C% await tp.system.prompt(...) %>` | User prompt | Strip; requires user to refill |\n\n## Detection\n\n```bash\n# Find any Templater leak\nrg '\u003C%\\s*tp\\.' --glob '*.md'\nrg '\\{\\{title\\}\\}|\\{\\{date\\}\\}' --glob '*.md'\n```\n\n## Fixing `\u003C% tp.file.cursor(1) %>`\n\nBefore:\n```markdown\n---\ntags: [?\u002Fnotes]\n---\n\n\u003C% tp.file.cursor(1) %>\n```\n\nAfter:\n```markdown\n---\ntags: [?\u002Fnotes]\n---\n```\n\nUse `Edit` with `old_string='\\n\\n\u003C% tp.file.cursor(1) %>'` and `new_string=''` (or adjust for trailing whitespace) — the cursor marker never has meaningful content around it.\n\n## Fixing `{{title}}` in daily notes\n\nBefore (file `work\u002Fnotes\u002F2025-03-26.md`):\n```markdown\n# {{title}}\n\n## Log\n```\n\nAfter:\n```markdown\n# 2025-03-26\n\n## Log\n```\n\nUse the filename stem (no `.md`). Don't replace `{{title}}` inside code blocks or quoted text — only in headings \u002F body.\n\n## Canonical Template Files\n\nThe templates themselves live in `Templates\u002F` and should contain raw Templater syntax — never \"fix\" them. Only fix notes outside `Templates\u002F`.\n\n| Template | Produces | Sections |\n|----------|----------|----------|\n| `Daily.md` | `Notes\u002FYYYY-MM-DD.md` | Quick Links, Today's Focus, Work, Personal, Tomorrow's Prep, Navigation |\n| `MOC.md` | `Zettelkasten\u002F{Subject} MOC.md` | Title heading + sections |\n| `New.md` | general Zettelkasten notes | Frontmatter + body stub |\n| `Work Daily.md` | `work\u002Fnotes\u002FYYYY-MM-DD.md` | Log, Thoughts, Discoveries, Todo, Recurring reminders |\n\n## Daily Note Structure Drift\n\nPersonal daily notes created before 2025 usually lack `## Navigation` and `## Tomorrow's Prep`. Two remediation options:\n\n1. **Retrofit template** — add the missing sections to every old daily note. Usually not worth the diff; users rarely look at old daily notes.\n2. **Leave as-is** — document the change boundary in a single commit message and let old notes age.\n\nDefault to #2 unless the user specifically asks for retrofit.\n\n## Work Daily Note Drift\n\nWork-namespace daily notes that contain literal `{{title}}` in the heading — fix these.\n\n## Safety\n\n- Never edit `Templates\u002F*.md` when fixing leakage — templates are supposed to contain Templater syntax.\n- Never run a blanket `sed -i 's\u002F{{title}}\u002F...\u002F'` — always use file-specific `Edit` calls so the title derivation is correct per file.\n- When you encounter `\u003C% tp.system.prompt(...) %>`, don't guess the answer — flag for user.\n\n## Related Skills\n\n- **vault-frontmatter** — YAML-level fixes\n- **vault-files** — daily-note operations via Obsidian CLI\n","# Templater Convention & Drift Repair\n\n## When to Use This Skill\n\n| Use this skill when... | Use the alternative instead when... |\n|---|---|\n| Repairing unrendered `\u003C% tp.file.cursor() %>` \u002F `{{title}}` markers committed in note **bodies** | Stripping the same kind of markers inside YAML frontmatter — use `vault-frontmatter` |\n| Auditing daily-note structure drift against the canonical Templater template | Creating new daily notes interactively via the running CLI — use `vault-files` |\n| Fixing notes committed before Templater finished rendering | Reconnecting the cleaned-up notes into a hub afterwards — use `vault-mocs` |\n\nObsidian's Templater plugin renders placeholder syntax when a new note is created. When rendering fails (plugin error, user dismissal, manual copy-paste), the literal markers get committed and persist. Fixing them is mechanical.\n\n## Unrendered Markers\n\n| Marker | Meaning | Fix |\n|--------|---------|-----|\n| `\u003C% tp.file.cursor(N) %>` | Cursor position placeholder | Strip the entire tag |\n| `\u003C% tp.file.title %>` | Filename stem | Replace with actual filename (no `.md`) |\n| `\u003C% tp.date.now(\"YYYY-MM-DD\") %>` | Today's date | Replace with the creation date from frontmatter, or the filename date for daily notes |\n| `{{title}}` | Filename stem (legacy) | Replace with filename stem |\n| `{{date}}` | Today's date (legacy) | Same as above |\n| `\u003C% await tp.system.prompt(...) %>` | User prompt | Strip; requires user to refill |\n\n## Detection\n\n```bash\n# Find any Templater leak\nrg '\u003C%\\s*tp\\.' --glob '*.md'\nrg '\\{\\{title\\}\\}|\\{\\{date\\}\\}' --glob '*.md'\n```\n\n## Fixing `\u003C% tp.file.cursor(1) %>`\n\nBefore:\n```markdown\n---\ntags: [?\u002Fnotes]\n---\n\n\u003C% tp.file.cursor(1) %>\n```\n\nAfter:\n```markdown\n---\ntags: [?\u002Fnotes]\n---\n```\n\nUse `Edit` with `old_string='\\n\\n\u003C% tp.file.cursor(1) %>'` and `new_string=''` (or adjust for trailing whitespace) — the cursor marker never has meaningful content around it.\n\n## Fixing `{{title}}` in daily notes\n\nBefore (file `work\u002Fnotes\u002F2025-03-26.md`):\n```markdown\n# {{title}}\n\n## Log\n```\n\nAfter:\n```markdown\n# 2025-03-26\n\n## Log\n```\n\nUse the filename stem (no `.md`). Don't replace `{{title}}` inside code blocks or quoted text — only in headings \u002F body.\n\n## Canonical Template Files\n\nThe templates themselves live in `Templates\u002F` and should contain raw Templater syntax — never \"fix\" them. Only fix notes outside `Templates\u002F`.\n\n| Template | Produces | Sections |\n|----------|----------|----------|\n| `Daily.md` | `Notes\u002FYYYY-MM-DD.md` | Quick Links, Today's Focus, Work, Personal, Tomorrow's Prep, Navigation |\n| `MOC.md` | `Zettelkasten\u002F{Subject} MOC.md` | Title heading + sections |\n| `New.md` | general Zettelkasten notes | Frontmatter + body stub |\n| `Work Daily.md` | `work\u002Fnotes\u002FYYYY-MM-DD.md` | Log, Thoughts, Discoveries, Todo, Recurring reminders |\n\n## Daily Note Structure Drift\n\nPersonal daily notes created before 2025 usually lack `## Navigation` and `## Tomorrow's Prep`. Two remediation options:\n\n1. **Retrofit template** — add the missing sections to every old daily note. Usually not worth the diff; users rarely look at old daily notes.\n2. **Leave as-is** — document the change boundary in a single commit message and let old notes age.\n\nDefault to #2 unless the user specifically asks for retrofit.\n\n## Work Daily Note Drift\n\nWork-namespace daily notes that contain literal `{{title}}` in the heading — fix these.\n\n## Safety\n\n- Never edit `Templates\u002F*.md` when fixing leakage — templates are supposed to contain Templater syntax.\n- Never run a blanket `sed -i 's\u002F{{title}}\u002F...\u002F'` — always use file-specific `Edit` calls so the title derivation is correct per file.\n- When you encounter `\u003C% tp.system.prompt(...) %>`, don't guess the answer — flag for user.\n\n## Related Skills\n\n- **vault-frontmatter** — YAML-level fixes\n- **vault-files** — daily-note operations via Obsidian CLI\n",{"name":5,"created":43,"modified":44,"reviewed":45,"description":7,"allowed-tools":46,"user-invocable":39},1776384000000,1778284800000,1777075200000,"Read, Edit, Write, Grep, Glob","main","bdd0582f1a2ba53d21061835bfd72d45f2f954f4","obsidian-plugin\u002Fskills\u002Fvault-templates",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-13 03:22:01",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add laurigates\u002Fclaude-plugins --skill vault-templates",{"tool":61,"command":62},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill vault-templates",{"tool":64,"command":65},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill vault-templates","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fobsidian-plugin\u002Fskills\u002Fvault-templates\u002FSKILL.md",true,[],[70,97,115,131,153,182],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":81,"publishedAt":38},"01M70PFHMH9ADY0CRE6047Y4B2","kitty-show-image","Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[82,83,84,85,86,87,88,89,90,91,22,24,92,37,93,94,95,96,23,35],"show","kitty show image","image","kitty","show image","ls","get","send","open","dev","Bash","text","with","xdg","via",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":38},"01M70PFEN18HKQ4RCQ1VPGMPTB","kitty-session-persistence","Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-session-persistence\u002FSKILL.md",[],[85,104,105,106,28,107,24,92,108,109,110,23,35,34,33,111,112,113,114,22],"kitty session persistence","session","persistence","snapshots","uname","reboot","terminal","snapshot","macos","sessions","restore",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":38},"01M70PFC77XGXCVQ1543VGZHYR","kitty-remote-control","Safe kitty remote control from an agent — read panes with kitty @ ls\u002Fget-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-remote-control\u002FSKILL.md",[],[122,123,85,124,125,87,126,127,88,128,129,22,24,130,92,93,94,110,23,35],"kitty remote control","remote","control","remote control","running","never","panes","notify","query",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":38},"01M70P6WVMCT5JG4SACTM69AF9","docs-reference-check","Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved\u002Fdeleted files, or wiring a doc-drift lint.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fdocumentation-plugin\u002Fskills\u002Fdocs-reference-check\u002FSKILL.md",[],[138,139,140,141,142,143,144,145,146,147,22,24,92,30,37,148,149,150,151,152],"docs reference check","check","reference check","reference","docs","links","python3","repo","files","auto","lint","wiring","chezmoi","references","cp",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":168,"publishedAt":38},"01M6C6NDE7DAQGNWSF22J5CJ0Z","youtube-upload","Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-upload\u002FSKILL.md",[159,162,163],{"categoryNo":160,"categoryName":161,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":164,"categoryName":165,"taxonomyType":166,"taxonomyTypeDesc":167},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[169,170,171,172,144,173,35,174,33,175,176,177,22,92,37,178,179,24,180,181,25,96,23],"youtube upload","upload","youtube","Video","run","uv run","publishing","data","uv","api","v3","tags","id",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":191,"publishedAt":38},"01M6C6NABWW1X58KJJM4F6GQMQ","youtube-studio-share","Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-studio-share\u002FSKILL.md",[188],{"categoryNo":189,"categoryName":190,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000023","Skill与智能体开发",[192,193,194,195,171,172,196,197,198,199,200,35,201,202,203,204,22,205,24,94,206,23],"youtube studio share","share","youtube studio","studio","browser","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization"]