[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71G25RZTPQG9KJ00JCHC1F7":3,"skill-same:01M71G25RZTPQG9KJ00JCHC1F7":55},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"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":23,"commitSha":24,"skillDirectory":25,"forksCount":13,"repositoryHtmlUrl":26,"repositoryHomepageUrl":6,"ownerHtmlUrl":27,"ownerBlogUrl":28,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M71G25RZTPQG9KJ00JCHC1F7","plugin",null,"outcomeeng\u002Fplugins","outcomeeng","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F257335685?v=4","01M71FRVRF36XYR3HRSCGFHK2R","Outcome Engineering","01M71FRVS4BZG17DWANFJ7EPNY",1,"MIT","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Ftemplates\u002Fplugin\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"---\nname: {{! plugin_name !}}-plugin\ndescription: >-\n  ALWAYS invoke this skill to operate the {{! plugin_name !}} plugin's own lifecycle — report its version and check or reconcile its agent-delivery footprint. Invoke it when this plugin's agents are missing from a session. NEVER commit marketplace-delivered agent definitions into a checkout.\nargument-hint: \"[help|version|init|upgrade|check]\"\narguments: verb\nallowed-tools: Read{!% if target == 'codex' %!}, Bash(python3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fplace_agents.py\":*){!% endif %!}\n---\n\n\u003Cobjective>\nThe {{! plugin_name !}} plugin's resolved version and agent-delivery state reported or reconciled in the scope that carries its skills.\n\u003C\u002Fobjective>\n\n\u003Cverbs>\n\nRead `$verb`, trim it, and match it against the table. One verb runs per invocation; `help` is the default when `$verb` is empty. Text matching no row is an error naming all five verbs.\n\n| Verb      | Result                                                                                       |\n| --------- | -------------------------------------------------------------------------------------------- |\n| `help`    | This plugin's verbs, mutation boundaries, reload requirement, and changelog locations        |\n| `version` | The version resolved by the running session                                                  |\n| `init`    | Missing plugin-owned Codex definitions established in the selected agent home                |\n| `upgrade` | Plugin-owned Codex definitions reconciled to this version, including safe stale-file pruning |\n| `check`   | Selected-home drift, collision, and checkout scope-split state reported without mutation     |\n\n{!% if target == 'claude' %!}`init`, `upgrade`, and `check` report that Claude Code receives this plugin's agents through the plugin manifest and change nothing.{!% else %!}`init`, `upgrade`, and `check` use the bundled reconciliation script. The script never writes into a checkout.{!% endif %!}\n\n\u003C\u002Fverbs>\n\n\u003Cchangelogs>\n\n`help` names where a reader answers \"what changed for me, and what must I now do?\", reading from disk without network access.\n\n{!% if plugin_name == 'product-tree' %!}This plugin carries two changelogs. Read one only when the reader asks what changed.\n\n| Line        | Records                                                  | Path                                                 |\n| ----------- | -------------------------------------------------------- | ---------------------------------------------------- |\n| Marketplace | events no single plugin owns: harnesses, plugins renamed | `${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002FMARKETPLACE-CHANGELOG.md` |\n| Plugin      | what changed in this plugin                              | `${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002FCHANGELOG.md`             |\n\nThe marketplace line is current through its topmost `##` heading. Report that date with the result.{!% else %!}This plugin carries one changelog:\n\n| Line   | Records                     | Path                                     |\n| ------ | --------------------------- | ---------------------------------------- |\n| Plugin | what changed in this plugin | `${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002FCHANGELOG.md` |\n\nMarketplace-wide events ship in the methodology plugin's marketplace changelog; this plugin carries no copy.{!% endif %!}\n\n\u003C\u002Fchangelogs>\n\n\u003Cversion_reporting>\n\n`version` reads exactly one skill-directory-relative manifest:\n\n```text\n${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002F{!% if target == 'claude' %!}.claude-plugin{!% else %!}.codex-plugin{!% endif %!}\u002Fplugin.json\n```\n\nReport the version from the plugin copy backing this running session. Never search for another manifest elsewhere on disk.\n\n\u003C\u002Fversion_reporting>\n\n\u003Cagent_delivery>\n\n{!% if target == 'claude' %!}The plugin manifest delivers this plugin's agents. Every footprint verb reports that fact and writes nothing. The bundled `scripts\u002Fplace_agents.py` serves only the Codex rendering of this skill and is never invoked here.{!% else %!}The plugin ships generated TOML definitions inside this skill. They belong in the selected `CODEX_HOME\u002Fagents\u002F` directory beside the installed skill content they invoke.\n\nBefore every verb, resolve the selected home from `CODEX_HOME`. When it is absent, require an explicit absolute `--home` value; never guess another account or fall back to a checkout. Resolve the invocation checkout root and pass it with `--checkout` so the read-only scope-split preflight can report shadowing plugin copies.\n\nRun the check form first:\n\n```bash\npython3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fplace_agents.py\" --home \u003Cselected-codex-home> --checkout \u003Crepository-root> --check\n```\n\n`check` ends there. For `init` or `upgrade`, stop on any collision or scope split. Otherwise name every destination the check reported, state that the ownership record changes with them, and run the mutating form only after the harness grants that external write:\n\n```bash\npython3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fplace_agents.py\" --home \u003Cselected-codex-home> --checkout \u003Crepository-root>\n```\n\nAn interrupted `init` or `upgrade` leaves no partial definition: each destination and the ownership record are replaced atomically, and re-running `init` or `upgrade` recomputes every owned destination from the shipped definitions, adopting a destination that already carries the shipped bytes into the ownership record instead of reporting it as a collision.\n\nRun the check form again afterward. Success requires zero remaining drift, collision, or scope-split report. An interrupted `init` or `upgrade` is safe to re-run: every write is atomic per file and the ownership record is recomputed from the shipped definitions on each run. A `collision: \u003Cpath> (changed after preflight)` line means the home changed while the run was planning; re-run the check form for a fresh plan instead of retrying the mutating form.{!% endif %!}\n\n\u003C\u002Fagent_delivery>\n\n\u003Cownership_boundary>\n\n{!% if target == 'claude' %!}This plugin claims no standalone agent file because its manifest delivers the agents.{!% else %!}The shared agent home is reconciled through `.outcomeeng-marketplace-ownership.json`. This plugin may create, replace, or prune only entries that record `{{! plugin_name !}}`, or a plugin id the marketplace catalog renames to `{{! plugin_name !}}`, as owner and whose on-disk digest still matches the record. A changed or linked definition of a renamed id is reported as `retained:`, stays in place and recorded, and blocks no placement. An unrecorded destination, a modified owned file, malformed ownership data, or a destination owned by another plugin is a collision: report it and change nothing.\n\nA checkout definition byte-identical to a shipped definition is a scope split with directed removal. A changed checkout definition, or one that claims this plugin by filename prefix or by enabling one of its skills, is a scope-split collision requiring inspection. Either state stops home mutation; never refresh the home skills underneath a shadowing checkout definition.{!% endif %!}\n\n\u003C\u002Fownership_boundary>\n\n\u003Cexamples>\n\n{!% if target == 'claude' %!}`check`, `init`, and `upgrade` each print one line: manifest delivery is in effect and nothing was written.{!% else %!}A `--check` run against a home carrying one stale owned definition, one recorded definition the plugin no longer ships, and one developer file the ownership record does not know prints its plan and exits `2` on any collision or scope split, `1` when writes or prunes are pending, and `0` when the home already matches:\n\n```text\nwrite: \u002FUsers\u002Fdev\u002F.codex\u002Fagents\u002F{{! plugin_name !}}_reviewer.toml\nprune: \u002FUsers\u002Fdev\u002F.codex\u002Fagents\u002F{{! plugin_name !}}_verifier.toml\ncollision: \u002FUsers\u002Fdev\u002F.codex\u002Fagents\u002F{{! plugin_name !}}_notes.toml (unrecorded)\n```\n\n`write` names a destination whose bytes differ from the shipped definition, `prune` a recorded `{{! plugin_name !}}` destination the plugin no longer ships or a recorded destination of an id the catalog renames to it, and `collision` a present file the ownership record does not authorize, with its cause: `symlink`, `unrecorded`, `owned by \u003Cplugin>`, `not a regular file`, or `digest mismatch`. A `retained` line names a recorded definition of a plugin id the catalog renames to `{{! plugin_name !}}` that was changed or replaced with a link; the run leaves it in place and goes on. Each run that reports a `retained` line, `--check` runs included, also prints a `partial-migration:` line and exits like any other run: the retained definition stays discoverable in the registry until the operator resolves it by hand, so a `0` exit with a `partial-migration:` line is a completed placement and an unfinished migration. A `scope-split directed-removal:` or `scope-split collision:` line names a checkout copy under `.codex\u002Fagents\u002F` — matched by shipped bytes, by the `{{! plugin_name !}}` filename prefix, or by a `skills.config` entry naming a `{{! plugin_name !}}:` skill — and stops mutation. After the mutating form succeeds, the ownership record carries one entry per written destination:\n\n```json\n{ \"destination\": \"agents\u002F{{! plugin_name !}}_reviewer.toml\", \"plugin\": \"{{! plugin_name !}}\", \"digest\": \"\u003Csha256 of the installed bytes>\" }\n```\n\n{!% endif %!}\n\n\u003C\u002Fexamples>\n\n\u003Creload>\n\nAgent registries are loaded at session start. After a successful `init` or `upgrade`, reload the harness plugin index or start a new session before judging whether a role is available. Re-running the mutating verb in the same session does not refresh that session's already-loaded registry.\n\n\u003C\u002Freload>\n\n\u003Cfailure_modes>\n\n**Claude repaired a missing role by copying its TOML into the checkout.**\n\nThe checkout copy shadows the selected-home definition while the home plugin can advance independently. Remove a byte-identical generated copy; inspect a changed or unrecognized copy. Reconcile the selected home, then reload the harness.\n\n**Claude treated a plugin-looking filename as ownership proof.**\n\nFilename prefixes collide with developer-authored files. Only the digest-bound ownership record authorizes replacement or pruning; preserve and report every other file.\n\n**Claude reported a version from another plugin copy.**\n\nA marketplace source and cache snapshot can diverge. Read only the skill-directory-relative manifest named in `\u003Cversion_reporting>`.\n\n\u003C\u002Ffailure_modes>\n\n\u003Csuccess_criteria>\n\n- Exactly one verb runs, defaulting to `help`.\n- `version` reads only the running skill copy's target manifest.\n- `help` reports the exact changelog lines and paths declared above.\n- {!% if target == 'claude' %!}Every footprint verb reports manifest delivery and writes nothing.{!% else %!}`check` writes nothing and reports every drift, collision, and scope split.\n- `init` and `upgrade` mutate only the selected home after a clean preflight and external-write approval.\n- Every replacement or prune is authorized by matching ownership, this plugin's or that of an id renamed to it, and digest; foreign or modified files remain untouched.\n- A final check reports no drift, collision, or scope split, and the report claims a finished migration only when it prints no `partial-migration:` line.{!% endif %!}\n- Missing-role repair ends with a harness plugin-index reload or a new session.\n\n\u003C\u002Fsuccess_criteria>\n","\u003Cobjective>\nThe {{! plugin_name !}} plugin's resolved version and agent-delivery state reported or reconciled in the scope that carries its skills.\n\u003C\u002Fobjective>\n\n\u003Cverbs>\n\nRead `$verb`, trim it, and match it against the table. One verb runs per invocation; `help` is the default when `$verb` is empty. Text matching no row is an error naming all five verbs.\n\n| Verb      | Result                                                                                       |\n| --------- | -------------------------------------------------------------------------------------------- |\n| `help`    | This plugin's verbs, mutation boundaries, reload requirement, and changelog locations        |\n| `version` | The version resolved by the running session                                                  |\n| `init`    | Missing plugin-owned Codex definitions established in the selected agent home                |\n| `upgrade` | Plugin-owned Codex definitions reconciled to this version, including safe stale-file pruning |\n| `check`   | Selected-home drift, collision, and checkout scope-split state reported without mutation     |\n\n{!% if target == 'claude' %!}`init`, `upgrade`, and `check` report that Claude Code receives this plugin's agents through the plugin manifest and change nothing.{!% else %!}`init`, `upgrade`, and `check` use the bundled reconciliation script. The script never writes into a checkout.{!% endif %!}\n\n\u003C\u002Fverbs>\n\n\u003Cchangelogs>\n\n`help` names where a reader answers \"what changed for me, and what must I now do?\", reading from disk without network access.\n\n{!% if plugin_name == 'product-tree' %!}This plugin carries two changelogs. Read one only when the reader asks what changed.\n\n| Line        | Records                                                  | Path                                                 |\n| ----------- | -------------------------------------------------------- | ---------------------------------------------------- |\n| Marketplace | events no single plugin owns: harnesses, plugins renamed | `${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002FMARKETPLACE-CHANGELOG.md` |\n| Plugin      | what changed in this plugin                              | `${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002FCHANGELOG.md`             |\n\nThe marketplace line is current through its topmost `##` heading. Report that date with the result.{!% else %!}This plugin carries one changelog:\n\n| Line   | Records                     | Path                                     |\n| ------ | --------------------------- | ---------------------------------------- |\n| Plugin | what changed in this plugin | `${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002FCHANGELOG.md` |\n\nMarketplace-wide events ship in the methodology plugin's marketplace changelog; this plugin carries no copy.{!% endif %!}\n\n\u003C\u002Fchangelogs>\n\n\u003Cversion_reporting>\n\n`version` reads exactly one skill-directory-relative manifest:\n\n```text\n${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002F{!% if target == 'claude' %!}.claude-plugin{!% else %!}.codex-plugin{!% endif %!}\u002Fplugin.json\n```\n\nReport the version from the plugin copy backing this running session. Never search for another manifest elsewhere on disk.\n\n\u003C\u002Fversion_reporting>\n\n\u003Cagent_delivery>\n\n{!% if target == 'claude' %!}The plugin manifest delivers this plugin's agents. Every footprint verb reports that fact and writes nothing. The bundled `scripts\u002Fplace_agents.py` serves only the Codex rendering of this skill and is never invoked here.{!% else %!}The plugin ships generated TOML definitions inside this skill. They belong in the selected `CODEX_HOME\u002Fagents\u002F` directory beside the installed skill content they invoke.\n\nBefore every verb, resolve the selected home from `CODEX_HOME`. When it is absent, require an explicit absolute `--home` value; never guess another account or fall back to a checkout. Resolve the invocation checkout root and pass it with `--checkout` so the read-only scope-split preflight can report shadowing plugin copies.\n\nRun the check form first:\n\n```bash\npython3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fplace_agents.py\" --home \u003Cselected-codex-home> --checkout \u003Crepository-root> --check\n```\n\n`check` ends there. For `init` or `upgrade`, stop on any collision or scope split. Otherwise name every destination the check reported, state that the ownership record changes with them, and run the mutating form only after the harness grants that external write:\n\n```bash\npython3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fplace_agents.py\" --home \u003Cselected-codex-home> --checkout \u003Crepository-root>\n```\n\nAn interrupted `init` or `upgrade` leaves no partial definition: each destination and the ownership record are replaced atomically, and re-running `init` or `upgrade` recomputes every owned destination from the shipped definitions, adopting a destination that already carries the shipped bytes into the ownership record instead of reporting it as a collision.\n\nRun the check form again afterward. Success requires zero remaining drift, collision, or scope-split report. An interrupted `init` or `upgrade` is safe to re-run: every write is atomic per file and the ownership record is recomputed from the shipped definitions on each run. A `collision: \u003Cpath> (changed after preflight)` line means the home changed while the run was planning; re-run the check form for a fresh plan instead of retrying the mutating form.{!% endif %!}\n\n\u003C\u002Fagent_delivery>\n\n\u003Cownership_boundary>\n\n{!% if target == 'claude' %!}This plugin claims no standalone agent file because its manifest delivers the agents.{!% else %!}The shared agent home is reconciled through `.outcomeeng-marketplace-ownership.json`. This plugin may create, replace, or prune only entries that record `{{! plugin_name !}}`, or a plugin id the marketplace catalog renames to `{{! plugin_name !}}`, as owner and whose on-disk digest still matches the record. A changed or linked definition of a renamed id is reported as `retained:`, stays in place and recorded, and blocks no placement. An unrecorded destination, a modified owned file, malformed ownership data, or a destination owned by another plugin is a collision: report it and change nothing.\n\nA checkout definition byte-identical to a shipped definition is a scope split with directed removal. A changed checkout definition, or one that claims this plugin by filename prefix or by enabling one of its skills, is a scope-split collision requiring inspection. Either state stops home mutation; never refresh the home skills underneath a shadowing checkout definition.{!% endif %!}\n\n\u003C\u002Fownership_boundary>\n\n\u003Cexamples>\n\n{!% if target == 'claude' %!}`check`, `init`, and `upgrade` each print one line: manifest delivery is in effect and nothing was written.{!% else %!}A `--check` run against a home carrying one stale owned definition, one recorded definition the plugin no longer ships, and one developer file the ownership record does not know prints its plan and exits `2` on any collision or scope split, `1` when writes or prunes are pending, and `0` when the home already matches:\n\n```text\nwrite: \u002FUsers\u002Fdev\u002F.codex\u002Fagents\u002F{{! plugin_name !}}_reviewer.toml\nprune: \u002FUsers\u002Fdev\u002F.codex\u002Fagents\u002F{{! plugin_name !}}_verifier.toml\ncollision: \u002FUsers\u002Fdev\u002F.codex\u002Fagents\u002F{{! plugin_name !}}_notes.toml (unrecorded)\n```\n\n`write` names a destination whose bytes differ from the shipped definition, `prune` a recorded `{{! plugin_name !}}` destination the plugin no longer ships or a recorded destination of an id the catalog renames to it, and `collision` a present file the ownership record does not authorize, with its cause: `symlink`, `unrecorded`, `owned by \u003Cplugin>`, `not a regular file`, or `digest mismatch`. A `retained` line names a recorded definition of a plugin id the catalog renames to `{{! plugin_name !}}` that was changed or replaced with a link; the run leaves it in place and goes on. Each run that reports a `retained` line, `--check` runs included, also prints a `partial-migration:` line and exits like any other run: the retained definition stays discoverable in the registry until the operator resolves it by hand, so a `0` exit with a `partial-migration:` line is a completed placement and an unfinished migration. A `scope-split directed-removal:` or `scope-split collision:` line names a checkout copy under `.codex\u002Fagents\u002F` — matched by shipped bytes, by the `{{! plugin_name !}}` filename prefix, or by a `skills.config` entry naming a `{{! plugin_name !}}:` skill — and stops mutation. After the mutating form succeeds, the ownership record carries one entry per written destination:\n\n```json\n{ \"destination\": \"agents\u002F{{! plugin_name !}}_reviewer.toml\", \"plugin\": \"{{! plugin_name !}}\", \"digest\": \"\u003Csha256 of the installed bytes>\" }\n```\n\n{!% endif %!}\n\n\u003C\u002Fexamples>\n\n\u003Creload>\n\nAgent registries are loaded at session start. After a successful `init` or `upgrade`, reload the harness plugin index or start a new session before judging whether a role is available. Re-running the mutating verb in the same session does not refresh that session's already-loaded registry.\n\n\u003C\u002Freload>\n\n\u003Cfailure_modes>\n\n**Claude repaired a missing role by copying its TOML into the checkout.**\n\nThe checkout copy shadows the selected-home definition while the home plugin can advance independently. Remove a byte-identical generated copy; inspect a changed or unrecognized copy. Reconcile the selected home, then reload the harness.\n\n**Claude treated a plugin-looking filename as ownership proof.**\n\nFilename prefixes collide with developer-authored files. Only the digest-bound ownership record authorizes replacement or pruning; preserve and report every other file.\n\n**Claude reported a version from another plugin copy.**\n\nA marketplace source and cache snapshot can diverge. Read only the skill-directory-relative manifest named in `\u003Cversion_reporting>`.\n\n\u003C\u002Ffailure_modes>\n\n\u003Csuccess_criteria>\n\n- Exactly one verb runs, defaulting to `help`.\n- `version` reads only the running skill copy's target manifest.\n- `help` reports the exact changelog lines and paths declared above.\n- {!% if target == 'claude' %!}Every footprint verb reports manifest delivery and writes nothing.{!% else %!}`check` writes nothing and reports every drift, collision, and scope split.\n- `init` and `upgrade` mutate only the selected home after a clean preflight and external-write approval.\n- Every replacement or prune is authorized by matching ownership, this plugin's or that of an id renamed to it, and digest; foreign or modified files remain untouched.\n- A final check reports no drift, collision, or scope split, and the report claims a finished migration only when it prints no `partial-migration:` line.{!% endif %!}\n- Missing-role repair ends with a harness plugin-index reload or a new session.\n\n\u003C\u002Fsuccess_criteria>\n",{},"main","978d51c51d68c99cffb2ba48f7cad9d2f07e5738","src\u002Ftemplates\u002Fplugin","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins","https:\u002F\u002Fgithub.com\u002Foutcomeeng","https:\u002F\u002Foutcome.engineering","Spec-driven development for AI-assisted engineering","2026-11-11 22:17:26",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add outcomeeng\u002Fplugins --skill plugin",{"tool":37,"command":38},"bunx","bunx skills add outcomeeng\u002Fplugins --skill plugin",{"tool":40,"command":41},"pnpm","pnpm dlx skills add outcomeeng\u002Fplugins --skill plugin","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Ftemplates\u002Fplugin\u002FSKILL.md",true,[45,51],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"scripts\u002Fplace_agents.json","SCRIPT","脚本",36,"https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Ftemplates\u002Fplugin\u002Fscripts\u002Fplace_agents.json",{"path":52,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":53,"sourceHtmlUrl":54},"scripts\u002Fplace_agents.py",13917,"https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Ftemplates\u002Fplugin\u002Fscripts\u002Fplace_agents.py",[56,93,109,126,139,153],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":72,"publishedAt":18},"01M71G23DCX3SV60H63HBBKQ6J","sanitize-powerpoint","ALWAYS invoke this skill when sanitizing, cleaning up, auditing, or aligning a PowerPoint (.pptx) deck — slide-master and layout structure, layout type attributes, stray fonts, non-theme colors, or layout naming. NEVER hand-edit pptx XML without this skill.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fwork\u002Fskills\u002Fsanitize-powerpoint\u002FSKILL.md",[62,67],{"categoryNo":63,"categoryName":64,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000003","演示文稿","SCENARIO","使用场景",{"categoryNo":68,"categoryName":69,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92],"sanitize powerpoint","powerpoint","sanitize","up","when","invoke","master","xml","edit","deck","layout","naming","pptx","theme","attributes","fonts","never","structure","cleaning","type",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":18},"01M71G21PQKBCDECHGVYSKPJW5","draw-excalidraw","ALWAYS invoke this skill when creating Excalidraw diagrams, visualizing workflows, architectures, or concepts. NEVER generate Excalidraw JSON without this skill.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fwork\u002Fskills\u002Fdraw-excalidraw\u002FSKILL.md",[],[100,101,102,103,104,89,78,105,106,77,107,108],"draw","excalidraw","draw excalidraw","diagrams","architectures","generate","workflows","concepts","json",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":118,"publishedAt":18},"01M71G1ZMNGFD37RZYM620XM2C","typescript-test-standards","TypeScript test standards enforced across all skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-test-standards\u002FSKILL.md",[115],{"categoryNo":116,"categoryName":117,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000008","测试与质量",[119,120,121,122,123,124,125],"standards","test","typescript test standards","typescript","across","false","read",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":135,"publishedAt":18},"01M71G1XBH0X1VCTR7269MDGSY","typescript-code-standards","TypeScript code standards enforced across all skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-code-standards\u002FSKILL.md",[132],{"categoryNo":133,"categoryName":134,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000030","开发工程师",[136,119,137,138,122,124,125,123],"code standards","typescript code standards","code",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":18},"01M71G1TQ3VN45SJ75DFMJDB9W","typescript-architecture-standards","TypeScript ADR conventions enforced across architect and auditor skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-architecture-standards\u002FSKILL.md",[],[146,147,148,122,119,149,150,124,151,125,123,152],"architecture standards","typescript architecture standards","architecture","adr","conventions","auditor","architect",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":18},"01M71G1RSFGDZR5XBXDX7E02B5","simplify-typescript-code","ALWAYS invoke this skill when simplifying TypeScript implementation while preserving behavior.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Fsimplify-typescript-code\u002FSKILL.md",[],[160,161,138,122,78,162,163,164,165,125,166,81,167,168,169,170,171,172,173,77],"simplify typescript code","simplify","head","diff","parse","behavior","tool","grep","git","status","base","rev","implementation","use"]