[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C5ZVWK2SY2YFSF9GX0JGTY":3,"skill-same:01M6C5ZVWK2SY2YFSF9GX0JGTY":69},{"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":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M6C5ZVWK2SY2YFSF9GX0JGTY","git-repo-delete-check",null,"Verify a repo's work survives deletion — remote, unpushed commits, stashes — then offer a push or tar backup. Use when asked to rm -rf, delete, or prune a git checkout.","laurigates\u002Fclaude-plugins","laurigates","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13014001?v=4","01M6C59YHWS9C7KMXKSRX1YXNP","Lauri Gates","01M6C59YP2APG9YAM4DWYQYGFJ",59,"MIT","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fgit-plugin\u002Fskills\u002Fgit-repo-delete-check\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"git repo delete check","repo","git","check","delete","git log","when","deletion","remote","mkdir","checkout","stash","log","Bash","git branch","use","commits","push","work","branch","2026-11-10 10:12:30",false,"---\nname: git-repo-delete-check\ndescription: \"Verify a repo's work survives deletion — remote, unpushed commits, stashes — then offer a push or tar backup. Use when asked to rm -rf, delete, or prune a git checkout.\"\nallowed-tools: Bash(git -C *), Bash(git remote *), Bash(git status *), Bash(git log *), Bash(git stash *), Bash(git branch *), Bash(du *), Bash(tar *), Bash(mkdir *), Read, Glob, AskUserQuestion, TodoWrite\ncreated: 2026-08-19\nmodified: 2026-11-04\nreviewed: 2026-08-19\n---\n\n# \u002Fgit:repo-delete-check\n\n## When to Use This Skill\n\n| Use this skill when... | Use the alternative when... |\n|---|---|\n| Deleting, `rm -rf`-ing, or pruning a whole git checkout | Use `deadbranch` to delete stale branches inside a repo that stays |\n| Checking a checkout for a remote, unpushed commits, and stashes before removal | Use `git-coworker-check` to find out whether another agent is writing in the checkout |\n| Offering a push or tar backup before a clone cleanup | Use `macos-plugin:macos-disk-usage` or `linux-plugin:linux-disk-usage` to find what fills the disk |\n\nRun this before any deletion of a git checkout — `rm -rf`, a cleanup\nsweep over old clones, or a disk-space prune.\n\nBefore `rm -rf`'ing a git repository, verify that its work is preserved\nsomewhere else. A local checkout that has no remote is the *only* copy —\ndeletion is permanent and silently destroys committed history plus all\nuncommitted work.\n\n## Preflight check\n\n```\ngit -C \u003Crepo> remote -v\n```\n\n| Output | Meaning | Action |\n|---|---|---|\n| Has `origin \u003Curl>` | Pushed work lives on the remote | Local delete is safe; uncommitted work and unpushed commits are still lost — surface them first |\n| Empty \u002F no output | **Local-only repo** | Stop. The repo's entire history is in this checkout |\n\nAlways run this check before deleting, even when the user has explicitly\nsaid \"delete this repo\" — they may not realize a particular checkout is\nlocal-only.\n\n## When the repo is local-only\n\nSurface the situation and offer three options, in increasing\ndestructiveness, before doing anything:\n\n1. **Push to a new GitHub repo first.** Preserves the work on the\n   remote, then the local checkout can be deleted safely. Requires\n   creating the GitHub repo (or knowing it exists empty).\n2. **Tar to a labelled backup.** `tar -czf\n   ~\u002FBackups\u002F\u003Cname>-$(date -I).tar.gz \u003Crepo>`. Preserves the work on\n   disk under a date-stamped name; the local checkout can then be\n   deleted.\n3. **Delete with no backup.** Confirm the user genuinely wants the work\n   gone — including any uncommitted files, branches, and stashes.\n\nDefault when the user says a generic \"go\" \u002F \"yes\" without specifying:\noption 2 (tar backup, then delete). It preserves the work without\nrequiring remote setup or losing anything, and the backup can be\ndeleted later when confidence builds.\n\n## Also surface before deleting\n\nEven when a remote exists, these conditions warrant a pause:\n\n- **Uncommitted changes.** `git status --porcelain` is non-empty —\n  those files are not on any remote.\n- **Unpushed commits.** `git log @{u}..HEAD --oneline` is non-empty —\n  those commits exist only locally.\n- **Stashes.** `git stash list` is non-empty — stashes are pure\n  working-copy state.\n- **Untracked branches.** `git branch -vv` shows branches without\n  upstreams — those branches' commits may be local-only.\n\nIf any are present, list them in the same message as the deletion\nprompt so the user can decide knowing what disappears.\n\n## Rationale\n\nThe general system-prompt rule (\"destructive operations need\nconfirmation\") covers the *spirit*. This rule is the *concrete check*\nto run before nuking a repo: the failure mode of skipping it is\nsilent permanent data loss, with no way to recover.\n\n## Related\n\n- `hooks-plugin` `repo-deletion-safety.sh` — the deterministic enforcement half.\n  Its block message reports the preflight findings and points **here** for the\n  options above; the only thing it restates is option 2's tar command, because\n  writing that tarball is what clears the block. Change option 2's archive name\n  or its backup directory and that hook has to change with it, or the command it\n  prints stops clearing its own block (`hooks-plugin\u002Fhooks\u002Ftest-repo-deletion-safety.sh`\n  runs the printed command end to end).\n- `git-plugin:git-coworker-check` — is another agent writing here? (different\n  question, same safety-diagnostic shape)\n- `git-plugin:git-maintain` — maintenance *inside* a surviving repo\n- `git-plugin:deadbranch` — deleting branches, not the checkout\n- `macos-plugin:macos-disk-usage` — the likely caller when disk pressure\n  prompts a clone cleanup\n","# \u002Fgit:repo-delete-check\n\n## When to Use This Skill\n\n| Use this skill when... | Use the alternative when... |\n|---|---|\n| Deleting, `rm -rf`-ing, or pruning a whole git checkout | Use `deadbranch` to delete stale branches inside a repo that stays |\n| Checking a checkout for a remote, unpushed commits, and stashes before removal | Use `git-coworker-check` to find out whether another agent is writing in the checkout |\n| Offering a push or tar backup before a clone cleanup | Use `macos-plugin:macos-disk-usage` or `linux-plugin:linux-disk-usage` to find what fills the disk |\n\nRun this before any deletion of a git checkout — `rm -rf`, a cleanup\nsweep over old clones, or a disk-space prune.\n\nBefore `rm -rf`'ing a git repository, verify that its work is preserved\nsomewhere else. A local checkout that has no remote is the *only* copy —\ndeletion is permanent and silently destroys committed history plus all\nuncommitted work.\n\n## Preflight check\n\n```\ngit -C \u003Crepo> remote -v\n```\n\n| Output | Meaning | Action |\n|---|---|---|\n| Has `origin \u003Curl>` | Pushed work lives on the remote | Local delete is safe; uncommitted work and unpushed commits are still lost — surface them first |\n| Empty \u002F no output | **Local-only repo** | Stop. The repo's entire history is in this checkout |\n\nAlways run this check before deleting, even when the user has explicitly\nsaid \"delete this repo\" — they may not realize a particular checkout is\nlocal-only.\n\n## When the repo is local-only\n\nSurface the situation and offer three options, in increasing\ndestructiveness, before doing anything:\n\n1. **Push to a new GitHub repo first.** Preserves the work on the\n   remote, then the local checkout can be deleted safely. Requires\n   creating the GitHub repo (or knowing it exists empty).\n2. **Tar to a labelled backup.** `tar -czf\n   ~\u002FBackups\u002F\u003Cname>-$(date -I).tar.gz \u003Crepo>`. Preserves the work on\n   disk under a date-stamped name; the local checkout can then be\n   deleted.\n3. **Delete with no backup.** Confirm the user genuinely wants the work\n   gone — including any uncommitted files, branches, and stashes.\n\nDefault when the user says a generic \"go\" \u002F \"yes\" without specifying:\noption 2 (tar backup, then delete). It preserves the work without\nrequiring remote setup or losing anything, and the backup can be\ndeleted later when confidence builds.\n\n## Also surface before deleting\n\nEven when a remote exists, these conditions warrant a pause:\n\n- **Uncommitted changes.** `git status --porcelain` is non-empty —\n  those files are not on any remote.\n- **Unpushed commits.** `git log @{u}..HEAD --oneline` is non-empty —\n  those commits exist only locally.\n- **Stashes.** `git stash list` is non-empty — stashes are pure\n  working-copy state.\n- **Untracked branches.** `git branch -vv` shows branches without\n  upstreams — those branches' commits may be local-only.\n\nIf any are present, list them in the same message as the deletion\nprompt so the user can decide knowing what disappears.\n\n## Rationale\n\nThe general system-prompt rule (\"destructive operations need\nconfirmation\") covers the *spirit*. This rule is the *concrete check*\nto run before nuking a repo: the failure mode of skipping it is\nsilent permanent data loss, with no way to recover.\n\n## Related\n\n- `hooks-plugin` `repo-deletion-safety.sh` — the deterministic enforcement half.\n  Its block message reports the preflight findings and points **here** for the\n  options above; the only thing it restates is option 2's tar command, because\n  writing that tarball is what clears the block. Change option 2's archive name\n  or its backup directory and that hook has to change with it, or the command it\n  prints stops clearing its own block (`hooks-plugin\u002Fhooks\u002Ftest-repo-deletion-safety.sh`\n  runs the printed command end to end).\n- `git-plugin:git-coworker-check` — is another agent writing here? (different\n  question, same safety-diagnostic shape)\n- `git-plugin:git-maintain` — maintenance *inside* a surviving repo\n- `git-plugin:deadbranch` — deleting branches, not the checkout\n- `macos-plugin:macos-disk-usage` — the likely caller when disk pressure\n  prompts a clone cleanup\n",{"name":5,"created":44,"modified":45,"reviewed":44,"description":7,"allowed-tools":46},1787097600000,1793750400000,"Bash(git -C *), Bash(git remote *), Bash(git status *), Bash(git log *), Bash(git stash *), Bash(git branch *), Bash(du *), Bash(tar *), Bash(mkdir *), Read, Glob, AskUserQuestion, TodoWrite","main","9d783554148f9c8a9c55a486b480760d3da673e6","git-plugin\u002Fskills\u002Fgit-repo-delete-check",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-13 03:22:01",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add laurigates\u002Fclaude-plugins --skill git-repo-delete-check",{"tool":61,"command":62},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill git-repo-delete-check",{"tool":64,"command":65},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill git-repo-delete-check","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fgit-plugin\u002Fskills\u002Fgit-repo-delete-check\u002FSKILL.md",true,[],[70,99,120,135,156,186],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":81,"publishedAt":39},"01M70PFHMH9ADY0CRE6047Y4B2","kitty-show-image","Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[82,83,84,85,86,87,88,89,90,91,34,25,32,92,93,94,95,96,97,98],"show","kitty show image","image","kitty","show image","ls","get","send","open","dev","file","text","with","xdg","via","2026","read",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":39},"01M70PFEN18HKQ4RCQ1VPGMPTB","kitty-session-persistence","Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-session-persistence\u002FSKILL.md",[],[85,106,107,108,109,110,25,32,111,112,113,97,98,114,115,116,117,118,119,34],"kitty session persistence","session","persistence","false","snapshots","uname","reboot","terminal","write","edit","snapshot","macos","sessions","restore",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":39},"01M70PFC77XGXCVQ1543VGZHYR","kitty-remote-control","Safe kitty remote control from an agent — read panes with kitty @ ls\u002Fget-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-remote-control\u002FSKILL.md",[],[127,27,85,128,129,87,130,131,88,132,133,34,25,134,32,93,94,113,97,98],"kitty remote control","control","remote control","running","never","panes","notify","query",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":39},"01M70P6WVMCT5JG4SACTM69AF9","docs-reference-check","Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved\u002Fdeleted files, or wiring a doc-drift lint.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fdocumentation-plugin\u002Fskills\u002Fdocs-reference-check\u002FSKILL.md",[],[142,22,143,144,145,146,147,20,148,149,34,25,32,150,92,151,152,153,154,155],"docs reference check","reference check","reference","docs","links","python3","files","auto","drift","lint","wiring","chezmoi","references","cp",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":171,"publishedAt":39},"01M6C6NDE7DAQGNWSF22J5CJ0Z","youtube-upload","Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-upload\u002FSKILL.md",[162,165,166],{"categoryNo":163,"categoryName":164,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":167,"categoryName":168,"taxonomyType":169,"taxonomyTypeDesc":170},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[172,173,174,175,147,176,98,177,115,178,179,180,34,32,92,181,182,25,183,184,185,96,97],"youtube upload","upload","youtube","Video","run","uv run","publishing","data","uv","api","v3","tags","id","title",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":195,"publishedAt":39},"01M6C6NABWW1X58KJJM4F6GQMQ","youtube-studio-share","Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-studio-share\u002FSKILL.md",[192],{"categoryNo":193,"categoryName":194,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000023","Skill与智能体开发",[196,197,198,199,174,175,200,201,202,203,204,98,205,206,207,208,34,209,25,94,210,97],"youtube studio share","share","youtube studio","studio","browser","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization"]