[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EHGZJTNE9TR6099FRECB42":3,"skill-same:01M6EHGZJTNE9TR6099FRECB42":81},{"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":28,"publishedAt":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":14,"repositoryHtmlUrl":64,"repositoryHomepageUrl":6,"ownerHtmlUrl":65,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":66,"install":67,"resources":80},"01M6EHGZJTNE9TR6099FRECB42","decomment",null,"Strip the noise comments an AI agent left behind on a branch — the ones that restate the code line by line or narrate the change as a story (\"was X, now Y\", \"added a guard here\"). Git holds the history and the code holds the present; only genuinely non-obvious comments survive.","isachivka\u002Fbeware-of-skills","isachivka","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1263650?v=4","01M6EHFZP3P6R9WDKZ0B6ZEQ79","Igor Sachivka","01M6EHFZTC56CFH0DA5AENAM8Y",0,"MIT","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Fdecomment\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"only","restate","narrative","now","scope","trigger","as","drop","clean","up","ai agent","diff","remove","branch","history","sweep","Bash","guard","code","2026-11-10 10:12:30",false,"---\nname: decomment\ndescription: >\n  Strip the noise comments an AI agent left behind on a branch — the ones that restate the\n  code line by line or narrate the change as a story (\"was X, now Y\", \"added a guard here\").\n  Git holds the history and the code holds the present; only genuinely non-obvious comments\n  survive.\nwhen_to_use: >\n  Trigger on: decomment, \u002Fdecomment, \"remove the pointless comments\", \"look at the comments,\n  they duplicate the code\", \"clean up the comments on this branch\", \"too many comments\",\n  \"the agent commented every line\", \"drop the narrative comments\", cleaning up after an\n  agent that documented its own diff.\nallowed-tools: [Bash, Read, Edit, Grep, Glob]\nargument-hint: 'optional: a ref\u002Fpath to scope the sweep'\n---\n\n# decomment\n\n## Scope\n\nDefault: comments **this branch added**, nothing else.\n\n```bash\nbase=$(git merge-base HEAD origin\u002FHEAD 2>\u002Fdev\u002Fnull || git merge-base HEAD origin\u002Fmain)\ngit diff \"$base\"...HEAD        # committed work on the branch\ngit diff; git diff --staged    # plus anything still uncommitted\n```\n\nOnly added (`+`) comment lines are in scope. Pre-existing comments stay unless the user\nnames them — someone thought about those, and you are not reading their context.\nAn argument narrows or moves the scope (a ref, a path); honour it and say what you covered.\n\n## Cut\n\n- **Restates the code.** `\u002F\u002F increment the counter` over `counter++`; a docstring that\n  lists the parameters and their types and says nothing else.\n- **Narrates the change.** \"previously this used X\", \"now returns null instead of throwing\",\n  \"moved here from utils\", \"added after the incident\". That is a commit message living in\n  the wrong file. `git log -S` finds it forever; the reader of this line does not need it.\n- **Announces the obvious.** `\u002F\u002F constructor`, `\u002F\u002F imports`, `\u002F\u002F helper functions`,\n  `\u002F\u002F early return`, banner bars separating two-line blocks.\n- **Explains the language.** What `??`, `useMemo`, a context manager or a try\u002Ffinally does.\n- **Reassures.** \"this is safe because we checked above\" three lines under the check.\n\n## Trim\n\nA comment is not atomic. The common shape after an agent writes it is one useful sentence\nwelded to one worthless one:\n\n```\n\u002F**\n * A session `uid` is `userId_projectId_sessionHash`.   \u003C- the domain format, unguessable: keep\n * Returns the project id, or `undefined` when the uid  \u003C- the six lines below say this: cut\n * does not have that shape.\n *\u002F\n```\n\nCut the dead sentence, keep the live one, and **delete only** — never rewrite the words that\nstay, never merge two sentences into a better one. If what survives no longer reads as a\nsentence, keep the whole thing and say so in the report.\n\nTwo recurring dead openers worth naming:\n\n- **The restated signature.** The first line of a doc block that says what the symbol's own\n  name says (`Temp session data is gone` over `classifyMissingSessionData`).\n- **Diff voice.** \"say *why* here\", \"note that we now…\", \"this addresses the review comment\".\n  A comment talks to whoever opens the file in a year, not to the reviewer of this PR.\n\n## Keep\n\n- **Why, not what** — the reason a non-obvious choice was made, an invariant the types\n  cannot express, an ordering that looks arbitrary and is not.\n- **A trap.** \"looks idempotent, is not\", \"the API returns 200 on failure\", a workaround\n  with the upstream issue or ticket it waits on.\n- **Anything the toolchain reads**: `eslint-disable`, `@ts-expect-error`, `# type: ignore`,\n  `# noqa`, `#pragma`, codegen markers, license headers. These are code wearing a comment's\n  clothes — deleting one changes behaviour.\n- **Public API docs** in a codebase that documents its public surface, even when they read\n  as obvious. Follow the file's neighbours — including their length: a one-line convention\n  makes a six-line block on the symbol next door the thing that looks wrong.\n- **A measured number.** \"batching over 500 doubled p99\" earns its line; \"for performance\"\n  does not.\n- Anything you are unsure about. The user can always ask for a second, harsher pass.\n\n## How\n\n1. Read the diff, then read each candidate **in its file**, not in the hunk — a comment can\n   read as redundant in a diff and carry the file's only warning in place.\n2. List what you propose, grouped by file, each with the comment verbatim and one clause of\n   reasoning: **cut** whole, **trim** to the surviving sentences (quote what goes and what\n   stays), **keep**. Anything you nearly cut and kept goes in a short second list — that is\n   where the user corrects your taste.\n3. Apply after the user agrees: delete whole comment lines, trailing comments, and — for a\n   trim — the dead sentences inside a block. Deletion only: never reword what stays, never\n   touch code, never reflow a line you did not cut into. Mind comment-shaped text inside\n   strings and regexes.\n4. Verify: the repo's typecheck or lint on the touched files, then `git diff` — every hunk\n   must be a deletion of comment lines and nothing else.\n5. Report the count per file and leave the commit to the user unless they asked otherwise.\n\nTwo agents chattering at each other produce the worst of this: each documents its own edit\nfor the other to read. When the diff is mostly such comments, say so plainly — the fix is a\nline in that repo's CLAUDE.md, not a sweep every week.\n","# decomment\n\n## Scope\n\nDefault: comments **this branch added**, nothing else.\n\n```bash\nbase=$(git merge-base HEAD origin\u002FHEAD 2>\u002Fdev\u002Fnull || git merge-base HEAD origin\u002Fmain)\ngit diff \"$base\"...HEAD        # committed work on the branch\ngit diff; git diff --staged    # plus anything still uncommitted\n```\n\nOnly added (`+`) comment lines are in scope. Pre-existing comments stay unless the user\nnames them — someone thought about those, and you are not reading their context.\nAn argument narrows or moves the scope (a ref, a path); honour it and say what you covered.\n\n## Cut\n\n- **Restates the code.** `\u002F\u002F increment the counter` over `counter++`; a docstring that\n  lists the parameters and their types and says nothing else.\n- **Narrates the change.** \"previously this used X\", \"now returns null instead of throwing\",\n  \"moved here from utils\", \"added after the incident\". That is a commit message living in\n  the wrong file. `git log -S` finds it forever; the reader of this line does not need it.\n- **Announces the obvious.** `\u002F\u002F constructor`, `\u002F\u002F imports`, `\u002F\u002F helper functions`,\n  `\u002F\u002F early return`, banner bars separating two-line blocks.\n- **Explains the language.** What `??`, `useMemo`, a context manager or a try\u002Ffinally does.\n- **Reassures.** \"this is safe because we checked above\" three lines under the check.\n\n## Trim\n\nA comment is not atomic. The common shape after an agent writes it is one useful sentence\nwelded to one worthless one:\n\n```\n\u002F**\n * A session `uid` is `userId_projectId_sessionHash`.   \u003C- the domain format, unguessable: keep\n * Returns the project id, or `undefined` when the uid  \u003C- the six lines below say this: cut\n * does not have that shape.\n *\u002F\n```\n\nCut the dead sentence, keep the live one, and **delete only** — never rewrite the words that\nstay, never merge two sentences into a better one. If what survives no longer reads as a\nsentence, keep the whole thing and say so in the report.\n\nTwo recurring dead openers worth naming:\n\n- **The restated signature.** The first line of a doc block that says what the symbol's own\n  name says (`Temp session data is gone` over `classifyMissingSessionData`).\n- **Diff voice.** \"say *why* here\", \"note that we now…\", \"this addresses the review comment\".\n  A comment talks to whoever opens the file in a year, not to the reviewer of this PR.\n\n## Keep\n\n- **Why, not what** — the reason a non-obvious choice was made, an invariant the types\n  cannot express, an ordering that looks arbitrary and is not.\n- **A trap.** \"looks idempotent, is not\", \"the API returns 200 on failure\", a workaround\n  with the upstream issue or ticket it waits on.\n- **Anything the toolchain reads**: `eslint-disable`, `@ts-expect-error`, `# type: ignore`,\n  `# noqa`, `#pragma`, codegen markers, license headers. These are code wearing a comment's\n  clothes — deleting one changes behaviour.\n- **Public API docs** in a codebase that documents its public surface, even when they read\n  as obvious. Follow the file's neighbours — including their length: a one-line convention\n  makes a six-line block on the symbol next door the thing that looks wrong.\n- **A measured number.** \"batching over 500 doubled p99\" earns its line; \"for performance\"\n  does not.\n- Anything you are unsure about. The user can always ask for a second, harsher pass.\n\n## How\n\n1. Read the diff, then read each candidate **in its file**, not in the hunk — a comment can\n   read as redundant in a diff and carry the file's only warning in place.\n2. List what you propose, grouped by file, each with the comment verbatim and one clause of\n   reasoning: **cut** whole, **trim** to the surviving sentences (quote what goes and what\n   stays), **keep**. Anything you nearly cut and kept goes in a short second list — that is\n   where the user corrects your taste.\n3. Apply after the user agrees: delete whole comment lines, trailing comments, and — for a\n   trim — the dead sentences inside a block. Deletion only: never reword what stays, never\n   touch code, never reflow a line you did not cut into. Mind comment-shaped text inside\n   strings and regexes.\n4. Verify: the repo's typecheck or lint on the touched files, then `git diff` — every hunk\n   must be a deletion of comment lines and nothing else.\n5. Report the count per file and leave the commit to the user unless they asked otherwise.\n\nTwo agents chattering at each other produce the worst of this: each documents its own edit\nfor the other to read. When the diff is mostly such comments, say so plainly — the fix is a\nline in that repo's CLAUDE.md, not a sweep every week.\n",{"name":5,"description":53,"when_to_use":54,"allowed-tools":55,"argument-hint":60},"Strip the noise comments an AI agent left behind on a branch — the ones that restate the code line by line or narrate the change as a story (\"was X, now Y\", \"added a guard here\"). Git holds the history and the code holds the present; only genuinely non-obvious comments survive.\n","Trigger on: decomment, \u002Fdecomment, \"remove the pointless comments\", \"look at the comments, they duplicate the code\", \"clean up the comments on this branch\", \"too many comments\", \"the agent commented every line\", \"drop the narrative comments\", cleaning up after an agent that documented its own diff.\n",[45,56,57,58,59],"Read","Edit","Grep","Glob","optional: a ref\u002Fpath to scope the sweep","main","3f76050fe565c91c27d85e648128fdbe5005106e","plugins\u002Fbos\u002Fskills\u002Fdecomment","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills","https:\u002F\u002Fgithub.com\u002Fisachivka","2026-11-11 04:25:51",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add isachivka\u002Fbeware-of-skills --skill decomment",{"tool":73,"command":74},"bunx","bunx skills add isachivka\u002Fbeware-of-skills --skill decomment",{"tool":76,"command":77},"pnpm","pnpm dlx skills add isachivka\u002Fbeware-of-skills --skill decomment","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Fdecomment\u002FSKILL.md",true,[],[82,103,131,150,172,192],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":91,"publishedAt":48},"01M6EHHMD6V299GTDRCB7XVPKH","yt-dub","Give a YouTube video Yandex's Russian voice-over (the Yandex Browser \u002F voice-over-translation one) at any length — including past Yandex's 4-hour limit — and mux it into the best video YouTube serves, with the original sound kept as a second track; optionally drop the result into Plex on SugarDaddy. Also when only the translated audio is wanted.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbosp\u002Fskills\u002Fyt-dub\u002FSKILL.md",[88],{"categoryNo":89,"categoryName":90,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[92,45,93,94,34,35,36,95,96,97,98,29,99,100,101,102],"yt dub","it","link","plex","russian","translation","youtube","voice","Audio","Video","browser",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":113,"publishedAt":48},"01M6EHHFFGVRCR4MCZTE96HYN7","codex-proxy","Run an OpenAI-compatible Chat Completions endpoint on localhost that spends the user's ChatGPT\u002FCodex subscription instead of an API key — for apps that take a Base URL, API key and model id (dictation post-processing, editors, scripts). Install it as an always-on LaunchAgent, check its status, print the key, try a request, or debug a failing app.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbosp\u002Fskills\u002Fcodex-proxy\u002FSKILL.md",[109,112],{"categoryNo":110,"categoryName":111,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[114,115,116,117,118,119,45,120,121,122,123,124,125,126,127,34,128,129,35,130],"proxy","codex proxy","codex","use","check","model","api","run","debug","uninstall","provider","processing","post","apps","id","app","chat",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":138,"publishedAt":48},"01M6EHHBJ8GXVFT5DN6526H54J","revdiff-ru","Review a diff in revdiff with everything except the code translated into Russian, line numbering preserved 1:1 so annotations map back to the real files. One command does the translation; then \u002Frevdiff:revdiff opens the result.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Frevdiff-ru\u002FSKILL.md",[137],{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[139,140,40,141,97,96,142,34,143,144,145,45,146,47,147,148,149],"revdiff ru","files","file","line","back","map","annotations","open","translate","review","command",{"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":157,"publishedAt":48},"01M6EHH7CR99Y6TPN9DW24DGXE","peer-chat","A prompt starting with \"Chat from Codex:\" is a peer message: answer it only through peer-chat.py, never in your own output. Also use when the user says \"chat with codex\", \"talk to codex\", \"work with codex\", \"do this with codex\", \"build this with codex\", \"discuss this with codex\" (the agent in the other pane of this agterm split). Not for a one-shot task handed off, and not for a read-only second opinion.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Fpeer-chat\u002FSKILL.md",[156],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[158,130,159,116,160,161,93,162,163,164,29,165,117,166,167,168,169,170,45,171],"peer","peer chat","build","agterm","message","task","do","never","user","read","prompt","work","grep","second opinion",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":179,"publishedAt":48},"01M6EHH3WCWPHZX79RD91X23C7","memory-review","Use when an agent memory directory has grown large enough that nobody remembers what is in it, when memories look stale or contradictory, when the same fact seems to live in both memory and a CLAUDE.md, or when the user asks to review, prune, audit or clean up their memories. Also use before retiring a project whose memories should move somewhere else.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Fmemory-review\u002FSKILL.md",[178],{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[180,148,181,45,34,182,183,37,184,38,117,185,186,167,187,188,189,47,190,191],"memory review","memory","project","memories","stale","edit","write","prune","audit","agent memory","go","directory",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":198,"publishedAt":48},"01M6EHGWVGP9JA0SB4M65GESG8","cleanup","Tidy up after yourself and close your own agterm session.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Fcleanup\u002FSKILL.md",[],[194,161,199,38,200,201],"close","session","tidy"]