본문으로 건너뛰기
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로 경고를 해결해도 인증 정보의 폐기를 확인했다는 뜻은 아닙니다.

이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.

객관 평가

AI가 SKILL.md의 내용만을 근거로 4가지 관점에서 판정했습니다. 스타 수나 인기도는 판정에 넣지 않았습니다.

지시의 명확성언제 쓰고 무엇을 하는지 알 수 있는가
A양호대상 Secret Scanning 페이지와 위치 유형별 처리 방식을 명시합니다.
절차의 구체성절차·입출력·예시가 구체적으로 적혀 있는가
A양호조회부터 해결과 집계까지의 절차, 명령어, 가림 표시 형식을 제시합니다.
안전성전송·삭제·명령 실행 등을 명시하고 있는가
C확인 필요댓글 삭제 절차에 실행 전 확인 단계가 명시되어 있지 않습니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
B일부 부족관리자 권한과 Node.js 스크립트는 제시하지만 인증 설정 절차는 없습니다.

총점은 각 항목을 A=25점, B=15점, C=5점으로 더한 값입니다. 2026년 10월 19일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

평가가 다르다고 생각되면 재검토를 요청하기

어느 항목이 왜 다르다고 생각하는지 적어 주세요. 로그인은 필요 없습니다. SKILL.md와 대조해 평가를 다시 만들고 이곳에 반영합니다.

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

포함된 파일(2)

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

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

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 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

1password

무료요약 있음AI 평가 100점

1Password 명령줄 도구의 설치와 인증을 확인하고 저장된 비밀번호와 API 키를 명령이나 설정에 전달합니다. 데스크톱 앱 연동과 서비스 계정도 지원합니다.

  • 1Password 명령줄 도구 설치
  • API 키를 명령에 전달
  • 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-model-provider

무료요약 있음AI 평가 100점

OpenClaw에 모델 제공업체를 추가하고 실제 응답을 확인합니다. 인증 정보는 환경 변수나 파일 참조로 다루며 설정 검증과 결과 보고도 진행합니다.

  • OpenClaw에 모델 제공업체 추가하기
  • 인증 정보를 참조 방식으로 설정하기
  • 모델의 실제 응답 확인하기
openclaw/openclaw39.2만2026년 10월 18일 업데이트

agent-transcript

무료요약 있음AI 평가 90점

AI 에이전트의 작업 로그를 GitHub PR이나 이슈에 첨부할 기록으로 정리합니다. 관련 내용을 추리고 민감한 정보를 제거해 미리 보며, 별도 승인을 받아 게시합니다.

  • PR에 첨부할 에이전트 작업 기록 작성
  • 로컬 로그에서 관련 요청과 결과 추출
  • 민감한 정보를 제거한 기록 미리 보기
openclaw/openclaw39.2만2026년 10월 18일 업데이트

apple-notes

무료요약 있음AI 평가 100점

에이전트에서 macOS의 Apple Notes 메모를 생성, 검색, 편집, 삭제합니다. 폴더 간 이동과 HTML 또는 Markdown 내보내기도 지원합니다.

  • 제목을 지정해 메모를 만듭니다
  • 폴더 지정이나 유사 검색으로 메모를 찾습니다
  • 메모를 편집하고 폴더별로 정리합니다
openclaw/openclaw39.2만2026년 10월 18일 업데이트

apple-reminders

무료요약 있음AI 평가 70점

Mac에서 Apple Reminders의 기한이 있는 할 일을 확인하고 추가·편집합니다. 목록 관리와 완료·삭제를 통해 iPhone이나 iPad에서 보는 작업을 정리합니다.

  • 오늘 할 일과 기한이 지난 작업 확인
  • 기한이 있는 개인 할 일 추가
  • iPhone과 iPad에서 보는 작업 정리
openclaw/openclaw39.2만2026년 10월 18일 업데이트

openclaw의 스킬 모두 보기

이 스킬의 문제 신고