[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K5T8CER0BAPJVJDG5F5GD0":3,"skill-same:01M6K5T8CER0BAPJVJDG5F5GD0":176},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":50,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":53,"updatedAt":54,"install":55,"resources":67},"01M6K5T8CER0BAPJVJDG5F5GD0","sync",null,"Sync files between two local directories, repos, or git worktrees. Five modes (plan\u002Finteractive\u002Fpush\u002Fpull\u002Fmirror), .gitignore-aware, Claude-workflow allowlist via --claude, dropbox-restore-style per-directory prompts.","laurac8r\u002Fclaude-damn","laurac8r","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F23003243?v=4","01M6K5HCAJJR4Q5BCBRRZF8E5D","Laura Kaminskiy","01M6K5HCEQRFFJFK32A0VR7AS3",3,"MIT","https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"modes","workflow","mirror","mode","true","limit","yes","directories","dry","local","gitignore","restore","files","git worktrees","interactive","plan","push","pull","delete","2026-11-10 10:12:30",false,"---\nname: sync\ndescription:\n   Sync files between two local directories, repos, or git worktrees. Five modes\n   (plan\u002Finteractive\u002Fpush\u002Fpull\u002Fmirror), .gitignore-aware, Claude-workflow\n   allowlist via --claude, dropbox-restore-style per-directory prompts.\nargument-hint:\n   \"[--from PATH] \u003Ctarget | --to PATH> [--mode\n   plan|interactive|push|pull|mirror] [--dry-run] [--yes] [--limit N] [--include\n   GLOB] [--exclude GLOB] [--no-gitignore] [--delete] [--claude]\"\nuser-invocable: true\n---\n\n# \u002Fsync\n\nSync files between two local directories. Source defaults to `$PWD` (or set\nexplicitly with `--from`). Target is the first positional argument or `--to`\n(exactly one — passing both raises \"target: use positional or --to, not both\").\n\n## When the user types `\u002Fsync ...`\n\n1. **Parse the user's arguments** and translate shorthand:\n   - If the user's first token is a mode name (`plan`, `interactive`, `push`,\n     `pull`, `mirror`), rewrite it to `--mode \u003Cname>`. The script treats any\n     bare positional as the `target` directory, so `plan` as a bare arg collides\n     with `--to` and errors.\n   - Strip any leading `@` from path tokens (e.g. `@.claude\u002Fdocs\u002F…` →\n     `.claude\u002Fdocs\u002F…`). `@` is a convention from the Claude Code slash-command\n     surface, not a valid shell path.\n   - If the user passes a literal placeholder like `\u003Cevery …>`, don't pass it\n     through — expand it to concrete paths first, or tell the user you need a\n     real path.\n2. **Run from the `claude-damn` repo root** (the directory containing\n   `pyproject.toml`; locate it with `git rev-parse --show-toplevel` if needed):\n   ```bash\n   PYTHONPATH=\"$HOME\u002F.claude\" python3 -m skills.sync.scripts.sync \u003Cargs>\n   ```\n   If you are in a claude-damn worktree (`.worktrees\u002F\u003Cslug>`), that also works —\n   the module is available from any checkout. Don't `cd` into the source or\n   target being synced; `cd` into the repo that hosts the sync module.\n3. **Show the output to the user.**\n\n### Concrete invocation examples\n\n```bash\n# Plan a sync: \u002Ffoo → \u002Fbar with the Claude allowlist (gitignored files kept)\nuv run python -m skills.sync.scripts.sync --mode plan --claude \\\n  --from \u002FUsers\u002Fyou\u002Fsrc --to \u002FUsers\u002Fyou\u002Fdst\n\n# Execute a push after plan-mode approval\nuv run python -m skills.sync.scripts.sync --mode push --yes --claude \\\n  --from \u002FUsers\u002Fyou\u002Fsrc --to \u002FUsers\u002Fyou\u002Fdst\n\n# Positional target (equivalent to --to), source defaults to $PWD\nuv run python -m skills.sync.scripts.sync --mode plan \u002FUsers\u002Fyou\u002Fdst\n```\n\n**Common translation mistakes — do not do these:**\n\n```bash\n# ❌ BAD: `plan` becomes the positional target, collides with --to\nuv run python -m skills.sync.scripts.sync plan --claude --to \u002FUsers\u002Fyou\u002Fdst\n#   error: target: use positional or --to, not both\n\n# ❌ BAD: bare @ prefix on the target path\nuv run python -m skills.sync.scripts.sync --mode plan --claude \\\n  --from \u002Fsrc @\u002FUsers\u002Fyou\u002Fdst\n```\n\n## Modes\n\n| Mode          | Behavior                                                                                                                |\n| ------------- | ----------------------------------------------------------------------------------------------------------------------- |\n| `plan` (def.) | Print the plan and exit. **Chat with the user to refine** (add excludes, change scope), then re-run in a non-plan mode. |\n| `interactive` | Source → target, prompting y\u002Fn\u002Fa per directory.                                                                         |\n| `push`        | Source → target, non-interactive. Requires `--delete` to remove target-only files.                                      |\n| `pull`        | Target → source, non-interactive.                                                                                       |\n| `mirror`      | Bidirectional; newer mtime wins; `--delete` needed for removals.                                                        |\n\n## Plan-mode chat loop (the default)\n\nWhen `--mode plan` is used (or no `--mode` is given), you MUST:\n\n1. Run the command and show the rendered plan.\n2. Ask the user if the plan looks right. Suggest common refinements:\n   - \"Want me to exclude `node_modules\u002F` \u002F `dist\u002F` \u002F anything else?\"\n   - \"Should I also include Claude files (`--claude`)?\"\n   - \"Which mode do you want when we execute — push, pull, or mirror?\"\n3. Re-run `--mode plan` with updated flags until the user says \"go\".\n4. Then run the same command again with the chosen mode (e.g.\n   `--mode push --yes`) to execute.\n\n## `--claude` flag\n\nOpt-in. Carries over a curated allowlist of Claude-workflow files (`CLAUDE.md`,\n`.claude\u002Fskills\u002F`, `.remember\u002F`, `docs\u002Fsuperpowers\u002F`, etc.) even when they're\ngitignored. Ephemeral state like `.claude\u002Fprojects\u002F`, `.claude\u002Fplugins\u002F`,\n`.claude\u002Fcache\u002F` is **always** excluded — users cannot opt back in. The built-in\nallowlist can be overridden with `~\u002F.claude\u002Fsync-allowlist.txt` (one glob per\nline).\n\n## Safety guarantees\n\n- `.git\u002F` is never copied.\n- All subprocess calls use explicit argv; never `shell=True`.\n- Failures surface as non-zero exit codes with error messages on stderr.\n- `plan` mode writes nothing. `--dry-run` on any other mode writes nothing.\n","# \u002Fsync\n\nSync files between two local directories. Source defaults to `$PWD` (or set\nexplicitly with `--from`). Target is the first positional argument or `--to`\n(exactly one — passing both raises \"target: use positional or --to, not both\").\n\n## When the user types `\u002Fsync ...`\n\n1. **Parse the user's arguments** and translate shorthand:\n   - If the user's first token is a mode name (`plan`, `interactive`, `push`,\n     `pull`, `mirror`), rewrite it to `--mode \u003Cname>`. The script treats any\n     bare positional as the `target` directory, so `plan` as a bare arg collides\n     with `--to` and errors.\n   - Strip any leading `@` from path tokens (e.g. `@.claude\u002Fdocs\u002F…` →\n     `.claude\u002Fdocs\u002F…`). `@` is a convention from the Claude Code slash-command\n     surface, not a valid shell path.\n   - If the user passes a literal placeholder like `\u003Cevery …>`, don't pass it\n     through — expand it to concrete paths first, or tell the user you need a\n     real path.\n2. **Run from the `claude-damn` repo root** (the directory containing\n   `pyproject.toml`; locate it with `git rev-parse --show-toplevel` if needed):\n   ```bash\n   PYTHONPATH=\"$HOME\u002F.claude\" python3 -m skills.sync.scripts.sync \u003Cargs>\n   ```\n   If you are in a claude-damn worktree (`.worktrees\u002F\u003Cslug>`), that also works —\n   the module is available from any checkout. Don't `cd` into the source or\n   target being synced; `cd` into the repo that hosts the sync module.\n3. **Show the output to the user.**\n\n### Concrete invocation examples\n\n```bash\n# Plan a sync: \u002Ffoo → \u002Fbar with the Claude allowlist (gitignored files kept)\nuv run python -m skills.sync.scripts.sync --mode plan --claude \\\n  --from \u002FUsers\u002Fyou\u002Fsrc --to \u002FUsers\u002Fyou\u002Fdst\n\n# Execute a push after plan-mode approval\nuv run python -m skills.sync.scripts.sync --mode push --yes --claude \\\n  --from \u002FUsers\u002Fyou\u002Fsrc --to \u002FUsers\u002Fyou\u002Fdst\n\n# Positional target (equivalent to --to), source defaults to $PWD\nuv run python -m skills.sync.scripts.sync --mode plan \u002FUsers\u002Fyou\u002Fdst\n```\n\n**Common translation mistakes — do not do these:**\n\n```bash\n# ❌ BAD: `plan` becomes the positional target, collides with --to\nuv run python -m skills.sync.scripts.sync plan --claude --to \u002FUsers\u002Fyou\u002Fdst\n#   error: target: use positional or --to, not both\n\n# ❌ BAD: bare @ prefix on the target path\nuv run python -m skills.sync.scripts.sync --mode plan --claude \\\n  --from \u002Fsrc @\u002FUsers\u002Fyou\u002Fdst\n```\n\n## Modes\n\n| Mode          | Behavior                                                                                                                |\n| ------------- | ----------------------------------------------------------------------------------------------------------------------- |\n| `plan` (def.) | Print the plan and exit. **Chat with the user to refine** (add excludes, change scope), then re-run in a non-plan mode. |\n| `interactive` | Source → target, prompting y\u002Fn\u002Fa per directory.                                                                         |\n| `push`        | Source → target, non-interactive. Requires `--delete` to remove target-only files.                                      |\n| `pull`        | Target → source, non-interactive.                                                                                       |\n| `mirror`      | Bidirectional; newer mtime wins; `--delete` needed for removals.                                                        |\n\n## Plan-mode chat loop (the default)\n\nWhen `--mode plan` is used (or no `--mode` is given), you MUST:\n\n1. Run the command and show the rendered plan.\n2. Ask the user if the plan looks right. Suggest common refinements:\n   - \"Want me to exclude `node_modules\u002F` \u002F `dist\u002F` \u002F anything else?\"\n   - \"Should I also include Claude files (`--claude`)?\"\n   - \"Which mode do you want when we execute — push, pull, or mirror?\"\n3. Re-run `--mode plan` with updated flags until the user says \"go\".\n4. Then run the same command again with the chosen mode (e.g.\n   `--mode push --yes`) to execute.\n\n## `--claude` flag\n\nOpt-in. Carries over a curated allowlist of Claude-workflow files (`CLAUDE.md`,\n`.claude\u002Fskills\u002F`, `.remember\u002F`, `docs\u002Fsuperpowers\u002F`, etc.) even when they're\ngitignored. Ephemeral state like `.claude\u002Fprojects\u002F`, `.claude\u002Fplugins\u002F`,\n`.claude\u002Fcache\u002F` is **always** excluded — users cannot opt back in. The built-in\nallowlist can be overridden with `~\u002F.claude\u002Fsync-allowlist.txt` (one glob per\nline).\n\n## Safety guarantees\n\n- `.git\u002F` is never copied.\n- All subprocess calls use explicit argv; never `shell=True`.\n- Failures surface as non-zero exit codes with error messages on stderr.\n- `plan` mode writes nothing. `--dry-run` on any other mode writes nothing.\n",{"name":5,"description":7,"argument-hint":43,"user-invocable":44},"[--from PATH] \u003Ctarget | --to PATH> [--mode plan|interactive|push|pull|mirror] [--dry-run] [--yes] [--limit N] [--include GLOB] [--exclude GLOB] [--no-gitignore] [--delete] [--claude]",true,"main","9635fb649979617cf684ea860dcaeb4eb272aa7d","skills\u002Fsync",1,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn","https:\u002F\u002Flaurac8r.github.io\u002Fclaude-damn\u002F","https:\u002F\u002Fgithub.com\u002Flaurac8r","https:\u002F\u002Fwww.webcatgirl.com\u002F","SWE | Python, Java, Typescript, Cloud, AI, ML | Open-source, large-language model, and decision model enthusiast","2026-09-10 01:18:30",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":44},[57,60,63],{"tool":58,"command":59},"npx","npx skills add laurac8r\u002Fclaude-damn --skill sync",{"tool":61,"command":62},"bunx","bunx skills add laurac8r\u002Fclaude-damn --skill sync",{"tool":64,"command":65},"pnpm","pnpm dlx skills add laurac8r\u002Fclaude-damn --skill sync","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002FSKILL.md",[68,74,77,81,85,89,93,97,101,105,109,113,117,121,124,128,132,136,140,144,148,152,156,160,164,168,172],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"__init__.py","SCRIPT","脚本",0,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002F__init__.py",{"path":75,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":76},"scripts\u002F__init__.py","https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002F__init__.py",{"path":78,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":79,"sourceHtmlUrl":80},"scripts\u002Fapply.py",3143,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Fapply.py",{"path":82,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":83,"sourceHtmlUrl":84},"scripts\u002Fclaude_allowlist.py",2121,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Fclaude_allowlist.py",{"path":86,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":87,"sourceHtmlUrl":88},"scripts\u002Fdiff.py",2906,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Fdiff.py",{"path":90,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":91,"sourceHtmlUrl":92},"scripts\u002Fdiscover.py",1998,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Fdiscover.py",{"path":94,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":95,"sourceHtmlUrl":96},"scripts\u002Fexceptions.py",653,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Fexceptions.py",{"path":98,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":99,"sourceHtmlUrl":100},"scripts\u002Fgitignore.py",1490,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Fgitignore.py",{"path":102,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":103,"sourceHtmlUrl":104},"scripts\u002Fplan.py",1403,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Fplan.py",{"path":106,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":107,"sourceHtmlUrl":108},"scripts\u002Fprompt.py",1522,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Fprompt.py",{"path":110,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":111,"sourceHtmlUrl":112},"scripts\u002Frender.py",1003,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Frender.py",{"path":114,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":115,"sourceHtmlUrl":116},"scripts\u002Fsync.py",4983,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Fsync.py",{"path":118,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":119,"sourceHtmlUrl":120},"scripts\u002Ftypes.py",642,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Fscripts\u002Ftypes.py",{"path":122,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":123},"tests\u002F__init__.py","https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002F__init__.py",{"path":125,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":126,"sourceHtmlUrl":127},"tests\u002Fconftest.py",1095,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Fconftest.py",{"path":129,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":130,"sourceHtmlUrl":131},"tests\u002Ftest_apply.py",4212,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_apply.py",{"path":133,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":134,"sourceHtmlUrl":135},"tests\u002Ftest_claude_allowlist.py",1794,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_claude_allowlist.py",{"path":137,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":138,"sourceHtmlUrl":139},"tests\u002Ftest_diff.py",3720,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_diff.py",{"path":141,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":142,"sourceHtmlUrl":143},"tests\u002Ftest_discover.py",2327,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_discover.py",{"path":145,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":146,"sourceHtmlUrl":147},"tests\u002Ftest_exceptions.py",590,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_exceptions.py",{"path":149,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":150,"sourceHtmlUrl":151},"tests\u002Ftest_gitignore.py",2170,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_gitignore.py",{"path":153,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":154,"sourceHtmlUrl":155},"tests\u002Ftest_invocation.py",1605,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_invocation.py",{"path":157,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":158,"sourceHtmlUrl":159},"tests\u002Ftest_plan.py",1260,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_plan.py",{"path":161,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":162,"sourceHtmlUrl":163},"tests\u002Ftest_prompt.py",1611,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_prompt.py",{"path":165,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":166,"sourceHtmlUrl":167},"tests\u002Ftest_render.py",911,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_render.py",{"path":169,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":170,"sourceHtmlUrl":171},"tests\u002Ftest_sync.py",12088,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_sync.py",{"path":173,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":174,"sourceHtmlUrl":175},"tests\u002Ftest_types.py",802,"https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002Ftests\u002Ftest_types.py",[177,215,239,256,273,289],{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":194,"publishedAt":38},"01M6K5V5PPEYZGPW80S9QAF7WZ","visual-aid","Use when the user asks for a quick visual aid, visual explainer, concept card, one-pager, poster, cheat sheet, infographic, visual summary, summary card, or mini explainer page — especially from input like a block of text, attached images, an attached song (lyrics\u002Faudio), a web link, a CSV\u002Fdataset, a math formula, a code snippet to walk through, a tutorial's steps, a timeline, or an A-vs-B comparison. Triggers include \"make me a quick visual aid\", \"turn this into a one-pager \u002F cheat sheet \u002F explainer\", \"summarize this visually\", \"give me a visual of\", \"explain this on a single page\", \"make a concept card for\", \"whip up a page about\", \"build a mini page that shows\", \"something I can paste into a doc explaining X\", or any request to render a topic\u002Ftext\u002Flink\u002Fimage-set\u002Fsong\u002Fdata into a standalone page. Prefer this skill over frontend-design when the ask is an explanatory single-file page (not a production UI), over playground when the output is static information display (not an interactive configurator), and over a Markdown\u002Fcode answer when the user explicitly wants a *page* (HTML). Produces a single self-contained HTML file that opens on double-click without a server.","https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fvisual-aid\u002FSKILL.md",[183,188,191],{"categoryNo":184,"categoryName":185,"taxonomyType":186,"taxonomyTypeDesc":187},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":189,"categoryName":190,"taxonomyType":186,"taxonomyTypeDesc":187},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":192,"categoryName":193,"taxonomyType":186,"taxonomyTypeDesc":187},"01JBSEEDCAT000000000000016","图像与多媒体",[195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214],"visual aid","visual","formula","static","frontend-design","standalone","song","quick","information","render","card","click","infographic","images","up","visual explainer","Audio","SET","design","frontend",{"skillNo":216,"name":217,"nameZh":6,"description":218,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":219,"categories":220,"keywords":221,"publishedAt":38},"01M6K5TZZ34SBMQMN2EX11XMYS","tesseract","Use when you've been poking at the same file, concept, or problem across many sessions and want to step outside time to see its whole arc — or when you want to leave a note for next-session-you. Triggers: 'I've been going in circles on X', 'what have I learned about X', 'what did past-me say about X', 'I keep rediscovering this'.","https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Ftesseract\u002FSKILL.md",[],[217,222,223,224,225,226,227,228,229,230,196,231,232,233,234,235,236,237,238,23],"sessions","you","keep","problem","learned","triggers","anchor","file","across","session","time","me","use","say","morse","for","concept",{"skillNo":240,"name":241,"nameZh":6,"description":242,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":243,"categories":244,"keywords":245,"publishedAt":38},"01M6K5TSVWXGRFMQTSM8VFSRDS","tdd","Invoke test-driven development as an explicit one-at-a-time micro-cycle — one test, one piece of functionality, refactor, then repeat for the next behavior","https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Ftdd\u002FSKILL.md",[],[241,246,247,237,248,249,232,250,251,252,253,254,255,23],"at","next","driven","as","cycle","behavior","refactor","micro","development","test",{"skillNo":257,"name":258,"nameZh":6,"description":259,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":260,"categories":261,"keywords":262,"publishedAt":38},"01M6K5TP1KX237V9FDZ8PMNXH5","tdd-cat","TDD workflow with subagent-driven-development — \u002Ftdd composed with \u002Fcat, plus the A\u002FB TDD execution-mode axis (split-phase vs micro-cycle) asked as a third question in \u002Fcat's combined pre-dispatch question","https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Ftdd-cat\u002FSKILL.md",[],[263,241,264,265,266,253,254,20,267,22,23,268,269,248,249,250,270,271,272],"cat","tdd cat","tdd workflow","execution","subagent","split","with","task","dispatch","question",{"skillNo":274,"name":275,"nameZh":6,"description":276,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":277,"categories":278,"keywords":279,"publishedAt":38},"01M6K5TGDERXT82MS7SB3ZGA3V","task-list","TaskCreate \u002F TaskUpdate \u002F render the current TaskList in response to `\u002Ftask-list` (with or without flags). The skill body executes immediately on the syntax — no permission-seeking, no echoing the list back as plain text.","https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Ftask-list\u002FSKILL.md",[],[280,270,281,282,283,23,269,204,249,284,285,286,287,288],"task list","list","permission","display","back","flags","syntax","text","update",{"skillNo":290,"name":291,"nameZh":6,"description":292,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":293,"categories":294,"keywords":295,"publishedAt":38},"01M6K5T2S3J291RE2B2GW7J43H","super","Brainstorming (alias for \u002Fbrainstorming)","https:\u002F\u002Fgithub.com\u002Flaurac8r\u002Fclaude-damn\u002Fblob\u002Fmain\u002Fskills\u002Fsuper\u002FSKILL.md",[],[291,237,23,296,270,297],"alias","brainstorming"]