Back to skills
SKILL.md
ruanzhu-kit
ASecurity生成中国软件著作权登记(软著)全套申请材料——页数写死的程序鉴别材料 PDF、文档鉴别材料(说明书)PDF,以及在线表单逐字段可复制的填写清单。当用户提到「软著」「软件著作权」「版权登记」「程序鉴别材料」「文档鉴别材料」「源程序前30页后30页」时使用。
- 27 stars
- 0 votes
- 0 copies
- 2 views
- Added September 24, 2026
Security analysis
100/100Pro scans all 13 files and shows the line behind each finding
npx -y skills add CatCatUncle/ruanzhu-kit --agent claude-codeAre you the author of ruanzhu-kit?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/catcatuncle-ruanzhu-kit)---
name: ruanzhu-kit
description: 生成中国软件著作权登记(软著)全套申请材料——页数写死的程序鉴别材料 PDF、文档鉴别材料(说明书)PDF,以及在线表单逐字段可复制的填写清单。当用户提到「软著」「软件著作权」「版权登记」「程序鉴别材料」「文档鉴别材料」「源程序前30页后30页」时使用。
---
# 软著登记材料生成
把一个软件项目加工成中国版权保护中心要求的全套登记材料,并算出在线表单每一项该填什么。
材料由 `ruanzhu-kit` 生成,不要手搓 HTML 和分页脚本——页数算错整份材料要重做。
## 先跟用户说清楚:说明书和表单描述由用户本人写
2026 年起软著申请材料要手抄签字声明:本软件确系人的独立开发,**未使用 AI 开发编写代码、撰写文档或生成登记申请材料**,
声明失实有失信和法律后果。所以这个技能的分工是:
- **你(agent)做**:跑 `ruanzhu` 命令——清点源码、排除不该收的文件、出程序鉴别材料、核页数、算字数、跑口吻检查,把结果讲给用户听
- **用户本人做**:写说明书正文,写表单里的开发目的、面向行业、主要功能、技术特点
- **不要**替用户起草、润色或改写说明书和这四项表单描述,也不要帮忙规避那条声明
- 用户说项目本身就是 AI 写的,照实告诉用户这份声明签不了,拿不准请用户去问中国版权保护中心或律师
开工前把这段分工用一两句话告诉用户。
## 三条命令
```bash
npx github:CatCatUncle/ruanzhu-kit init # 生成 ruanzhu.config.json 和说明书骨架
npx github:CatCatUncle/ruanzhu-kit count # 看清点到哪些文件、多少行、排版几页
npx github:CatCatUncle/ruanzhu-kit all --doc # 出两份 PDF + 表单清单 + 留存 .doc,并回读核验页数
```
技能目录里已经有这个仓库的话(`~/.claude/skills/ruanzhu-kit/`),直接
`node ~/.claude/skills/ruanzhu-kit/bin/ruanzhu.mjs …`,不用联网。
需要 Node 18+ 和 Chrome/Chromium/Edge 任一(`CHROME_PATH` 可指定)。
下文的 `ruanzhu` 指上面任一种调用方式。
## 硬约束(错了整份重做)
| 约束 | 要求 |
|---|---|
| 源程序页码 | 超过 60 页的,交**前连续 30 页 + 后连续 30 页**,中间略;不足 60 页全交 |
| 文档页码 | 同理;但说明书**不足 30 页也可以全本提交**,不必凑页数 |
| 每页行数 | 不少于 50 行,页数在生成前算死,不许交给排版引擎漂 |
| 页眉页码 | 每页页眉标**软件名称和版本号**(与申请表一致),右上角标页码;工具自动出,核验会查 |
| 文件格式 | 在线系统**只收 PDF**,Word 只用于改字和留存 |
| 著作权人 | 与营业执照/身份证**一字不差**,含行政区划和「有限公司」后缀 |
| 源程序量 | 表单、说明页、代码统计**三处同一个数** |
## 步骤
### 1. 清点源码(最容易翻车的一步)
只收用户自己写的代码。依赖、构建产物、运行期数据、AI 生成的中间产物一律排掉——
行数虚高审查员一翻就露馅。`ruanzhu count` 会列出收进来的文件和行数最多的文件,
对着看一遍,不该在里面的加进 `ruanzhu.config.json` 的 `exclude` / `excludeFiles`。
`order` 决定拼接顺序,按「入口 → 核心模块 → 能力层 → 配置」排,让审查员看到的是
一份连贯的工程,不是按字母表打乱的文件堆。
### 2. 出程序鉴别材料
```bash
ruanzhu source --doc
```
命令跑完会回读 PDF 核验页数:超 60 页的项目应该是 **62 页**(封面 1 + 前 30 + 说明页 1 + 后 30)。
核验没全绿就别交。
页面太空可以 `--lines-per-page 60` 排密一点,上限 66 行(A4 + 2cm 边距 + 9pt)。
### 3. 写说明书,出文档鉴别材料
`init` 生成的 `ruanzhu/说明书.md` 是固定 11 章骨架:总体功能描述、运行环境、编译环境、
安装、启动、主要功能说明、软件架构、文件清单、配置文件、规范文件、常见问题。
这一步**由用户本人写**:把骨架交给用户,说明要照软件实际界面补完 `……`、截图用真实运行界面。
用户写完后,你来跑:
```bash
ruanzhu manual --doc
```
第六章「主要功能说明」要和表单里的「软件的主要功能」互相对得上,别一个写五条一个写八条。
### 4. 出表单填写清单
表单十项的分工:
- **开发/运行环境六项**:`init` 已由程序按本机配置和依赖清单预填(`ruanzhu form` 也会补空项),
这是机器读出来的事实,你可以对着项目帮用户核对——比如 Web 项目的运行平台要写服务器系统 + 客户端浏览器。
- **开发目的、面向行业、主要功能、技术特点**:**由用户本人写**,写进 `ruanzhu.config.json` 的 `form`。
把 [docs/form-fields.md](docs/form-fields.md) 的写法要点告诉用户,别代写。
用户写完后跑:
```bash
ruanzhu form
```
产出 `表单填写清单.md`,每个字段带字数和是否超限,可以直接往在线系统里粘。
空着的字段会标红,把缺哪几项告诉用户。
两个最常填反的字段:
- **开发该软件的操作系统** = 写代码用的系统;**该软件的运行平台** = 软件能跑的系统。
- 开发环境配置要**不低于**运行环境,反过来逻辑上说不通。
**软件的主要功能**必须 500–1300 字,低于 500 会被驳回。
### 5. 口吻检查
`ruanzhu form` 会在清单「口吻检查」一节挑出套话(赋能、一站式、全方位……)、「一、xx。二、xx。」式提纲、
Markdown 符号、好几句同一个开头。把检查结果原样转告用户,由用户自己改;可以转告的写法提示是:
- 先一两句说这是个什么软件、谁用;然后照着软件的菜单/页面逐个写:在哪点了什么 → 软件做了什么 → 得到什么
- 用软件里真实的菜单名、按钮名、文件格式;编号用「1、2、3、」;每条长短不齐是正常的
## 交付前自检
- [ ] 程序鉴别材料 PDF 页数核验通过(超 60 页的是 62 页)
- [ ] 说明书 PDF 页数真实,不是空壳
- [ ] 源程序量三处一致
- [ ] 著作权人与营业执照/身份证一字不差
- [ ] 说明书和四项表单描述是用户本人写的
- [ ] 表单十项全部填满,「软件的主要功能」字数落在 500–1300,50 字字段都没超
- [ ] 口吻检查没有挑出套话和 Markdown 符号
- [ ] 材料里没有依赖、构建产物、运行期数据、AI 中间产物
## 常见坑
| 坑 | 后果 | 解法 |
|---|---|---|
| 用 Word 排版导 PDF | 页数随版本漂,50 行/页能渲成 71 页 | 用本工具,分页点在生成前钉死 |
| 按行数硬切分页 | 超长行折行撑破页面 | 按折行后的高度分页(本工具默认行为) |
| 把源码「对半分再各凑 30 页」 | 代码量大时每页几百行,PDF 远不止 62 页 | 取整份源程序的前 30 页和最后 30 页 |
| 统计行数时混入 node_modules、workspace | 行数虚高,驳回 | `ruanzhu count` 核对文件清单 |
| 著作权人写简称 | 驳回 | 与证照逐字对照 |
| 文件名与上传栏位对不上 | 传错位置 | 用工具生成的 `①…` `②…` 文件名 |
| 公司申请缺权属证明 | 驳回 | 备《职务开发声明》或《软件著作权转让合同》 |
| 转让合同没写「可对外再许可」 | 公司对外授权效力存疑 | 合同须含再许可条款 |
## 法人 vs 个人
| | 法人(公司) | 个人 |
|---|---|---|
| 办理身份 | 法人或其他组织 | 自然人 |
| 著作权人 | 营业执照全称 | 身份证姓名 |
| 其他证明文件 | **必须**传营业执照 + 权属证明 | 一般不需要 |
| 适用 | 投标、申政策、商业授权 | 个人开发者 |
个人开发、公司申请的,要准备《软件著作权转让合同》,写明转让**全部财产权利**
且**含对外再许可**的权利,否则公司后续对外授权存在效力瑕疵。
在 `ruanzhu.config.json` 里把 `applicantType` 设成 `company`,表单清单会带上这段提示。
## 交付物
```
①程序鉴别材料_源程序前30页后30页_<软件名>.pdf ← 传「程序鉴别材料」
②文档鉴别材料_说明书_<软件名>.pdf ← 传「文档鉴别材料」
表单填写清单.md ← 逐字段可复制
<软件名>源程序.doc / <软件名>说明书.doc ← --doc 产出,可编辑留存
```
其他证明文件(营业执照、权属证明)由用户自己准备,命名成 `③其他相关证明文件_….pdf`。
## 没有 Node 环境时
核心只有一个算法:**按折行后的高度分页,而不是按行数**。一行 300 字符在 A4 上
(2cm 边距、9pt Courier New)会折成 4 行,每行 89 字符,每页最多 66 行。先算出每一行
占几个行高单位,累加到 50 就换页,用 `<div style="page-break-after:always">` 钉死分页点,
再用 `chrome --headless=new --no-pdf-header-footer --print-to-pdf=out.pdf in.html` 渲染。
实现见 [lib/paginate.mjs](lib/paginate.mjs)。
Files in this skill
- SKILL.md
- bin/ruanzhu.mjs
- docs/form-fields.md
- lib/collect.mjs
- lib/config.mjs
- lib/index.mjs
- lib/markdown.mjs
- lib/paginate.mjs
- lib/render.mjs
- lib/verify.mjs
- package.json
- templates/manual.md
- test/run.mjs
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.