/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
$ npx -y skills add iamzhihuix/happy-claude-skills --skill open-source-prep --agent claude-codeHow 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.mdname: 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
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` — 不同场景的免责声明范文
A collection of practical skill plugins for AI coding agents. Works with Claude Code, Codex, Factory Droid, OpenClaw, Cursor, and 40+ agents.
Repo: iamzhihuix/happy-claude-skills
Other skills on happy-claude-skills.
- /1password
使用 1Password CLI (op) 管理密码和 API credentials。保存、查询、读取 API key/token,注入环境变量到脚本。当用户提到保存密码、保存 API key、查询密码、1password、op CLI、secret 管理时使用此 skill。
Open skill - /browser
Minimal Chrome DevTools Protocol tools for browser automation and scraping. Use when you need to start Chrome, navigate pages, execute JavaScript, take screenshots, or interactively pick DOM elements. Triggers include "browse website", "scrape page", "take screenshot", "automate
Open skill - /docx-format-replicator
Extract formatting from existing Word documents and generate new documents with the same format but different content. Use this skill when users need to create multiple documents with consistent formatting, replicate document templates, or maintain corporate document standards
Open skill - /happy-app-audit
Audit a local macOS app's telemetry / reporting behavior using static analysis only. Reverse-engineers an .app bundle to identify embedded SDKs (AppLog/TEA, Parfait, TTNet, mars, MMKV, Sentry, Firebase, Bugly, Umeng, etc.), mapped upload endpoints, local on-disk queues, and
Open skill - /happy-audio-gen
Universal AI voice / text-to-speech skill supporting OpenAI TTS (gpt-4o-mini-tts, tts-1), ElevenLabs multilingual TTS with voice cloning, Bailian Qwen TTS (qwen-tts / qwen3-tts-vd with voice-design custom voices, long-text chunking built in), MiniMax speech-02-hd, SiliconFlow
Open skill - /happy-dreamina
ByteDance Jimeng (Dreamina) image and video generation via the official `dreamina` CLI. Use this skill whenever the user mentions 即梦, Dreamina, Jimeng, or asks to generate images or videos specifically through ByteDance's Jimeng service. Covers text2image, image2image,
Open skill

