跳到正文
cccskills
免费在 GitHub 公开中文介绍

openclaw-secret-scanning-maintainer

处理OpenClaw的GitHub Secret Scanning警报,检查凭据泄露位置,遮盖正文中的机密信息,删除并重建评论,通知作者并完成警报处理。

原文查看原文说明

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

集成工具DiscordGitHub
AI 评分70分/ 100查看安装方法

适用场景

  • 查找凭据泄露的位置
  • 遮盖Issue和PR正文中的机密信息
  • 删除并重建含有机密信息的评论
  • 批量处理警报并整理结果

中文介绍

功能

处理OpenClaw的GitHub Secret Scanning检测到的凭据等机密信息泄露。代理读取相关内容,将机密信息完整替换为遮盖标记。附带的secret-scanning.mjs负责获取和更新内容,修改正文、删除并重建评论、通知作者以及解决警报。

适用场景

适合处理Issue、PR、Discussion的评论或说明中残留的机密信息。支持单个或多个警报,并根据泄露位置的类型选择处理方式。如果当前正文已完成遮盖,也提供不发布公开通知、直接解决警报的流程。

使用示例

  • “检查这条警报对应的内容,遮盖残留的机密信息。”
  • “处理指定的多条警报,并汇总结果。”

注意事项

需要管理员或维护者权限,以及通过Node.js运行的附带脚本。删除评论前会请求确认。公开通知和重建的评论使用英语。Issue和PR正文的编辑历史无法通过API清除,需联系GitHub Support。对于提交,仅通知作者;不支持的类型会跳过。将警报标记为revoked并解决,不代表已确认相关凭据失效。

本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。

客观评估

AI 仅根据 SKILL.md 的内容,从 4 个方面进行了评估。星标数和热度不计入评估。

指令清晰度能否看出何时使用、做什么
A良好明确指定目标Secret Scanning页面及各位置类型的处理方式。
步骤具体性步骤、输入输出和示例是否具体
A良好列出从获取到解决、汇总的步骤、命令及遮盖格式。
安全性发送数据、删除文件、执行命令等是否有说明
C需确认评论删除流程未规定执行前的确认步骤。
安装难易度所需工具和 API 密钥是否少且有说明
B部分不足说明了管理员权限和Node.js脚本,但未提供认证配置步骤。

总分按每项 A=25 分、B=15 分、C=5 分相加。 由 AI(OpenAI Codex)于 2026年10月19日 评估。仅供参考,安装前请同时查看原文。

如果您认为评估有误,请申请复核

请写明哪一项有误以及原因。无需登录。我们会对照 SKILL.md 重新评估,并在此处更新结果。

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

包含的文件(2)

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

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

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.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

1password

免费

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/openclaw39.2万2026年10月18日 更新

acp-router

免费有简介AI 评分 80分

将提交给OpenClaw的自然语言请求转交给Claude Code等外部编程智能体,通过ACP或acpx启动、继续会话,并保留对话上下文。

  • 在讨论串中启动Claude Code
  • 继续外部智能体的现有工作
  • 通过acpx直接传递指令
openclaw/openclaw39.2万2026年10月18日 更新

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/openclaw39.2万2026年10月18日 更新

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/openclaw39.2万2026年10月18日 更新

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/openclaw39.2万2026年10月18日 更新

apple-reminders

免费有简介AI 评分 70分

通过Mac查看、添加和编辑Apple Reminders中带截止时间的待办事项,管理列表并完成或删除任务,整理在iPhone或iPad上查看的个人任务。

  • 查看今天和已逾期的任务
  • 添加带截止日期的个人待办事项
  • 整理iPhone或iPad上的任务
openclaw/openclaw39.2万2026年10月18日 更新

查看 openclaw 的全部技能

报告此技能的问题