Oss publish
实战沉淀的 Claude 技能合集:说人话/代码升级/开源项目研究/项目开源/Obsidian维护 | Battle-tested Claude Code skills: humanized writing, code renovation, safe OSS research & publishing, vault maintenance
npx -y skills add NovaKepler513/claude-skills --skill oss-publishAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
把一个项目/skill 安全体面地开源到 GitHub。用户说"帮我开源这个/把X发到GitHub/做成公开仓库"时使用:开源版改写(路径通用化/剥内部引用/冷读审校)→发布前敏感审计(身份/路径/内部代号/密钥 grep 到零命中)→用户拍板仓库名与License→干净目录全新git历史+noreply身份发布→发布后从远端clone回来复扫→固定结构汇报。核心思想:push即永久公开,审计在发布前做足。English triggers - "open-source this", "publish this to GitHub", "make this a public repo". A push is permanent, audit before publishing.
SKILL.md
8.9 KB, as published. Nobody here has run it
项目开源(oss-publish)· 把一个项目安全体面地开源到 GitHub
一句话:用户说"帮我开源一个项目/把 X 发到 GitHub 上"时跑这套:先做开源版改写与敏感审计 → 用户拍板仓库名和范围 → 全新历史规范身份发布 → 发布后从远端复查 → 按固定结构汇报。核心思想:push 出去的东西就当永久公开(会被缓存/索引),所以一切审计在发布前做足,发布后只做验证。
〇、定位与触发
什么时候用:用户说"帮我开源这个/把 X 开源/发布到我 GitHub 上/做成公开仓库"。 什么时候不用:往私有仓库推日常提交;给已有开源仓库修 bug 发 PR(常规 git 流程)。
一、八条铁律
- push = 永久公开。GitHub 会被爬虫/缓存/镜像,
git push --force救不回已泄漏的内容。所以敏感审计必须在发布前做足,发布后的复查只是验证不是补救。 - 双版本分离:私有版(含私有路径/内部引用/客户信息)留在用户自己的工作区;开源版从零重写路径层和引用层——输出路径改通用(如
~/Downloads/...)、内部工具名换成通用说法、去掉一切"我们/本公司"语境改为面向陌生用户。两版各自维护,私有版头部标注开源仓库地址并注明"改内容记得同步"。 - 全新 git 历史:开源仓库一律在干净目录
git init重来,绝不从私有工作仓库带出历史(历史里的旧提交、旧作者邮箱、被删文件全是泄漏源)。 - 提交身份规范:统一用用户的公开身份名 + GitHub noreply 邮箱(格式
<数字ID>+<用户名>@users.noreply.github.com,GitHub Settings→Emails 可查),真实邮箱绝不进提交。 - License 必选再发布:代码/文档默认 MIT;含设计资产/图片/数据时另议(问一句);项目里借鉴过别人的开源必须鸣谢并遵守对方许可。被研究/借鉴对象是 UNLICENSED 的,只能开源"你自己的方法/文字",不能带对方代码资产。
- 发布前用户拍板:仓库名、一句话描述、公开范围(哪些文件进/哪些不进)、License——列清楚给用户确认一次再
gh repo create --public。授权过的本次会话内后续修补推送不用再问。 - 发布后以远端为准复查:
git clone --no-local从 GitHub 拉回来复扫敏感词 + 核对文件清单 + 看 README 渲染,不查本地草稿当交差。 - 优质开源不止于无泄漏:README 要能让陌生人 30 秒懂(是什么/为什么/怎么装/长什么样/License)、中英描述、加 topics、无杂物文件(.DS_Store/node_modules/临时产物)、自造词首现处解释(冷读标准,参见本合集 plain-write)。
二、五步流程
第一步 · 备料与开源版改写
- 确认要开源的内容清单;确认其中借鉴/依赖的第三方许可。
- 按铁律 2 做双版本改写:路径通用化、内部引用剥离、语境改为陌生用户视角。
- 组仓库结构:README(是什么→为什么→安装→使用示例→License)+ LICENSE + 主体内容;skill 类项目按 Claude Code 规范放
<skill名>/SKILL.md(带 frontmatter),README 写明cp -r <skill名> ~/.claude/skills/装法。 - 冷读审校一遍(本合集 plain-write):自造词首现处解释、加一行英文简介、逻辑通顺。
第二步 · 发布前敏感审计(招牌环节,见附录 A 清单)
- 敏感词 grep:姓名/账号(含曾用名)/真实邮箱/本机路径/私有笔记库路径/内部工具名/客户与内部项目代号。
- 密钥模式 grep:
sk-/ghp_/AKIA/api_key=等。 - 杂物检查:
find看有没有 .DS_Store、临时文件、不该进的大文件。 - 三项全过才进下一步;任何命中先修再扫,扫到零命中为止。
第三步 · 用户拍板
报给用户:仓库名 + 一句话描述(中英)+ 文件清单 + License 选择 → 确认后发布。
第四步 · 发布
cd <干净目录> && git init
git add -A
git -c user.name="<公开身份名>" -c user.email="<ID>+<用户名>@users.noreply.github.com" \
commit -m "<项目名> v1.0: <一句话>"
gh repo create <仓库名> --public --source . --push --description "<中文一句话 | English one-liner>"
gh repo edit --add-topic <相关topics> # 提升可发现性
第五步 · 发布后复查 + 汇报
git clone --no-local https://github.com/<用户名>/<仓库名>.git拉回来:复扫敏感词(附录 A 全表)、核对文件清单与提交身份。- 有条件时网页/API 看一眼 README 渲染、description、topics。
- 发现问题:小问题(措辞/格式)直接修了推;泄漏类问题立即报告用户——修复推送之外还要评估是否需要删库重建(缓存不可控)。
- 按第三节固定结构汇报。
- 私有侧收尾:私有版文档标注开源仓库地址,后续改动记得双向同步。
三、汇报结构(固定模板)
- 开源了什么:项目名 + 仓库地址 + 可见性状态(PUBLIC)+ License。
- 项目 Brief:这是个什么东西、给谁用、核心价值一句话。
- 已做的工作清单:改写/审计/发布/复查各步的实际动作。
- 检查结果与修复:敏感审计结论(发布前+发布后两轮)、发现的问题、每个问题是否已修复并已推送(挂 commit)。
- 优缺点与待改进:现在这个开源项目质量如何、还差什么(如英文文档/示例截图/CI 徽章),哪些值得下次做。
- 状态确认:只有全部修复验证完才说"开源已完成";有未决项就列出来等拍板。
四、反模式
- 从私有工作仓库直接 push 出去——历史就是泄漏源。
- 审计只查本地草稿不查远端——以为推的是 A 其实推了 A+.DS_Store。
- 用真实邮箱提交、或忘了改
user.name带出本机 git 全局配置。 - 先发布再审计——顺序反了,缓存不等人。
- 开源版里残留"我们的知识库/某某内部工具"这类内部语境——陌生人读着莫名其妙,还暴露内部结构。
- 无 License 就发布——别人不敢用,等于白开源。
- README 只写"这是个 skill"不写怎么装、说什么话触发——开源了个寂寞。
- 借鉴了别人的开源不鸣谢。
附录 A · 敏感词审计清单(模板——首次使用时按用户实际情况填一份专属清单,存在用户私有区,别把填好的清单本身开源出去)
# 身份与路径(按用户实际替换占位符)
grep -rniE "<真实姓名>|<姓名拼音>|<账号曾用名>|<公司/团队名>|/Users/|<私有笔记库目录名>|<真实邮箱域>" . --exclude-dir=.git
# 内部工具/方法论名(防暴露内部结构;开源版应已换通用说法)
grep -rniE "<内部工具名1>|<内部工具名2>|<内部SOP名>" . --exclude-dir=.git
# 客户与项目代号(按本项目涉及的裁剪)
grep -rniE "<客户名>|<项目代号>|<合作者人名>" . --exclude-dir=.git
# 密钥模式(固定项)
grep -rniE "sk-[a-zA-Z0-9]{10,}|ghp_[a-zA-Z0-9]{10,}|AKIA[A-Z0-9]{12,}|api[_-]?key\s*[:=]" . --exclude-dir=.git
# 杂物(固定项)
find . -name ".DS_Store" -o -name "*.log" -o -name "node_modules" -not -path "./.git/*"
# git 身份核验(固定项)
git log --format="author: %an <%ae>%ncommitter: %cn <%ce>"
注意:GitHub 官方 noreply 邮箱(<ID>+<用户名>@users.noreply.github.com)属于设计上公开的身份,不算泄漏。
复制即用启动词
使用 oss-publish 帮我开源 <项目/内容>:
1) 做开源版改写:路径通用化、剥离内部引用、面向陌生用户重写语境,冷读审校(自造词首现解释+英文简介)
2) 发布前敏感审计:附录A全表 grep 到零命中(身份/路径/内部代号/密钥/杂物)
3) 报我拍板:仓库名+中英描述+文件清单+License
4) 干净目录 git init 全新历史,公开身份+noreply邮箱提交,gh repo create --public 发布,补 topics
5) 发布后从远端 clone 回来复扫+核对,问题修复推送
6) 按固定结构汇报:开源了什么→Brief→已做工作→检查与修复→优缺点待改进→状态确认