gzh-studiolisted
Install: claude install-skill Roloyty/gzh-studio
# 公众号内容 Studio
这是一个**编排层**。四套上游能力已经 vendored 在 `vendor/` 下,本文件不重复它们的方法论,只负责三件事:
1. **路由**——判断用户要跑整条流水线还是其中一环。
2. **衔接**——定义每个阶段的产物契约,让下一阶段能确定性地接住上一阶段。
3. **裁决**——四套 skill 的规则互相冲突时,谁让谁(这是本 skill 存在的主要理由,见 [references/conflict-rules.md](references/conflict-rules.md))。
| 阶段 | 能力来源 | 许可证 |
|------|---------|--------|
| 写作 | `vendor/khazix-writer/` | MIT |
| 标题 | `vendor/viral-title/` | MIT |
| 排版 | `vendor/gzh-design/` | AGPL-3.0 |
| 封面 | `vendor/cover-skill/` | MIT |
归属与许可见 [NOTICE.md](NOTICE.md)。
## 运行环境
跑任何脚本之前先看这三条,四个 vendor skill 都是在类 Unix 环境下写的,直接照抄它们的命令在 Windows 上会挂。
1. **没有 `python3`,只有 `python`。** 本文件和 vendor 各 SKILL.md 里的 `python3 xxx.py` 一律换成 `python xxx.py`,否则 command not found。
2. **vendor 脚本必须带 `PYTHONUTF8=1`。** 它们往 stdout 打中文和 emoji,Windows 默认 cp936,不带这个环境变量会直接 `UnicodeEncodeError` 崩掉——`validate_gzh_html.py` 是排版阶段的强制闸门,崩了就等于跳过了校验。
```bash
PYTHONUTF8=1 python vendor/gzh-design/scripts/validate_gzh_html.py <file>
```
PowerShell 里写成 `$env:PYTHONUTF8=1; python ...`。
本 skill 自己的 `scripts/*.py` 已经在代码里强制了 UTF-8,不需要这个前缀。
3. **vendor 里的相对路径是相对它自己目录的。** vendor 的 SKILL.md 写 `references/xxx.md`、`scripts/xxx.py` 时,实际要拼成 `vendor/<skill>/references/xxx.md`。
`<SKILL_ROOT>` 指本 SKILL.md 所在目录。
## 阶段路由
先判断用户要什么,不要默认整条跑完。
| 用户说 | 从哪进 | 跑到哪 |
|--------|--------|--------|
| 「写一篇公众号」「从头做一篇」「全流程」 | 阶段 0 | 阶段 6 |
| 「帮我写篇文章」「按我风格写」(没提排版封面) | 阶段 1 | 阶段 2,然后**问一句**要不要继续起标题/排版/封面 |
| 「给这篇起个标题」「标题不好换一批」 | 阶段 3 | 阶段 3 |
| 「把这篇排版了」「转成公众号 HTML」 | 阶段 4 | 阶段 4 |
| 「做个封面」 | 阶