[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FDPEVPTDATP02EPK687DN":3,"skill-same:01M71FDPEVPTDATP02EPK687DN":72},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":14,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":49,"ownerDescription":50,"updatedAt":51,"install":52,"resources":65},"01M71FDPEVPTDATP02EPK687DN","clean-unused-cpm-packages",null,"Remove unused PackageVersion entries from `Directory.Packages.props` files in a .NET repo using Central Package Management (CPM). Scans every `.csproj`, `.props`, and `.targets` file for PackageReference includes, computes which PackageVersion IDs aren't referenced anywhere, removes the unused entries with line-targeted edits that preserve formatting and comments, then verifies with `dotnet restore`. Use this skill whenever the user wants to clean up, prune, or remove unused entries from `Directory.Packages.props`, or says things like \"clean up CPM\", \"remove unused packages from central package management\", \"the props file has stale entries\", \"prune Directory.Packages.props\", or \"dead packages in the central versions file\" — even if they don't literally say \"CPM\". Trigger proactively when the user mentions `Directory.Packages.props` alongside cleanup, removal, dead, stale, or unused. Refuses to run on repos without a `Directory.Packages.props` (CPM not in use).","esond\u002Fskills","esond","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F4650644?v=4","01M71FCJGKDH30JSHK6XJZXN8Y","Eric Sondergard","01M71FCJHP4WCJVP4HVMEW1KB2",0,"MIT","https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills\u002Fblob\u002Fmain\u002Fplugins\u002Feng\u002Fskills\u002Fclean-unused-cpm-packages\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"unused","clean unused cpm packages","packages","CPM","clean","formatting","prune","repos","line","directory","run","when","dotnet","cleanup","files","up","remove","csproj","ids","which","2026-11-10 10:12:30",false,"---\nname: clean-unused-cpm-packages\ndescription: >-\n  Remove unused PackageVersion entries from `Directory.Packages.props` files\n  in a .NET repo using Central Package Management (CPM). Scans every\n  `.csproj`, `.props`, and `.targets` file for PackageReference includes,\n  computes which PackageVersion IDs aren't referenced anywhere, removes the\n  unused entries with line-targeted edits that preserve formatting and\n  comments, then verifies with `dotnet restore`. Use this skill whenever the\n  user wants to clean up, prune, or remove unused entries from\n  `Directory.Packages.props`, or says things like \"clean up CPM\", \"remove\n  unused packages from central package management\", \"the props file has stale\n  entries\", \"prune Directory.Packages.props\", or \"dead packages in the central\n  versions file\" — even if they don't literally say \"CPM\". Trigger proactively\n  when the user mentions `Directory.Packages.props` alongside cleanup,\n  removal, dead, stale, or unused. Refuses to run on repos without a\n  `Directory.Packages.props` (CPM not in use).\n---\n\n# clean-unused-cpm-packages\n\nRemove `\u003CPackageVersion>` entries from `Directory.Packages.props` files when no project, `.props`, or `.targets` file in the repo references the corresponding package. Conservatively compute the unused set by scanning every place a `PackageReference` could live, then make the smallest edits possible while preserving comments, blank lines, and hand-curated grouping.\n\nThis is a destructive operation against tracked source files. Work through the steps carefully, stop at the confirmation checkpoint, and verify with `dotnet restore` before declaring success.\n\n## What this skill scans\n\n**`PackageVersion` sources** (entries considered for removal):\n\n- Every `Directory.Packages.props` in the repo, including nested ones.\n\n**`PackageReference` sources** (anything that \"uses\" a `PackageVersion`):\n\n- Every `.csproj`.\n- Every `.props` and `.targets` file *other than* `Directory.Packages.props` itself — including `Directory.Build.props`, `Directory.Build.targets`, and any custom imports.\n\n**Excluded from removal:**\n\n- `\u003CGlobalPackageReference>` entries. They auto-apply to every project — the entry itself *is* the reference. Removing one drops an analyzer\u002Fgenerator from every project, which is a deliberate user decision, not something to automate.\n- Conditional entries (`\u003CPackageVersion ... Condition=\"...\" \u002F>`): treat them like any other entry. The condition gates when the version applies, not whether the package is referenced — so if no project references the ID, the entry is unused regardless of the condition.\n\n## Prerequisites\n\nStop and report if any fail.\n\n1. **CPM is in use.** At least one `Directory.Packages.props` exists in the repo:\n\n   ```bash\n   find . -type f -name 'Directory.Packages.props' \\\n     -not -path '*\u002Fnode_modules\u002F*' -not -path '*\u002Fbin\u002F*' -not -path '*\u002Fobj\u002F*'\n   ```\n\n   If none, this isn't a CPM repo — stop and tell the user.\n\n2. **Working tree is clean for the files this skill will touch.**\n\n   ```bash\n   git status --porcelain -- ':(glob)**\u002FDirectory.Packages.props'\n   ```\n\n   The `:(glob)` magic is required so the pathspec crosses directory boundaries — without it, nested `Directory.Packages.props` files aren't checked. If any have uncommitted edits, ask before mixing in the skill's changes.\n\n3. **`dotnet` is on PATH.** The Step 6 verification depends on it; the skill does not run without it:\n\n   ```bash\n   dotnet --version\n   ```\n\n   If `dotnet` is missing or fails, stop and ask the user to install\u002Ffix it before re-running.\n\n4. **No `.fsproj` or `.vbproj` projects in the repo.** This skill only scans `.csproj`. References held by F#\u002FVB projects won't be counted, and `PackageVersion` entries used only by them would be wrongly flagged as unused:\n\n   ```bash\n   find . -type f \\( -name '*.fsproj' -o -name '*.vbproj' \\) \\\n     -not -path '*\u002Fnode_modules\u002F*' -not -path '*\u002Fbin\u002F*' -not -path '*\u002Fobj\u002F*'\n   ```\n\n   If any are found, warn the user that references in those projects won't be detected and ask whether to proceed regardless.\n\n## Step 1 — collect every `PackageVersion` and `GlobalPackageReference`\n\nFor each `Directory.Packages.props` file, read it and record:\n\n- Each `\u003CPackageVersion>` entry: package ID, version, and source file.\n- Each `\u003CGlobalPackageReference>` entry: same, but tagged \"global\" so Step 3 skips it.\n\nMulti-line entries (rare, but valid) span multiple lines — capture the whole block. Conditional entries (`Condition=\"...\"`) are captured like any other.\n\n## Step 2 — collect every `PackageReference` Include across the repo\n\nSearch in:\n\n- All `.csproj` files.\n- All `.props` and `.targets` files **other than** `Directory.Packages.props` files.\n\nExclude build output and dependency directories: `bin\u002F`, `obj\u002F`, `node_modules\u002F`, `.git\u002F`. Files under those (e.g. `obj\u002F*.g.props`) hold generated `PackageReference` entries that don't reflect actual project intent and would mask legitimately-unused entries.\n\nFor each remaining file, find every `\u003CPackageReference>` element and pull its `Include` (or `Update`) attribute value. `Update` modifies metadata of an existing reference and still counts as a reference. Use multiline-aware matching: `\u003CPackageReference>` attributes can spill across lines.\n\nBuild a deduped set of referenced package IDs. Compare case-insensitively: NuGet package IDs are case-insensitive, so a `Directory.Packages.props` entry of `Microsoft.Extensions.Hosting` and a project file with `microsoft.extensions.hosting` describe the same package — they must match. Keep the original casing for any displayed names and for the line edits in Step 5.\n\n## Step 3 — compute the unused set\n\nFor each `PackageVersion` from Step 1: if its ID is not in the Step 2 set, it's unused.\n\n`GlobalPackageReference` entries are skipped — they're never proposed for removal.\n\nIf the unused set is empty, tell the user there's nothing to remove and stop.\n\n## Step 4 — show the proposal and STOP\n\nPrint the proposed removals grouped by source file, sorted by package ID:\n\n```\n[\u003Cpath\u002Fto\u002FDirectory.Packages.props>]\n  - SomePackage.A   (1.2.3)\n  - SomePackage.B   (4.5.6)\n\n[\u003Cpath\u002Fto\u002Fother\u002FDirectory.Packages.props>]\n  - SomePackage.C   (7.8.9)\n\n3 unused PackageVersion entries.\n```\n\nAsk: *Remove these N entries?*\n\nWait for explicit confirmation. Reasons the user might decline:\n\n- A package referenced via dynamic MSBuild item construction inside a `\u003CTarget>` — grep won't find that.\n- A package referenced from a custom SDK or imported `.targets` outside the repo.\n- A package the user knows is about to be re-added.\n\nIf the user asks for a diff first, produce a unified diff per file and re-prompt. Do not edit anything until confirmed.\n\n## Step 5 — remove with targeted line edits\n\nFor each unused entry, locate the exact line(s) in its source file and remove them with `Edit`. Preserve:\n\n- Comments above or beside the entry, *unless* the comment explicitly belongs to the removed entry (e.g. `\u003C!-- SomePackage.A: pinned for compat -->` directly above the line). When in doubt, leave the comment.\n- Blank lines used for grouping.\n- Surrounding XML — don't merge sibling elements onto one line.\n\nMulti-line entries: remove the whole block.\n\nDo not reformat the rest of the file. The goal is the minimum change that drops the listed entries.\n\n## Step 6 — verify with `dotnet restore`\n\nRun from the repo root (or each affected solution root, if the repo has multiple):\n\n```bash\ndotnet restore\n```\n\nIf restore succeeds, the cleanup is verified. Summarize what was removed and stop.\n\nIf restore fails, the cause is almost always one of:\n\n- **Reference lives somewhere the scan missed** — `.fsproj`\u002F`.vbproj` (this skill is `.csproj`-only — Prereq 4 should have surfaced this), an MSBuild SDK imported from outside the repo, `.targets` generated at build time, or props injected by another NuGet package.\n- **Reference is constructed dynamically by MSBuild** — `PackageReference` items added inside a `\u003CTarget>` or via a conditional `\u003CItemGroup>` evaluated only at build time. Grep doesn't see those.\n\nRe-add the specific wrongly-removed entry by hand. Use `git diff \u003Cfile>` to see what was removed and selectively restore just that line. **Don't** `git checkout -- \u003Cfile>` — that discards every correctly-removed entry along with the false positive. Tell the user which package was wrongly flagged so the edge case is visible.\n\n## Things not to do\n\n- **Don't** reformat `Directory.Packages.props`. The file is curated by hand; preserve comments, grouping, and blank lines.\n- **Don't** flag `GlobalPackageReference` entries as unused. They're always used — removing one is a deliberate user decision.\n- **Don't** proceed past Step 4 without explicit user confirmation. Edits to tracked source files are a destructive action.\n- **Don't** widen the scan to `.fsproj` or `.vbproj`. This skill is `.csproj`-only by design.\n- **Don't** parse-and-reserialize the XML (e.g. `[xml]` in PowerShell, `xml.etree` in Python). It loses comments and reformats whitespace. Always use line-targeted edits.\n- **Don't** \"fix\" unused-by-grep false positives by removing the entries anyway. If `dotnet restore` fails after a removal, restore the entry — the failure is the signal.\n","# clean-unused-cpm-packages\n\nRemove `\u003CPackageVersion>` entries from `Directory.Packages.props` files when no project, `.props`, or `.targets` file in the repo references the corresponding package. Conservatively compute the unused set by scanning every place a `PackageReference` could live, then make the smallest edits possible while preserving comments, blank lines, and hand-curated grouping.\n\nThis is a destructive operation against tracked source files. Work through the steps carefully, stop at the confirmation checkpoint, and verify with `dotnet restore` before declaring success.\n\n## What this skill scans\n\n**`PackageVersion` sources** (entries considered for removal):\n\n- Every `Directory.Packages.props` in the repo, including nested ones.\n\n**`PackageReference` sources** (anything that \"uses\" a `PackageVersion`):\n\n- Every `.csproj`.\n- Every `.props` and `.targets` file *other than* `Directory.Packages.props` itself — including `Directory.Build.props`, `Directory.Build.targets`, and any custom imports.\n\n**Excluded from removal:**\n\n- `\u003CGlobalPackageReference>` entries. They auto-apply to every project — the entry itself *is* the reference. Removing one drops an analyzer\u002Fgenerator from every project, which is a deliberate user decision, not something to automate.\n- Conditional entries (`\u003CPackageVersion ... Condition=\"...\" \u002F>`): treat them like any other entry. The condition gates when the version applies, not whether the package is referenced — so if no project references the ID, the entry is unused regardless of the condition.\n\n## Prerequisites\n\nStop and report if any fail.\n\n1. **CPM is in use.** At least one `Directory.Packages.props` exists in the repo:\n\n   ```bash\n   find . -type f -name 'Directory.Packages.props' \\\n     -not -path '*\u002Fnode_modules\u002F*' -not -path '*\u002Fbin\u002F*' -not -path '*\u002Fobj\u002F*'\n   ```\n\n   If none, this isn't a CPM repo — stop and tell the user.\n\n2. **Working tree is clean for the files this skill will touch.**\n\n   ```bash\n   git status --porcelain -- ':(glob)**\u002FDirectory.Packages.props'\n   ```\n\n   The `:(glob)` magic is required so the pathspec crosses directory boundaries — without it, nested `Directory.Packages.props` files aren't checked. If any have uncommitted edits, ask before mixing in the skill's changes.\n\n3. **`dotnet` is on PATH.** The Step 6 verification depends on it; the skill does not run without it:\n\n   ```bash\n   dotnet --version\n   ```\n\n   If `dotnet` is missing or fails, stop and ask the user to install\u002Ffix it before re-running.\n\n4. **No `.fsproj` or `.vbproj` projects in the repo.** This skill only scans `.csproj`. References held by F#\u002FVB projects won't be counted, and `PackageVersion` entries used only by them would be wrongly flagged as unused:\n\n   ```bash\n   find . -type f \\( -name '*.fsproj' -o -name '*.vbproj' \\) \\\n     -not -path '*\u002Fnode_modules\u002F*' -not -path '*\u002Fbin\u002F*' -not -path '*\u002Fobj\u002F*'\n   ```\n\n   If any are found, warn the user that references in those projects won't be detected and ask whether to proceed regardless.\n\n## Step 1 — collect every `PackageVersion` and `GlobalPackageReference`\n\nFor each `Directory.Packages.props` file, read it and record:\n\n- Each `\u003CPackageVersion>` entry: package ID, version, and source file.\n- Each `\u003CGlobalPackageReference>` entry: same, but tagged \"global\" so Step 3 skips it.\n\nMulti-line entries (rare, but valid) span multiple lines — capture the whole block. Conditional entries (`Condition=\"...\"`) are captured like any other.\n\n## Step 2 — collect every `PackageReference` Include across the repo\n\nSearch in:\n\n- All `.csproj` files.\n- All `.props` and `.targets` files **other than** `Directory.Packages.props` files.\n\nExclude build output and dependency directories: `bin\u002F`, `obj\u002F`, `node_modules\u002F`, `.git\u002F`. Files under those (e.g. `obj\u002F*.g.props`) hold generated `PackageReference` entries that don't reflect actual project intent and would mask legitimately-unused entries.\n\nFor each remaining file, find every `\u003CPackageReference>` element and pull its `Include` (or `Update`) attribute value. `Update` modifies metadata of an existing reference and still counts as a reference. Use multiline-aware matching: `\u003CPackageReference>` attributes can spill across lines.\n\nBuild a deduped set of referenced package IDs. Compare case-insensitively: NuGet package IDs are case-insensitive, so a `Directory.Packages.props` entry of `Microsoft.Extensions.Hosting` and a project file with `microsoft.extensions.hosting` describe the same package — they must match. Keep the original casing for any displayed names and for the line edits in Step 5.\n\n## Step 3 — compute the unused set\n\nFor each `PackageVersion` from Step 1: if its ID is not in the Step 2 set, it's unused.\n\n`GlobalPackageReference` entries are skipped — they're never proposed for removal.\n\nIf the unused set is empty, tell the user there's nothing to remove and stop.\n\n## Step 4 — show the proposal and STOP\n\nPrint the proposed removals grouped by source file, sorted by package ID:\n\n```\n[\u003Cpath\u002Fto\u002FDirectory.Packages.props>]\n  - SomePackage.A   (1.2.3)\n  - SomePackage.B   (4.5.6)\n\n[\u003Cpath\u002Fto\u002Fother\u002FDirectory.Packages.props>]\n  - SomePackage.C   (7.8.9)\n\n3 unused PackageVersion entries.\n```\n\nAsk: *Remove these N entries?*\n\nWait for explicit confirmation. Reasons the user might decline:\n\n- A package referenced via dynamic MSBuild item construction inside a `\u003CTarget>` — grep won't find that.\n- A package referenced from a custom SDK or imported `.targets` outside the repo.\n- A package the user knows is about to be re-added.\n\nIf the user asks for a diff first, produce a unified diff per file and re-prompt. Do not edit anything until confirmed.\n\n## Step 5 — remove with targeted line edits\n\nFor each unused entry, locate the exact line(s) in its source file and remove them with `Edit`. Preserve:\n\n- Comments above or beside the entry, *unless* the comment explicitly belongs to the removed entry (e.g. `\u003C!-- SomePackage.A: pinned for compat -->` directly above the line). When in doubt, leave the comment.\n- Blank lines used for grouping.\n- Surrounding XML — don't merge sibling elements onto one line.\n\nMulti-line entries: remove the whole block.\n\nDo not reformat the rest of the file. The goal is the minimum change that drops the listed entries.\n\n## Step 6 — verify with `dotnet restore`\n\nRun from the repo root (or each affected solution root, if the repo has multiple):\n\n```bash\ndotnet restore\n```\n\nIf restore succeeds, the cleanup is verified. Summarize what was removed and stop.\n\nIf restore fails, the cause is almost always one of:\n\n- **Reference lives somewhere the scan missed** — `.fsproj`\u002F`.vbproj` (this skill is `.csproj`-only — Prereq 4 should have surfaced this), an MSBuild SDK imported from outside the repo, `.targets` generated at build time, or props injected by another NuGet package.\n- **Reference is constructed dynamically by MSBuild** — `PackageReference` items added inside a `\u003CTarget>` or via a conditional `\u003CItemGroup>` evaluated only at build time. Grep doesn't see those.\n\nRe-add the specific wrongly-removed entry by hand. Use `git diff \u003Cfile>` to see what was removed and selectively restore just that line. **Don't** `git checkout -- \u003Cfile>` — that discards every correctly-removed entry along with the false positive. Tell the user which package was wrongly flagged so the edge case is visible.\n\n## Things not to do\n\n- **Don't** reformat `Directory.Packages.props`. The file is curated by hand; preserve comments, grouping, and blank lines.\n- **Don't** flag `GlobalPackageReference` entries as unused. They're always used — removing one is a deliberate user decision.\n- **Don't** proceed past Step 4 without explicit user confirmation. Edits to tracked source files are a destructive action.\n- **Don't** widen the scan to `.fsproj` or `.vbproj`. This skill is `.csproj`-only by design.\n- **Don't** parse-and-reserialize the XML (e.g. `[xml]` in PowerShell, `xml.etree` in Python). It loses comments and reformats whitespace. Always use line-targeted edits.\n- **Don't** \"fix\" unused-by-grep false positives by removing the entries anyway. If `dotnet restore` fails after a removal, restore the entry — the failure is the signal.\n",{"name":5,"description":7},"main","029bf6d49f3d270442ace55a01cccb40113f7efa","plugins\u002Feng\u002Fskills\u002Fclean-unused-cpm-packages","https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills","https:\u002F\u002Fgithub.com\u002Fesond","https:\u002F\u002Flinktr.ee\u002Fesond0","Serial pragmatist.\r\n\r\nCheck out my other repos at @hexagram-solutions! ","2026-11-07 00:00:12",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add esond\u002Fskills --skill clean-unused-cpm-packages",{"tool":58,"command":59},"bunx","bunx skills add esond\u002Fskills --skill clean-unused-cpm-packages",{"tool":61,"command":62},"pnpm","pnpm dlx skills add esond\u002Fskills --skill clean-unused-cpm-packages","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills\u002Fblob\u002Fmain\u002Fplugins\u002Feng\u002Fskills\u002Fclean-unused-cpm-packages\u002FSKILL.md",true,[66],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"agents\u002Fopenai.yaml","REFERENCE","参考文档",136,"https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills\u002Fblob\u002Fmain\u002Fplugins\u002Feng\u002Fskills\u002Fclean-unused-cpm-packages\u002Fagents\u002Fopenai.yaml",[73,97,124,150,162,197],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":39},"01M71FF0KCP66CRNT9AT1T18Z9","work-item-voice","Write or edit the user's issues in their own voice, in any work tracker — Jira, Linear, GitHub Issues, Azure DevOps. Covers features (new behavior), tasks (work that needs doing), and bugs (behavior that does not match expectation). Load this whenever the deliverable is an issue body, whether they say \"file a bug\", \"write a ticket\", \"draft a story\", \"create an issue for this\", \"turn this into a Jira\", \"write this up in Linear\", or paste a thread and ask for an issue out of it. Load it too whenever text goes into an issue that already exists — \"record this in the issue\", \"add what we found to the ticket\", \"note this on the card\", \"update the one about refunds\", or naming an issue by its key and asking for a fact to go in it — and when writing or updating one is a step inside a larger task. Features get behavior-driven framing with no implementation prescribed, and bugs get expected versus actual. Not for a comment on an issue, which is a conversation turn.","https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills\u002Fblob\u002Fmain\u002Fplugins\u002Fesond\u002Fskills\u002Fwork-item-voice\u002FSKILL.md",[],[80,81,82,83,84,38,85,86,87,34,88,89,90,91,30,92,93,94,95,96],"work","work item voice","work item","voice","conversation","get","card","ticket","issues","new","writing","azure devops","ask","tasks","text","create","tracker",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":108,"publishedAt":39},"01M71FETV1H7JPCTSKMW3XZV1T","conversational-voice","Write the user's side of a conversation with another person, in the user's own voice: Slack messages and replies, DMs, email, PR and code-review comments, Linear or Jira comments, and any other turn in an exchange that goes out under the user's name. Load this whenever the deliverable is a message a human will read as written by the user, whether they say \"draft a Slack message\", \"reply to this\", \"how should I word this\", \"tell the team\", \"ask them about X\", \"send a note to\", or just paste a thread and ask what to say back. Load it too when tightening, shortening, or sanity-checking a message they already wrote, and when a message is one step of a larger task. The register is direct and informal, the way they'd talk to a friend or acquaintance, with the answer up front for a reader who skims. Not for something the user authors rather than sends — an issue body, a PR description, a commit message — even though a person reads those too.","https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills\u002Fblob\u002Fmain\u002Fplugins\u002Fesond\u002Fskills\u002Fconversational-voice\u002FSKILL.md",[103],{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000005","邮件与沟通","SCENARIO","使用场景",[109,83,110,84,111,112,34,113,30,92,114,115,116,117,118,119,120,121,122,123],"conversational voice","back","messages","send","slack messages","code","commit","team","code-review","review","sanity","message","slack","human","how",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":135,"publishedAt":39},"01M71FEN36NS9Y4RVX6KQ704TB","sync-core-repo-docs","Create or audit a repo's three core doc files — README.md, the agent instructions file (AGENTS.md or CLAUDE.md), and REVIEW.md — in that dependency order. If a file is missing, generate it from the codebase; if it exists, audit it against the current code and apply targeted fixes after confirmation. README.md gets a developer from clone to running the project; AGENTS.md captures coding guidance for the agent (delegating to \u002Finit or claude-md-improver); REVIEW.md holds guidance for code reviewers, human or automated, without duplicating AGENTS.md. Target files with --readme, --claude, and --review, or run all three. Use whenever the user wants to set up, bootstrap, scaffold, refresh, audit, update, or sync a repo's docs, or says things like \"create a README\", \"is my README still accurate\", \"write a CLAUDE.md\", \"write an AGENTS.md\", \"audit our docs\", or \"get this repo ready for contributors\" — even when only one file is named. Prefer it over claude-md-improver when README or REVIEW are also in scope.","https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills\u002Fblob\u002Fmain\u002Fplugins\u002Feng\u002Fskills\u002Fsync-core-repo-docs\u002FSKILL.md",[130],{"categoryNo":131,"categoryName":132,"taxonomyType":133,"taxonomyTypeDesc":134},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[136,137,138,139,140,141,142,143,144,85,145,146,34,147,148,33,149,30,114,118],"sync","sync core repo docs","repo docs","core","repo","docs","agent instructions","SET","ready","scope","project","init","only","confirmation",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"publishedAt":39},"01M71FEKJQ2G2NQ4NCXRR9SD63","sync-core-docs","Create or audit a repo's README.md, AGENTS.md\u002FCLAUDE.md, and REVIEW.md docs.","https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills\u002Fblob\u002Fmain\u002Fplugins\u002Feng\u002Fskills\u002Fsync-core-docs\u002FSKILL.md",[],[157,141,139,136,95,158,159,160,161,140,118],"sync core docs","true","md docs","audit","README",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":177,"publishedAt":39},"01M71FEAWPC8BM27EE0A90VT8T","righting-software-system-design","Opt-in, collaborative system-design workflow based on Juval Löwy's iDesign methodology in *Righting Software*. Conducts a multi-phase interview (framing → use cases → volatility analysis → components → call-chain validation → report) that surfaces unknown-unknowns and produces a written recommendation at `decompositions\u002F{system-name}\u002Freport.md`. **Run only when the user explicitly invites this workflow** — not for general architecture questions, lightweight design conversations, or quick \"where should X live?\" questions. Valid triggers: the user names the skill directly, references *Righting Software* \u002F Juval Löwy \u002F iDesign \u002F \"The Method\" \u002F volatility-based decomposition and asks to run a full session, asks for a \"deep\" or \"structured\" or \"Löwy-style\" system design session, or accepts a prior suggestion to run it. Wait for an explicit yes before entering Phase 0. The skill is interrogative — a back-and-forth interview that challenges each volatility candidate and proposes ones the user hasn't considered.","https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills\u002Fblob\u002Fmain\u002Fplugins\u002Feng\u002Fskills\u002Frighting-software-system-design\u002FSKILL.md",[168,171,174],{"categoryNo":169,"categoryName":170,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":172,"categoryName":173,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":175,"categoryName":176,"taxonomyType":133,"taxonomyTypeDesc":134},"01JBSEEDCAT000000000000032","设计师",[178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,29,193,194,195,196],"system design","design","software","system","righting software","righting software system design","deep","quick","wait for","unknown","components","candidate","architecture","phase","valid","at","wait","live","full",{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":203,"publishedAt":39},"01M71FE4QYB436ZS8H3SWWHA4F","reorganize-branch-commits","Reorganize the commits on a non-default git branch into a clean, logical history by rewriting the branch — `git reset` + re-commit by default, `git rebase -i` when commit boundaries already align. Propose groupings based on the actual work done (features, refactors, tests, fixes, docs), get explicit user approval, back the branch up, then rewrite history. Use this skill whenever the user wants to tidy up, clean up, reorganize, restructure, squash, or curate commits on a feature branch — even if they phrase it as \"my branch is a mess\", \"squash this down\", \"combine these commits\", \"fix up the commit log before I open a PR\", or \"make the commits presentable for review\". Trigger proactively when the user is about to open or push a PR and the branch has scrappy\u002FWIP\u002F\"fix\" commits to collapse. Refuses to operate on default or release-shaped branches (main, master, develop, trunk, production, release, or the repo default) — a feature-branch-only tool.","https:\u002F\u002Fgithub.com\u002Fesond\u002Fskills\u002Fblob\u002Fmain\u002Fplugins\u002Feng\u002Fskills\u002Freorganize-branch-commits\u002FSKILL.md",[],[204,205,206,110,207,85,208,209,210,34,211,23,212,213,148,214,44,30,215,115],"branch","reorganize branch commits","commits","operate","align","re","default","fix","branches","open","tidy","done"]