Communityコーディング&開発github.com

OpenClaw シークレットスキャニング保守管理

OpenClaw GitHub シークレットスキャニングのアラートをトリアージ、編集、削除、解決します。Issue や PR 内の機密情報を処理します。

OpenClaw シークレットスキャニング保守管理 とは?

このスキルは、OpenClaw リポジトリの GitHub シークレットスキャニングで検出されたアラートを管理・解決するためのものです。リポジトリのメンテナー権限が必要で、シークレット漏洩が含まれる Issue/PR コメントやボディを特定し、編集、削除、再作成といった一連の処理を自動化します。スクリプトベースで動作し、すべての API 呼び出しとファイル操作は安全に行われ、機密情報が標準出力に漏れないよう `hide_secret=true` などが強制されます。エージェントはコンテンツを読み取り、残っているプレーンテキストのシークレットを特定した上で、`[REDACTED <secret_type>]` 形式に置き換えた編集バージョンを作成します。その後、コメントは削除+再作成、Issue/PR ボディはその場で編集され、必要に応じて通知が投稿されます。最後にアラートが解決され、結果がサマリーとして出力されます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/clawdbot/clawdbot/tree/main/.agents/skills/openclaw-secret-scanning-maintainer

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

OpenClaw シークレットスキャニング保守管理 は何をしますか?

メンテナー専用。 このスキルを使用するには、リポジトリの管理者/メンテナー権限が必要です。他のユーザーのコメントを編集・削除したり、シークレットスキャニングアラートを解決したりできます。

このスキルは、https://github.com/openclaw/openclaw/security/secret-scanning からのアラートを処理する際に使用します。

言語ルール: すべての通知コメントおよび置き換えコメントは英語で記述する必要があります。

スクリプト

すべての機械的操作(API 呼び出し、一時ファイル管理、セキュリティ強制)は、以下で処理されます:

$REPO_ROOT/.agents/skills/openclaw-secret-scanning-maintainer/scripts/secret-scanning.mjs

スクリプトは以下を強制します:

  • すべてのアラート取得で hide_secret=true(プレーンテキストのシークレットは標準出力に出力されない)
  • すべての一時ファイルでランダム UUID を使用した mktemp
  • すべてのボディアップロードで -F body=@file(インラインシェルクォーティング禁止)
  • ロケーションタイプ別に分岐する通知テンプレート
  • .secret や .body を標準出力に出力しない

全体的な流れ

単一または複数のアラートをサポートします。複数のアラートの場合は、昇順で処理します。

各アラートに対して:

  1. 特定 — fetch-alert + fetch-content でメタデータとボディを取得
  2. 判断 — エージェントがボディファイルを読み取り、プレーンテキストのシークレットが残っているか特定し、必要な場合にのみ編集バージョンを作成
  3. 編集 — Issue/PR ボディの場合は redact-body-if-needed、コメントの場合はスキップ(直接削除)
  4. 削除 — コメントの場合は delete-comment + recreate-comment(ボディの編集履歴は削除不可)
  5. 通知 — 現在の Issue/PR ボディがすでに編集されていない限り、notify がロケーションタイプに応じた適切なテンプレートを投稿
  6. 解決 — resolve でアラートをクローズ
  7. サマリー — summary でフォーマットされた結果を出力

ステップ 1: 特定

# すべてのオープンアラートを一覧表示
node secret-scanning.mjs list-open

# 特定のアラートのメタデータ+ロケーションを取得
node secret-scanning.mjs fetch-alert <NUMBER>

# 各ロケーションのコンテンツを取得(ボディを一時ファイルに保存)
node secret-scanning.mjs fetch-content '<location-json>'

fetch-content の出力には以下が含まれます:

  • body_file: 完全なボディコンテンツが保存された一時ファイルへのパス
  • author: 投稿者
  • issue_number / pr_number: 存在する場所
  • edit_history_count: 既存の編集回数
  • type: ルーティング用のロケーションタイプ
  • discussion_comment の場合、元のコメントが返信だった場合には comment_node_id、discussion_node_id、reply_to_node_id も含まれます。

ロケーションタイプのルーティング

タイプフロー
issue_commentコメント:削除+再作成
pull_request_commentコメント:削除+再作成
pull_request_review_commentコメント:削除+再作成
discussion_commentディスカッションコメント:削除+再作成 (GraphQL)
issue_bodyボディ:その場で編集
pull_request_bodyボディ:その場で編集
commit通知のみ
その他スキップして報告

ステップ 2: 判断(エージェント)

エージェントは fetch-content の出力からボディファイルを読み取り、以下の処理を行います:

  1. コンテンツ内のすべてのシークレットを特定(アラートでフラグされたもの以外も含む可能性あり)
  2. 現在のボディにプレーンテキストの認証情報が残っているか判断
  3. 残っている各シークレットを [REDACTED <secret_type>] に置き換え — 部分的な値やプレフィックス/サフィックスは含めない
  4. 編集済みコンテンツを新しい一時ファイルに保存

これは意味理解が必要な唯一のステップです。それ以外はすべて機械的です。

issue_body および pull_request_body の場合:現在のボディがすでに作者によって編集され、プレーンテキストの認証情報が残っていない場合は、公開通知コメントを投稿しないでください。これにより、過去の機密コンテンツへの新たな公開ポインタが作成されるのを防ぎます。その編集を個別に記録し、ステップ 6 で証拠がアラートの解決をサポートしているかどうかを判断します。

ステップ 3: 編集

コメントの場合(issue_comment / PR コメント)

編集しないでください。 直接ステップ 4(削除+再作成)にスキップします。DELETE の前に PATCH すると、不要な編集履歴リビジョンが作成されます。

Issue ボディ / Pull Request ボディの場合

node secret-scanning.mjs redact-body-if-needed <issue|pr> <NUMBER> <current-body-file> <redacted-body-file> <result-file>

fetch-content の body_file を <current-body-file> として使用します。このコマンドは <result-file> に notify_required を書き込み、編集済みファイルが現在のボディと異なる場合にのみ PATCH でボディを更新します。

ステップ 4: 編集履歴の削除

コメント — 削除と再作成

Issue/PR コメントの場合:

# オリジナルを削除(すべての編集履歴が消える)
node secret-scanning.mjs delete-comment <COMMENT_ID>

# 編集済みコンテンツで再作成
node secret-scanning.mjs recreate-comment <ISSUE_NUMBER> <body-file>

ディスカッションコメントの場合(GraphQL を使用):

# オリジナルを削除
node secret-scanning.mjs delete-discussion-comment <COMMENT_NODE_ID>

# 編集済みコンテンツで再作成
node secret-scanning.mjs recreate-discussion-comment <DISCUSSION_NODE_ID> <body-file> [REPLY_TO_NODE_ID]

discussion_comment の fetch-content 出力には、これらのコマンド用の comment_node_id と discussion_node_id が含まれます。元のディスカッションコメントが返信だった場合には reply_to_node_id も含まれるため、そのオプションの第3引数を渡して、編集済みの置き換えが元のスレッドに残るようにします。

再作成されるコメントは、以下の形式に従う必要があります:

> **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 ボディ / Pull Request ボディ — 編集履歴の削除不可

編集により、編集前のプレーンテキストを含む編集履歴リビジョンが作成されます。これは API 経由では消去できません。

公開コメントで作者に Issue の削除/再作成や PR のクローズ/再オープンを勧めないでください。過去のコンテンツに注目を集める可能性があります。削除ガイダンスはメンテナー専用にしてください。

メンテナー端末のみに出力(公開コメントには絶対に出力しない):

⚠️ Issue/PR ボディの編集履歴には、まだプレーンテキストのシークレットが含まれています。
GitHub サポートに連絡して削除を依頼してください:https://support.github.com/contact
Issue/PR #{NUMBER} の userContentEdits の削除をリクエストしてください。

重要: 公開コメントや解決コメントで、編集履歴や「編集済み」ボタンについて言及しないでください。

コミット

クリーンアップできません。作者にブランチを削除するか、フォースプッシュするように通知します(マージされていない PR の場合)。

ステップ 5: 通知

node secret-scanning.mjs notify <TARGET> <AUTHOR> <LOCATION_TYPE> <SECRET_TYPES> [REPLY_TO_NODE_ID|BODY_REDACTION_RESULT_FILE]
  • ディスカッションタイプ以外の場合、<TARGET> は Issue/PR 番号です。
  • discussion_comment の場合、<TARGET> は fetch-content から返された discussion_node_id です。
  • 返信形式の discussion_comment ロケーションの場合、fetch-content からのオプションの reply_to_node_id を渡して、通知が同じスレッドに残るようにします。
  • issue_body および pull_request_body の場合、redact-body-if-needed からの <result-file> を渡します。スクリプトは、notify_required が false の場合は通知をスキップし、このファイルなしではボディ通知を拒否します。

シークレットタイプはカンマ区切り:"Discord Bot Token,Feishu App Secret"

スクリプトは適切なテンプレートを選択します:

  • コメントタイプ: 「your comment … removed and replaced」
  • ボディタイプ: 「your issue/PR description … redacted in place」
  • コミット: 「code you committed」

issue_body および pull_request_body の場合、現在のボディにまだプレーンテキストが含まれており、メンテナーが編集した場合のみ通知します。ユーザーがすでに現在のボディを編集している場合、通知をスキップしてステップ 6 に進みます。

ステップ 6: 解決

node secret-scanning.mjs resolve <ALERT_NUMBER> <RESOLUTION> [COMMENT]

証拠とメンテナーの権限によってサポートされる明示的な解決を選択します:

  • revoked: 認証情報の所有者または発行者が失効を確認しました。
  • false_positive: 検出が誤検知であることが確認されました。
  • used_in_tests: 認証情報がテストに使用されたことが確認されました。
  • wont_fix: 権限のあるメンテナーがリスクを受け入れ、是正しないことを決定しました。その決定をコメントに記録します。

編集と認証情報のローテーションリクエストは、失効を確立するものではありません。実証された解決がない場合は、アラートをオープンのままにし、編集と通知の結果を個別に報告します。このコマンドにはデフォルトの解決はなく、解決が指定された場合にのみ解決コメントを追加します。

ステップ 7: サマリー

処理後、JSON 結果ファイルを作成し、サマリーコマンドに渡します:

node secret-scanning.mjs summary /tmp/results.json

スクリプトは、---BEGIN SUMMARY--- と ---END SUMMARY--- で区切られたブロックを出力します。これらのマーカー間のコンテンツをそのままユーザーに出力する必要があります。言い換え、フォーマット変更、省略、独自のサマリー作成はしないでください。 スクリプトは、すべてのアラートとロケーションの完全な URL をすでに含んでいます。

JSON 形式:

[
  {
    "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
  }
]

サポートされていないタイプの場合は、"skipped": true, "unsupported_type": "<type>" を追加します。

安全ルール

  • エージェントがコンテンツを読み取り、シークレットを特定し、編集を作成します。 スクリプトはすべての API 呼び出しを処理します。
  • 公開コメント、編集マーカー、端末出力にシークレットの一部を含めないでください。
  • 公開コメントにアラートの URL や番号を含めないでください。
  • コメントの場合、PATCH はスキップし、直接 DELETE + 再作成を行ってください。
  • 公開コンテンツで編集履歴、「編集済み」ボタン、コミット SHA について言及しないでください。
  • コメントを削除する前に確認を求めてください。
  • ユーザーがバッチを要求しない限り、一度に1つのアラートを処理してください。
  • すべての公開コメントは英語で記述してください。
  • サポートされていないロケーションタイプはスキップし、サマリーで報告してください。

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

acp-router

Route plain-language requests for Claude Code, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI, Grok Build, Qwen, Kiro, Kimi, iFlow, Factory Droid, Kilocode, or explicit ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. Codex chat binding defaults to the native Codex app-server plugin unless ACP is explicit or background spawn needs ACP.

add-model-provider

Add and live-prove a model provider with non-interactive config one-liners, without exposing credentials.

agent-transcript

Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.

apple-notes

Create, view, edit, delete, search, move, or export Apple Notes via the memo CLI on macOS.

apple-reminders

List, add, edit, complete, or delete Apple Reminders and reminder lists via remindctl.

auto-qa

Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.

autoreview

Structured code review through the shared OpenClaw agent-skills installation.

bear-notes

Create, search, and manage Bear notes via grizzly CLI.

blacksmith-testbox

Run Blacksmith Testbox for CI-parity checks, secrets, hosted services, migrations, or builds local cannot reproduce.

block-kit

Use proactively for structured or interactive Slack replies, and when asked to author or validate native Slack Block Kit JSON.

blogwatcher

Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.

blucli

BluOS CLI (blu) for discovery, playback, grouping, and volume.

bluebubbles

Send and manage iMessages via BlueBubbles, including attachments, tapbacks, edits, replies, and groups.

browser-automation

Use when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.

camsnap

Capture frames or clips from RTSP/ONVIF cameras and local webcams, including USB pan/tilt/zoom control.

canvas

Present HTML on connected OpenClaw node canvases, navigate/eval/snapshot, and debug canvas host URLs.

channel-message-flows

Use when running QA Lab channel message flow evidence.

clawdtributor

Clawtributor PRs here, last week or another window: discover conversation refs, recheck GitHub, rank by impact.

clawhub

Search ClawHub for plugins by default, or skills when explicitly requested; install, verify, update, uninstall, publish, or sync skills.

関連スキル