redact-for-public-disclosure
정보
이 스킬은 리버스 엔지니어링 결과물을 공개하기 전에 민감한 세부 정보를 체계적으로 편집하는 방법을 제공합니다. 여기에는 방법론과 교육적 가치를 유지하면서 정보 유출을 방지하기 위한 비공개/공개 저장소 분리, 차단 목록 관리, CI 검사와 같은 패턴이 포함됩니다. 타사 도구에 대한 연구를 발표하거나 비공개 조사 저장소에서 공개 아카이브를 준비할 때 사용하세요.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/redact-for-public-disclosureClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
公開揭露之刪修
藉刪修檢核器、模式拒絕清單與孤立提交發布模式,將逆向工程之研究倉庫切分為私有真相源與公開揭露子集。方法可遠行;具體發現留為私有。
適用時機
- 發布有關所整合之封閉源 CLI 平台之方法論發現
- 為非己有之項目擬上游提案或缺陷報告
- 將私有研究倉庫存檔為公開參照
- 將調查筆記(第 1-4 階段成果)擢升為公開指南
- 於發現累積之前確立發布管線,使洩漏風險不致堆積
- 草稿幾將敏感識別符出貨之險後加以善後
輸入
- 必要:含混合敏感性內容之私有研究倉庫(真相源)
- 必要:目標公開鏡像(獨立倉庫,或一
public/工作樹),刪修後內容將於此發布 - 選擇性:擬發布之既有草稿
- 選擇性:版本滯後策略(預設為「當前加先前一版維持私有」)
- 選擇性:已知敏感之供應商識別符、旗標前綴或命名空間清單
步驟
步驟一:將每候選事實分類
書寫或擢升任何內容前,先將每事實分入下列四類之一。類別決定其能否與何時出貨。
| 類別 | 定義 | 可分享? |
|---|---|---|
| 方法論 | 調查之如何,與任何具體發現獨立 | 永遠可 |
| 通用模式 | 類層次之觀察(如「平台常用單前綴旗標命名空間」) | 可 |
| 版本特定發現 | 繫於特定發行之具體觀察(如「於 vN.M,閘預設關閉」) | 唯版本滯後冷卻期後可 |
| 現行內部 | 縮寫名、位元組偏移、暗旗標名、當前版本之閘邏輯、PRNG/鹽常數、內部代號 | 永不可 |
於檢視擬發布之前,標註每草稿段、捕獲日誌或筆記之類別。混雜類別之段須拆分——方法論可清淨抽出,餘者留私。
預期: 每候選事實皆有類別標籤。擬入公開鏡像之草稿僅含方法論與通用模式條目(外加冷卻期外之版本特定發現)。
失敗時: 若某事實難以分類,預設視為現行內部。唯經對版本滯後策略明確檢視後方得重新分類。
步驟二:制定版本滯後冷卻策略
預先決定「當前」與「可分享」之間隔多少版本。二為典型:當前加先前一版維持私有,更舊之模式可論。將策略寫入私有倉庫(如 REDACTION_POLICY.md),免得日後重新推導。
# Redaction Policy
Version-lag cool-off: **2 releases**.
- Current release (vN): all version-specific findings PRIVATE.
- Previous release (vN-1): all version-specific findings PRIVATE.
- Releases vN-2 and earlier: version-specific findings may move to public draft after Step 5 review.
Source of truth for "current": output of `monitor-binary-version-baselines`.
Owner: <name>. Reviewed quarterly.
「當前」版本須為實證的(自所裝二進位讀取),非行政的。將策略繫於基線掃描器輸出而非繫於日曆。
預期: 私有倉庫中已提交之 REDACTION_POLICY.md,含明確冷卻期與負責人。
失敗時: 若利害關係人無法就冷卻期達成共識,預設取最保守之提案。冷卻期可日後縮短;洩漏不可召回。
步驟三:建立拒絕清單掃描器
於單一可執行腳本中維護模式,使其為刪修策略之真相源。腳本居私有倉庫(tools/check-redaction.sh)並對公開鏡像運行。
#!/usr/bin/env bash
set -u
PUBLIC_REPO="${1:-./public}"
LEAKS=0
PATTERNS=(
"minified identifier shape|<regex matching short bundle-style identifiers>"
"vendor-prefixed flag|<regex matching the vendor's flag prefix>"
"PRNG/salt constant|<regex matching the specific constants>"
)
for entry in "${PATTERNS[@]}"; do
desc="${entry%%|*}"
pattern="${entry##*|}"
if rg -q "$pattern" "$PUBLIC_REPO"; then
echo "LEAK: $desc"; LEAKS=$((LEAKS+1))
fi
done
exit $LEAKS
每條目有人類可讀標籤與一正則式。每敏感識別符形狀一條目(非每字面字串——形狀經得起版本變動)。退出碼等於洩漏數;潔淨運行退 0。
預期: tools/check-redaction.sh ./public-mirror 於小倉庫上一秒內運行完畢,無匹配時退 0。
失敗時: 若 rg 不可用,退至 grep -rqE。若模式過廣(每次運行皆報洩漏),於源頭收緊而非加抑制。
步驟四:擬稿之前維護拒絕清單
當第 1-4 階段發現可能透過草稿洩漏,於草稿撰寫前擴充掃描器。草稿廉價;教掃描器新模式則持久。
工作流:
- 新發現落入私有倉庫(如新發現之旗標前綴)
- 自問:「此若洩漏,吾欲掃描器捉何物?」
- 加模式條目至
tools/check-redaction.sh(標籤加正則式) - 對整個公開鏡像運行掃描器,確認新模式未已被合法內容絆倒
- 唯然後方擬涉及該領域之公開內容
此倒置慣常順序:掃描器先更新,草稿後撰。掃描器成為「過於敏感不宜發布」之可執行規範,草稿不致無意中超前之。
預期: tools/check-redaction.sh 中之模式條目早於任何可能匹配之公開鏡像內容。git log tools/check-redaction.sh 顯示掃描器更新先於相關草稿提交落地。
失敗時: 若掃描器更新落後於草稿,立即依新模式稽核公開鏡像。先刪修,再提交掃描器更新並加註說明所發現之模式。
步驟五:確立私/公文件集分割
定義明確之允許清單,列載同步至公開鏡像之文件。新文件預設為私;擢升須過刪修檢核。
# tools/public-allowlist.txt
README.md
LICENSE
guides/methodology-overview.md
guides/category-classification.md
docs/contributing.md
tools/sync-to-public.sh 讀取允許清單,僅將該等文件複製至公開鏡像,並於允許清單引用不存在文件時退非零碼(捉錯字)。
#!/usr/bin/env bash
set -eu
PRIVATE_ROOT="${1:?private repo path required}"
PUBLIC_ROOT="${2:?public mirror path required}"
ALLOWLIST="$PRIVATE_ROOT/tools/public-allowlist.txt"
while IFS= read -r path; do
[ -z "$path" ] && continue
case "$path" in \#*) continue ;; esac
src="$PRIVATE_ROOT/$path"
dst="$PUBLIC_ROOT/$path"
if [ ! -e "$src" ]; then
echo "MISSING: $path"; exit 2
fi
mkdir -p "$(dirname "$dst")"
cp -a "$src" "$dst"
done < "$ALLOWLIST"
擢升須依序具備三事:文件加入允許清單、文件通過刪修檢核、評審確認步驟一之類別標籤。
預期: 公開鏡像所含恰為 tools/public-allowlist.txt 所列之文件。無允許清單外之文件出現於公開鏡像。
失敗時: 若公開鏡像出現允許清單所無之文件,視為洩漏事件——調查其如何到達,繼而或移除之或於刪修評審後正式擢升之。
步驟六:藉孤立提交發布
公開鏡像為單一以 git commit --orphan 為根之提交,每次發布皆重建之。此防公開倉庫之 git log 暴露刪修前之草稿。
# In the public mirror (separate repo or worktree)
cd /path/to/public-mirror
git checkout --orphan publish-tmp
git rm -rf . # Clear the index
# Sync from private using the allow-list
bash /path/to/private/tools/sync-to-public.sh /path/to/private .
git add -A
git commit -m "Publish: <date>"
git branch -D main 2>/dev/null || true
git branch -m main
git push --force origin main
公開倉庫之 git log 恰顯一提交。先前草稿與任何刪修迭代留於私有倉庫之歷史中。公開倉庫上之 git log -p、git reflog 或分支列表皆無法復原刪修前之內容,因其從未提交於彼。
預期: 公開鏡像之 git log --oneline 每次發布顯一提交。無提及私有倉庫歷史之引用(無父 SHA、無合併提交、無自私有倉庫來之標籤)。
失敗時: 若 git push --force 遭拒(分支保護),改自潔淨之孤立分支開單提交拉取請求。切勿藉推送私有歷史以解拒絕。
步驟七:佈署 CI 閘
於公開同步分支之每次提交運行 tools/check-redaction.sh。檢核失敗應阻擋發布而非僅警告。
# .github/workflows/redaction-check.yml (in the public mirror repo)
name: redaction-check
on:
push:
branches: [main, publish-*]
pull_request:
branches: [main]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install ripgrep
run: sudo apt-get update && sudo apt-get install -y ripgrep
- name: Fetch redaction scanner
env:
GH_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}
run: |
gh api repos/<org>/<private-repo>/contents/tools/check-redaction.sh \
--jq .content | base64 -d > check-redaction.sh
chmod +x check-redaction.sh
- name: Run scanner
run: ./check-redaction.sh .
此處有二設計抉擇:
- 掃描器於 CI 時自私有倉庫拉取,使拒絕清單本身永不居公開倉庫(模式本身即敏感——發布之則告讀者該尋何物)
- 任務以掃描器之退出碼退出;非零阻擋工作流
預期: 引入拒絕清單模式之推送將令 CI 失敗;發布不落地。維護者見失敗標籤(如 LEAK: vendor-prefixed flag)而不見正則式本身。
失敗時: 若私有倉庫權杖無法授予公開 CI,於公開倉庫嵌入掃描器之最小洩漏部分(廣形狀模式,本身不識別供應商)並於私有倉庫推送前運行完整掃描器。
步驟八:誠實處置誤報
當掃描器於合法內容上絆倒,宜收緊模式而非加忽略行。帶局部抑制之廣拒絕清單腐爛甚速——半年後無人記得某行為何被抑制,下次洩漏便溜過無覺。
決策樹:
- 此匹配是否實安全? 依步驟一重新分類。若內容實為偽裝之現行內部,刪修之;勿抑制掃描器
- 模式是否過廣? 收緊正則式使安全內容不再匹配。於
check-redaction.sh中以註解記錄收緊,連結觸發此事之案例 - 唯 1、2 皆敗時 ——且模式於結構上與合法內容糾纏太深無從進一步收窄——方用單行抑制,附
# REASON:註解陳述抑制為何安全。註明日期
# Bad — mystery suppression
echo "API endpoint pattern" >> ignore.txt
# Good — narrowed pattern with rationale
# Pattern v2: tightened from `\bgate\(` to `\bgate\(['\"][a-z]+_phase` after
# legitimate `gate(true)` calls in our own SDK examples started matching. 2026-04-15.
PATTERNS+=("vendor flag predicate|\\bgate\\(['\"][a-z]+_phase")
預期: 每掃描器模式有零或一行內註解說明收緊。抑制(若有)皆載日期與緣由。
失敗時: 若抑制累積(每季逾一),拒絕清單之形狀有誤。排定刪修策略檢討,自分類過之事實清單重建模式。
步驟九:定期刪修巡檢
非所有刪修工作皆事件驅動。執定期巡檢(每月為典型),對私有倉庫近期新增重新分類,並對公開鏡像重新運行掃描器。漂移於成事件級之前先自捉。
巡檢清單:
- 重讀版本滯後策略;確認實證「當前」版本未變或更新策略
- 稽核近月之私有倉庫提交,查未經分類之新增發現(步驟一)
- 對公開鏡像運行
tools/check-redaction.sh(應仍退 0) - 檢視自上次巡檢以來新增之掃描器模式——有過廣者否?若有則收緊
- 若任何版本已過冷卻期,識別現可擢升之發現
- 確認
tools/public-allowlist.txt與實際公開鏡像文件集相符
預期: 私有倉庫每月一短巡檢日誌(如 sweeps/2026-04.md),記清單結果與所採行動。
失敗時: 若巡檢屢被略,自動化日曆提醒。若巡檢屢發現同樣漂移,問題在其上游工作流——調查為何擬稿時略過分類。
驗證
- 公開鏡像中每文件皆於
tools/public-allowlist.txt之上 -
tools/check-redaction.sh ./public-mirror退 0 - 公開鏡像之
git log --oneline每次發布顯一孤立提交 -
REDACTION_POLICY.md存於私有倉庫,附明確之版本滯後冷卻期 - 每第 1-4 階段發現皆有類別標籤(方法論/通用模式/版本特定/現行內部)
- 公開 CI 於每次推送運行掃描器;故意之測試模式令構建失敗
- 拒絕清單掃描器本身不居公開倉庫
- 最近月份之巡檢日誌日期於近 35 日內
常見陷阱
- 「就一例以使具體」:欲含一具體發現「以立基方法論」之誘惑乃最常見之洩漏路徑。應用合成佔位符(如
acme_widget_v3、widget_handler_42)——明顯杜撰,永不可追溯至真產品 - 以
git rebase或git filter-branch在公開倉庫上原地擦除洩漏:強推改寫之歷史仍於克隆與分叉中留痕。孤立提交發布模式為結構性修復;臨時改寫歷史則否 - 以抑制代收緊模式:含二十抑制之掃描器即無有意義覆蓋之掃描器。每抑制即未來等待脈絡褪去之洩漏
- 公開 CI 警告而非失敗:警告必被忽。CI 閘須阻擋發布(非零退出,無合併鈕)
- 允許清單漂移:私有倉庫新增之文件並非自動屬於允許清單。預設拒絕為唯一安全姿態
- 誤以加密為刪修:將敏感識別符編碼、雜湊或 rot13 後發布結果,仍是發布之——原文可復原。刪修意為「全然不出現」
- 發布拒絕清單:模式本身為發現目錄:見正則式之讀者即知該於二進位中 grep 何物。掃描器宜私;公開 CI 日誌中僅其標籤(如
LEAK: vendor-prefixed flag)可現 - 將私有倉庫視為草稿堆:其乃研究之真相源,非草稿空間。應施與生產製品相同之版本化、評審與備份紀律
相關技能
monitor-binary-version-baselines— 第一階段,基線供版本滯後策略:何為「當前」乃實證事實,非日曆事實probe-feature-flag-state— 第二、三階段,分類之發現於類別步驟(步驟一)入刪修管線conduct-empirical-wire-capture— 第四階段,捕獲成果(線報日誌、有效負載結構)於可公開引用前皆須刪修security-audit-codebase— 兩條管線皆得益於拒絕清單式掃描;本技能專注於研究揭露而非機密洩漏manage-git-branches— 孤立提交發布模式乃分支操作;安全執行需所載分支衛生實踐
GitHub 저장소
연관 스킬
himalaya-email-manager
커뮤니케이션이 Claude Skill은 IMAP을 통해 Himalaya CLI 도구를 이용한 이메일 관리를 가능하게 합니다. 개발자들이 자연어 쿼리로 IMAP 계정의 이메일을 검색하고, 요약하고, 삭제할 수 있게 해줍니다. 일일 요약 수신이나 Claude에서 직접 배치 작업 수행과 같은 자동화된 이메일 워크플로우에 활용하세요.
imsg
커뮤니케이션imsg는 macOS용 CLI 도구로, Messages.app을 통해 iMessage/SMS와 프로그래밍 방식으로 상호작용할 수 있게 해줍니다. 이 도구를 사용하면 개발자가 채팅 목록을 확인하고, 메시지 기록을 조회하며, 대화를 실시간으로 모니터링하고, 메시지나 첨부 파일을 보낼 수 있습니다. 이 스킬을 활용하여 메시징 작업을 자동화하거나 개발 워크플로우에 iMessage/SMS 기능을 통합해 보세요.
internationalization-i18n
커뮤니케이션이 Claude Skill은 애플리케이션에 국제화(i18n)와 현지화를 구현하기 위한 포괄적인 지침을 제공합니다. i18next 및 gettext와 같은 라이브러리를 활용하여 메시지 추출, 번역 관리, 로케일별 형식 지정, RTL(오른쪽에서 왼쪽) 지원 등 주요 작업을 다룹니다. 다국어 애플리케이션을 구축하거나 국제 사용자를 위한 현지화 기능을 추가할 때 활용하세요.
wacli
커뮤니케이션wacli는 WhatsApp Web 프로토콜을 통해 WhatsApp 메시징, 검색 및 동기화를 가능하게 하는 명령줄 도구입니다. 주로 Clawdis 워크플로우 내에서 자동화 처리를 위해 사용되지만, 메시지 전송, 채팅 동기화 또는 기록 조회를 위해 직접 호출할 수도 있습니다. 주요 기능으로는 QR 기반 인증, 지속적인 백그라운드 동기화, 텍스트 및 파일 전송 기능이 포함됩니다.
