build-setup
Set up build environment and test fixtures for COBOL-to-Java migrations. Creates compilation infrastructure for both languages…
This skill should be used when the user asks to "clean up comments", "remove superfluous comments", "remove redundant comments", "trim verbose comments", "remove changelog comments from code", "clean up the README", or "run a comment cleanup" on a set of files or directories, or
Claude Code
$ npx -y skills add openhands/extensions --skill comment-cleanup --agent claude-code
Codex
$ npx skills add openhands/extensions --skill comment-cleanup -a codex -y
Cursor
$ npx skills add openhands/extensions --skill comment-cleanup -a cursor -y
Gemini CLI
$ npx skills add openhands/extensions --skill comment-cleanup -a gemini-cli -y
GitHub Copilot
$ npx skills add openhands/extensions --skill comment-cleanup -a github-copilot -y
OpenCode
$ npx skills add openhands/extensions --skill comment-cleanup -a opencode -y
Windsurf
$ npx skills add openhands/extensions --skill comment-cleanup -a windsurf -y
name: comment-cleanup description: This skill should be used when the user asks to "clean up comments", "remove superfluous comments", "remove redundant comments", "trim verbose comments", "remove changelog comments from code", "clean up the README", or "run a comment cleanup" on a set of files or directories, or when a scheduled automation hands over a list of files for comment cleanup. Removes comments that restate adjacent code, deletes comments that narrate removed functionality or past PRs, and condenses verbose comments, while leaving code and docstrings untouched.
Remove low-value prose from source files and READMEs without changing behaviour. Three patterns are in scope; everything else is left alone. The output is a comment-only diff.
Apply one test to every comment: **does it tell a reader something they cannot get from the code within a few lines of it?** If yes, keep it (shortened if needed). If no, delete it.
The content is inferable from the few lines above and below. Delete it.
# Get the content text from the message content_text = message.get_content_text()
Typical signs: the comment paraphrases the function name, the variable name, or the branch condition; it announces the next line ("# Loop over users", "// Return result"); it labels a block whose first line already says the same thing.
The comment explains a past state, a change, or a PR. That belongs in the PR description or version control. Delete the history; keep any present-tense fact a reader still needs.
# Prior to merging PR-1234 we stored rectangle coordinates as min_x, min_y, max_x, max_y # and you could simply reference rectangle.max_y. Now we store x, y, width, and height # and calculate the max_y on the fly. area = rectangle.get_max_y()
Here nothing survives: `get_max_y()` already says it is computed. If the comment had carried a live constraint (for example "max_y is derived, so do not cache it across resizes"), keep only that sentence.
Typical signs: "previously", "used to", "no longer", "now we", "after PR-...", "changed from", "was renamed", "legacy behaviour was", dates, author names.
The comment carries a real reason but is padded with narrative, anecdotes, repetition, or detail the reader does not need. Compress it to the shortest wording that keeps the reason.
# Back when I was in elementary school, the first shape I ever remember seeing was # red triangle. ... Here, we generalize our shape using the douglas peucker algorithm generalized = polygon.generalize(1.0)
becomes
# Generalize the polygon for lighter transport and rendering generalized = polygon.generalize(1.0)
The replacement states a purpose. Do that only when the surrounding code or its callers show that purpose; never invent one. Otherwise keep the original's substance in fewer words, for example `# Simplify the outline with Douglas-Peucker`.
For per-language examples, borderline cases, and README guidance, read `references/patterns.md` before the first edit of a session.
sorting, no "while I am here" fixes.
`/** ... */`, Rust `///` and `//!`, C# and Swift `///`, Doxygen blocks, Go comments directly above a declaration, Ruby RDoc/YARD comments above a `def`/`class`, Elixir `@doc`/`@moduledoc`. Tools publish these where the code is not visible.
`# noqa`, `# type: ignore`, `# pragma`, `// eslint-disable...`, `// @ts-...`, `//go:...`, `// nolint`, `#region`, `# fmt: off`, `# pylint:`, `// prettier-ignore`, coverage markers.
thread-safety constraints, security notes, units, non-obvious invariants, warnings.
When unsure whether a comment earns its place, keep it. A missed deletion costs little; a deleted invariant costs a bug.
Examine exactly the files the request names, and nothing else.
to examine before reading anything, for example "all Python files under `src/`", "the files changed in this PR", or "`README.md` and `docs/`". Do not default to the whole repository; a full pass is expensive and rarely what was meant.
list with `git ls-files` (for example `git ls-files 'src/*.py'`, which also matches nested directories) and confirm the count before starting when it exceeds about 50 files.
exactly those files, do not ask, and do not open other files except to read a definition a comment refers to.
Skip generated, vendored, and minified files even when they fall inside the scope.
1. Read `references/patterns.md` once per session before the first edit. 2. Read each file in full. Classify every non-doc comment as keep, delete (pattern 1 or 2), or shorten (pattern 3). 3. Edit only the comment lines. When deleting a full-line comment, also remove a blank line that only existed to separate it; do not otherwise touch spacing. 4. In a git repository, run `python3 <skill-dir>/scripts/verify_comment_only.py` from the repo root. It fails on any uncommitted change outside comments (for Python it
This repository is the public extensions registry for OpenHands. It contains reusable, shareable skills, plugins, and Agent Canvas Apps that customize agent behavior and interfaces. Skills overview docs: SDK skill guide:
Set up build environment and test fixtures for COBOL-to-Java migrations. Creates compilation infrastructure for both languages…
End-to-end COBOL to Java migration workflow. Handles build setup, mainframe dependency removal, and code migration with test…
Create a transformation guide for replacing mainframe-specific COBOL constructs with standard COBOL equivalents. Use when…
Apply mainframe dependency transformations to COBOL code using a pre-generated transformation guide. Converts CICS/VSAM…
Migrate COBOL code to idiomatic Java, preserving business logic while following Java best practices. Use for COBOL modernization…
A test skill that responds to the magic word "alakazam" with a specific phrase
Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.
Drives the GUI of a visible local app window through `orca computer`: accessibility tree, clicks, typing, menus, dialogs, and…
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
Create a new Architecture Decision Record with sequential numbering and AgentDB registration