
OpenClaw Secret Scanning Maintainer
FreeEfficiently manage GitHub secret scanning alerts.
Free · Opens the source repo
What OpenClaw Secret Scanning Maintainer does
The OpenClaw Secret Scanning Maintainer is a specialized tool designed for repository maintainers to effectively triage, redact, clean up, and resolve GitHub secret scanning alerts. This skill is particularly useful for teams managing sensitive information within their codebase, as it automates the process of handling alerts generated by GitHub's security features. By using this skill, maintainers can ensure that any sensitive data is properly managed and that their repository remains secure.
This skill operates by leveraging a script that performs several key functions. It begins by identifying open alerts and fetching the relevant content associated with each alert. The script is designed to handle multiple alerts efficiently, processing them in ascending order. Once the content is fetched, the agent analyzes it to determine if any plaintext secrets remain. If necessary, it redacts these secrets and prepares the content for notification or resolution. The skill ensures that all operations are secure, avoiding the exposure of sensitive information during processing.
The OpenClaw Secret Scanning Maintainer is intended for repository maintainers with admin permissions, as it requires the ability to edit or delete comments and resolve alerts. This access is crucial for effectively managing the lifecycle of secret scanning alerts and ensuring that sensitive information does not linger in the repository's history. The skill also emphasizes the importance of communication, as it generates notifications in English to inform team members about the actions taken regarding the alerts.
In summary, this skill streamlines the management of GitHub secret scanning alerts, helping maintainers to keep their repositories secure and compliant with best practices for handling sensitive information. It is an essential tool for any team that prioritizes security and wants to automate the tedious aspects of secret scanning management.
When to use it
Use this skill when you need to process GitHub secret scanning alerts in your repository, especially if you have multiple alerts to manage.
When not to use it
This skill is not suitable for users without admin permissions, as it requires the ability to edit or delete comments and resolve alerts.
What you can build with it
Managing Multiple Alerts
When your repository has several open secret scanning alerts, use this skill to process them efficiently in order.
Redacting Sensitive Information
If a secret scanning alert is flagged, use the skill to redact any sensitive information before resolving the alert.
Automating Notifications
Automatically generate notifications for team members about the status of secret scanning alerts, keeping everyone informed.
How to install OpenClaw Secret Scanning Maintainer
View source1. Install with the skills CLI
npx skills add openclaw/openclaw/openclaw-secret-scanning-maintainer --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by openclawOpenClaw Secret Scanning Maintainer
Maintainer-only. This skill requires repo admin / maintainer permissions to edit or delete other users' comments and resolve secret scanning alerts.
Use this skill when processing alerts from https://github.com/openclaw/openclaw/security/secret-scanning.
Language rule: All notification comments and replacement comments MUST be written in English.
Script
All mechanical operations (API calls, temp file management, security enforcements) are handled by:
$REPO_ROOT/.agents/skills/openclaw-secret-scanning-maintainer/scripts/secret-scanning.mjs
The script enforces:
hide_secret=trueon all alert fetches (no plaintext secrets in stdout)mktempwith random UUIDs for all temp files-F body=@filefor all body uploads (no inline shell quoting)- Notification templates branched by location type
- Never prints
.secretor.bodyto stdout
Overall Flow
Supports single or multiple alerts. For multiple alerts, process in ascending order.
For each alert:
- Identify —
fetch-alert+fetch-contentto get metadata and body - Decide — Agent reads the body file, identifies whether plaintext secrets remain, and produces a redacted version only when needed
- Redact —
redact-body-if-neededfor issue/PR body; skip for comments (delete directly) - Purge —
delete-comment+recreate-commentfor comments; cannot purge body history - Notify —
notifyposts the right template per location type, unless the current issue/PR body is already redacted - Resolve —
resolvecloses the alert - Summary —
summaryprints formatted results
Step 1: Identify
# List all open alerts
node secret-scanning.mjs list-open
# Fetch specific alert metadata + locations
node secret-scanning.mjs fetch-alert <NUMBER>
# Fetch content for each location (saves body to temp file)
node secret-scanning.mjs fetch-content '<location-json>'
The fetch-content output includes:
body_file: path to temp file with full body contentauthor: who posted itissue_number/pr_number: where it isedit_history_count: number of existing editstype: location type for routing- For
discussion_comment, it also includescomment_node_id,discussion_node_id, andreply_to_node_idwhen the original comment was a reply.
Location type routing
| type | Flow |
|---|---|
issue_comment | Comment: delete+recreate |
pull_request_comment | Comment: delete+recreate |
pull_request_review_comment | Comment: delete+recreate |
discussion_comment | Discussion comment: delete+recreate (GraphQL) |
issue_body | Body: redact in place |
pull_request_body | Body: redact in place |
commit | Notify only |
| other | Skip and report |
Step 2: Decide (Agent)
The agent reads the body file from fetch-content output and:
- Identifies ALL secrets in the content (there may be more than the alert flagged)
- Determines whether any plaintext credential remains in the current body
- Replaces each remaining secret with
[REDACTED <secret_type>]— no partial values, no prefix/suffix - Saves the redacted content to a new temp file
This is the only step that requires semantic understanding. Everything else is mechanical.
For issue_body and pull_request_body: if the current body has already been redacted by the author and no plaintext credential remains, do not post a public notification comment. Resolve the alert with a maintainer-only resolution comment such as:
node secret-scanning.mjs resolve <ALERT_NUMBER> revoked "Current issue/PR body is already redacted; no public notification posted."
This avoids creating a fresh public pointer to historical sensitive content.
Step 3: Redact
For comments (issue_comment / PR comments)
Do NOT redact. Skip directly to Step 4 (delete + recreate). PATCHing before DELETE creates an unnecessary edit history revision.
For issue_body / pull_request_body
node secret-scanning.mjs redact-body-if-needed <issue|pr> <NUMBER> <current-body-file> <redacted-body-file> <result-file>
Use the body_file from fetch-content as <current-body-file>. The command writes notify_required to <result-file> and only PATCHes the body when the redacted file differs from the current body.
Step 4: Purge Edit History
Comments — Delete and Recreate
For issue/PR comments:
# Delete original (all edit history gone)
node secret-scanning.mjs delete-comment <COMMENT_ID>
# Recreate with redacted content
node secret-scanning.mjs recreate-comment <ISSUE_NUMBER> <body-file>
For discussion comments (uses GraphQL):
# Delete original
node secret-scanning.mjs delete-discussion-comment <COMMENT_NODE_ID>
# Recreate with redacted content
node secret-scanning.mjs recreate-discussion-comment <DISCUSSION_NODE_ID> <body-file> [REPLY_TO_NODE_ID]
The fetch-content output for discussion_comment includes comment_node_id and discussion_node_id for these commands. When the original discussion comment was a reply, it also includes reply_to_node_id; pass that optional third argument so the redacted replacement stays in the original thread.
The recreated comment should follow this format:
> **Note:** The original comment by @<AUTHOR> has been removed due to secret leakage. Below is the redacted version of the original content.
---
<redacted original content>
issue_body / pull_request_body — Cannot Purge Edit History
Editing creates an edit history revision with the pre-edit plaintext. This cannot be cleared via API.
Do not advise authors publicly to delete/recreate issues or close/reopen PRs. That can draw attention to historical content. Keep purge guidance maintainer-only.
Output to maintainer terminal only (never in public comments):
⚠️ Issue/PR body edit history still contains plaintext secrets.
Contact GitHub Support to purge: https://support.github.com/contact
Request purge of issue/PR #{NUMBER} userContentEdits.
CRITICAL: Do NOT mention edit history or the "edited" button in any public comment or resolution_comment.
Commits
Cannot clean. Notify author to delete branch or force-push (for unmerged PRs).
Step 5: Notify
node secret-scanning.mjs notify <TARGET> <AUTHOR> <LOCATION_TYPE> <SECRET_TYPES> [REPLY_TO_NODE_ID|BODY_REDACTION_RESULT_FILE]
- For non-discussion types,
<TARGET>is the issue/PR number. - For
discussion_comment,<TARGET>is thediscussion_node_idreturned byfetch-content. - For reply-style
discussion_commentlocations, pass the optionalreply_to_node_idfromfetch-contentso the notification stays in the same thread. - For
issue_bodyandpull_request_body, pass the<result-file>fromredact-body-if-needed. The script skips notification whennotify_requiredisfalseand refuses body notifications without this file.
Secret types are comma-separated: "Discord Bot Token,Feishu App Secret"
The script picks the right template:
- comment types: "your comment … removed and replaced"
- body types: "your issue/PR description … redacted in place"
- commit: "code you committed"
For issue_body and pull_request_body, only notify when the current body still contained plaintext and maintainers redacted it. If the user already redacted the current body, skip this step and resolve silently.
Step 6: Resolve
node secret-scanning.mjs resolve <ALERT_NUMBER>
# or with custom resolution:
node secret-scanning.mjs resolve <ALERT_NUMBER> revoked "Custom comment"
Resolution is revoked by default. As maintainers we cannot control whether users rotate — our responsibility is to remove current plaintext exposure and notify only when public notification is useful. The revoked means "this secret should be considered leaked", not "I confirmed it was revoked".
Step 7: Summary
After processing, create a JSON results file and pass it to the summary command:
node secret-scanning.mjs summary /tmp/results.json
The script outputs a block delimited by ---BEGIN SUMMARY--- and ---END SUMMARY---. You MUST output the content between these markers verbatim to the user. Do NOT rephrase, reformat, abbreviate, or create your own summary. The script already includes full URLs for every alert and location.
The JSON format:
[
{
"number": 72,
"secret_type": "Discord Bot Token",
"location_label": "Issue #63101 comment",
"location_url": "https://github.com/openclaw/openclaw/issues/63101#issuecomment-xxx",
"actions": "Deleted+Recreated+Notified",
"history_cleared": true
}
]
For unsupported types, add "skipped": true, "unsupported_type": "<type>".
Safety Rules
- Agent reads content, identifies secrets, produces redaction. Script handles all API calls.
- Never include any portion of a secret in public comments, redaction markers, or terminal output.
- Never include alert URLs or numbers in public comments.
- For comments, skip PATCH — go directly to DELETE + recreate.
- Never mention edit history, "edited" button, or commit SHAs in any public content.
- Ask for confirmation before deleting any comment.
- One alert at a time unless user requests batch.
- All public comments in English.
- Skip unsupported location types and report in summary.
Frequently asked questions about OpenClaw Secret Scanning Maintainer
Similar skills
Secret Scanning
Protect your code by preventing secret leaks.
MCP Security Audit
Ensure your MCP configurations are secure and compliant.
iMessage Access Management
Control access to your iMessage channel securely.
Implementing Secret Scanning with Gitleaks
Automate detection of hardcoded secrets in git repositories.
Secrets Vault Manager
Manage and secure your secret infrastructure efficiently.
AWS Secrets Manager
Safely manage secrets without exposing plaintext values.
