1Password 명령줄 도구의 설치와 인증을 확인하고 저장된 비밀번호와 API 키를 명령이나 설정에 전달합니다. 데스크톱 앱 연동과 서비스 계정도 지원합니다.
- 1Password 명령줄 도구 설치
- API 키를 명령에 전달
- CI에서 서비스 계정 인증 사용
OpenClaw의 GitHub Secret Scanning 경고를 조사하고 비밀 정보를 가립니다. 댓글 삭제와 재작성, 작성자 알림, 경고 처리를 진행합니다.
Triage, redact, clean up, and resolve OpenClaw GitHub Secret Scanning alerts in issues or PRs.
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=25점, B=15점, C=5점으로 더한 값입니다. 2026년 10월 19일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
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.
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).secret or .body to stdoutSupports single or multiple alerts. For multiple alerts, process in ascending order.
For each alert:
fetch-alert + fetch-content to get metadata and bodyredact-body-if-needed for issue/PR body; skip for comments (delete directly)delete-comment + recreate-comment for comments; cannot purge body historynotify posts the right template per location type, unless the current issue/PR body is already redactedresolve closes the alertsummary prints formatted results# 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 routingdiscussion_comment, it also includes comment_node_id, discussion_node_id, and reply_to_node_id when the original comment was a reply.| 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 |
The agent reads the body file from fetch-content output and:
[REDACTED <secret_type>] — no partial values, no prefix/suffixThis 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.
Do NOT redact. Skip directly to Step 4 (delete + recreate). PATCHing before DELETE creates an unnecessary edit history revision.
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.
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>
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.
Cannot clean. Notify author to delete branch or force-push (for unmerged PRs).
node secret-scanning.mjs notify <TARGET> <AUTHOR> <LOCATION_TYPE> <SECRET_TYPES> [REPLY_TO_NODE_ID|BODY_REDACTION_RESULT_FILE]
<TARGET> is the issue/PR number.discussion_comment, <TARGET> is the discussion_node_id returned by fetch-content.discussion_comment locations, pass the optional reply_to_node_id from fetch-content so the notification stays in the same thread.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:
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.
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".
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>".
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
1Password 명령줄 도구의 설치와 인증을 확인하고 저장된 비밀번호와 API 키를 명령이나 설정에 전달합니다. 데스크톱 앱 연동과 서비스 계정도 지원합니다.
OpenClaw에 전달한 자연어 요청을 Claude Code 같은 외부 코딩 에이전트로 연결합니다. ACP나 acpx로 작업을 시작하거나 이어가며 대화 맥락을 유지합니다.
OpenClaw에 모델 제공업체를 추가하고 실제 응답을 확인합니다. 인증 정보는 환경 변수나 파일 참조로 다루며 설정 검증과 결과 보고도 진행합니다.
AI 에이전트의 작업 로그를 GitHub PR이나 이슈에 첨부할 기록으로 정리합니다. 관련 내용을 추리고 민감한 정보를 제거해 미리 보며, 별도 승인을 받아 게시합니다.
에이전트에서 macOS의 Apple Notes 메모를 생성, 검색, 편집, 삭제합니다. 폴더 간 이동과 HTML 또는 Markdown 내보내기도 지원합니다.
Mac에서 Apple Reminders의 기한이 있는 할 일을 확인하고 추가·편집합니다. 목록 관리와 완료·삭제를 통해 iPhone이나 iPad에서 보는 작업을 정리합니다.