Skip to content
AI & Agents
Skill

/open-source-prep

帮用户把私有项目整理成可开源的仓库。核心能力:(1) 扫描源码和 git 历史中的密钥/token 泄漏;(2) 根据项目场景推荐开源协议(MIT / Apache 2.0 / GPL 等)并生成 LICENSE;(3) 补齐 README 免责声明、CONTRIBUTING.md、SECURITY.md、.gitignore 等开源必备文档;(4) 检查 bundle identifier、package.json 等所有权/商标隐患。触发词:「开源」「open source」「选择协议」「LICENSE」「准备开源」「检测密钥」「secret

From plugin
happy-claude-skills
30313 skills
Install
$ npx -y skills add iamzhihuix/happy-claude-skills --skill open-source-prep --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/open-source-prep

Context preview

The summary Claude sees to decide when to auto-load this skill.

帮用户把私有项目整理成可开源的仓库。核心能力:(1) 扫描源码和 git 历史中的密钥/token 泄漏;(2) 根据项目场景推荐开源协议(MIT / Apache 2.0 / GPL 等)并生成 LICENSE;(3) 补齐 README 免责声明、CONTRIBUTING.md、SECURITY.md、.gitignore 等开源必备文档;(4) 检查 bundle identifier、package.json 等所有权/商标隐患。触发词:「开源」「open source」「选择协议」「LICENSE」「准备开源」「检测密钥」「secret

SKILL.md

open-source-prep.SKILL.md
name: open-source-prep
description: 帮用户把私有项目整理成可开源的仓库。核心能力:(1) 扫描源码和 git 历史中的密钥/token 泄漏;(2) 根据项目场景推荐开源协议(MIT / Apache 2.0 / GPL 等)并生成 LICENSE;(3) 补齐 README 免责声明、CONTRIBUTING.md、SECURITY.md、.gitignore 等开源必备文档;(4) 检查 bundle identifier、package.json 等所有权/商标隐患。触发词:「开源」「open source」「选择协议」「LICENSE」「准备开源」「检测密钥」「secret scan」「上传 github」。
user-invocable: true

Open Source Prep

把私有项目整理成可安全开源的仓库。分 5 个阶段串行执行,**密钥扫描必须最先通过**才能进入后续步骤。

使用场景

用户说:

  • "帮我把这个项目开源"
  • "准备开源前要做什么"
  • "选一个开源协议"
  • "上传 GitHub 前检查一下有没有泄漏"

重要原则

1. **密钥扫描是 gating step** — 发现真实密钥时必须停下来让用户先清理,不能直接继续 2. **生成的文档用英文** — 面向国际贡献者;和用户对话用中文 3. **LICENSE 文件必须命名为 `LICENSE`**(大写无后缀),GitHub 才识别 4. **所有真实 token 示例必须用 `...REDACTED...` 占位符** — 即使是用户主动粘贴进来的 5. **不要直接 push 或切 public** — 先让用户检查 diff,手动 commit+push+切可见性

工作流

Phase 1: 密钥 & 敏感文件扫描(BLOCKING)

**必须先做,发现问题要停下**。扫描三个地方:

1. **当前工作区文件**(包括未追踪的) 2. **已 staged / 已 committed 的内容** 3. **git 全部历史**(`git log --all -p`)

扫描模式见 `references/secrets-patterns.md`。关键模式包括:

| 类型 | 模式 | |------|------| | JWT | `eyJhbGc[0-9A-Za-z_-]{20,}` | | GitHub token | `gh[posur]_[0-9A-Za-z]{36,}` | | OpenAI / Anthropic | `sk-[a-zA-Z0-9]{20,}`, `sk-ant-[a-zA-Z0-9-]{40,}` | | AWS access key | `AKIA[0-9A-Z]{16}` | | Google API key | `AIza[0-9A-Za-z_-]{35}` | | Slack token | `xox[baprs]-[0-9A-Za-z-]{10,}` | | Stripe | `sk_live_[0-9A-Za-z]{20,}` | | 私钥 PEM | `-----BEGIN.*PRIVATE KEY-----` | | 通用密码 | `password\s*[:=]\s*["'][^"']{8,}` |

敏感文件名(staged 时警报):

  • `.env`, `.env.local`, `.env.production`
  • `credentials.json`, `secrets.json`
  • `*.pem`, `*.key`, `*.p12`, `*.pfx`
  • `id_rsa`, `id_ed25519`

**执行命令**(按项目大小自适应):

# 工作区扫描(含未追踪)
git ls-files --others --exclude-standard -z | xargs -0 grep -lE "<pattern>" 2>/dev/null

# 已追踪文件
git grep -nE "<pattern>" 2>/dev/null

# Git 历史
git log --all -p 2>/dev/null | grep -cE "<pattern>"

# 敏感文件名
git ls-files | grep -E "(^|/)(\.env|credentials\.json|.*\.(pem|key|p12|pfx))$"

**区分真密钥 vs 占位符**:

  • ✅ 占位符:包含 `...` / `REDACTED` / `example` / `test` / `xxx` / `dummy`
  • ❌ 真密钥:没有明显占位符标记,且符合真实格式(如 JWT 是三段点分 base64url、AWS 是 20 字符全大写 + 数字等)

**发现真密钥时**: 1. 列出文件 + 行号 + 截断显示(`eyJhbGc...[12 chars]...abcd` 前后各 4 位,中间省略) 2. 提供处理建议:

  • 如果在工作区 → 移到 `.env` 并加入 `.gitignore`
  • 如果已 commit 未 push → `git filter-repo` 或 `git reset --soft HEAD~1`
  • 如果已 push → **必须立即撤销这个 token**(本工具无法从 GitHub 删除已泄漏的 commit),然后 `git filter-repo --invert-paths` + force push

3. **停止后续步骤**,让用户处理后再重跑

Phase 2: 协议选择(交互式)

根据决策树推荐,不要一上来就问所有问题:

**第一问**:项目性质?

  • 个人工具 / 小库 / 应用 → 继续问第二
  • 商业产品对外开源 / 希望企业安心使用 → **Apache 2.0**
  • 想让所有衍生作品也开源 → 继续问第三

**第二问**(针对个人项目):涉及可申请专利的新颖技术?

  • 否 → **MIT** ⭐
  • 是 → **Apache 2.0**

**第三问**(针对 copyleft 偏好):SaaS 形态(用户通过网络用不下载)?

  • 是 → **AGPL v3**
  • 否 → **GPL v3**

**默认推荐 MIT** — 95% 个人项目合适。生成的 `LICENSE` 使用 `templates/LICENSE-MIT.txt` 模板,版权人从 `git config user.name` 读取,年份是当前年份。

协议对比速查:

| 协议 | 长度 | 专利 | 商标 | copyleft | 场景 | |------|------|------|------|----------|------| | **MIT** | 20 行 | 无 | 无 | 无 | 个人工具首选 | | **Apache 2.0** | 200 行 | 显式 | 保护 | 无 | 企业/专利场景 | | **GPL v3** | 长 | 有 | - | 强 | 病毒式开源 | | **AGPL v3** | 长 | 有 | - | 极强 | SaaS 场景 |

Phase 3: 必备文档生成

生成以下文件(如已存在则显示 diff,用户确认后再改):

1. **`LICENSE`** — 协议文本,填入版权人 + 年份 2. **`CONTRIBUTING.md`** — 开发环境、PR 流程、测试命令(用 `templates/CONTRIBUTING.md`) 3. **`SECURITY.md`** — 漏洞上报流程(用 `templates/SECURITY.md`) 4. **`README.md` 补充**(用 Edit tool 插入):

  • 顶部:第三方免责声明(如果项目涉及第三方服务)
  • Privacy & Security 章节(如果处理敏感数据)
  • License 章节指向 `LICENSE` 文件

Phase 4: 配置审计

检查并提示修改:

1. **`.gitignore`** — 确保包含:

   src-tauri/target/   # Tauri
   target/             # Rust 通用
   node_modules/       # Node
   dist/ build/ out/   # 构建产物
   .env*               # 环境变量
   .DS_Store Thumbs.db # OS
   coverage/ *.lcov    # 覆盖率报告

2. **Bundle identifier / package name 检查**:

  • `src-tauri/tauri.conf.json` 的 `identifier` 字段
  • `package.json` 的 `name` 字段
  • `Cargo.toml` 的 `[package] name`
  • 如果包含第三方公司名(如 `com.google.*`、`com.factory.*`)→ 警告商标风险
  • 建议改为 `com.<github-username>.<project-name>`

3. **第三方服务引用**:

  • grep 项目名里有没有商标("Google X", "Apple X" 等)
  • README 是否说明这是 **unofficial third-party tool**

Phase 5: 可选增强

询问用户是否要做:

  • [ ] CHANGELOG.md(从 git log 生成初始版本)
  • [ ] GitHub Actions release workflow(`.github/workflows/release.yml`)
  • [ ] Issue/PR 模板(`.github/ISSUE_TEMPLATE/`)
  • [ ] 仓库可见性切换(`gh repo edit --visibility public`)

**注意**:切换为 public 是**不可逆的信息公开**,必须用户明确确认后才执行,且要再跑一次 Phase 1 密钥扫描。

输出格式

每个阶段结束后向用户报告:

## Phase N: xxx

✅ 通过:[...]
⚠️ 警告:[...]
❌ 需处理:[...]

下一步:[...]

最后给一个完整 checklist。

工具文件

  • `templates/LICENSE-MIT.txt` — MIT 协议模板(用 `{{YEAR}}` `{{AUTHOR}}` 占位)
  • `templates/LICENSE-Apache-2.0.txt` — Apache 2.0 模板
  • `templates/LICENSE-GPL-3.0.txt` — GPL v3 模板(较长,可用 `gh api` 拉官方文本)
  • `templates/LICENSE-AGPL-3.0.txt` — AGPL v3 模板
  • `templates/CONTRIBUTING.md` — 贡献指南模板
  • `templates/SECURITY.md` — 安全策略模板
  • `references/secrets-patterns.md` — 完整的密钥正则表达式清单
  • `references/disclaimer-templates.md` — 不同场景的免责声明范文
Read more
Ships withhappy-claude-skills

A collection of practical skill plugins for AI coding agents. Works with Claude Code, Codex, Factory Droid, OpenClaw, Cursor, and 40+ agents.

Get the whole plugin
Stats
304
Stars
29
Forks
Maintained
Maintenance
TypeScript
Language
MIT
License
4mo ago
Last commit
7mo ago
Created

Repo: iamzhihuix/happy-claude-skills

Other skills on happy-claude-skills.