Skip to content
cccskills
FreePublished on GitHubEnglish overview

openclaw-secret-scanning-maintainer

Process OpenClaw GitHub Secret Scanning alerts, which flag exposed credentials. Inspect affected content, redact secrets, replace comments when needed, notify authors, and resolve alerts using a dedicated script under maintainer permissions.

OriginalShow the original description

Triage, redact, clean up, and resolve OpenClaw GitHub Secret Scanning alerts in issues or PRs.

Works withDiscordGitHub
AI rating70/ 100See how to install

Good for

  • Investigating locations flagged for exposed credentials
  • Redacting secrets in issue or pull request descriptions
  • Deleting and recreating comments containing secrets
  • Processing multiple alerts and summarizing results

Overview

What it does

Handles exposed credentials and other secrets detected by OpenClaw GitHub Secret Scanning. The agent reads the affected content and replaces each secret with a complete redaction. The included secret-scanning.mjs script retrieves and updates content, edits descriptions, deletes and recreates comments, notifies authors, and resolves alerts.

When it helps

Use it when secrets remain in comments or descriptions associated with issues, PRs, or Discussions. It handles one or several alerts, choosing the procedure according to the location type. If the current description is already redacted, it also provides a procedure for resolving the alert without adding a public notification.

Example requests

  • “Check the content linked to this alert and redact any remaining secrets.”
  • “Process these alerts and summarize the results.”

Notes

Requires repository admin or maintainer permissions and the included Node.js script. It asks for confirmation before deleting comments. Public notifications and replacement comments are in English. Issue and PR description edit histories cannot be removed through the API; removing them requires contacting GitHub Support. For commits, it only notifies the author; unsupported location types are skipped. Resolving an alert as revoked does not mean the credential has been confirmed invalidated.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Objective evaluation

AI rated this skill on four points using only the contents of its SKILL.md. Stars and popularity are not taken into account.

Clear instructionsIs it clear when to use it and what it does?
AGoodIt identifies the target Secret Scanning page and specifies how each location type is handled.
Concrete stepsAre steps, inputs, outputs, and examples spelled out?
AGoodIt gives steps from retrieval through resolution and reporting, with commands and a defined redaction format.
SafetyAre sending data, deleting files, and running commands disclosed?
CCheck firstThe comment deletion procedure does not include confirmation before execution.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingAdmin permissions and the Node.js script are identified, but authentication setup is not described.

The total counts each point as A = 25, B = 15, C = 5. Rated by AI (OpenAI Codex) as of Oct 19, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (2)

  • SKILL.md9.8 KB
  • scripts/secret-scanning.mjs25.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

OpenClaw 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=true on all alert fetches (no plaintext secrets in stdout)
  • mktemp with random UUIDs for all temp files
  • -F body=@file for all body uploads (no inline shell quoting)
  • Notification templates branched by location type
  • Never prints .secret or .body to stdout

Overall Flow

Supports single or multiple alerts. For multiple alerts, process in ascending order.

For each alert:

  1. Identify — fetch-alert + fetch-content to get metadata and body
  2. Decide — Agent reads the body file, identifies whether plaintext secrets remain, and produces a redacted version only when needed
  3. Redact — redact-body-if-needed for issue/PR body; skip for comments (delete directly)
  4. Purge — delete-comment + recreate-comment for comments; cannot purge body history
  5. Notify — notify posts the right template per location type, unless the current issue/PR body is already redacted
  6. Resolve — resolve closes the alert
  7. Summary — summary prints 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 content
  • author: who posted it
  • issue_number / pr_number: where it is
  • edit_history_count: number of existing edits
  • type: location type for routing
  • For discussion_comment, it also includes comment_node_id, discussion_node_id, and reply_to_node_id when the original comment was a reply.

Location type routing

typeFlow
issue_commentComment: delete+recreate
pull_request_commentComment: delete+recreate
pull_request_review_commentComment: delete+recreate
discussion_commentDiscussion comment: delete+recreate (GraphQL)
issue_bodyBody: redact in place
pull_request_bodyBody: redact in place
commitNotify only
otherSkip and report

Step 2: Decide (Agent)

The agent reads the body file from fetch-content output and:

  1. Identifies ALL secrets in the content (there may be more than the alert flagged)
  2. Determines whether any plaintext credential remains in the current body
  3. Replaces each remaining secret with [REDACTED <secret_type>] — no partial values, no prefix/suffix
  4. 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 the discussion_node_id returned by fetch-content.
  • For reply-style discussion_comment locations, pass the optional reply_to_node_id from fetch-content so the notification stays in the same thread.
  • For issue_body and pull_request_body, pass the <result-file> from redact-body-if-needed. The script skips notification when notify_required is false and 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.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

1password

FreeSummary

Set up and authenticate the 1Password CLI, then supply stored passwords and API keys to commands or configuration. The skill covers desktop integration, service accounts, and interactive sign-in while keeping secrets out of chat and logs.

  • Setting up the 1Password CLI
  • Supplying API keys to commands
  • Using service account authentication in CI
openclaw/openclaw392.4KUpdated Oct 18, 2026

acp-router

FreeSummaryAI rating 80

Route requests from OpenClaw to external coding agents such as Claude Code or Cursor. Start or continue sessions using ACP, a protocol for connecting agents, or relay prompts directly through acpx while preserving conversation context.

  • Starting a Claude Code session in a thread
  • Continuing work with an external coding agent
  • Relaying prompts directly through acpx
openclaw/openclaw392.4KUpdated Oct 18, 2026

Add a model provider to OpenClaw and verify it with a real response. The skill validates configuration, keeps credentials in environment or file references, and reports test results and any default model changes.

  • Adding a model provider to OpenClaw
  • Configuring credentials through environment or file references
  • Checking whether a model returns a real response
openclaw/openclaw392.4KUpdated Oct 18, 2026

agent-transcript

FreeSummary

Prepare an agent activity transcript for a GitHub pull request or issue. Extract relevant prompts, decisions, and results from local logs, remove sensitive material, and preview the edited record before separately authorized publication.

  • Preparing an agent activity record for a pull request
  • Extracting task-relevant prompts and results from local logs
  • Previewing a transcript with sensitive information removed
openclaw/openclaw392.4KUpdated Oct 18, 2026

apple-notes

FreeSummary

Manage Apple Notes on macOS through memo, a command-line tool. Create, browse, search, edit, delete, and move notes between folders, or export selected notes to HTML or Markdown for use outside the app.

  • Creating notes with titles
  • Finding notes by folder or approximate search
  • Editing notes and organizing them into folders
openclaw/openclaw392.4KUpdated Oct 18, 2026

apple-reminders

FreeSummaryAI rating 70

Manage Apple Reminders from your Mac with remindctl, a terminal tool. View tasks by date, add or edit reminders, organize lists, and mark tasks complete or delete them, including personal to-dos that sync to iOS.

  • Review today’s tasks and overdue reminders
  • Add personal to-dos with due dates
  • Organize tasks visible on an iPhone or iPad
openclaw/openclaw392.4KUpdated Oct 18, 2026

See all skills by openclaw

Report a problem with this skill