关于 ppw:team
ppw:team 是用于按章节编排论文处理的 Skill,面向需要运行 translation、polish 或 de-ai 的用户。当前版本将论文拆分并通过单个子代理处理选定章节,以质量确认门控概念验证;完整并行处理尚未实现。
主要功能
- 01拆分 LaTeX 或 Markdown 论文章节
- 02支持 guided 和 direct 模式
- 03校验目标 Skill 与文件格式
- 04运行单章节子代理概念验证
- 05记录清单、备份和处理状态
适用场景
- 01对论文章节进行翻译处理
- 02逐章润色或降低 AI 文风
- 03先验证子代理输出质量再继续
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ lylll9436/ paper-polish-workflow-skill --skill ppw:team安装后在 Claude Code 中输入/ppw:team确认已加载。
详细介绍
用途
此 Skill 通过将论文拆分为 H1 章节,并向子 Agent 分派符合条件的 Skill,来协调并行论文处理。在 Phase 19(当前阶段),它通过在一个章节上运行单个子 Agent,验证概念验证关卡。跨所有章节的完整并行分派将在 Phase 20 进行。
触发条件
在以下情况激活: 调用 ppw:team [skill] [file]。
示例:
- “ppw:team polish paper.tex” / “团队模式润色论文”
- “ppw:team translation draft.md” / “并行翻译论文各章节”
- “ppw:team de-ai paper.tex”
模式
| 模式 | 默认值 | 行为 |
|---|---|---|
guided | 是 | 拆分 -> 用户确认章节 -> 用户选择概念验证章节 -> 运行概念验证 -> 用户确认质量 |
direct | 跳过确认,自动选择所有正文章节,并选择第一章进行概念验证 |
模式推断: 触发内容中包含“直接”或“direct”时,切换为 direct 模式。
参考资料
required: [] -- 此 Skill 本身不生成学术文本。它负责协调其他 Skill,这些 Skill 会在运行时加载各自的参考资料。协调器不需要参考文件。
询问策略
guided 模式 -- 通过 AskUserQuestion 设置三个交互点:
- 拆分后选择章节(multiSelect)
- 从选定章节中选择概念验证章节(单选)
- 确认概念验证质量(批准/重试/退出)
direct 模式 -- 跳过全部三项:自动选择所有正文章节(排除前言和参考文献),自动选择第一章正文进行概念验证,并自动批准概念验证输出。
工作流
步骤 0:工作流记忆(仅记录)
- 跳过模式检测 -- 协调器不适合自动推荐 direct 模式。
- 在步骤 1 验证后记录(见步骤 1)。
步骤 1:解析参数并验证
- 解析
$ARGUMENTS,提取:Skill 名称(第一个词)和文件路径(其余词)。 - 根据白名单验证 Skill 名称:
["translation", "polish", "de-ai"] - 如果 Skill 不在白名单中,使用确切消息拒绝:“[Skill] 需要完整论文上下文,无法并行运行。请直接运行 /ppw:[skill]。”
- 验证文件存在且格式为
.tex或.md。如果找不到文件或格式不正确,报告错误并停止。 - 读取论文文件内容。
- 记录工作流: 将
{"skill": "ppw:team", "ts": "<ISO timestamp>"}追加到.planning/workflow-memory.json。如果文件不存在,则创建为[]。如果日志长度 >= 50,则删除最旧条目。
步骤 2:创建工作目录
- 创建
.paper-team/目录结构:sections/、output/。 - 如果
.paper-team/已存在:在 guided 模式下询问是否覆盖或取消;在 direct 模式下静默覆盖。 - 备份原论文:
.paper-team/{filename}-backup-{YYYYMMDD-HHmm}.{ext}(添加时间戳,避免重复运行时覆盖)。 - 初始化
.paper-team/manifest.json:
{
"version": "1.0",
"created": "<ISO timestamp>",
"source_file": "<original file path>",
"source_format": "tex|md",
"target_skill": "<skill name>",
"sections": [],
"poc": { "section_id": null, "status": "pending", "timestamp": null },
"backup": "<backup filename>"
}
步骤 3:将论文拆分为多个部分
对于 .tex 文件:
- 前言:从文件开头到
\begin{document}(含)之间的所有内容。标记为“00 - 前言”。 - 参考文献:从
\bibliography{}或\printbibliography到\end{document}之间的内容。标记为“99 - 参考文献”。 - 章节边界:每个
\section命令。匹配\section,后跟可选的*、可选的[...],然后是{...}。忽略以%开头的行(LaTeX 注释)。 \begin{document}与第一个\section{}之间的内容为“00 - 章节前内容”(去除首尾空白后非空时)。- 每个章节:从
\section{标题}所在行开始,到下一个\section{或参考文献边界之前一行为止。
对于 .md 文件:
- Frontmatter:第一个
#标题之前的内容。标记为“00 - Frontmatter”(非空时)。 - 在以
#开头的行处分割(H1 标题)。 - 每个 H1 标题及其内容,直到下一个
#,构成一个章节。
章节文件命名:{NN}-{sanitized-title}.{ext},其中 NN = 补零后的序号,sanitized-title = 标题转为小写、空格替换为连字符、移除特殊字符,最多 50 个字符。前言:00-preamble.{ext}。章节前内容:00-presection.{ext}。参考文献:99-bibliography.{ext}。Frontmatter:00-frontmatter.md。
边缘情况:
- 没有
\section{}命令:将整个正文视为“01 - 完整正文”。 - 只有一个章节:警告用户并行处理没有意义;仍继续执行 PoC。
- 空章节(边界之间没有内容):跳过,不创建文件。
将每个章节写入 .paper-team/sections/{filename}。更新 manifest.json 的 sections 数组,为每个章节添加 { "id": "NN", "title": "...", "file": "sections/filename", "selected": false, "status": "pending" }。
步骤 4:选择章节
**引导模式:**通过 AskUserQuestion 的 multiSelect 展示所有检测到的章节:
AskUserQuestion({
question: "Select sections to process with ppw:{skill}:\n选择要用 ppw:{skill} 处理的章节:",
multiSelect: true,
options: [
{ label: "NN - Title", description: "brief description or first line" }
]
})
更新 manifest.json,将所选章节的 selected 设为 true。
**直接模式:**自动选择除 id 为 "00"(前言/章节前内容/Frontmatter)和 "99"(参考文献)以外的所有章节。相应地更新 manifest。向用户显示所选章节。
步骤 5:选择 PoC 章节
**引导模式:**通过 AskUserQuestion 展示所选章节(单选):
AskUserQuestion({
question: "Select one section for proof-of-concept test:\n选择一个章节进行概念验证测试:",
options: [
{ label: "NN - Title", description: "will be processed by a subagent" }
]
})
**直接模式:**自动选择第一个已选章节(所选章节中 NN 编号最小的章节)。
步骤 6:执行 PoC 门禁
- 从
.claude/skills/ppw-{skill}/SKILL.md读取目标 Skill 的 SKILL.md。如果未找到,报告错误:“在 .claude/skills/ppw-{skill}/SKILL.md 中找不到 Skill ppw:{skill}”,并停止。 - 从
.paper-team/sections/{file}读取所选章节文件。 - 构造子 Agent 提示词(使用此模板原文,并填入占位符):
You are executing a paper section processing task in direct mode.
## Skill Instructions
{FULL CONTENT OF TARGET SKILL.MD INSERTED HERE}
## Task
Process the following paper section file using the Skill instructions above.
- Input file: .paper-team/sections/{section-filename}
- Mode: direct (skip all AskUserQuestion calls, skip Workflow Memory Step 0)
- Write output to: .paper-team/output/{section-filename}
- Do NOT ask the user any questions. Proceed with defaults.
- Load all required references as specified in the Skill instructions.
- Produce output as if you were running the Skill directly on this section.
- If the Skill normally edits in-place, instead write the processed output to the output path above.
- 使用此提示词,通过 Agent 工具启动一个子 Agent。
- 等待子 Agent 完成。
- 更新
manifest.json:将poc.section_id、poc.status设为 "completed",将poc.timestamp设为当前 ISO 时间戳。将该章节的status设为 "completed"。
步骤 7:确认 PoC 质量
**引导模式:**从 .paper-team/output/{file} 读取子 Agent 输出。向用户显示一段简短摘录(前 20–30 行)。然后询问:
AskUserQuestion({
question: "PoC gate: Is the subagent output quality acceptable?\n概念验证:子代理输出质量是否可接受?",
options: [
{ label: "Approved - PoC gate passed", description: "Quality is comparable to main-session execution" },
{ label: "Retry", description: "Re-run PoC on the same section" },
{ label: "Exit", description: "Stop orchestration, quality is not acceptable" }
]
})
- **批准:**将
manifest.json中的 poc.status 更新为 "passed"。显示:“PoC 门禁已通过。ppw:team 编排器已通过验证。若要并行处理所有章节,请使用第 20 阶段的并行分发(即将推出)。” - **重试:**返回步骤 6。最多循环 3 次,然后建议退出。
- **退出:**将
manifest.json中的 poc.status 更新为 "failed"。显示消息,并建议直接运行 Skill:“/ppw:{skill} {file}”
**直接模式:**自动批准(将 poc.status 设为 "passed"),显示输出的前 10 行和成功消息。
输出契约
| 输出 | 格式 | 条件 |
|---|---|---|
section_files | .paper-team/sections/ 中的独立文件 | 第 3 步后始终生成 |
manifest | .paper-team/manifest.json | 始终生成,并在整个工作流中持续更新 |
poc_output | .paper-team/output/ 中的单个文件 | 第 6 步后生成 |
边缘情况
| 情况 | 处理方式 |
|---|---|
论文没有 \section{} 命令 | 将整个正文视为一个章节“01 - Full Body” |
| 论文只有一个章节 | 提示并行处理没有益处;继续执行 PoC |
| 文件路径包含空格 | 在所有读取/写入操作中为文件路径加引号 |
.paper-team/ 已存在 | 询问是否覆盖或取消(引导模式)/静默覆盖(直接模式) |
| 子 Agent 失败或超时 | 报告错误,并建议重试或退出 |
\section*{}(无编号) | 作为章节边界匹配(模式包含可选的 *) |
\section[short]{long}(可选参数) | 作为章节边界匹配(模式包含可选的 [...]) |
| 空章节(边界之间没有内容) | 跳过空章节,不创建文件 |
回退方案
| 场景 | 回退方案 |
|---|---|
| 结构化交互不可用 | 通过纯文本提问来选择章节 |
| Agent 工具失败 | 报告错误;建议直接在该章节上运行 Skill |
| 找不到目标 Skill 的 SKILL.md | 报告:“在 .claude/skills/ppw-{skill}/SKILL.md 中找不到 Skill ppw:{skill}” |
.planning/workflow-memory.json 缺失 | 追加内容前将其创建为 [] |
Skill:ppw-team 约定:references/skill-conventions.md