no-comments · backnotprop — Claude Code skill: strip dead comments from a diff
The skill spawns a comment-sicko subagent, deletes comments that explain nothing, and asks you before encoding real constraints as checks.
npx skills add backnotprop/pstack --skill no-comments -a claude-codeWhat no-comments does
The skill spawns a comment-sicko subagent and acts on its report. Scope comes from the caller: your files or diff. With nothing passed, it takes the current diff against the base branch, main by default, working tree included.
Then comes the audit. Application-code edits, scope escapes, deletions protected by exceptions and misstated MUST KILL reasons get rejected. Thin IMPORTANT and do not remove flags are checked with /how or /why on their symbol before you accept them. An ambiguous kill is not restored; a refuted keep is deleted. One exception: a REVIEW keep about an outside rule stays until someone checks that rule.
Fixes target the root cause and stay inside the fence. If the cause sits outside it, the skill lands the smallest in-scope fix and reports the rest open. Constraint comments such as do not remove or talk to X before changing get an offer to encode them as a cheap type, test or CI lint, and the skill waits for approval. Unattended runs and evals need caller pre-approval. The comment-sicko subagent is registered only in Cursor with the pstack plugin; other harnesses fall back to a general subagent.
What it helps with
- clear dead comments out of a diff before review
- tell a live constraint apart from a stale explanation
- turn a constraint comment into a CI check
- catch missed lint and TypeScript suppressions
- fix the cause instead of guarding the symptom
Example prompts for the agent
- Run no-comments on the current diff
- Strip the useless comments in the files I changed
- Check the
do not removeflags in this diff and suggest how to encode them
How to install no-comments
1Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill no-comments -a claude-code2Manually: put the files in place
~/.claude/skills/no-comments/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/no-comments/
1Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill no-comments -a codex2Manually: put the files in place
.agents/skills/no-comments/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill no-comments -a cursor2Manually: put the files in place
.cursor/skills/no-comments/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install backnotprop/pstack no-comments2Manually: put the files in place
.github/skills/no-comments/SKILL.md1Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill no-comments -a gemini-cli2Platform CLI
gemini skills install https://github.com/backnotprop/pstack --path skills/no-commentsManually: put the files in place
.devin/skills/no-comments/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add backnotprop/pstack --skill no-comments -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about no-comments
How do I install no-comments in Claude Code?
Run npx skills add backnotprop/pstack --skill no-comments -a claude-code. The skill lands at ~/.claude/skills/no-comments/SKILL.md.
What does no-comments do?
It spawns the comment-sicko subagent, audits its report against the diff, and deletes comments that carry no information. Disputed cases stay open and show up in the report.
What does the comment-sicko subagent need?
It is registered as a subagent only in Cursor with the pstack plugin. In Claude, Codex and OpenCode the skill spawns a general subagent instead, and in a harness with no subagent tool it runs the same prompt itself.
Source text
SKILL.md · MIT
--- name: no-comments description: "Spawn Comment Sicko, fix accepted findings, and offer encodings for claimed constraints." disable-model-invocation: true --- # No comments Spawn Comment Sicko. Act on accepted findings. Defer to Comment Sicko's fresh perspective. ## Scope Use the caller's files or diff. Otherwise use the current diff against the base branch, default `main`, including the working tree. ## Steps 1. Spawn `Task` with `subagent_type: "comment-sicko"`. Pass the scope. Pick each subagent's reasoning level and fast or standard speed for the job, per the Subagents section of the **poteto-mode** skill. Do not restate its rules. If your harness doesn't have comment-sicko registered as a subagent (any harness other than Cursor with the pstack plugin), spawn a general subagent instead: `Agent` in Claude Code (`subagent_type: general-purpose`), `task` in OpenCode (`subagent_type: general`), `spawn_agent` in Codex. Its prompt is [`references/comment-sicko.md`](references/comment-sicko.md) verbatim, then the scope. If your harness has no subagent tool, as in Pi without an extension, run that prompt yourself in a fresh pass over the scope. 2. Inspect its report and diff. Reject application-code edits, scope escapes, exception-protected deletions, misstated `MUST KILL` reasons, and flags that treat kept intentional code as guilty. Reshape flags on our-code surprises stay actionable. Do not restore those comments. A keep survives only with proof it is about something we cannot change. Audit missed scoped lint and TypeScript suppressions. Correctness or safety suppressions stay actionable `MUST KILL`s. Restore deletions only with exact exceptions and scoped proof. Before accepting thin `IMPORTANT` or `do not remove` kills or keeps, run `/how` or `/why` on their symbol. If a kill is ambiguous, do not restore. If a keep is refuted or still ambiguous, delete it, except a `REVIEW` keep about an outside rule, which stays until someone checks that rule. Report it open. Revert and rerun one rejected report with the failure named. If you reject the rerun too, revert only its rejected findings, report them open, and go on with the accepted ones. 3. Fix trivial accepted flags directly by deleting a dead path, dropping a parameter, or using the real API. If any fix needs a shape, run `/architect` once for the accepted set and surrounding code. Stop at the sketch. Architect shapes. Step 4 implements. 4. Implement the smallest root-cause fix in scope. Remove every named workaround. If the root cause is out of scope, land the smallest in-scope fix and report the rest open. The **principle-fix-root-causes** and **principle-redesign-from-first-principles** skills guide intent only. Neither authorizes widening the fence nor fixing instances outside it. Never bolt on symptom guards. 5. Constraint comments say `do not remove`, `do not change wording`, or `talk to X before changing`. Leave keeps about things we cannot change. Offer the cheapest in-scope type, runtime, test, or CI lint. Wait for interactive approval. Unattended and eval require caller pre-approval. If approved, encode then delete. Otherwise delete, report the constraint open, and sketch out-of-scope work. 6. Report the deletion count, restored comments, `REVIEW` keeps, reruns, architect sketch, fixes, encoding offers, encodings, unenforced constraints, and other open work.
© backnotprop · MIT · backnotprop/pstack
Similar skills
Everything for Code review and refactoring →no-comments by other authors comes first.