[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6X77HPJ78A50GRSC6EXESMF":3,"skill-same:01M6X77HPJ78A50GRSC6EXESMF":93},{"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":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":70,"commitSha":71,"skillDirectory":72,"forksCount":73,"repositoryHtmlUrl":74,"repositoryHomepageUrl":75,"ownerHtmlUrl":76,"ownerBlogUrl":75,"ownerDescription":77,"updatedAt":78,"install":79,"resources":92},"01M6X77HPJ78A50GRSC6EXESMF","md-language-check",null,"Use BEFORE saving any .md under .augment\u002F, dist\u002Fagent-src*\u002F, or agents\u002F — scans umlauts, German function words, and German phrases outside DE:\u002FEN: anchor blocks. Hard gate per language-and-tone.","event4u-app\u002Fagent-config","event4u-app","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F199339632?v=4","01M6X5TWBNCQCE1VDKT4E9KF7N","event4u.app","01M6X5TWF4HRM266RG2Q5VVH1X",19,"MIT","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fmd-language-check\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"md language check","check","language","write","checker","read-only","de","scripts","german","Augment","only","config","read","command","node","returns","src","Bash","Meta","run","2026-11-10 10:12:30",false,"---\nmodel_tier: lite\nname: md-language-check\ndescription: \"Use BEFORE saving any .md under .augment\u002F, dist\u002Fagent-src*\u002F, or agents\u002F — scans umlauts, German function words, and German phrases outside DE:\u002FEN: anchor blocks. Hard gate per language-and-tone.\"\ndomain: process\nscope:\n  write: []\n  verification_reason: \"the declared command is a read-only checker: grep -c 'writeFileSync|mkdirSync|appendFileSync' src\u002Fscripts\u002Fcheck_md_language.ts returns 0. Absence of a write is not something a command can prove.\"\nexecution:\n  type: assisted\n  handler: shell\n  timeout_seconds: 30\n  allowed_tools: []\n  command:\n    - .\u002Fscripts-run\n    - src\u002Fscripts\u002Fcheck_md_language\nruntime_requires:\n  bins:\n    - bash\n    - node\n  network: []\nworkspaces:\n  - agent-config-maintainer\npacks:\n  - meta\n---\n\n# md-language-check\n\n## When to use\n\nFire this skill **before** writing or saving any `.md` file under:\n\n- `src\u002F` (source of truth — skills, rules, commands, guidelines, templates, contexts)\n- `dist\u002Fagent-src\u002F` (condensed projection)\n- `.augment\u002F` (local agent projection)\n- `agents\u002F` (project-specific roadmaps, contexts, sessions)\n\nPer [`language-and-tone`](..\u002F..\u002Frules\u002Flanguage-and-tone.md) § \"`.md` files\nare ALWAYS English\" and § Detection heuristic, every `.md` file in those\ntrees must be English. Bilingual content lives only in labeled\n`DE: … · EN: …` anchor blocks.\n\nDo NOT use when:\n\n- Editing project content outside the trees listed above (READMEs of\n  consumer projects, application docs that follow a different policy)\n- Reviewing chat history files (`agents\u002Fruntime\u002F.agent-chat-history` is JSONL, not `.md`)\n- Inspecting non-`.md` files — the checker rejects them with a warning\n\n## Procedure\n\n### 1. Identify the file(s) about to be saved\n\nCollect the absolute or repo-relative path of every `.md` file the\nagent is about to create or modify in this turn. Multiple files in\none turn → pass them all to a single invocation.\n\n### 2. Run the checker\n\n```bash\n.\u002Fscripts-run src\u002Fscripts\u002Fcheck_md_language \u003Cpath> [\u003Cpath> …] [--format json]\n```\n\nExit codes:\n\n- `0` → no German content detected, save proceeds\n- `1` → violations found, save is **blocked** until they are resolved\n  or explicitly suppressed\n- `3` → internal error (unreadable file, decode failure)\n\n### 3. Resolve findings\n\nFor every violation:\n\n| Kind | Likely cause | Fix |\n|---|---|---|\n| `umlaut` | German prose leaked into body text | Translate the sentence to English |\n| `de_word` | German function word in unquoted prose | Translate; or move into a `DE: … · EN: …` block if intentional bilingual anchor |\n\nIf the line is meta-documentation that **must** quote German tokens\n(e.g. the detection heuristic in `language-and-tone.md` itself),\nappend `\u003C!-- md-language-check: ignore -->` at the end of that single\nline — never as a wholesale silencer.\n\n### 4. Re-run and confirm\n\nAfter every fix, re-run the checker on the same paths. Save only\nproceeds on exit `0`.\n\n## Allowed escape hatches\n\n- **Labeled anchor block** — lines starting with `DE:` \u002F `- DE:` \u002F\n  `* DE:` (and the same for `EN:`) are skipped automatically. Use this\n  for intent-based opt-in \u002F opt-out anchors.\n- **Fenced code blocks** — `\\`\\`\\` … \\`\\`\\`` content is exempt, so\n  shell snippets, JSON fixtures, and quoted user input in code\n  blocks pass through untouched.\n- **Inline code** — backtick spans are stripped before scanning;\n  identifiers like `für_test` inside backticks do not flag.\n- **Per-line marker** — append `\u003C!-- md-language-check: ignore -->`\n  to a line that genuinely needs to quote a German token in body\n  prose (rare; reserved for the rules that document the heuristic).\n\n## Output format\n\n1. One-line summary: `clean` or `N violation(s) found`\n2. Per violation: `file:line — kind \\`match\\`` plus the offending line\n3. Next action: translate, move into a `DE:`\u002F`EN:` block, add the\n   per-line ignore marker, or revert the change\n\n## Gotchas\n\n- The checker scans `.md` files only; passing a non-`.md` path emits a\n  warning and skips it\n- The detection word list is intentionally short and conservative —\n  a clean run is **necessary but not sufficient**; the agent still\n  owns the final language judgement\n- Frontmatter (`--- … ---` at file head) is exempt; descriptions and\n  YAML keys can use international characters where the schema allows\n\n## Do NOT\n\n- Do NOT silence the checker by deleting trigger words from\n  `src\u002Fscripts\u002Fcheck_md_language.ts`; extend the allow-list (anchor\n  blocks, ignore marker) instead\n- Do NOT add the ignore marker to body prose just to push a save\n  through; the marker is for meta-documentation that quotes tokens,\n  not a generic mute\n- Do NOT skip the gate \"because the file is small\" — `language-and-tone`\n  § Detection heuristic applies to every save under the four trees\n\n## Cloud Behavior\n\nOn cloud surfaces (Claude.ai Web, Skills API) the checker script is\nnot shipped, so this skill is **inert** — the agent applies the\nheuristic from [`language-and-tone`](..\u002F..\u002Frules\u002Flanguage-and-tone.md)\nmanually before emitting the file.\n","# md-language-check\n\n## When to use\n\nFire this skill **before** writing or saving any `.md` file under:\n\n- `src\u002F` (source of truth — skills, rules, commands, guidelines, templates, contexts)\n- `dist\u002Fagent-src\u002F` (condensed projection)\n- `.augment\u002F` (local agent projection)\n- `agents\u002F` (project-specific roadmaps, contexts, sessions)\n\nPer [`language-and-tone`](..\u002F..\u002Frules\u002Flanguage-and-tone.md) § \"`.md` files\nare ALWAYS English\" and § Detection heuristic, every `.md` file in those\ntrees must be English. Bilingual content lives only in labeled\n`DE: … · EN: …` anchor blocks.\n\nDo NOT use when:\n\n- Editing project content outside the trees listed above (READMEs of\n  consumer projects, application docs that follow a different policy)\n- Reviewing chat history files (`agents\u002Fruntime\u002F.agent-chat-history` is JSONL, not `.md`)\n- Inspecting non-`.md` files — the checker rejects them with a warning\n\n## Procedure\n\n### 1. Identify the file(s) about to be saved\n\nCollect the absolute or repo-relative path of every `.md` file the\nagent is about to create or modify in this turn. Multiple files in\none turn → pass them all to a single invocation.\n\n### 2. Run the checker\n\n```bash\n.\u002Fscripts-run src\u002Fscripts\u002Fcheck_md_language \u003Cpath> [\u003Cpath> …] [--format json]\n```\n\nExit codes:\n\n- `0` → no German content detected, save proceeds\n- `1` → violations found, save is **blocked** until they are resolved\n  or explicitly suppressed\n- `3` → internal error (unreadable file, decode failure)\n\n### 3. Resolve findings\n\nFor every violation:\n\n| Kind | Likely cause | Fix |\n|---|---|---|\n| `umlaut` | German prose leaked into body text | Translate the sentence to English |\n| `de_word` | German function word in unquoted prose | Translate; or move into a `DE: … · EN: …` block if intentional bilingual anchor |\n\nIf the line is meta-documentation that **must** quote German tokens\n(e.g. the detection heuristic in `language-and-tone.md` itself),\nappend `\u003C!-- md-language-check: ignore -->` at the end of that single\nline — never as a wholesale silencer.\n\n### 4. Re-run and confirm\n\nAfter every fix, re-run the checker on the same paths. Save only\nproceeds on exit `0`.\n\n## Allowed escape hatches\n\n- **Labeled anchor block** — lines starting with `DE:` \u002F `- DE:` \u002F\n  `* DE:` (and the same for `EN:`) are skipped automatically. Use this\n  for intent-based opt-in \u002F opt-out anchors.\n- **Fenced code blocks** — `\\`\\`\\` … \\`\\`\\`` content is exempt, so\n  shell snippets, JSON fixtures, and quoted user input in code\n  blocks pass through untouched.\n- **Inline code** — backtick spans are stripped before scanning;\n  identifiers like `für_test` inside backticks do not flag.\n- **Per-line marker** — append `\u003C!-- md-language-check: ignore -->`\n  to a line that genuinely needs to quote a German token in body\n  prose (rare; reserved for the rules that document the heuristic).\n\n## Output format\n\n1. One-line summary: `clean` or `N violation(s) found`\n2. Per violation: `file:line — kind \\`match\\`` plus the offending line\n3. Next action: translate, move into a `DE:`\u002F`EN:` block, add the\n   per-line ignore marker, or revert the change\n\n## Gotchas\n\n- The checker scans `.md` files only; passing a non-`.md` path emits a\n  warning and skips it\n- The detection word list is intentionally short and conservative —\n  a clean run is **necessary but not sufficient**; the agent still\n  owns the final language judgement\n- Frontmatter (`--- … ---` at file head) is exempt; descriptions and\n  YAML keys can use international characters where the schema allows\n\n## Do NOT\n\n- Do NOT silence the checker by deleting trigger words from\n  `src\u002Fscripts\u002Fcheck_md_language.ts`; extend the allow-list (anchor\n  blocks, ignore marker) instead\n- Do NOT add the ignore marker to body prose just to push a save\n  through; the marker is for meta-documentation that quotes tokens,\n  not a generic mute\n- Do NOT skip the gate \"because the file is small\" — `language-and-tone`\n  § Detection heuristic applies to every save under the four trees\n\n## Cloud Behavior\n\nOn cloud surfaces (Claude.ai Web, Skills API) the checker script is\nnot shipped, so this skill is **inert** — the agent applies the\nheuristic from [`language-and-tone`](..\u002F..\u002Frules\u002Flanguage-and-tone.md)\nmanually before emitting the file.\n",{"name":5,"packs":49,"scope":51,"domain":54,"execution":55,"model_tier":63,"workspaces":64,"description":7,"runtime_requires":66},[50],"meta",{"write":52,"verification_reason":53},[],"the declared command is a read-only checker: grep -c 'writeFileSync|mkdirSync|appendFileSync' src\u002Fscripts\u002Fcheck_md_language.ts returns 0. Absence of a write is not something a command can prove.","process",{"type":56,"command":57,"handler":60,"allowed_tools":61,"timeout_seconds":62},"assisted",[58,59],".\u002Fscripts-run","src\u002Fscripts\u002Fcheck_md_language","shell",[],30,"lite",[65],"agent-config-maintainer",{"bins":67,"network":69},[68,38],"bash",[],"main","12bd765ce1d800501d45dfb8232102793af01290","src\u002Fskills\u002Fmd-language-check",1,"https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config","https:\u002F\u002Fevent4u.app","https:\u002F\u002Fgithub.com\u002Fevent4u-app","Your events in your hand","2026-11-11 06:19:40",{"source":8,"skillName":5,"commands":80,"prompt":90,"zipAvailable":91},[81,84,87],{"tool":82,"command":83},"npx","npx skills add event4u-app\u002Fagent-config --skill md-language-check",{"tool":85,"command":86},"bunx","bunx skills add event4u-app\u002Fagent-config --skill md-language-check",{"tool":88,"command":89},"pnpm","pnpm dlx skills add event4u-app\u002Fagent-config --skill md-language-check","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fmd-language-check\u002FSKILL.md",true,[],[94,108,120,132,144,154],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":101,"publishedAt":44},"01M6X84PK96XBPENXH66JCTSD1","unknown-key-fixture","Declares a key the schema does not know.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Fbody-portable\u002Funknown-key\u002FSKILL.md",[100],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[102,103,104,105,106,107],"unknown key fixture","Unknown key","fixture","unknown","schema","package",{"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":115,"publishedAt":44},"01M6X84HW7NAHZ7GZMQ9RXK1XJ","portable-fixture","Declares only semantics the MCP-lite carrier transports whole.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Fbody-portable\u002Fportable\u002FSKILL.md",[114],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[104,116,117,118,34,107,119],"portable","portable fixture","engineer","MCP",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":127,"publishedAt":44},"01M6X84F29FE0RGGZ1ZTFGZTX2","non-portable-fixture","Declares a runtime semantic the carrier drops.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Fbody-portable\u002Fnon-portable\u002FSKILL.md",[126],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[117,128,116,104,129,130,131,107],"non portable fixture","semantic","high","runtime",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":139,"publishedAt":44},"01M6X848F706PT9MDCX75JKJ6B","candidate-zero-width","A candidate whose prose carries an invisible joiner.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-scout-candidates\u002Fzero-width-injection\u002FSKILL.md",[138],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[140,141,142,143],"candidate zero width","candidate","ZeRO","prose",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":151,"publishedAt":44},"01M6X841SSC2T31VDF41SA6DG1","candidate-disclosure-suppression","A candidate whose prose tells the agent to withhold from the user.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-scout-candidates\u002Fdisclosure-suppression\u002FSKILL.md",[150],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[152,141,143,153],"candidate disclosure suppression","user",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":44},"01M6X83TFS5AGPBPVTQNWP0BB3","candidate-dangerous-frontmatter","A candidate claiming an unscoped tool grant and a permission bypass.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-scout-candidates\u002Fdangerous-frontmatter\u002FSKILL.md",[160],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[162,141,163,60,164,165],"candidate dangerous frontmatter","frontmatter","permission","tool"]