This automation runs from the executable automation plugin at plugins/github-comment-cleanup. Do not copy or package code from this skill; it is only a setup guide for creating the plugin-spec automation. The cleanup rules themselves are the comment-cleanup skill, which the automation loads into each cleanup conversation.
What each run does
For every configured repository:
- Records the outcome of the conversation the previous run started, once it has stopped. With a pull request, each file keeps its original and its cleaned fingerprint; with
NO_CHANGES, its original; after a failure, nothing, so its files are offered again. - Skips the repository while the pull request it opened is still open or the previous conversation is still running.
- Shallow-clones the default branch and fingerprints each candidate file by git blob SHA. Recorded fingerprints are skipped without reading the file; files with no comments are recorded directly. Changed files are queued before never-seen ones, then by path. At most 50 files are queued per run (
max_files, 1-50, default 50), withinmax_bytes; the rest wait for a later run. - Starts one conversation with
comment-cleanuploaded and the queued paths in its first message. The agent edits, runsverify_comment_only.py, commits, pushes, and opens the pull request.
Ask the user which repositories to clean and whether any paths should be included or excluded before creating it.
Create with the plugin-spec endpoint
Use POST /api/automation/v1/plugin-spec with this plugin source:
{
"source": "github:OpenHands/extensions",
"repo_path": "plugins/github-comment-cleanup",
"ref": "main"
}
ref is main while this plugin is unreleased. After an openhands-extensions release includes it, prefer the matching release tag, for example v<extensions-version>.
For local Agent Canvas development from this checkout, use a local source instead:
{
"source": "/absolute/path/to/OpenHands/extensions",
"repo_path": "plugins/github-comment-cleanup"
}
Request template
{
"name": "Weekly comment cleanup",
"plugin": {
"source": "github:OpenHands/extensions",
"repo_path": "plugins/github-comment-cleanup",
"ref": "main"
},
"config": {
"repos": ["owner/repo"],
"include": [],
"exclude": ["docs/legacy/*"],
"max_files": 50,
"max_bytes": 1000000,
"branch_prefix": "openhands/comment-cleanup",
"pull_request_mode": "draft"
},
"trigger": {
"type": "cron",
"schedule": "0 9 * * 1",
"timezone": "UTC"
}
}
The authoritative config schema is in plugins/github-comment-cleanup/.plugin/plugin.json under automation.config_schema. Validate user-provided values against it before creating the automation. include and exclude are fnmatch globs, where * also matches /.
Requirements
- A
GITHUB_PERSONAL_ACCESS_TOKENsecret with permission to write contents and pull requests. On OpenHands Cloud and Enterprise a connected GitHub integration is used when the secret is absent. - On OpenHands Cloud and Enterprise, the automation KV store. A local Agent Canvas without it keeps state in a file instead.
Runtime notes
- Entrypoint:
python3 plugin_runner.py main.pyinscripts. - Agent profile:
default. - Secondary plugins:
[]. The cleanup conversation loadsskills/comment-cleanupfrom the same source and resolved commit as this plugin, so the skill always matches the script. - State: see references/state-schema.md. Delete a repository's key to force a full re-examination.