yyh211/software-copyright-writer
根据真实代码仓库、官网页面、运行界面、模块范围和目标软著数量,分析软件著作权(软著)申报方向,拆分可申报主题,检查 Logo、版权、备案、截图和源码等材料约束,生成 3w-4w 字正文、局部代码片段、源码原文、网页截图证据和 .docx 文档。Use when Claude needs to prepare or split legitimate software copyright registration materials from code repositories, product pages, running UI screenshots, module scopes, or source evidence.
npx skills add https://github.com/YYH211/Claude-meta-skill --skill software-copyright-writer
使用这个 skill 处理“根据代码仓库和官网材料写软著”的完整流程,而不是只写一篇泛泛的介绍文档。它面向任意软件产品或平台项目,不绑定某个特定产品、技术框架或行业。
先判断仓库里到底能拆出几个像样的软著主题,再补材料、写正文、整理源码原文、抓网页证据、导出 .docx。如果仓库体量根本撑不起用户要的数量,直接指出来,不要硬凑题目。
仓库和 GitHub 只作为内部分析输入。最终软著正文必须使用“软件/系统/平台/产品”的正式说明口径,介绍产品功能、业务流程、运行界面和技术实现,不要写成代码仓库分析报告。
这个 skill 只用于整理真实软件项目的申报材料,不用于伪造软件、伪造截图、伪造权属、虚构功能或包装不存在的源码。
默认采用“一次性成稿”模式:
30 行、约 30 页、总字数 3w-4w,通常约 3.5w”先收集这些信息:
代码仓库、官网页面、软著数量指定模块、已有截图、Logo/商标注册证、域名备案页、著作权人全称、偏粗拆/细拆缺少关键输入时,先停在材料确认阶段,不要直接开写。
用 references/intake-checklist.md 检查材料完整性和硬性约束。
先看仓库结构、README、核心目录和页面入口,判断哪些能力可以独立描述为一个软著主题。
主题必须同时满足这些条件中的大部分:
如果用户指定模块:
粗拆 和 细拆 两套方案如果用户没有指定模块:
主题拆分规则和确认模板见 references/splitting-rules.md。
如果主题、数量和模块边界还不清楚,先输出候选主题让用户确认。
如果用户已经明确给出:
那就不要再重复走“候选主题确认”流程,直接进入完整成稿。
确认输出里至少要包含:
粗拆 或 细拆8-12 张截图清单,优先 10 张,说明每张截图对应的功能点软著名称必须以 系统、平台、软件 或 app软件 结尾。
用户确认主题后,再准备每个主题的材料。
必须重点检查这些硬规则:
Logo 时,必须要求商标注册证版权所有,必须与著作权人全称完全一致1500 行和后 1500 行,总计不少于 3000 行;不足则提供全部源码30 行、约 30 页、总字数 3w-4w,通常约 3.5w”的申报体量8-12 张界面截图,优先按 10 张准备;除非产品界面确实不足,否则不要只放 3-5 张截图GitHub、仓库、repo、README、开源地址、提交记录、分支、clone 等代码托管或代码分析口径,除非它们是软件自身界面中不可避免的功能名称如果用户没有给现成网页截图,优先运行 scripts/fetch_web_evidence.py 调用浏览器访问官网、产品后台、演示环境或其他实际运行页面并生成截图。截图完成后保留 manifest.json,后续导出 .docx 时用 --evidence-manifest 自动把截图插入正文占位符。只有浏览器无法访问、登录态缺失或页面不可达时,才在正文中保留 [此处添加对应图片]。
截图前先做“截图规划”,把当前软著主题拆成更细的功能视角:
每张截图都必须能对应正文中的一个功能点或业务流程,不要为了凑数量重复截同一个页面。
产品界面截图必须先判断登录状态:
--ready-text 或 --wait-selector 判断是否进入登录后页面。browser-profile/ 或 auth-state.json,不要复用用户日常 Chrome Profile。--allow-unauthenticated 继续截图当前页面;此时必须在最终材料中标注截图可能不是完整产品运行界面,必要时保留 [此处添加对应图片]。每个软著必须输出两个文件:
主题内容文件源码原文文件正文模板按主题体量选择:
源码原文文件规则见 references/source-info-template.md。
正文文件不是短说明,必须按申报口径一次性写到约 30 页、每页 30 行左右、总字数 3w-4w 的体量,通常控制在 3.5w 左右。
正文语言必须是正式软著产品说明语言:
标题层级必须严格递进:
## 1. 标题,编号只有一段### 1.1 标题,编号必须包含父级编号#### 1.1.1 标题,编号必须包含父级和二级编号3.1 下方如继续拆标题,只能写 3.1.1、3.1.2、3.1.3,不能跳成 3.2.1 或直接写 3.1 模块目标3.1.1 跳到 3.1.3.docx 前会校验标题编号,并会兜底归一化缩进标题;编号不合规时必须先修正文档,不要强行导出正文里可以加入少量“局部代码片段”,但只能放和当前主题直接相关的关键代码,不能拿大段源码灌水。优先放在:
源码文件不要写解释、摘要、目录说明、风险说明。源码文档排版必须按“文件名 -> 原始代码 -> 文件名 -> 原始代码”的顺序组织。
如果已经确认了源码范围,运行:
python3 scripts/assemble_source_code.py \
--path repo/module-a \
--path repo/module-b \
--output out/source-code.txt
该脚本会按“前 1500 行 + 后 1500 行,不足则全量”的规则输出源码原文,并按文件名分段。
.docx正文和源码原文都生成后,如果用户需要正式交付文档,运行:
python3 scripts/export_ruanzhu_docx.py --content path/to/topic.md --source path/to/source-code.txt --output out/docx
该脚本会分别导出正文 .docx 和源码 .docx 两个文件。
如果已经用 fetch_web_evidence.py 生成截图证据,导出时必须传入 manifest.json:
python3 scripts/export_ruanzhu_docx.py \
--content path/to/topic.md \
--source path/to/source-code.txt \
--evidence-manifest out/evidence/manifest.json \
--output out/docx
导出脚本会按 manifest.json 中的截图顺序,把正文中的 [此处添加对应图片] 逐个替换为实际图片。也可以用 --image-dir path/to/screenshots 直接读取某个图片目录。
导出排版默认使用:
宋体,英文和数字 Times New Roman12pt1.5 倍黑体、16pt、加粗黑体、14pt、加粗黑体、12pt、加粗如果正文中需要插入项目截图但当前无法完成截图,必须直接预留占位符:
[此处添加对应图片]
生成结果后,逐项复核:
## 3. -> ### 3.1 -> #### 3.1.1 的层级关系版权所有 是否完全一致30 页且总字数达到 3w-4w如果发现高风险问题,先列问题和修正建议,不要把明显会被打回的材料当成成品交出去。
scripts/fetch_web_evidence.py用这个脚本调用浏览器访问页面并生成截图。
适用场景:
storageState 登录态公开页面示例:
python3 scripts/fetch_web_evidence.py \
--url https://github.com/openai/openai-cookbook \
--url https://openai.com \
--output out/evidence
产品页面示例:
python3 scripts/fetch_web_evidence.py \
--url https://example.com/dashboard \
--wait-selector "#app" \
--selector "main" \
--viewport-width 1440 \
--viewport-height 1200 \
--output out/evidence
需要登录的产品界面示例:
python3 scripts/fetch_web_evidence.py \
--url https://example.com/dashboard \
--auth-state auth-state.json \
--ready-text "工作台" \
--wait-selector "#app" \
--output out/evidence
需要人工登录时,可以先用可视化浏览器窗口:
python3 scripts/fetch_web_evidence.py \
--url https://example.com/dashboard \
--headed \
--profile-dir out/browser-profile \
--ready-text "工作台" \
--save-auth-state auth-state.json \
--output out/evidence
认证文件规则:
--auth-state auth-state.json:读取 Playwright storageState 登录态文件,文件路径由调用者指定。--save-auth-state auth-state.json:截图结束后把当前登录态保存到指定 JSON 文件。--profile-dir out/browser-profile:使用持久化浏览器目录,cookie、localStorage 等登录态保存在这个目录里,适合多次复用后台登录。--profile-dir,避免污染用户浏览器数据。--ready-text 且页面没有进入登录后状态,--headed 模式会提示用户在弹出的浏览器里登录,并等待最多 --login-timeout-ms。非 --headed 模式会直接报错,不截登录页冒充产品界面。--allow-unauthenticated;该模式不会等待登录,会直接截取当前页面。脚本会输出:
manifest.json,用于后续自动插入 .docxsummary.md输入文件也支持批量页面配置:
首页 | https://example.com/dashboard | main
订单页面 | https://example.com/orders | #app
需要点击页面菜单后再截图时,可以使用 JSON 配置:
{
"pages": [
{
"name": "产品资料上传界面",
"url": "https://example.com/workbench",
"click_texts": ["资料中心", "产品资料库", "新建/导入", "文本资料"]
}
]
}
然后运行:
python3 scripts/fetch_web_evidence.py \
--input pages.json \
--profile-dir out/browser-profile \
--headed \
--ready-text "工作台" \
--output out/evidence
--profile-dir 会复用持久化浏览器登录态,适合任意需要登录的产品后台、管理端或 SaaS 系统。第一次运行时可以在弹出的浏览器里登录,后续同一个目录会继续复用登录状态。
用户强制不登录也继续时:
python3 scripts/fetch_web_evidence.py \
--input pages.json \
--ready-text "工作台" \
--allow-unauthenticated \
--output out/evidence
为避免误操作,脚本不会自动点击 确认、提交、删除、保存、支付、创建 等可能改变数据的按钮。需要这类动作时,先让用户明确确认,优先只停留在截图所需界面。
scripts/assemble_source_code.py用这个脚本生成源码原文文件。
适用场景:
示例:
python3 scripts/assemble_source_code.py \
--path repo/src/module-a \
--path repo/src/module-b \
--output out/source-code.txt
脚本规则:
3000 时,输出前 1500 行和后 1500 行3000 时,输出全部源码scripts/export_ruanzhu_docx.py用这个脚本把 Markdown 草稿导出为 .docx。
适用场景:
脚本需要本地 Python 环境安装 python-docx。如默认 Python 缺包,可通过 SOFTWARE_COPYRIGHT_WRITER_PYTHON 指定另一个 Python 解释器。
截图脚本需要本地 Node.js、Playwright 和 Chrome/Chromium。默认使用 node、Node 模块解析路径和常见浏览器路径;如环境不同,可通过 SOFTWARE_COPYRIGHT_WRITER_NODE、SOFTWARE_COPYRIGHT_WRITER_NODE_MODULES、SOFTWARE_COPYRIGHT_WRITER_CHROME_PATH 指定。
依赖安装示例:
python3 -m pip install -r scripts/requirements.txt
npm install --prefix scripts
npx --prefix scripts playwright install chromium
默认输出建议:
manifest.json.docx,正文和源码分别导出,不要混成一个文件3w-4w,优先靠近 3.5w5 份或其他固定数量时,如果仓库和材料足以支撑,就直接连续产出对应数量的完整文档文件命名尽量稳定,例如:
xxx-主题内容.mdxxx-源码原文.txtxxx-主题内容.docxxxx-源码原文.docx遇到下面这些情况时,先提示风险,不要硬写:
版权所有 与著作权人名称不一致3w 或明显超过 4w这种场景下,应该先给用户“缺口清单 + 修正建议 + 可继续的最小范围”。
Take yyh211/software-copyright-writer from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, npm, npx.
Without those the skill loads but fails at the first command.