[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71SQ64MVS5DHX2GDPWPR3WE":3,"skill-same:01M71SQ64MVS5DHX2GDPWPR3WE":73},{"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":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M71SQ64MVS5DHX2GDPWPR3WE","explainer",null,"Build the narrated what-was-made walkthrough for a QA packet: script from plan + acceptance, demo pass, segments.json, animate graphics, kokoro narration, orc-explain assemble","HigorAlves\u002Forc","HigorAlves","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F11262976?v=4","01M71S79EZEMHZ8PQSV0XQJHYY","Higor Alves","01M71S79FKKTCHCN1EDR8DSTWQ",7,"MIT","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fexplainer\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"for","gate","script","json","build","graphics","demo","explain","use","animate","narration","segments","flow","assemble","plan","acceptance","qa","walkthrough","2026-11-10 13:02:02",false,"---\nname: explainer\ndescription: \"Build the narrated what-was-made walkthrough for a QA packet: script from plan + acceptance, demo pass, segments.json, animate graphics, kokoro narration, orc-explain assemble\"\nwhen_to_use: Use from \u002Forc:explain and the flow explainer gate. Not for QA itself.\n---\n\n# Explainer\n\n**Announce at start:** \"I'm using the explainer skill to build the narrated walkthrough.\"\n\nInputs: `\u003Cqa-dir>` with `qa-manifest.json`, the session's `plan.md` (optional), the target **name** + optional `--base-url` override for the demo pass (resolved inline per `orc:qa-targets`; never the resolved JSON), settings `explainer_style` (`CLAUDE_PLUGIN_OPTION_EXPLAINER_STYLE`, default `isometric`) and `explainer_voice` (`CLAUDE_PLUGIN_OPTION_EXPLAINER_VOICE`, default `af_heart`).\n\n## 1. Toolchain\n`orc-explain setup` (first run: npm install kokoro-js into the user cache; model downloads on first narration). `command -v ffmpeg` missing ⇒ stop with one line, no explainer. animate missing ⇒ say `graphic segments will be plain title cards` and continue.\n\n## 2. Demo footage\nIf `\u003Cqa-dir>\u002Fdemo\u002F` lacks a `.webm` per `@golden` scenario: `( cd \u003Crepo>\u002F\u003Cdir> && ORC_TARGET_JSON=\"$(orc-targets resolve \u003Cname> [--base-url \u003Coverride>])\" ORC_PW_OUTPUT_DIR=\u003Cqa-dir>\u002Fpw-demo npx playwright test --project=demo )` (resolve stays inline — `orc:qa-targets` iron rule), then `orc-qa-video plan --results \u003Cqa-dir>\u002Fpw-demo\u002Fresults.json` and copy each `video` to `\u003Cqa-dir>\u002Fdemo\u002F\u003Cid>.webm`.\n\n## 3. Script → `segments.json` (schema: `references\u002Fsegments-schema.md`)\nSources, in order: the plan's slice titles + acceptance (what was built), the manifest's acceptance rows (what was proven), `git log --format=%s \u003Cbase>..HEAD` (what changed). **Never the raw diff** — the script describes behaviour, not code. Shape: `s01` graphic (feature title + 2–3 lines), one clip segment per golden scenario (caption = the first `AC` title that scenario proves; narration = one sentence of what the viewer sees), `sNN` graphic outcome (criteria passed\u002Ftotal, notable skips). Narration lines ≤ 25 words, present tense, no file names. Total target ≤ 90 seconds. `style` from setting, `voice` from setting.\n\n## 4. Explainer gate (soft-inward, header `Explainer`; `guided`\u002F`full` pre-approve)\n```markdown\n> **⛔ Gate — explainer**\n>\n> \u003CN> segments, ~\u003Cseconds>s, style \u003Cstyle>, voice \u003Cvoice>. Review the script before rendering.\n```\npreview = `segments.json` rendered as `id · kind · caption\u002Ftitle · narration`. Options: **Render (Recommended)** · **Edit script** (apply the user's wording changes, re-show) · **Cancel**.\n\n## 5. Render\nAuthoring and rendering are render work, not a new gate: the Explainer gate above (script + segments + style) already covered them.\n\n1. `orc-explain narrate --segments S --work \u003Cqa-dir>\u002Fexplain`.\n2. **Scene authoring** (only when animate is installed; otherwise skip, fallback cards apply). Run `orc-explain graphics --segments S --work \u003Cqa-dir>\u002Fexplain` once to create `\u003Cwork>\u002Fpieces\u002F\u003Cid>\u002F` (`piece.json`, `brief.md`, the example's `src\u002F`). Then, for each graphic segment, author `src\u002Fscenes.js` (and the `TIMELINE` in `src\u002Fhead.html`) from that piece's `brief.md`, following animate's `craft.md` and the chosen style's `STYLE.md` + `kit.js` under `\u003Canimate skill root>\u002Fstyles\u002F\u003Cstyle>\u002F`. One card-like scene per piece: the headline, then the lines, 16:9, timed to the narration length (`ffprobe -v error -show_entries format=duration -of csv=p=0 \u003Cwork>\u002Fnarration\u002F\u003Cid>.wav`).\n3. `ORC_ANIMATE_RENDER=1 orc-explain graphics --segments S --work \u003Cqa-dir>\u002Fexplain` (render pass reuses the authored pieces, never regenerates them).\n4. `orc-explain assemble --segments S --work \u003Cqa-dir>\u002Fexplain --qa-dir \u003Cqa-dir> --out \u003Cqa-dir>\u002Fexplainer-\u003Cbranch>.mp4`.\n\nThen add to `qa-manifest.json`: `explainer: { file: \"explainer-\u003Cbranch>.mp4\", segments: \"explain\u002Fsegments.json\" }`, append the file to `artifacts[]` (role `explainer`) and `curated[]`; append `## Explainer — \u003CISO>` to `steps.md` (segments, duration, style, voice, animate used yes\u002Fno). Delivery is `orc:evidence-publish`'s job (same gates; the PR comment links it as `EXPLAINER_URL`).\n\n`graphics` writes an animate piece per graphic segment under `\u003Cwork>\u002Fpieces\u002F` and uses fallback cards unless the scenes were authored and `ORC_ANIMATE_RENDER=1` (see `animate.lock` notes: animate pieces are hand-authored canvas scenes, not data-driven).\n","# Explainer\n\n**Announce at start:** \"I'm using the explainer skill to build the narrated walkthrough.\"\n\nInputs: `\u003Cqa-dir>` with `qa-manifest.json`, the session's `plan.md` (optional), the target **name** + optional `--base-url` override for the demo pass (resolved inline per `orc:qa-targets`; never the resolved JSON), settings `explainer_style` (`CLAUDE_PLUGIN_OPTION_EXPLAINER_STYLE`, default `isometric`) and `explainer_voice` (`CLAUDE_PLUGIN_OPTION_EXPLAINER_VOICE`, default `af_heart`).\n\n## 1. Toolchain\n`orc-explain setup` (first run: npm install kokoro-js into the user cache; model downloads on first narration). `command -v ffmpeg` missing ⇒ stop with one line, no explainer. animate missing ⇒ say `graphic segments will be plain title cards` and continue.\n\n## 2. Demo footage\nIf `\u003Cqa-dir>\u002Fdemo\u002F` lacks a `.webm` per `@golden` scenario: `( cd \u003Crepo>\u002F\u003Cdir> && ORC_TARGET_JSON=\"$(orc-targets resolve \u003Cname> [--base-url \u003Coverride>])\" ORC_PW_OUTPUT_DIR=\u003Cqa-dir>\u002Fpw-demo npx playwright test --project=demo )` (resolve stays inline — `orc:qa-targets` iron rule), then `orc-qa-video plan --results \u003Cqa-dir>\u002Fpw-demo\u002Fresults.json` and copy each `video` to `\u003Cqa-dir>\u002Fdemo\u002F\u003Cid>.webm`.\n\n## 3. Script → `segments.json` (schema: `references\u002Fsegments-schema.md`)\nSources, in order: the plan's slice titles + acceptance (what was built), the manifest's acceptance rows (what was proven), `git log --format=%s \u003Cbase>..HEAD` (what changed). **Never the raw diff** — the script describes behaviour, not code. Shape: `s01` graphic (feature title + 2–3 lines), one clip segment per golden scenario (caption = the first `AC` title that scenario proves; narration = one sentence of what the viewer sees), `sNN` graphic outcome (criteria passed\u002Ftotal, notable skips). Narration lines ≤ 25 words, present tense, no file names. Total target ≤ 90 seconds. `style` from setting, `voice` from setting.\n\n## 4. Explainer gate (soft-inward, header `Explainer`; `guided`\u002F`full` pre-approve)\n```markdown\n> **⛔ Gate — explainer**\n>\n> \u003CN> segments, ~\u003Cseconds>s, style \u003Cstyle>, voice \u003Cvoice>. Review the script before rendering.\n```\npreview = `segments.json` rendered as `id · kind · caption\u002Ftitle · narration`. Options: **Render (Recommended)** · **Edit script** (apply the user's wording changes, re-show) · **Cancel**.\n\n## 5. Render\nAuthoring and rendering are render work, not a new gate: the Explainer gate above (script + segments + style) already covered them.\n\n1. `orc-explain narrate --segments S --work \u003Cqa-dir>\u002Fexplain`.\n2. **Scene authoring** (only when animate is installed; otherwise skip, fallback cards apply). Run `orc-explain graphics --segments S --work \u003Cqa-dir>\u002Fexplain` once to create `\u003Cwork>\u002Fpieces\u002F\u003Cid>\u002F` (`piece.json`, `brief.md`, the example's `src\u002F`). Then, for each graphic segment, author `src\u002Fscenes.js` (and the `TIMELINE` in `src\u002Fhead.html`) from that piece's `brief.md`, following animate's `craft.md` and the chosen style's `STYLE.md` + `kit.js` under `\u003Canimate skill root>\u002Fstyles\u002F\u003Cstyle>\u002F`. One card-like scene per piece: the headline, then the lines, 16:9, timed to the narration length (`ffprobe -v error -show_entries format=duration -of csv=p=0 \u003Cwork>\u002Fnarration\u002F\u003Cid>.wav`).\n3. `ORC_ANIMATE_RENDER=1 orc-explain graphics --segments S --work \u003Cqa-dir>\u002Fexplain` (render pass reuses the authored pieces, never regenerates them).\n4. `orc-explain assemble --segments S --work \u003Cqa-dir>\u002Fexplain --qa-dir \u003Cqa-dir> --out \u003Cqa-dir>\u002Fexplainer-\u003Cbranch>.mp4`.\n\nThen add to `qa-manifest.json`: `explainer: { file: \"explainer-\u003Cbranch>.mp4\", segments: \"explain\u002Fsegments.json\" }`, append the file to `artifacts[]` (role `explainer`) and `curated[]`; append `## Explainer — \u003CISO>` to `steps.md` (segments, duration, style, voice, animate used yes\u002Fno). Delivery is `orc:evidence-publish`'s job (same gates; the PR comment links it as `EXPLAINER_URL`).\n\n`graphics` writes an animate piece per graphic segment under `\u003Cwork>\u002Fpieces\u002F` and uses fallback cards unless the scenes were authored and `ORC_ANIMATE_RENDER=1` (see `animate.lock` notes: animate pieces are hand-authored canvas scenes, not data-driven).\n",{"name":5,"description":7,"when_to_use":42},"Use from \u002Forc:explain and the flow explainer gate. Not for QA itself.","main","7522fd7266944e30052204c2f6df287d8b5516be","orc\u002Fskills\u002Fexplainer",0,"https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc","https:\u002F\u002Forc.novacstack.com\u002F","https:\u002F\u002Fgithub.com\u002FHigorAlves","higoralves.dev","Software Engineering","2026-11-07 07:26:38",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add HigorAlves\u002Forc --skill explainer",{"tool":59,"command":60},"bunx","bunx skills add HigorAlves\u002Forc --skill explainer",{"tool":62,"command":63},"pnpm","pnpm dlx skills add HigorAlves\u002Forc --skill explainer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fexplainer\u002FSKILL.md",true,[67],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"references\u002Fsegments-schema.md","REFERENCE","参考文档",1156,"https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fexplainer\u002Freferences\u002Fsegments-schema.md",[74,111,137,158,180,200],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":93,"publishedAt":37},"01M71SW40F9TAAEDKBYYBCM814","writing-plans","Write a comprehensive implementation plan of bite-sized TDD tasks that an engineer with zero codebase context could execute — exact files, code, tests, and verification steps","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fwriting-plans\u002FSKILL.md",[80,85,90],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":91,"categoryName":92,"taxonomyType":88,"taxonomyTypeDesc":89},"01JBSEEDCAT000000000000036","内容创作者",[94,95,96,97,98,99,100,101,102,103,104,105,33,106,107,108,109,19,110,27],"writing","writing plans","plans","engineer","superpowers","implementation plan","files","when","you","code","tasks","verification","write","steps","context","ZeRO","tests",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":122,"publishedAt":37},"01M71SW15KHE4MHJW9NEXV65X2","writing-for-agents","orc's doctrine layer for writing any document an agent consumes — skills, AGENTS.md\u002FCLAUDE.md, reference docs","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[117,118,121],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},{"categoryNo":119,"categoryName":120,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":91,"categoryName":92,"taxonomyType":88,"taxonomyTypeDesc":89},[123,94,19,124,101,125,126,127,128,129,130,131,27,132,133,134,135,136],"writing for agents","matt pocock","inline","tuning","a skill","layer","doctrine","push","editing","document","github","https","reference","docs",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":144,"publishedAt":37},"01M71SVYQKXT743HHHWGHT3G13","workspace-mode","Use when cwd is a parent dir holding multiple sibling git repos — defines repo auto-detection, --repos\u002F--repo\u002F--all-repos\u002F--this-repo precedence, per-repo dispatch, and linked-PR mechanics.","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fworkspace-mode\u002FSKILL.md",[143],{"categoryNo":119,"categoryName":120,"taxonomyType":83,"taxonomyTypeDesc":84},[145,146,147,148,149,101,150,151,152,153,27,154,155,156,157],"workspace mode","mode","workspace","mechanics","auto","repos","git","pr","repo","dispatch","auto-detection","detection","parent",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":165,"publishedAt":37},"01M71SVVP3BXS06G9395P2K0RH","wizard","Generate an interactive bash wizard walking a human through work only they can perform — credentials, secrets, one-off migrations","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fwizard\u002FSKILL.md",[164],{"categoryNo":119,"categoryName":120,"taxonomyType":83,"taxonomyTypeDesc":84},[160,166,167,168,169,124,101,170,171,172,173,174,175,107,176,177,19,27,178,179],"condition","never","provisioning infrastructure","only","Bash","work","credentials","generate","human","secrets","infrastructure","do","one","interactive",{"skillNo":181,"name":182,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":186,"publishedAt":37},"01M71SVT4AR6NKAM5B077E7QSJ","wait-what","Stop and re-pitch — the last message did not land; say it again simply, in the project's own vocabulary.","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fwait-what\u002FSKILL.md",[],[187,188,189,190,191,124,192,193,194,195,133,134,196,197,198,199],"wait what","wait","project","re","true","pitch","last","say","message","land","it","stop","vocabulary",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":210,"publishedAt":37},"01M71SVQVYRA9QBQ6G8MWR8G6F","vitest","Vitest fast unit testing framework powered by Vite with Jest-compatible API","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fvitest\u002FSKILL.md",[206,209],{"categoryNo":207,"categoryName":208,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},[202,211,212,213,214,215,94,101,216,217,218,219,220,221,222,223,224,225,110,226],"coverage","unit","testing","testing framework","generated","api","jest","2026","at","scripts","unit testing","antfu","framework","vite","mocking","dev"]