申请软件著作权登记时,需要提交源程序鉴别材料:前后各连续 30 页、每页不少于 50 行、页眉标注软件全称+版本号……格式细节繁多,一处不合就被退回补正。手工整理一次要花几个小时,而市面上的工具要么只做简单拼接、要么依赖在线服务(代码泄露风险)。
MaZhu 把常见的软件著作权源程序材料规则整理成一套本地流水线:导入项目 → 五步向导 → 导出文档,并在导出前自动检查页数、行数、页眉和署名等风险,帮助减少手工整理错误与补正概率。
除桌面应用外,码著还提供命令行界面 (mazhu) 与 Claude Code Skill 封装(skills/mazhu/),可直接在终端或 AI 编码环境里完成整理与导出。
git clone https://github.com/kcylp/mazhu.git
cd mazhu
npm install
npm run dev # 启动桌面应用npx tsx packages/cli/src/main.ts --help
# 只扫描,看文件数 / 行数 / 预估页数
npx tsx packages/cli/src/main.ts scan ./my-project --title "我的软件 V1.0"
# 完整流程并导出 docx(--title 必填,须与申请表完全一致)
npx tsx packages/cli/src/main.ts run ./my-project \
--title "我的软件 V1.0" --out ./out
# 生成文档材料(用户使用说明书 / 设计说明书)
npx tsx packages/cli/src/main.ts doc \
--type design --spec examples/design-spec.json --out ./outdoc 命令生成软著登记所需的文档鉴别材料——用户使用说明书或设计说明书,带封面、
目录、页眉、页码。它不读代码、不分析项目,只把 spec JSON 里的章节内容排版成合规
docx;内容由你本人或 AI 提供。模板与格式见 examples/ 目录。
码著的核心是一个跨工具通用的 mazhu CLI;不同 AI 编码工具只需用各自的规则文件
告诉模型怎么调它。已支持 Claude Code、Codex、DeepSeek Harness / Kun、WorkBuddy、
Cursor、Copilot 等(基于 SKILL.md 与 AGENTS.md 两个约定):
| 工具 | 接入方式 |
|---|---|
| Claude Code | 拷 skills/mazhu/ 到 ~/.claude/skills/(或项目 .claude/skills/) |
| Codex / Cursor / Copilot / WorkBuddy 等 | 拷根目录 AGENTS.md 到目标项目根目录 |
| DeepSeek Harness / Kun | 拷 AGENTS.md 到项目根 + .agents/skills/mazhu/ 到 .agents/skills/ |
# Claude Code(macOS / Linux)
cp -r skills/mazhu ~/.claude/skills/mazhu
# Claude Code(Windows PowerShell)
Copy-Item -Recurse skills\mazhu "$env:USERPROFILE\.claude\skills\mazhu"之后说「帮我把这个项目整理成软著要的源代码材料」「帮这个项目生成软著设计说明书」就会触发,
模型会调用 CLI 的 --json 输出、并把合规校验里的风险项逐条解释给你。各工具的详细接入见
skills/README.md。
Skill 只是调用说明,实际处理仍由本地 CLI 完成——不调用大模型,无需 API key,在任何工具里行为一致。
前往 GitHub Releases 下载与本机匹配的安装包:
| 系统 | 架构 | 文件 |
|---|---|---|
| macOS | Apple Silicon(M 系列) | MaZhu-26.8.17-mac-arm64.dmg |
| macOS | Intel | MaZhu-26.8.17-mac-x64.dmg |
| Windows | x64 | MaZhu-26.8.17-win-x64.exe |
每个 Release 同时附带 SHA256SUMS.txt,下载后核对文件是否完整:
sha256sum -c SHA256SUMS.txt # macOS / Linux
certutil -hashfile MaZhu-26.8.17-win-x64.exe SHA256 # WindowsmacOS 安装说明:安装包尚未进行 Apple Developer ID 签名与公证。首次打开如果被 Gatekeeper 拦截,请先尝试打开一次,再进入“系统设置 → 隐私与安全性”,在安全提示旁选择“仍要打开”。不要从非本项目 Release 的来源下载安装包。正式签名与公证将在后续版本接入。
如果仍提示应用“已损坏”或需要“移到废纸篓”,请先确认安装包来自本项目 Release 并核对 SHA-256,然后在终端执行:
xattr -rd com.apple.quarantine /Applications/MaZhu.app open /Applications/MaZhu.app以上命令只移除
MaZhu.app的下载隔离标记。不要对来源不明的应用执行该命令。
- 🗂 目录级文件筛选 — 递归扫描项目并以真实目录树展示,支持目录三态选择、全选、清空和全局反选;设置页可维护所有项目共用的默认扫描排除规则,并与项目
.gitignore独立叠加 - 🔄 安全重新扫描 — 源码在应用外部变化后可手动重扫;保留当前项目配置与未保存修改,同时使旧处理、分页、校验和导出结果立即失效
- 📊 文件类型构成与按后缀导出 — 按文件数/代码行查看完整与已纳入构成,可一键只保留
.java等指定后缀参与清洗和导出 - 🧹 状态机代码清洗 — 逐字符识别注释与字符串边界(
"https://..."里的//不会被误删),支持 Java/Kotlin/Python/JS/TS/Go/Rust/C/C++/C#/Swift/PHP/Ruby/Vue/HTML/CSS/SQL 等 30+ 后缀;删空行、Tab 转空格、超长行按 78 列硬折断 - 🔒 敏感信息脱敏 — API 密钥、密码、内网 IP、手机号自动替换为占位符
- 📄 规范化截取分页 — 超 3000 行自动取前 1500 + 后 1500 行;第 1 页必为模块开头、第 60 页必为模块结尾;每 50 行显式分页符,不靠排版"凑页"
- 📝 一键导出 — docx(页眉=软件名+版本号、右上角自动页码、宋体 10.5pt 固定行距)+ txt 备查
- 📚 文档材料生成 — 按内置章节骨架生成《用户使用说明书》或《设计说明书》,带封面、目录、页眉、页码,同样遵循前后各 30 页截取;内容由 spec JSON 提供,可在 AI 环境中自动撰写(见
examples/) - ✅ 提交前风险校验 — 检查有效内容、每页行数、末页 2/3、页眉一致性、首末页边界和
@author/Copyright署名冲突,给出「通过 / 警告 / 退回风险」三级结论 - 🔔 GitHub Release 更新检测 — 启动时自动查询最新正式版本,发现更新后可跳转 Release 下载页;失败不影响核心功能
- 🔐 源码处理完全离线 — 扫描、清洗、排版、导出零网络请求,源代码永远不离开本机;版本检测只请求公开版本元数据
- 📌 最近项目管理 — 常用项目可置顶,失效或不再使用的记录可单项或批量移除;移除记录不会删除磁盘项目
- 💾 配置与窗口持久化 — 项目选择与导出配置存入
.mazhu.json;应用级规则、最近项目和窗口状态安全保存在本机配置目录
| 规范要求 | MaZhu 的实现 |
|---|---|
| 前、后各连续 30 页,共 60 页 | 超 3000 行自动截取前 1500 + 后 1500 行 |
| 每页不少于 50 行 | 内存中按 50 行切块 + 显式分页符,逐页保证 |
| 页眉标注软件全称+版本号 | 导出时写入页眉,未含版本号会在校验中警告 |
| 页码 1–60 连续 | docx PAGE 域自动编号 |
| 第 1 页为程序开头、第 60 页为结尾 | 截取策略从首文件首行起、至末文件末行止 |
| 无空行、注释不凑页 | 清洗阶段删除(可关闭) |
| 末页至少满 2/3 | 校验器检查并提示 |
| 署名与著作权人一致 | 全文扫描 @author/Copyright 并比对 |
依据:《计算机软件著作权登记办法》及中国版权保护中心公开审查口径。本工具不构成法律建议,最终以登记机构要求为准。
git clone https://github.com/kcylp/mazhu.git
cd mazhu
npm install
npm run dev # 启动桌面应用
npm test # core 流水线冒烟测试
npm run verify # 版本一致性 + 测试 + 完整构建国内网络提示:Electron 二进制下载失败时执行
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ node node_modules/electron/install.js
① 导入项目(拖入文件夹)→ ② 文件与排序(勾选纳入、拖拽调序,入口文件置顶)→ ③ 清洗与排版(填写软件全称+版本号、开关清洗规则、实时前后对比)→ ④ 分页预览(A4 仿真、60 页缩略导航、前后段分界标记)→ ⑤ 校验与导出(合规报告 + 生成 docx/txt)
packages/
core/ 纯 TypeScript 流水线,零 Electron 依赖(未来可复用为 CLI / Web)
discover → clean → select → render → audit
app/ Electron 43 + React 18 + zustand(electron-vite 构建)
design/
prototype/ Claude Design 高保真原型(UI 实现基准)
icon/ 应用图标源文件(SVG)
docs/ 功能设计、技术选型与原型 prompt
scripts/ 图标生成等工具脚本
关键技术决策(详见 docs/01-功能设计与技术选型.md):
- 显式分页而非排版凑页 — 分页符逐页控制,固定行距只作兜底,换字体不错位
- 注释剥离用逐字符状态机而非正则 — 字符串字面量内的注释符号是正则流派的必错题
- 截取锚定首末边界 — 首页从第一个入选文件开头开始,末页以最后一个入选文件结尾收束;前后段内部按行精确截取
- core 零壳依赖 — 业务全部沉在纯 TS 包,Electron 只做 IO 与窗口
Q:生成的文档能直接提交吗? 生成的 docx 已按应用内置规则排版,可作为源程序鉴别材料的准备稿。提交前仍应查看第 5 步报告、清零「退回风险」,并以登记机构最新要求和申请主体的实际情况为准。本工具不构成法律建议。
Q:macOS 提示无法验证开发者,怎么办?
当前 macOS 安装包尚未签名与公证,请确认安装包来自本项目 Release 并核对 SHA-256,然后按照下载章节的 Gatekeeper 指引手动放行;如果系统仍提示移到废纸篓,可使用该章节提供的 xattr 命令移除本应用的下载隔离标记。后续版本会接入 Developer ID 签名与 Apple 公证。
Q:我的代码会被上传吗? 不会。扫描、清洗、排版和导出全部在本机完成。版本检测只会向 GitHub 查询公开的 Release 版本号、发布日期和更新说明,不会发送项目路径、源码、配置或用户身份数据。只有你点击“查看并下载”或其他 GitHub 链接时,系统浏览器才会打开对应网页。
- v26.8.17(V1.0):命令行界面(CLI)· 多工具 Skill 封装 · 文档材料生成(用户手册/设计说明书)· 分页与扫描缺陷修复 · 脱敏规则强化
- 后续版本:多目录导入 · 成立日期输入 · 自定义脱敏规则 · 校验项一键修复 · Linux 安装包 · macOS 签名与公证 · 应用内下载/安装更新
- V3:例外交存模式(黑斜线覆盖)· 多申报主体管理
码著基于上游 CodeSucker(Apache-2.0)开发,其 v0.1.0–v0.4.4 的版本演进历史保留在 CHANGELOG.md 与 NOTICE 中,此处不重复罗列。
MaZhu 使用 Semantic Versioning。根包、桌面应用、core 包和 lockfile 的产品版本由统一脚本同步;项目配置 schema 与合规规则版本独立演进。
npm run version:check # 检查所有版本字段一致
npm run version:set -- 0.2.0-beta.1 # 统一设置产品版本
npm run verify # 发布前完整校验正式发布以 v<SemVer> Git tag 和 GitHub Release 为准,仅修改源码中的版本字段不代表已经发布。完整规则见 VERSIONING.md,用户可见变化记录在 CHANGELOG.md。
欢迎 Issue 与 PR。提交前请确保 npm run verify 通过;提交信息请说明动机而不止是改动内容。
遇到问题或有建议,欢迎微信交流;如果这个工具帮到了你,也欢迎打赏支持作者持续维护:
| 微信联系 | 赞赏支持 |
|---|---|
![]() |
![]() |
Apache-2.0 © kcylp
本项目允许使用、修改、分发及闭源商用;再分发时须附带 Apache-2.0 许可证、保留适用的版权与 NOTICE 声明,并标明对文件所作的修改。
安装包同时附带 THIRD_PARTY_NOTICES.txt,列出实际分发与打入应用 bundle 的第三方依赖、许可证选择和完整归属文本。
码著是 CodeSucker(Copyright 2026 fanbuz,Apache-2.0)的派生作品。依据许可证要求,上游版权与归属声明保留在 NOTICE 中,本派生作品所作的修改逐项记录在 CHANGELOG.md。
码著在上游基础上重写了取材与校验环节,主要差异:
| 上游 CodeSucker | 码著 MaZhu | |
|---|---|---|
| 截取分页 | 页数为奇数时下标出现分数,末页残缺 | 按整页边界取材,页码连续性纳入导出前校验 |
| 文件发现 | 跳过点开头目录、只读根 .gitignore |
覆盖 .config/ 等点目录,逐层叠加嵌套 .gitignore |
| 敏感信息 | 4 条规则,仅匹配带引号赋值 | 覆盖无引号 YAML、私钥块、JWT、云厂商密钥、证件号 |
| 导出前校验 | 页码连续性为无条件通过 | 实际逐页验证,并提示代码量不足时转全量提交 |
| 使用方式 | 桌面应用 | 桌面应用 + 命令行(packages/cli),可接入 CI |
| 超限文件 | 静默丢弃 | 列出被跳过的文件与原因 |
六项差异中,前四项是会直接导致材料被退回或泄密的缺陷,逐条说明原因:
截取分页。 上游用 limit / 2 平分前后两段,limit 为奇数时下标带小数,slice 截断后中间会多出一页不足行的页面,而这恰好会被它自己的导出前审计判为不合格。码著改为按整页边界取材,前后段各自落在页边界上,页码连续性进入校验项而不是假定成立。
文件发现。 上游 dot: false 使所有点开头的路径不可见,.config/ 下的源码、.eslintrc.js 一类配置永远进不了材料;.gitignore 又只读根目录一份,monorepo 各子包的忽略规则全部失效,README 承诺的"叠加项目忽略规则"实际未生效。码著扫描点目录,并逐层叠加嵌套 .gitignore。
敏感信息。 上游 4 条规则只认 key = "value" 这种带引号的赋值,YAML 里不带引号的 password: abc123、-----BEGIN PRIVATE KEY----- 私钥块、JWT、云厂商密钥、证件号一概漏过。软著材料是要交到审查机构的,这类内容一旦随源码提交无法撤回。码著补齐了上述模式。
导出前校验。 上游审计的第 4 项(页码连续性)是无条件返回通过,等于没做。码著实际逐页验证,并在代码量不足 60 页时明确提示转为全量提交,而不是让用户自行发现。
横向看,这一品类的公开工具普遍停在"能生成 docx":多数仅支持单一语言或依赖手写注释规则表,.gitignore 处理少有人做,敏感信息脱敏几乎全员缺失,前 30 页 + 后 30 页的精确裁剪常见做法是提示用户"手动删除末尾几页",导出前的合规自检则基本没有。少数在线服务能一次出齐材料,但需要把源码上传到对方服务器,对未公开的商业项目是实质风险。码著全程本机处理、不发起网络请求,同时把脱敏、嵌套忽略规则、逐页校验和命令行接入补齐——这几项目前在同类工具中少见同时具备。



