Open-Source Pipeline 技能
透過三階段管線安全地將任何專案開源:Fork(移除機密)→ Sanitize(驗證乾淨)→ Package(產生 CLAUDE.md + setup.sh + README)。
啟用時機
- 使用者說「open source this project」或「make this public」
- 使用者想要將私有儲存庫準備好進行公開發行
- 使用者需要在推送至 GitHub 前移除機密
- 使用者執行
/opensource fork、/opensource verify或/opensource package
指令
| 指令 | 動作 |
|---|---|
/opensource fork PROJECT | 完整管線:fork + sanitize + package |
/opensource verify PROJECT | 對現有儲存庫執行 sanitizer |
/opensource package PROJECT | 產生 CLAUDE.md + setup.sh + README |
/opensource list | 顯示所有暫存專案 |
/opensource status PROJECT | 顯示暫存專案的報告 |
協定
/opensource fork PROJECT
完整管線 — 主要工作流程。
步驟 1:收集參數
解析專案路徑。若 PROJECT 包含 /,則視為路徑(絕對或相對)。否則依序檢查:目前工作目錄、$HOME/PROJECT,然後詢問使用者。
SOURCE_PATH="<解析後的絕對路徑>"
STAGING_PATH="$HOME/opensource-staging/${PROJECT_NAME}"
詢問使用者:
- 「哪個專案?」(若未找到)
- 「授權條款?(MIT / Apache-2.0 / GPL-3.0 / BSD-3-Clause)」
- 「GitHub 組織或使用者名稱?」(預設:透過
gh api user -q .login偵測) - 「GitHub 儲存庫名稱?」(預設:專案名稱)
- 「README 的描述?」(分析專案以取得建議)
步驟 2:建立暫存目錄
mkdir -p $HOME/opensource-staging/
步驟 3:執行 Forker 代理程式
啟動 opensource-forker 代理程式:
Agent(
description="Fork {PROJECT} for open-source",
subagent_type="opensource-forker",
prompt="""
將專案進行分支以進行開源釋出。
來源:{SOURCE_PATH}
目標:{STAGING_PATH}
授權條款:{chosen_license}
遵循完整的分支協定:
1. 複製檔案(排除 .git、node_modules、__pycache__、.venv)
2. 移除所有機密與憑證
3. 將內部參考替換為佔位符
4. 產生 .env.example
5. 清理 Git 歷史
6. 在 {STAGING_PATH}/FORK_REPORT.md 產生 FORK_REPORT.md
"""
)
等待完成。讀取 {STAGING_PATH}/FORK_REPORT.md。
步驟 4:執行 Sanitizer 代理程式
啟動 opensource-sanitizer 代理程式:
Agent(
description="Verify {PROJECT} sanitization",
subagent_type="opensource-sanitizer",
prompt="""
驗證開源分支的清理狀態。
專案:{STAGING_PATH}
來源(供參考):{SOURCE_PATH}
執行所有掃描類別:
1. 機密掃描(CRITICAL)
2. 個資掃描(CRITICAL)
3. 內部參考掃描(CRITICAL)
4. 危險檔案檢查(CRITICAL)
5. 配置完整性檢查(WARNING)
6. Git 歷史稽核
在 {STAGING_PATH} 中產生 SANITIZATION_REPORT.md,並附上 PASS/FAIL 判定。
"""
)
等待完成。讀取 {STAGING_PATH}/SANITIZATION_REPORT.md。
若 FAIL: 向使用者顯示發現結果。詢問:「修正這些問題並重新掃描,或中止?」
- 若選擇修正:套用修正,重新執行 sanitizer(最多重試 3 次 — 若連續 FAIL 3 次,則呈現所有發現結果並要求使用者手動修正)
- 若選擇中止:清除暫存目錄
若 PASS 或 PASS WITH WARNINGS: 繼續進行步驟 5。
步驟 5:執行 Packager 代理程式
啟動 opensource-packager 代理程式:
Agent(
description="Package {PROJECT} for open-source",
subagent_type="opensource-packager",
prompt="""
為專案產生開源套件。
專案:{STAGING_PATH}
授權條款:{chosen_license}
專案名稱:{PROJECT_NAME}
描述:{description}
GitHub 儲存庫:{github_repo}
產生:
1. CLAUDE.md(指令、架構、關鍵檔案)
2. setup.sh(一行指令啟動,設為可執行)
3. README.md(或增強現有檔案)
4. LICENSE
5. CONTRIBUTING.md
6. .github/ISSUE_TEMPLATE/(bug_report.md、feature_request.md)
"""
)
步驟 6:最終審查
向使用者呈現:
開源分支已就緒:{PROJECT_NAME}
位置:{STAGING_PATH}
授權條款:{license}
已產生的檔案:
- CLAUDE.md
- setup.sh(可執行)
- README.md
- LICENSE
- CONTRIBUTING.md
- .env.example({N} 個變數)
清理狀態:{sanitization_verdict}
後續步驟:
1. 審查:cd {STAGING_PATH}
2. 建立儲存庫:gh repo create {github_org}/{github_repo} --public
3. 推送:git remote add origin ... && git push -u origin main
要繼續建立 GitHub 儲存庫嗎?(yes/no/review first)
步驟 7:GitHub 發布(使用者核准後)
cd "{STAGING_PATH}"
gh repo create "{github_org}/{github_repo}" --public --source=. --push --description "{description}"
/opensource verify PROJECT
獨立執行 sanitizer。解析路徑:若 PROJECT 包含 /,則視為路徑。否則依序檢查 $HOME/opensource-staging/PROJECT、$HOME/PROJECT,然後是目前目錄。
Agent(
subagent_type="opensource-sanitizer",
prompt="Verify sanitization of: {resolved_path}. Run all 6 scan categories and generate SANITIZATION_REPORT.md."
)
/opensource package PROJECT
獨立執行 packager。詢問「License?」和「Description?」,然後:
Agent(
subagent_type="opensource-packager",
prompt="Package: {resolved_path} ..."
)
/opensource list
ls -d $HOME/opensource-staging/*/
顯示每個專案及其管線進度(FORK_REPORT.md、SANITIZATION_REPORT.md、CLAUDE.md 是否存在)。
/opensource status PROJECT
cat $HOME/opensource-staging/${PROJECT}/SANITIZATION_REPORT.md
cat $HOME/opensource-staging/${PROJECT}/FORK_REPORT.md
暫存目錄結構
$HOME/opensource-staging/
my-project/
FORK_REPORT.md # 來自 forker 代理程式
SANITIZATION_REPORT.md # 來自 sanitizer 代理程式
CLAUDE.md # 來自 packager 代理程式
setup.sh # 來自 packager 代理程式
README.md # 來自 packager 代理程式
.env.example # 來自 forker 代理程式
... # 已清理的專案檔案
反模式
- 絕不在未經使用者核准的情況下推送到 GitHub
- 絕不跳過 sanitizer — 它是安全閘門
- 絕不在 sanitizer FAIL 且未修正所有重大發現結果時繼續進行
- 絕不將
.env、*.pem或credentials.json留在暫存目錄中
最佳實踐
- 對於新版本,始終執行完整管線(fork → sanitize → package)
- 暫存目錄會持續存在,直到明確清理 — 可用於審查
- 在發布前若進行任何手動修正,請重新執行 sanitizer
- 將機密參數化而非直接刪除 — 保留專案功能
相關技能
請參閱 security-review 以了解 sanitizer 所使用的機密偵測模式。