[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BST3M2N4XB69DCWEXYRXQV":3,"skill-same:01M6BST3M2N4XB69DCWEXYRXQV":61},{"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":27,"linkOnly":28,"markdownContent":29,"markdownBody":30,"frontMatter":31,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":6,"ownerHtmlUrl":37,"ownerBlogUrl":38,"ownerDescription":39,"updatedAt":40,"install":41,"resources":54},"01M6BST3M2N4XB69DCWEXYRXQV","psychopomp",null,"Make explainer reels and deterministic motion graphics with Psychopomp: walkthrough videos of pull requests, code changes, protocols, or lifecycles, with GPU Stage choreography, callouts, rolling numbers, sequence diagrams, animated diffs, and optional ElevenLabs or Fish Audio narration.","mikker\u002Fdotfiles","mikker","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F2819?v=4","01M6BSPF9WRVEQ89CW9NNJ7JK4","Mikkel Malmberg","01M6BSPFEEZKZSB4B603CZGV9W",116,"MIT","https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents.symlink\u002Fskills\u002Fpsychopomp\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26],"diffs","graphics","pull requests","code","pull","gpu","protocols","Audio","2026-11-10 10:12:30",false,"---\nname: psychopomp\ndescription: >\n  Make explainer reels and deterministic motion graphics with Psychopomp:\n  walkthrough videos of pull requests, code changes, protocols, or lifecycles,\n  with GPU Stage choreography, callouts, rolling numbers, sequence diagrams,\n  animated diffs, and optional ElevenLabs or Fish Audio narration.\n---\n\n# Psychopomp explainer reels\n\nAn **explainer reel** is several independently authored Scene Plans joined on one\nclock: behavior stories on the GPU Stage (orbs, cards, beams, packets, camera,\nbloom), pinned Callouts, Rolling Numbers, changes as animated Stepped Diffs,\ncaptions in a terminal voice, and optional spoken narration. When narrated,\nevery visual beat waits for a phrase in the transcript, so re-voicing re-times\nthe film automatically.\n\nThe working examples are in `scenes\u002Fpr-walkthrough`: `src\u002Fflagship.rs` (#50825 as a\nStage film that zooms into its code), `src\u002Fstop_stage.rs` (#50042 combining Stage,\nCallouts, Rolling Number, and a Zoom into an annotated code diff), and `src\u002Flib.rs`\n(the five-PR reel with sequence diagrams). Copy their shape; do not start from a\nblank crate. Component payloads, channels, and commands live in `SCENE_PLANS.md`\n(\"Make A Narrated Explainer Reel\") and terms in `CONTEXT.md`; read both before\nauthoring. Engineering rules are in `AGENTS.md`.\n\n## Steps\n\n1. **Establish the facts.** For each change, read the actual diff and PR description\n   (`gh pr diff`, `gh pr view`) and write one sentence each for the broken behavior,\n   the fixed behavior, and the change. Done when every claim you will narrate is\n   traceable to code, a test, or a reproduced run; mark anything you could not verify\n   and keep it out of the script.\n\n2. **Write the script** as `scenes\u002F\u003Cname>\u002Fnarration\u002Fscript.json`, one clip per part:\n   intro, then per change `\u003Cslug>-before`, `\u003Cslug>-after`, `\u003Cslug>-code`, then outro.\n   Follow [STORY.md](STORY.md) when writing it. Done when each clip is under about 30\n   seconds spoken and every planned visual beat has a distinct anchor phrase in it.\n\n3. **Voice it (optional).** Draft first with no credentials (`--draft` uses macOS\n   `say`), or synthesize final narration with **ElevenLabs** (`engine: \"elevenlabs\"`,\n   default model `eleven_v4`) or **Fish Audio** (`engine: \"fish\"`):\n   ```json\n   {\n     \"engine\": \"elevenlabs\",\n     \"model\": \"eleven_v4\",\n     \"voice\": \"\u003Celevenlabs-voice-id>\",\n     \"settings\": { \"stability\": 0.5, \"similarity\": 0.7 },\n     \"clips\": [\n       { \"id\": \"change-before\", \"text\": \"[warm, conversational voice] ...\" }\n     ]\n   }\n   ```\n   ```sh\n   # Draft (no API key required)\n   bun scripts\u002Fnarrate.ts scenes\u002F\u003Cname>\u002Fnarration\u002Fscript.json --draft\n\n   # ElevenLabs (requires ELEVENLABS_API_KEY and script.voice)\n   ELEVENLABS_API_KEY=... bun scripts\u002Fnarrate.ts scenes\u002F\u003Cname>\u002Fnarration\u002Fscript.json\n\n   # Fish Audio (requires FISH_AUDIO_API_KEY)\n   FISH_AUDIO_API_KEY=... bun scripts\u002Fnarrate.ts scenes\u002F\u003Cname>\u002Fnarration\u002Fscript.json\n   ```\n   `scripts\u002Fnarrate.ts` normalizes loudness, transcribes word timings with Whisper,\n   and writes `\u003Cid>.mp3`, `\u003Cid>.words.json`, and `narration.json`. When switching\n   voices or engines, rebuild the Scene Plan against the new word timings.\n\n   **Or declare the narration in the Scene Program** with `psychopomp-media`\n   (SCENE_PLANS.md, \"Declare Narration And Sound\"): `media.say(id, &voice, text)`,\n   `media.dialogue`, `media.sfx`, and `audio.derive(Effect::pitch(..))`, then\n   `media.finish()?`. Each line is generated once and recorded in\n   `media.lock.json`; later runs call nothing unless a declaration changed, and\n   ElevenLabs words come from its character alignment with the script's spelling.\n   Check the cost first with `PSYCHOPOMP_MEDIA=plan cargo run -p \u003Ccrate>` (zero\n   API calls), time with `PSYCHOPOMP_MEDIA=draft`, and clean up with\n   `PSYCHOPOMP_MEDIA=prune`. Move a narrate.ts scene with\n   `cargo run -p psychopomp-media -- adopt scenes\u002F\u003Cname>\u002Fnarration` (no\n   regeneration). Done when a plain run reports every resource `=`.\n\n4. **Author the Scene Program** in `scenes\u002F\u003Cname>` (add it to the workspace).\n   Use `psychopomp::score` (`SCENE_PLANS.md`, \"Author With The Score DSL\") so\n   `PlanBuilder` is the only `mut` binding and every actor (`Stage`, `Camera`,\n   `Caption`, `Callout`, `RollingNumber`, `Checklist`, `Meter`, `Bars`,\n   `Subtitles`, `Confetti`, `Terminal`, `Chat`, `ChangedFiles`, `LowerThird`,\n   `Lens`) is an immutable value whose methods return composable `Beat`s\n   (`.then`, `.also`, `.with`, `.on_end`, `.after`, `.early`, `stagger`, `each`,\n   `at!(scene, time => ...)`). Schedule clips with `Narration::reading`, build\n   elements with `StageElement::card|orb|beam|packet|label|ring` and relative\n   `psychopomp::layout::Placement` envelopes on `StagePost::RESTRAINED`, frame\n   with `Caption::header|chip|footer`, and play sounds with `sfx::*.beat(id, gain_db)`\n   (or `audio.beat(gain_db)` for `psychopomp-media`). Load the `explainer-motion`\n   skill and apply it to every beat: cards `settle_in`, beams `connect`,\n   messages `send`, replies wait for `.reply()`, impacts `hit`, the hero `orb_in`,\n   the fix's `rewind`; use `Callout` to pin annotations to Stage elements or\n   Editor code ranges and `RollingNumber` for live counters\u002Ftimers; drive camera\n   moves through `stage.camera()` (`establish`, `frame`, `follow`, `release`,\n   `orbit`, `whip`, `dolly_zoom`). Reach for the visualization and text overlays\n   instead of hand-building them from Stage labels and rings: `Checklist` for\n   checks that run and resolve, `Meter` (`MeterPlan::countdown`) for a timeout\n   ring, `Bars` for before\u002Fafter numbers, `Confetti` for a success beat, and\n   `Subtitles` (`SubtitlesPlan::from_spoken`) to burn in word-timed captions.\n   Changes are `Diff`s of `keep`, `add(step)`, and `remove(step)` lines, each step\n   keyed to a phrase. Done when `cargo run -p \u003Ccrate>` writes the reel and\n   `cargo run --release -- plan validate \u003Creel>` reports valid. A missing phrase panics\n   with its clip: change the anchor to words the transcript actually contains.\n\n5. **Review before rendering.** Get segment spans from `plan inspect \u003Creel>`, then\n   contact-sheet each segment at its before, switch, after, and code beats:\n   ```sh\n   bun scripts\u002Fsheet.ts \u003Creel> t1,t2,... --theme neutral --shutter --out output\u002Fsheet.jpg\n   ```\n   When tuning the look, set `PSYCHOPOMP_SHADER_DIR=crates\u002Fpsychopomp-render\u002Fsrc\u002Frender`\n   and edit `stage.wgsl`\u002F`stage_post.wgsl`: every frame and sheet picks up shader edits\n   without a Rust rebuild.\n   Then render one behavior segment with audio (`plan render \u003Creel> out.mp4 --cue \u003Cscene-id>`)\n   and inspect frames extracted during motion. Done when every segment has been\n   looked at and no text overlaps, clips, or reads against the wrong chip.\n\n6. **Render and verify** the whole reel:\n   ```sh\n   cargo run --release -- plan render \u003Creel> output\u002F\u003Cname>.mp4 --theme neutral\n   ```\n   Done when `ffprobe` shows 1920x1080, 60 fps, AAC audio, and a duration matching\n   `plan inspect`, and loudness is near -16 LUFS with peaks under -1 dBFS.\n\n7. **Deliver** the MP4 path. Commit the scene, narration assets, and any engine\n   changes in Psychopomp with conventional messages.\n\n## Improving Psychopomp\n\nWhen a reel needs something the engine cannot do, add it to Psychopomp rather than\nworking around it in one scene: plan types and validation in `crates\u002Fpsychopomp`,\nstrict-channel preflight in `plan_runtime`, pixels in `render`, GPU-free tests plus\nan `#[ignore]` GPU test, and the docs `AGENTS.md` asks you to keep current.\n\nBuild from small reusable pieces. Interpolation, easing, curves, shape ports, and\nconnectors belong in `psychopomp::math` (organized like pmndrs `math`: core `lerp`\u002F\n`remap`\u002F`smoothstep`, `easing`, `curve`, `shapes`, `random`; glam vectors). Extend it\ninstead of inlining math in a renderer or scene, and split renderers into one small\nhelper per element, as `render\u002Fstage.rs` does. Keep\n`cargo fmt --check`, `cargo clippy --workspace --all-targets --all-features -- -D warnings`,\nand `cargo test --workspace` green.\n","# Psychopomp explainer reels\n\nAn **explainer reel** is several independently authored Scene Plans joined on one\nclock: behavior stories on the GPU Stage (orbs, cards, beams, packets, camera,\nbloom), pinned Callouts, Rolling Numbers, changes as animated Stepped Diffs,\ncaptions in a terminal voice, and optional spoken narration. When narrated,\nevery visual beat waits for a phrase in the transcript, so re-voicing re-times\nthe film automatically.\n\nThe working examples are in `scenes\u002Fpr-walkthrough`: `src\u002Fflagship.rs` (#50825 as a\nStage film that zooms into its code), `src\u002Fstop_stage.rs` (#50042 combining Stage,\nCallouts, Rolling Number, and a Zoom into an annotated code diff), and `src\u002Flib.rs`\n(the five-PR reel with sequence diagrams). Copy their shape; do not start from a\nblank crate. Component payloads, channels, and commands live in `SCENE_PLANS.md`\n(\"Make A Narrated Explainer Reel\") and terms in `CONTEXT.md`; read both before\nauthoring. Engineering rules are in `AGENTS.md`.\n\n## Steps\n\n1. **Establish the facts.** For each change, read the actual diff and PR description\n   (`gh pr diff`, `gh pr view`) and write one sentence each for the broken behavior,\n   the fixed behavior, and the change. Done when every claim you will narrate is\n   traceable to code, a test, or a reproduced run; mark anything you could not verify\n   and keep it out of the script.\n\n2. **Write the script** as `scenes\u002F\u003Cname>\u002Fnarration\u002Fscript.json`, one clip per part:\n   intro, then per change `\u003Cslug>-before`, `\u003Cslug>-after`, `\u003Cslug>-code`, then outro.\n   Follow [STORY.md](STORY.md) when writing it. Done when each clip is under about 30\n   seconds spoken and every planned visual beat has a distinct anchor phrase in it.\n\n3. **Voice it (optional).** Draft first with no credentials (`--draft` uses macOS\n   `say`), or synthesize final narration with **ElevenLabs** (`engine: \"elevenlabs\"`,\n   default model `eleven_v4`) or **Fish Audio** (`engine: \"fish\"`):\n   ```json\n   {\n     \"engine\": \"elevenlabs\",\n     \"model\": \"eleven_v4\",\n     \"voice\": \"\u003Celevenlabs-voice-id>\",\n     \"settings\": { \"stability\": 0.5, \"similarity\": 0.7 },\n     \"clips\": [\n       { \"id\": \"change-before\", \"text\": \"[warm, conversational voice] ...\" }\n     ]\n   }\n   ```\n   ```sh\n   # Draft (no API key required)\n   bun scripts\u002Fnarrate.ts scenes\u002F\u003Cname>\u002Fnarration\u002Fscript.json --draft\n\n   # ElevenLabs (requires ELEVENLABS_API_KEY and script.voice)\n   ELEVENLABS_API_KEY=... bun scripts\u002Fnarrate.ts scenes\u002F\u003Cname>\u002Fnarration\u002Fscript.json\n\n   # Fish Audio (requires FISH_AUDIO_API_KEY)\n   FISH_AUDIO_API_KEY=... bun scripts\u002Fnarrate.ts scenes\u002F\u003Cname>\u002Fnarration\u002Fscript.json\n   ```\n   `scripts\u002Fnarrate.ts` normalizes loudness, transcribes word timings with Whisper,\n   and writes `\u003Cid>.mp3`, `\u003Cid>.words.json`, and `narration.json`. When switching\n   voices or engines, rebuild the Scene Plan against the new word timings.\n\n   **Or declare the narration in the Scene Program** with `psychopomp-media`\n   (SCENE_PLANS.md, \"Declare Narration And Sound\"): `media.say(id, &voice, text)`,\n   `media.dialogue`, `media.sfx`, and `audio.derive(Effect::pitch(..))`, then\n   `media.finish()?`. Each line is generated once and recorded in\n   `media.lock.json`; later runs call nothing unless a declaration changed, and\n   ElevenLabs words come from its character alignment with the script's spelling.\n   Check the cost first with `PSYCHOPOMP_MEDIA=plan cargo run -p \u003Ccrate>` (zero\n   API calls), time with `PSYCHOPOMP_MEDIA=draft`, and clean up with\n   `PSYCHOPOMP_MEDIA=prune`. Move a narrate.ts scene with\n   `cargo run -p psychopomp-media -- adopt scenes\u002F\u003Cname>\u002Fnarration` (no\n   regeneration). Done when a plain run reports every resource `=`.\n\n4. **Author the Scene Program** in `scenes\u002F\u003Cname>` (add it to the workspace).\n   Use `psychopomp::score` (`SCENE_PLANS.md`, \"Author With The Score DSL\") so\n   `PlanBuilder` is the only `mut` binding and every actor (`Stage`, `Camera`,\n   `Caption`, `Callout`, `RollingNumber`, `Checklist`, `Meter`, `Bars`,\n   `Subtitles`, `Confetti`, `Terminal`, `Chat`, `ChangedFiles`, `LowerThird`,\n   `Lens`) is an immutable value whose methods return composable `Beat`s\n   (`.then`, `.also`, `.with`, `.on_end`, `.after`, `.early`, `stagger`, `each`,\n   `at!(scene, time => ...)`). Schedule clips with `Narration::reading`, build\n   elements with `StageElement::card|orb|beam|packet|label|ring` and relative\n   `psychopomp::layout::Placement` envelopes on `StagePost::RESTRAINED`, frame\n   with `Caption::header|chip|footer`, and play sounds with `sfx::*.beat(id, gain_db)`\n   (or `audio.beat(gain_db)` for `psychopomp-media`). Load the `explainer-motion`\n   skill and apply it to every beat: cards `settle_in`, beams `connect`,\n   messages `send`, replies wait for `.reply()`, impacts `hit`, the hero `orb_in`,\n   the fix's `rewind`; use `Callout` to pin annotations to Stage elements or\n   Editor code ranges and `RollingNumber` for live counters\u002Ftimers; drive camera\n   moves through `stage.camera()` (`establish`, `frame`, `follow`, `release`,\n   `orbit`, `whip`, `dolly_zoom`). Reach for the visualization and text overlays\n   instead of hand-building them from Stage labels and rings: `Checklist` for\n   checks that run and resolve, `Meter` (`MeterPlan::countdown`) for a timeout\n   ring, `Bars` for before\u002Fafter numbers, `Confetti` for a success beat, and\n   `Subtitles` (`SubtitlesPlan::from_spoken`) to burn in word-timed captions.\n   Changes are `Diff`s of `keep`, `add(step)`, and `remove(step)` lines, each step\n   keyed to a phrase. Done when `cargo run -p \u003Ccrate>` writes the reel and\n   `cargo run --release -- plan validate \u003Creel>` reports valid. A missing phrase panics\n   with its clip: change the anchor to words the transcript actually contains.\n\n5. **Review before rendering.** Get segment spans from `plan inspect \u003Creel>`, then\n   contact-sheet each segment at its before, switch, after, and code beats:\n   ```sh\n   bun scripts\u002Fsheet.ts \u003Creel> t1,t2,... --theme neutral --shutter --out output\u002Fsheet.jpg\n   ```\n   When tuning the look, set `PSYCHOPOMP_SHADER_DIR=crates\u002Fpsychopomp-render\u002Fsrc\u002Frender`\n   and edit `stage.wgsl`\u002F`stage_post.wgsl`: every frame and sheet picks up shader edits\n   without a Rust rebuild.\n   Then render one behavior segment with audio (`plan render \u003Creel> out.mp4 --cue \u003Cscene-id>`)\n   and inspect frames extracted during motion. Done when every segment has been\n   looked at and no text overlaps, clips, or reads against the wrong chip.\n\n6. **Render and verify** the whole reel:\n   ```sh\n   cargo run --release -- plan render \u003Creel> output\u002F\u003Cname>.mp4 --theme neutral\n   ```\n   Done when `ffprobe` shows 1920x1080, 60 fps, AAC audio, and a duration matching\n   `plan inspect`, and loudness is near -16 LUFS with peaks under -1 dBFS.\n\n7. **Deliver** the MP4 path. Commit the scene, narration assets, and any engine\n   changes in Psychopomp with conventional messages.\n\n## Improving Psychopomp\n\nWhen a reel needs something the engine cannot do, add it to Psychopomp rather than\nworking around it in one scene: plan types and validation in `crates\u002Fpsychopomp`,\nstrict-channel preflight in `plan_runtime`, pixels in `render`, GPU-free tests plus\nan `#[ignore]` GPU test, and the docs `AGENTS.md` asks you to keep current.\n\nBuild from small reusable pieces. Interpolation, easing, curves, shape ports, and\nconnectors belong in `psychopomp::math` (organized like pmndrs `math`: core `lerp`\u002F\n`remap`\u002F`smoothstep`, `easing`, `curve`, `shapes`, `random`; glam vectors). Extend it\ninstead of inlining math in a renderer or scene, and split renderers into one small\nhelper per element, as `render\u002Fstage.rs` does. Keep\n`cargo fmt --check`, `cargo clippy --workspace --all-targets --all-features -- -D warnings`,\nand `cargo test --workspace` green.\n",{"name":5,"description":7},"master","8d883d350240b10cc23da854de1fb212e889caed","agents.symlink\u002Fskills\u002Fpsychopomp",4,"https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles","https:\u002F\u002Fgithub.com\u002Fmikker","https:\u002F\u002Fmikkelmalmberg.com\u002Fama","Top Highlight – research at @githubnext","2026-11-10 22:09:39",{"source":8,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add mikker\u002Fdotfiles --skill psychopomp",{"tool":47,"command":48},"bunx","bunx skills add mikker\u002Fdotfiles --skill psychopomp",{"tool":50,"command":51},"pnpm","pnpm dlx skills add mikker\u002Fdotfiles --skill psychopomp","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents.symlink\u002Fskills\u002Fpsychopomp\u002FSKILL.md",true,[55],{"path":56,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":59,"sourceHtmlUrl":60},"STORY.md","REFERENCE","参考文档",2602,"https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents.symlink\u002Fskills\u002Fpsychopomp\u002FSTORY.md",[62,72,104,127,144,157],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":27},"01M6WFXRC2WZQA9G5AT4D6PCAY","unslop","Cut AI tells from any writing.","https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents.symlink\u002Fskills\u002Funslop\u002FSKILL.md",[],[64,69,70,71],"writing","cut","true",{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":76,"sourceHtmlUrl":77,"categories":78,"keywords":84,"publishedAt":27},"01M6WFWGJTZWZTVED8A7DHZSCB","stageshow","Build faux product UI that looks like a real product, as a still illustration or an animated demo with a cursor. Browser and app windows, dashboards, phones, notifications, terminals, bento grids and cursor walkthroughs, framed, masked and cropped the way a marketing page, feature card or docs hero needs them. Use whenever someone wants a fake or mocked UI, a product demo or walkthrough animation, a hero or feature-card illustration of an app, a product shot in the style of a polished marketing site, or an animated cursor doing things in an interface, even if they never say \"faux UI\". React and plain CSS.","https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents.symlink\u002Fskills\u002Fstageshow\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents.symlink\u002Fskills\u002Fstageshow\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[74,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103],"css","react","windows","browser","dashboards","product","ui","notifications","Animation","walkthrough","marketing","never","feature","as","app","framed","card","interface","hero",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":27},"01M6WFW0TZQ1H9C9X4HMZBTBYZ","clean-copy","Cut interface copy that shouldn't exist — captions that restate a label, hints that pre-empt a worry the user never had, warnings that are scar tissue from a fixed bug. Use when writing or reviewing any user-facing string (labels, hints, empty states, toasts, confirmations, button text), or when asked to clean up \u002F tighten copy.","https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents.symlink\u002Fskills\u002Fclean-copy\u002FSKILL.md",[],[111,112,113,102,114,115,116,117,118,119,69,120,121,122,123,96,124,125,70,126],"copy","clean copy","clean","labels","states","when","restate","empty","STRING","Captions","text","user","use","up","bug","tighten",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":27},"01M6BSWBGGT11ZA2BQ0EJH2ZBN","elyx","Elyx is a design tool with local, AI-friendly `.elyx` files for screens, components, layouts, flows, and design systems. This skill is only available to agents running in external harnesses while using the Elyx CLI. It is unavailable and must not be used when running in the ACP harness inside the Elyx app. In external harnesses, use this skill before reading, reasoning about, or answering any question that touches Elyx or `.elyx` files — authoring, editing, validating, inspecting, reviewing, refactoring, comparing, or recommending changes, including read-only analysis where you produce no edit. Do not reason about `.elyx` from source text alone; imports, instances, overrides, and layout only resolve through the tools.","https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fpi\u002Fskills\u002Felyx\u002FSKILL.md",[],[129,134,135,136,137,138,139,140,141,142,143],"acp","design","cli","components","reasoning","design systems","harness","produce","Tools","analysis",{"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":150,"publishedAt":27},"01M6BSW8K6Z805WVG0670SHXY9","uikit-app-modernization","Modernizes UIKit apps for multi-window environments by replacing legacy shared-state APIs with context-appropriate modern alternatives. This includes references to mainScreen, interfaceOrientation, application and scene lifecycle, as well as safe area inset updates.","https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents.symlink\u002Fskills\u002Fxcode-skills\u002Fuikit-app-modernization\u002FSKILL.md",[],[151,152,153,154,155,156],"uikit app modernization","app modernization","modernization","safe","state","lifecycle",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":27},"01M6BSW5SCT7GQ4QX7CBSB4WF1","swiftui-whats-new-27","New SwiftUI APIs, behaviors, and deprecations in the 2027 OS releases (iOS 27 and aligned macOS\u002FwatchOS\u002FtvOS\u002FvisionOS). Consult when asked what's new in SwiftUI 27, or when working with: - @State compile errors after an SDK update (\"used before being initialized\", \"invalid redeclaration of synthesized property\") or @State becaming a macro - @ViewBuilder\u002F@ContentBuilder ambiguous overloads or type-check regressions; drag-to-reorder in any container (List, stacks, grids, custom layouts) via reorderable()\u002FreorderContainer and its drag-and-drop - AsyncImage caching, reloading on scroll, or a custom URLSession - Swipe actions outside List (ScrollView, LazyVStack, LazyVGrid) via swipeActions()\u002FswipeActionsContainer() - Toolbar overflow, visibility (visibilityPriority, ToolbarOverflowMenu, toolbarMinimizeBehavior), and pinning - Presenting a confirmationDialog or alert from an optional item binding","https:\u002F\u002Fgithub.com\u002Fmikker\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fagents.symlink\u002Fskills\u002Fxcode-skills\u002Fswiftui-whats-new-27\u002FSKILL.md",[],[164,165,166,155,167,168,169,170,171],"swiftui whats new 27","sdk","update","compile","actions","ios","macro","macos"]