Install
$ agentstack add skill-pwya-md-paper-md-triage ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
md-triage — 任意修订意图 → 离散条目清单(第三代·改稿起头)
> ⛔ 路由铁律:本 skill 属第三代 md-*。它把【任意输入】整理成 md_triage.md(离散修订条目清单),停在人工闸;下游 md-swarm 据此批量并行改 manuscript.md。对应第一代 reviewer-triage,但通用于任意来源(不止审稿意见),且不碰 docx 占位符。 > 🧭 定位铁律(决定什么时候用它):md-triage 是【大批量乱意见】的专属入口——一堆审稿意见 / 一份长重构方案 / 一摞语音记录,手改扛不动时才上。小修不经过它:① 改错字/调一两句 → 直接手改 manuscript.md → /md-build;② 让 AI 改某一两处(你直接指哪儿)→ md-iterate;③ 大批量乱意见 → 本 skill → md-swarm。别为小修启动这套重机械。
> 🩺 环境自检(可选·WARN 级):md-triage 不碰 manuscript.md,风险低,但开工前可顺手跑一次共享环境闸,及早发现保护钩子被 cc-switch 刷掉: > `` > py "\preflight.py" --mode warn --context md-triage > ` > 它只**提醒**不阻断(绿则继续,红则照设计兜底:下游 md-unpack / md-swarm` 会硬拦)。原理见开发手册 §7.6。
它干什么 / 不干什么
- ✅ 干:读任意输入 → 归一成离散条目 → 分类 / 合并 / 分批 → 写
md_triage.md→ 停。 - ❌ 不干:不改
manuscript.md(那是md-swarmPhase 2 的事)、不出 Word(那是md-build)、不下载外部文献(只列清单提示你去取)。
总流程
第一段【归一】 任意输入 → ①确定性前闸(认格式/原生读/瘦身/分块) → ②LLM抽离散条目(+置信度) → ③确定性后检
第二段【整理】 条目清单 → 五维分类 / 真实章节 / 纯评价过滤 / 合并簇 / 外部资源 / 分批方案
▼
写 swarm/md_triage.md(顶部「人工确认:待确认」令牌 + 行序约束)→ 自检 → 停!汇报、交还用户
▼ 人工闸:用户审清单(标跳过 / 写「人类修改思路」/ 改批次 / 把令牌改「已确认」)→ 交 md-swarm
> ⛔ DeepSeek-proof 铁律:你(AI)永远不许自己把令牌从「待确认」改成「已确认」。第一段+第二段跑完就停、汇报、交还控制权。 > ⛔ 人类修改思路铁律:每条的 **人类修改思路:** 是作者的批注槽——AI 永不填写,一律只留 (你填) 占位。往里写任何内容 = 越权替作者说话(实测弱模型会犯这个错)。自检会查它是否全为占位。 > ⛔ 令牌格式铁律:顶部令牌行必须逐字是 **人工确认:** 待确认(单独一行、最顶),别改写成别的样子——下游 gate 钩子和用户都只认这一行。
两条出错铁律(任何时候不可破)
- 🌐 语言铁律:条目的「原文」字段逐字保留输入原语言(英文意见就留英文原文);摘要用中文。改稿语言由下游守,但本步绝不翻译原文。
- 🚫 不瞎猜铁律:模型读不了的东西(读花的扫描件、非多模态模型遇到的图)→ 停下问用户要文字,绝不凭空编一条意见(见 0.1 末)。
第一段 · 归一(把任意输入变成离散条目)
> 核心原则:别按"输入长啥样"分类,按"产出 = 一条条离散可操作条目"定义这一步。 输入无穷,产出唯一形状。唯一让 AI 放手的是 0.2「抽条」,它被 0.1 的确定性前闸 + 0.3 的确定性后检 + 后面的人工闸夹住。
0.1 确定性前闸:认格式 → 原生读(text-first)→ 瘦身 → 分块
读取 cascade(查表选路,先试最便宜的原生读法,读不出才升级):
| 输入 | 怎么读(依次尝试) | |---|---| | .md / .txt | 直接 Read | | .pdf | ① pdftotext -layout "" -(Bash/PowerShell);② 抽不出 / 满屏乱码方块 → Skill anthropic-skills:pdf(自带 OCR) | | .docx 正文 | 三级:① mcp__docx-mcp__(open→extract→close,只读文字;多数版本只回结构计数、抽不到正文是正常的)→ ② Skill minimax-docx(提全部段落文字)→ ③ Skill anthropic-skills:docx | | .docx 里的批注(Word comments) | 意见直接来自 Word 批注(导师/审稿人在稿子上批的)。先看 swarm/comments_raw.json 在不在:在 → md-unpack 摄取同一篇时已抠好,直接 Read 它,别再解析一次;不在(批注在另一份后到的 docx 上)→ 当场调共享解析器 py "%USERPROFILE%\.claude\skills\md-unpack\read_docx_comments.py" --docx --out swarm\comments_raw.json --print(纯 zip+XML、不用 Word COM)。每条 = author(来源)+ comment(=修订诉求,进 0.2 抽条)+ anchor(=被批注的原文片段,直接当该条「原文」+ 拿去 manuscript.md 里子串匹配定「目标位置/章节」)。 | | 图片 .png/.jpg / 扫描件 | ① 先让(多模态)模型直接读图(Read 图片,模型能看图就直接看);② 模型非多模态(如 DeepSeek)/ 读花了 → 上 OCR(Skill anthropic-skills:pdf 或 tesseract);③ 还不行 → 停下,告诉用户"这是图片我读不可靠,请把内容转成文字给我"。绝不凭空编。 | | 多文件 / 一个文件夹 | 逐个按上述读;只读修订意图相关文件(跳过明显的归档 / LEGACY / 演示文稿目录),但仍以"逐字原文片段"为准防漏。 |
预瘦身(确定性,借 reviewer-triage 附注 B):剥邮件头(From:/To:/Subject:/Date:)、多重引用前缀(> />> )、客户端签名(-- 开头、Sent from my iPhone)。保留正文与分隔线索。
健全性(确定性,借 reviewer-triage 附注 A):全文 -C(R1-C1);编辑 → ED-C1;自撰方案 → P1, P2…;散稿 / 语音 / 便签 → N1, N2…`。
- 原文片段:从输入里【逐字摘录】触发这条改动的那句 / 那段(供人工核对,不许转述 / 改写;保留原语言)。
- 一句话摘要:中文,说"要把论文改成什么"(提炼诉求,不是翻译原文)。
- 目标位置(初猜):这条改动大概落在论文哪节 / 哪处(拿不准写"待定")。
- 抽取置信度:
高/中/低——结构清晰、原文片段明确 = 高;靠语义硬抽、来源模糊、OCR 来的 = 低。(仅用于在人工闸提醒你重点看;不附带任何换模型建议。)
怎么拆(优先级,别硬套):
- 输入有天然边界就顺着拆:审稿人块(
Reviewer N/审稿人N/Referee N/Editor Comment)、编号项(1.1)(1)Comment 1:)、小标题(##/一、二、)→ 每个边界单元起一条。 - 没天然边界(连续散文、语音转写)→ 按语义抽:每出现一个不同的、可操作的改动诉求切一条。
- 一个边界单元里塞了多个不同改动 → 拆成多条(宁多拆别漏)。
保守铁律:
- 宁可多拆、别漏:两诉求拿不准是不是一回事 → 分成两条(合并交给第二段「合并簇」+ 人工闸)。
- 纯客套 / 总评("写得很好"/"选题有趣",无修改动词、无具体锚点)→ 仍给编号、第二段标
纯评价:是,不当改动条目(判定见第二段 P.纯评价)。 - 需你(人类)线下做的(重算数据 / 补采集 / 版权许可)→ 标出来(第二段「需人类操作」),别当成 AI 能改的文字条目。
- 绝不发明输入里没有的诉求;绝不替用户决定删改方向——你只是把他说的整理清楚、不加戏。
0.3 确定性后检 + 护栏
- regex / grep 查:每条都有非空"原文片段"吗?编号连续不跳号吗?任一缺 → 把那条标
⚠️待补。 - 低信心条目挑出:
抽取置信度 = 低的,汇总到汇报里,在人工闸提示用户"这几条我没把握,你重点核一下原文片段对不对、有没有抽歪"(不提任何换模型)。 - 本 skill 不做覆盖保护:它是跑一次往下走的起头,正常不重跑;若你确要重跑,自行先备份当前
md_triage.md。
产出:一份离散条目清单(每条 = 编号 / 原文片段 / 摘要 / 目标初猜 / 置信度)→ 进第二段整理。
第二段 · 整理(分类 / 合并 / 分批 → 写 md_triage.md)
> 移植自第一代 reviewer-triage 的分类体系,已内联,不外链。维度里只有涉及章节 / 改动类型 / 需人类操作真正驱动机器与安全;内在逻辑分类、重要性纯为人读展示,不必纠结其周全(嫌不全加「其他」兜底)。
P.分类(每条标这些维度,查表匹配,不靠 AI 瞎猜)
① 内在逻辑分类(展示用·选一主类,关键词上→下优先、首个命中即采纳;全不中 → 不明):
- 理论:
framework|mechanism|theoretical|hypothesis|propose|concept|logic|causal|literature|prior - 实证:
data|variable|sample|estimation|robustness|endogeneity|regression|model|identification|standard error|coefficient|significant|specification - 贡献:
contribution|novel|original|advance|first|distinct|difference|marginal contribution - 局限:
limitation|generaliz|future research|caveat|bound|scope|external validity - 写作:
wording|phrasing|typo|awkward|unclear|table|figure|caption|heading|structure|organize|grammar|format|readability|flow
② 重要性(展示用·选一):重大 major|critical|essential|substantial|fundamental|important|significant concern;次要 minor|suggest|could|optional|consider|might|may wish to。同时命中取重大;都不中默认次要。
③ 涉及章节(⚠️ 真驱动分批/并行·选最相关一个,只取这 9 值):引言 / 理论 / 数据 / 方法 / 结果 / 结论 / 附录 / 全局 / 不明。
- 真实章节匹配(有 manuscript.md 时):从
manuscript.md提取所有^##\s+标题构成枚举集 S,按四级匹配:① 原文出现 S 中某标题全文(子串、忽略大小写)→ 该章节;② 关键词近邻(Introduction/Data/Method/Result/Conclusion/Appendix 映射);③ 跨两章节 →章节A + 章节B;④ 都不中 → 取 9 值里最贴近的(拿不准用不明/全局)。只输出 S 中原文原字,不自创。 无manuscript.md→ 用上面 9 值枚举里最贴近的一个填,不写切片路径。
④ 需人类操作(⚠️ 真阻断闸·多类取成本高者:补充采集 > 版权/许可 > 数据修改):
- 数据修改:
recalculat|recode|correct the coding|reclassif|re-cod|transform the variable - 补充采集:
sample size|insufficient N|follow-up survey|additional wave|merge with .*data|qualitative interview|expand the sample|collect additional - 版权/许可:
permission|copyright|data use agreement|license|terms of use|authorization - 都不中 →
无。(仅跑回归 / 换设定 / 稳健性不算——那是文字层面,下游 agent 能改。)
⑤ 改动类型(引用授权开关·⚠️ 真决定引用安全):补丁(默认,引用必须全保留)/ 重写(授权动这节引用)。据意见预判:只 reword/补句/改措辞 = 补丁;明确要整段重写 / 删节 / 换框架 = 重写。人审时可改(把误判的重写改回补丁 = 锁死引用)。
P.纯评价过滤(客套话跳过)
三条同时满足才判纯评价(否则保守保留):① 无修改动词(无 should/must/revise/clarify/add/remove/请/建议/补充);② 无具体锚点(没指向某节/图/句/变量);③ 整体性总评或致辞(well-written/interesting/congratulations/总体而言)。三条全中 → 标 **纯评价:** 是,不入合并、不进分类计数,但编号不跳号。
P.合并簇
把"核心诉求相同 + 指向对象相同"的合并成簇(一个下游小工一次处理,避免不一致):
- MC-N(跨审稿人共识·成员来自 ≥2 个来源)/ MD-N(同一来源重复)。
- 只生成涵盖 ≥2 条原条目的簇;严守保守原则:拿不准就不合并。被合并的原条目下加
**所属合并簇:** MC-N(…)。 - 冲突归类:某条目同时满足 ≥2 簇 → 不自动选,列入「⚠️ 冲突归类清单」交用户裁决,且该条目不写
**所属合并簇:**。
P.外部资源提取
意见要求引用某文献 / 用某数据库 / 采用某方法 / 查某政策 → 按 8 类(文献/数据/数据修改/补充采集/方法工具/政策制度/版权许可/其他)列成 X-N 清单,单列第四部分,提示用户先备齐再改稿。隐含引用收紧:仅"人名+年份 + 对话/比较意图动词"才提取;模棱两可不列、仅备注线索。
P.分批方案(Task N Agent M·并行的依据)
AI 据"涉及章节 + 分类 + 合并簇"给默认分批,triage 顶部写「分批方案总览」+ 每条加 **批次:** Task N Agent M:
- 涉及不同章节的普通条目 → 可同批并行(一批 ≤5 个小工,DeepSeek 友好)。
- 涉及同一章节的多条 → 排到不同 Task(串行),避免撞车。
- 整节重写(改动类型=重写) + 搬动类 → 单独占一个 Task(批大小 1),不并行。
- 合并簇 → 一个小工处理整簇(簇算 1 个任务)。
- 纯评价 / 需人类操作未完成 → 不派(批次填
—)。 - 人审可改:你改某条
Task N Agent M即可;下游只认"同 Task 并行、不同 Task 排队"。改了「涉及章节」AI 只提示"批次可能要调",不自动改。
P.写 swarm/md_triage.md(结构 + 行序约束)
写到 \swarm\md_triage.md(工作目录 = 输入文件 / manuscript.md 所在目录)。每条字段严格按这个相对行序(下游靠它解析,不得调换;某行无内容则整行省略、不得换位):
四级标题 → 所属合并簇 → 涉及外部资源 → 需人类操作 → 纯评价 → 涉及章节 → 批次 → 改动类型 → 抽取置信度 → 中文摘要 → 原文 → 人类修改思路
骨架:
# 修订意见整理报告
> # ⛔ 待你确认 ⛔
> **审完下面这份清单后,把这一行的「待确认」手动改成「已确认」**,md-swarm 才会动你的论文。(⛔ AI 永不许自己改这一行。)
>
> **审的时候重点过这三样:**
> 1. **不要的条目** → 标注跳过(或直接删掉那条)。
> 2. **`人类修改思路`** → 想怎么改、有什么顾虑,写进每条那一行(AI 不会替你填)。
> 3. **⚠️ 每条的「改动类型」——这是引用安全的总开关,务必逐条看:**
> - **`补丁`(默认·安全)**:只改文字,**这节的引用一条都不许删**(AI 想删也会被硬闸拦死)。绝大多数小改都该是这个。
> - **`重写`(授权动引用)**:允许 AI 在这节**删/换引用**。**只有当你确实要它动引用时**才标这个——比如"把这段从技术扩散改写成技术创新,旧的扩散文献删掉"。标了重写,那节引用就不再被锁死。
> - **怎么用**:想让 AI 动某节引用 → 把那条改成 `重写`,并在 `人类修改思路` 写清"删哪些、我会补哪些"(新文献 AI 只会标 `[@NEW: …]` 占位,真实文献你事后补)。**反过来**:嫌某条被误判成 `重写`、不想它碰引用 → 改回 `补丁` 即可锁死。
**人工确认:** 待确认
**来源**(文件/粘贴/语音…)/ **输入条目数** / **改动类型分布**(补丁 N 条 / 重写 M 条)/ **需人类操作数** / **合并簇数** / **外部资源数** / **纯评价数** / **低信心条目数** / **生成时间**
## 分批方案总览(AI 默认·你可改)
- Task 1 并行(3小工): P2 改引言 + P5 改方法 + N1 改结论
- Task 2 单独串行(整节重写): P3 重写理论框架
- ...
## ⚠️ 需你确认引用授权(标了「重写」= md-swarm 会删/换本节引用)
- P3(重写:整段重写理论框架)、审-5(重写:换分析框架、删旧文献)… ← 这些条目 md-swarm 被授权动其中的引用,**确认你真的要**;不想动引用就把那条改回 `补丁`(锁死引用)。
- (若一条「重写」都没有,写:**无——所有条目均为 `补丁`,全程引用一条不删**。)
## ⚠️ 需你重点核对(低信心 / 待补)
- P7(低信心:语音转写抽来的)、N3(⚠️待补:没抽到清晰原文片段)…
## 第一部分:按内在逻辑分类(5 张表:理论/实证/贡献/局限/写作;每表含 编号/来源/章节/摘要/重要性/批次)
## 第二部分:按原始顺序
#### P2 · 理论 · 重大 · 引言
**所属合并簇:** MC-1(跨审稿人共识)
**涉及外部资源:** X-1
**需人类操作:** 无
**纯评价:** 否
**涉及章节:** 引言
**批次:** Task 1 Agent 1
**改动类型:** 补丁
**抽取置信度:** 高
**中文摘要:**
**原文:**
**人类修改思路:**(你填)
## 第三部分:合并问题簇
#### MC-1 · 实证 · 重大 · 方法
**统一摘要:** / **成员条目:** P2, N5 / **合并理由:** / **批次:** Task 3 Agent 1 / **人类修改思路:**
## 第四部分:外部资源清单(8 类表,X-N + 来源条目 + 获取建议)
## 第五部分:需人类操作查阅指南(搜 `**需人类操作:**` 定位;完成后加删除线 `~~...~~`,下游才放行)
## ⚠️ 冲突归类清单(若有·交你裁决)
P.自检 + 停
自检 = 跑本 skill 自带的确定性脚本(2026-07-11 起替代旧的 Select-String 手工正则,治"格式微差假阴/假阳"):
py "\verify_triage.py" --triage "\swarm\md_triage.md" --expect pending
它确定性地查十项(编号与下述一致):① 四级标题计数 = 输入条目数;② ID 连续不跳号、第一部分与第二部分 ID 全集一致(纯评价除外·WARN 级);③ 外部资源 X-N 正反向一致;④ 元信息计数与正文一致(含 补丁/重写 分布);⑤ 行序约束;⑥ 每条都有非空「原文」(0.3 后检的硬要求);⑦ 令牌行逐字为 **人工确认:** 待确认(脚本先按 gate 钩子同款容错找到它——容忍 blockquote 前缀/中英冒号/空格/emoji——再要求逐字规范:写歪会被点名"第 N 行、应改成什么",不再报成"缺失");⑧ 每条 **人类修改思路:** 都是占位((你填),无 AI 自填内容——AI 填了就是违反人类修改思路铁律;令牌已确认后本项自动跳过,因为那时是作者在填);⑨ 每条都有 **改动类型:** 字段且值是 补丁 或 重写(默认 补丁);⑩ 「⚠️ 需你确认引用授权」清单 = 所有 改动类型:重写 的条目(逐条对上、不漏不多;一条重写都没有则该节写"无")。退出码 0 才算过;任一 FAIL → 按输出逐条修复重写、重跑;WARN 酌情人工瞄一眼。脚本带 --selftest(13 用例);令牌语义与 md_swarm_gate_hook.ps1 保持同款判断(改一处要同步查另一处,§6.5⑥)。
然后停、汇报、交还用户。汇报里点名:标了「重写」(会动引用)的条目、低信心条目、⚠️待补 条目、冲突归类未裁决——请用户重点核。⛔ AI 永远不许自己把令牌改「已确认」。
> 📋 回显铁律:跑完回显 swarm\md_triage.md 绝对路径 + 各项计数(含 补丁 N / 重写 M 条)+ 标了「重写」的条目点名(这些会删改引用、请重点确认) + 低信心/待补/冲突点名 + 下一步:"审完 md_triage.md(标跳过/写人类修改思路/确认每条「改动类型」补丁还是重写/改批次),把令牌改『已确认』,然后 /md-swarm 批量改稿。"
已知限制(待修·非阻断)
- 行序约束的下游承担者是 LLM 而非脚本(
md_triage.md骨架靠"四级标题 → 所属合并簇 → … → 原文 → 人类修改思路"的固定行序):需澄清——audit_coverage.py不按行序解析,它只扫^####\s+(\S+)四级标题第一个 token(设计上"依赖的格式假设最小化",不读字段行);真正按行序读字段的是 md-swarm 主控与 D agent(都是 LLM 读,对格式微差有容忍度)。真实风险是:某字段行因无内容被整行省略、或字段行换位时,LLM 读条目可能漏读某个字段(而非脚本解析错位)。靠verify_triage.py第⑤项确定性兜底。 - ~~自检用
Select-String正则对格式微差敏感:令牌行、人类修改思路占位、ID 连续性等校验遇全/半角差异、多余空格、blockquote 前缀变化等会假阴(漏报问题)或假阳(误判已确认被写歪)。比 md-swarm 的md_swarm_gate_hook.ps1令牌行识别(已修过同款语义判断)更脆。~~ ✅ 已修(2026-07-11):P.自检落成确定性脚本verify_triage.py(十项全查、归一后再判、令牌语义与 gate 钩子同款容错、写歪的行精确点名行号与应有形式而非假阴);--selftest13 用例全绿;用测试21 真件(30 条、补丁18/重写12)校准零误报。
关系
上游:任意修订输入(审稿意见 / 方案 / 邮件 / 语音 / 图片 / PDF / Word 批注…;可选 manuscript.md 用于填真实章节)。下游:md-swarm(读 swarm/md_triage.md,按 Task 并行改 manuscript.md)。对应第一代 reviewer-triage(通用化 + 砍占位符)。自带脚本 verify_triage.py(P.自检十项确定性体检·2026-07-11·带 --selftest);读取借 anthropic-skills:pdf/anthropic-skills:docx/minimax-docx/docx-mcp 与 pdftotext/OCR;Word 批注借 md-unpack/read_docx_comments.py(与 md-unpack 共用同一解析器:同篇用 md-unpack 摄取时已抠好的 swarm/comments_raw.json、别篇当场解析,详见 0.1 cascade)。可单独调用("先把这摞意见理成清单看看",理完不一定马上改)。全套见 ../md-技能套件·开发手册.md。
> 何时用本 skill:见顶部「定位铁律」。一句话——大批量乱意见才用 md-triage;小修手改 md,单处改用 md-iterate。
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: pwya
- Source: pwya/md-paper
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.