[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71NFDMN0VZ3JYMZBK6BJF5P":3,"skill-same:01M71NFDMN0VZ3JYMZBK6BJF5P":67},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":13,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M71NFDMN0VZ3JYMZBK6BJF5P","jj-describe",null,"Write and apply concise, self-contained Conventional Commits descriptions for Jujutsu commits. Use when the user asks to describe a jj commit, and after completing a cohesive code or documentation change in a jj repository when the current non-empty commit is undescribed. Explain what changed and why without context-only planning labels such as P0 or P1.","SikongJueluo\u002Fskills","SikongJueluo","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F53223107?v=4","01M71NEWK46KJB0R64SBCD990Z","01M71NEWKPCXWFQFMNTXW5ZYQN",0,"MIT","https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fjj-describe\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"describe","jj describe","jj","code","git log","apply","Bash","conventional commits","when","use","only","labels","jujutsu","for","commits","planning","diff","cohesive","show","as","2026-11-10 10:56:23",false,"---\nname: jj-describe\ndescription: Write and apply concise, self-contained Conventional Commits descriptions for Jujutsu commits. Use when the user asks to describe a jj commit, and after completing a cohesive code or documentation change in a jj repository when the current non-empty commit is undescribed. Explain what changed and why without context-only planning labels such as P0 or P1.\nargument-hint: \"[optional change_id | commit_id | revset, e.g. @, @-, llvznuql]\"\nallowed-tools: Bash(jj *), Bash(git show *), Bash(git diff *), Bash(git log *)\n---\n\n# jj-describe\n\nWrite Conventional Commits descriptions for jj commits. Read changes with **git** (jj's default diff is color-based and unreadable to the agent); apply with `jj desc`.\n\n## Safety\n\n- Mutate descriptions only. **Never** `merge`, `rebase`, or `push` unless the user explicitly asks.\n- **Never rewrite another writer's recorded layer.** Targeting a revision other than your own blank `@` (e.g. `jj desc -r @-`, a change-id, a revset) rewrites that commit and rebases its descendants. Before `jj desc -r \u003Crev>`, `jj squash`, `jj abandon`, or `jj restore` on such a revision, check it with one read-only log: `jj --no-pager --color=never log -r '\u003Crev>' --no-graph -T 'change_id.short() ++ \" | empty=\" ++ empty ++ \" | \" ++ description.first_line() ++ \"\\n\"'`. If it is **non-empty and already has a description**, stop and report it — that layer records another writer's work, not yours. Do not describe, squash, or abandon it; record your own work on a fresh `jj new` layer instead (the normal start-of-work path, not error recovery). Override only on an explicit user instruction that names the revision and asks to change its existing description, and warn that this rewrites the revision and rebases its descendants.\n- Treat each repository as a **single-writer** for jj: issue at most one jj command, wait for it to exit, then issue the next. Never put multiple jj commands in parallel tool calls; even read-only jj commands may snapshot the working copy. Pure git reads may run in parallel.\n- If jj reports concurrent modification, divergence, or a failed Git HEAD update, stop and report it. Do not run `jj abandon`, `jj new`, or `jj rebase` as automatic recovery.\n- Always pass `--no-pager` to jj and git so output doesn't hang the session.\n\n## 1. Pick targets\n\n- **Automatic completion trigger** (the user did not ask for a description): inspect only `@`. Target it only when it is non-empty and undescribed. If its diff includes unrelated pre-existing work or its intent is unclear, leave it untouched and report why.\n- **User named a commit** (change_id \u002F commit_id \u002F revset like `@`, `@-`, `@--`): target **only** that one. Do not also sweep no-description commits. When the target is not your own blank `@`, run the recorded-layer check in Safety first.\n- **User asked without naming a commit**: target every non-empty, undescribed commit of yours:\n  ```\n  jj --no-pager --color=never log -r 'mine() & description(exact:\"\") & ~root() & ~empty()' --no-graph -T 'change_id.short() ++ \" \" ++ commit_id.short() ++ \"\\n\"'\n  ```\n  If empty, report \"nothing to describe\" and stop. If the list is long, show it and confirm before editing in bulk.\n\n## 2. Inspect and draft\n\nRead every target before mutating anything. These pure git reads may run in parallel. The jj `commit_id` is the git hash in colocated repos:\n\n```\ngit --no-pager show \u003Ccommit_id>\n```\n\nIf the repo isn't colocated (no `.git`), fall back to `jj --no-pager diff --git -r \u003Cchange_id>`; its `--git` output is a plain unified diff, not color-based.\n\nDraft a Conventional Commits message (https:\u002F\u002Fwww.conventionalcommits.org\u002Fen\u002Fv1.0.0\u002F):\n\n- **English, concise, plain text. No markdown** (no backticks, bold, or headers).\n- Header: `type(scope): summary` — lowercase, imperative, no trailing period. Say **what** changed.\n- Types: `feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `chore`, `style`, `build`, `ci`. Add `(scope)` when a clear module\u002Fpath exists.\n- Make the message understandable without the task conversation. Replace temporary planning labels (`P0`, `P1`, phase names, option letters) with the concrete behavior, problem, or constraint they represent.\n- Body (**why**): one short paragraph recording the **decision** — the approach taken and the constraint or tradeoff that forced it, naming the alternative you rejected when one was genuinely in play. Write what the diff cannot show, so a reader who never saw this task understands the choice. Omit the paragraph when the header already carries the reason.\n- Cap the why at **3 lines of at most 100 characters each**, rewrapping to fit. When the decision will not fit, the layer is too big — split it rather than trimming or padding the reason.\n- List distinct changes as one `-` bullet per change starting with an imperative verb (add, fix, remove, update, rename, extract, …), one line of at most 100 characters each. Bullets carry the per-change detail; the why paragraph stays separate.\n\nBody shape — decision first, diff never:\n\n    Good: \"Pin nixpkgs per host: torch regressed on gfx1103 in the 2025-09 unstable bump.\"\n    Bad:  \"Change the nixpkgs input to an older revision and update flake.lock.\"\n\n## 3. Apply serially\n\nApply with the **change_id** (stable across rewrites) and the exact `--stdin` + quoted-heredoc pattern below. It safely preserves blank lines and body bullets beginning with `-`:\n\n```bash\njj --no-pager desc --stdin \u003Cchange_id> \u003C\u003C'JJ_DESCRIPTION'\nfeat(auth): add login endpoint\n\nEnable stateless API access while rejecting malformed identities.\n\n- validate email format\n- return JWT on success\nJJ_DESCRIPTION\n```\n\nFor multiple targets, run one `jj desc`, wait for exit code 0, then run the next in a later tool call. Stop the batch on the first failure. Use this transport rather than repeated `-m` flags or guessed file-input flags.\n\n### Few-shot: two targets\n\nFirst assistant tool call — and the only jj call in that turn:\n\n```bash\njj --no-pager desc --stdin mrpyxtqq \u003C\u003C'JJ_DESCRIPTION'\nrefactor(theme): source shell colors from catppuccin\n\nKeep starship and Home Manager on one palette instead of maintaining duplicated color constants.\n\n- enable the catppuccin Home Manager module\n- replace hardcoded starship colors\nJJ_DESCRIPTION\n```\n\nAfter that tool result exits successfully, the next assistant tool call:\n\n```bash\njj --no-pager desc --stdin ysxvxtlo \u003C\u003C'JJ_DESCRIPTION'\nchore(flake): drop upstreamed patches\n\nUse maintained upstream fixes so local overrides no longer drift across dependency updates.\n\n- remove obsolete build overrides\n- update locked dependencies\nJJ_DESCRIPTION\n```\n\n## 4. Verify\n\nAfter all writes finish, run one serial jj command containing every target and `@`:\n\n```bash\njj --no-pager log -r 'mrpyxtqq | ysxvxtlo | @' --no-graph\n```\n\nDone means the command exits successfully, every target shows its intended description, and each body honors the 3-line, 100-character bound. A divergence error is a failure: stop and report it without cleanup mutations.\n","# jj-describe\n\nWrite Conventional Commits descriptions for jj commits. Read changes with **git** (jj's default diff is color-based and unreadable to the agent); apply with `jj desc`.\n\n## Safety\n\n- Mutate descriptions only. **Never** `merge`, `rebase`, or `push` unless the user explicitly asks.\n- **Never rewrite another writer's recorded layer.** Targeting a revision other than your own blank `@` (e.g. `jj desc -r @-`, a change-id, a revset) rewrites that commit and rebases its descendants. Before `jj desc -r \u003Crev>`, `jj squash`, `jj abandon`, or `jj restore` on such a revision, check it with one read-only log: `jj --no-pager --color=never log -r '\u003Crev>' --no-graph -T 'change_id.short() ++ \" | empty=\" ++ empty ++ \" | \" ++ description.first_line() ++ \"\\n\"'`. If it is **non-empty and already has a description**, stop and report it — that layer records another writer's work, not yours. Do not describe, squash, or abandon it; record your own work on a fresh `jj new` layer instead (the normal start-of-work path, not error recovery). Override only on an explicit user instruction that names the revision and asks to change its existing description, and warn that this rewrites the revision and rebases its descendants.\n- Treat each repository as a **single-writer** for jj: issue at most one jj command, wait for it to exit, then issue the next. Never put multiple jj commands in parallel tool calls; even read-only jj commands may snapshot the working copy. Pure git reads may run in parallel.\n- If jj reports concurrent modification, divergence, or a failed Git HEAD update, stop and report it. Do not run `jj abandon`, `jj new`, or `jj rebase` as automatic recovery.\n- Always pass `--no-pager` to jj and git so output doesn't hang the session.\n\n## 1. Pick targets\n\n- **Automatic completion trigger** (the user did not ask for a description): inspect only `@`. Target it only when it is non-empty and undescribed. If its diff includes unrelated pre-existing work or its intent is unclear, leave it untouched and report why.\n- **User named a commit** (change_id \u002F commit_id \u002F revset like `@`, `@-`, `@--`): target **only** that one. Do not also sweep no-description commits. When the target is not your own blank `@`, run the recorded-layer check in Safety first.\n- **User asked without naming a commit**: target every non-empty, undescribed commit of yours:\n  ```\n  jj --no-pager --color=never log -r 'mine() & description(exact:\"\") & ~root() & ~empty()' --no-graph -T 'change_id.short() ++ \" \" ++ commit_id.short() ++ \"\\n\"'\n  ```\n  If empty, report \"nothing to describe\" and stop. If the list is long, show it and confirm before editing in bulk.\n\n## 2. Inspect and draft\n\nRead every target before mutating anything. These pure git reads may run in parallel. The jj `commit_id` is the git hash in colocated repos:\n\n```\ngit --no-pager show \u003Ccommit_id>\n```\n\nIf the repo isn't colocated (no `.git`), fall back to `jj --no-pager diff --git -r \u003Cchange_id>`; its `--git` output is a plain unified diff, not color-based.\n\nDraft a Conventional Commits message (https:\u002F\u002Fwww.conventionalcommits.org\u002Fen\u002Fv1.0.0\u002F):\n\n- **English, concise, plain text. No markdown** (no backticks, bold, or headers).\n- Header: `type(scope): summary` — lowercase, imperative, no trailing period. Say **what** changed.\n- Types: `feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `chore`, `style`, `build`, `ci`. Add `(scope)` when a clear module\u002Fpath exists.\n- Make the message understandable without the task conversation. Replace temporary planning labels (`P0`, `P1`, phase names, option letters) with the concrete behavior, problem, or constraint they represent.\n- Body (**why**): one short paragraph recording the **decision** — the approach taken and the constraint or tradeoff that forced it, naming the alternative you rejected when one was genuinely in play. Write what the diff cannot show, so a reader who never saw this task understands the choice. Omit the paragraph when the header already carries the reason.\n- Cap the why at **3 lines of at most 100 characters each**, rewrapping to fit. When the decision will not fit, the layer is too big — split it rather than trimming or padding the reason.\n- List distinct changes as one `-` bullet per change starting with an imperative verb (add, fix, remove, update, rename, extract, …), one line of at most 100 characters each. Bullets carry the per-change detail; the why paragraph stays separate.\n\nBody shape — decision first, diff never:\n\n    Good: \"Pin nixpkgs per host: torch regressed on gfx1103 in the 2025-09 unstable bump.\"\n    Bad:  \"Change the nixpkgs input to an older revision and update flake.lock.\"\n\n## 3. Apply serially\n\nApply with the **change_id** (stable across rewrites) and the exact `--stdin` + quoted-heredoc pattern below. It safely preserves blank lines and body bullets beginning with `-`:\n\n```bash\njj --no-pager desc --stdin \u003Cchange_id> \u003C\u003C'JJ_DESCRIPTION'\nfeat(auth): add login endpoint\n\nEnable stateless API access while rejecting malformed identities.\n\n- validate email format\n- return JWT on success\nJJ_DESCRIPTION\n```\n\nFor multiple targets, run one `jj desc`, wait for exit code 0, then run the next in a later tool call. Stop the batch on the first failure. Use this transport rather than repeated `-m` flags or guessed file-input flags.\n\n### Few-shot: two targets\n\nFirst assistant tool call — and the only jj call in that turn:\n\n```bash\njj --no-pager desc --stdin mrpyxtqq \u003C\u003C'JJ_DESCRIPTION'\nrefactor(theme): source shell colors from catppuccin\n\nKeep starship and Home Manager on one palette instead of maintaining duplicated color constants.\n\n- enable the catppuccin Home Manager module\n- replace hardcoded starship colors\nJJ_DESCRIPTION\n```\n\nAfter that tool result exits successfully, the next assistant tool call:\n\n```bash\njj --no-pager desc --stdin ysxvxtlo \u003C\u003C'JJ_DESCRIPTION'\nchore(flake): drop upstreamed patches\n\nUse maintained upstream fixes so local overrides no longer drift across dependency updates.\n\n- remove obsolete build overrides\n- update locked dependencies\nJJ_DESCRIPTION\n```\n\n## 4. Verify\n\nAfter all writes finish, run one serial jj command containing every target and `@`:\n\n```bash\njj --no-pager log -r 'mrpyxtqq | ysxvxtlo | @' --no-graph\n```\n\nDone means the command exits successfully, every target shows its intended description, and each body honors the 3-line, 100-character bound. A divergence error is a failure: stop and report it without cleanup mutations.\n",{"name":5,"description":7,"allowed-tools":43,"argument-hint":44},"Bash(jj *), Bash(git show *), Bash(git diff *), Bash(git log *)","[optional change_id | commit_id | revset, e.g. @, @-, llvznuql]","main","f48fc8bda161a30c80be9ca1189279414dde1f3a","skills\u002Fjj-describe","https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills","https:\u002F\u002Fgithub.com\u002FSikongJueluo","https:\u002F\u002Fwww.swordlost.top","安得广厦千万间，大庇天下寒士俱欢颜！","2026-10-28 22:03:31",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add SikongJueluo\u002Fskills --skill jj-describe",{"tool":59,"command":60},"bunx","bunx skills add SikongJueluo\u002Fskills --skill jj-describe",{"tool":62,"command":63},"pnpm","pnpm dlx skills add SikongJueluo\u002Fskills --skill jj-describe","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fjj-describe\u002FSKILL.md",true,[],[68,91,109,128,159,174],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":38},"01M71NFQMX5RNAXMZCXTCA0FFW","teaching","Teach toward a maintainable implementation when the user asks to learn before building, or says they are unfamiliar with technology required by a development task. Use for conversational co-design tied to real project work; not for general explanations, standalone tutorials, or persistent courses.","https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fteaching\u002FSKILL.md",[],[70,27,26,75,76,77,78,79,80,31,81,82,83,84,85,86,87,88,89,90],"learn","implementation","user","task","general","co","development","courses","standalone","project work","before building","work","with","project","design","technology",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":102,"publishedAt":38},"01M71NFP48KR5WA41MWB59MBSZ","teach-me","Learn enough to co-design and maintain a real development change.","https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fteach-me\u002FSKILL.md",[97],{"categoryNo":98,"categoryName":99,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[103,104,105,80,75,81,106,107,89,108],"teach me","me","teach","maintain","change","true",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":38},"01M71NFM3K25R1843319SZ9JJ7","review-with-me","Curate the code worth a human's attention and present it in reviewable slices.","https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Freview-with-me\u002FSKILL.md",[],[104,87,116,117,108,118,119,120,121,122,123,21,32,124,125,126,127],"review","review with me","it","language","present","bookmark","curate","human","scope","branch","attention","natural language",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":142,"publishedAt":38},"01M71NFHBZQR70H9PATVKWDN68","refactor-ui","Improve an existing UI, screen, slide deck, or visual artifact that the user mostly accepts but finds too busy, unclear, inconsistent, ugly, plain, or over-decorated. Use when the user gives feedback on a rendered artifact and wants a bounded revision that preserves what works. Not for building from scratch, exploring an undecided visual direction, deck production or conversion, or implementing a specified design.","https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Frefactor-ui\u002FSKILL.md",[134,139],{"categoryNo":135,"categoryName":136,"taxonomyType":137,"taxonomyTypeDesc":138},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":140,"categoryName":141,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000032","设计师",[143,144,145,146,147,148,149,150,151,26,152,27,89,153,154,155,156,31,157,158],"refactor","ui","refactor ui","implementing","artifact","From Scratch","conversion","visual","URL","Existing","improve","screen","scratch","deck","direction","feedback",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":38},"01M71NFBQXB3GDS2V272956BWN","jj-desc","Write a concise, self-contained Jujutsu commit description that explains what changed and why.","https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fjj-desc\u002FSKILL.md",[],[166,20,107,108,167,168,169,170,171,172,173,30],"jj desc","self","id","concise","write","self-contained","commit","why",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":178,"sourceHtmlUrl":179,"categories":180,"keywords":193,"publishedAt":38},"01M71NF8H6CTCKK99NYH712G8Q","frontend-slides","Create, convert, or revise browser-based 16:9 HTML slide decks, including PPT\u002FPPTX conversion, Chinese\u002FCJK typography, and PDF export. Use when the user asks for a presentation, slide deck, pitch or talk slides, or wants an existing HTML deck changed. Not for ordinary websites, landing pages, written documents, or summarizing an existing presentation.","https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Ffrontend-slides\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSikongJueluo\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Ffrontend-slides\u002FSKILL.md",[181,184,187,190],{"categoryNo":182,"categoryName":183,"taxonomyType":137,"taxonomyTypeDesc":138},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":185,"categoryName":186,"taxonomyType":137,"taxonomyTypeDesc":138},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":188,"categoryName":189,"taxonomyType":137,"taxonomyTypeDesc":138},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":191,"categoryName":192,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000034","行政与办公人员",[194,195,196,152,197,149,198,26,199,200,27,201,202,203,156,204,31,205,206,207],"frontend","frontend slides","slides","html deck","convert","documents","pitch","pages","slide decks","landing","pdf export","chinese","pptx","PDF"]