>- 多轮对抗式稿件打磨技能。通过"批评→改写→综合→盲评"循环,像学术同行评审一样反复打磨稿件直到收敛。所有中间产物(批评、改写、综合、评分)保存为独立文件,完整记录进化过程。当用户说"对抗打磨""反复打磨""深度打磨""多轮润色""盲评打磨""打磨到收敛""帮我把这篇稿子磨一磨""pressure polish""adversarial polish"时触发。也适用于用户说"这篇稿子很重要,帮我好好打磨"或"我需要更高质量的润色"等暗示需要超越单轮润色的场景。注意:如果用户只是要求普通润色,优先使用已有 polish 技能。本技能适合对质量要求极高、愿意花更多时间打磨的稿件。
npx skills add https://github.com/JimLiu/Illustrated-Agent-Skills --skill adversarial-polish
用独立角色的对抗与盲评替代主观判断,让稿件在"批评→改写→综合→盲评"的循环中自然收敛到最优状态。
单次润色的问题:模型要么过度迎合(你说改我就改),要么过度批判(为了批而批),要么过度折中(两边都不得罪)。结果是稿件被 prompt 的措辞而非内容质量所左右。
对抗式打磨的解法:把每个角色拆成独立视角,各自只看到必要信息,然后让盲评来决定谁赢。赢家成为新基准,循环直到没人能改得更好。
对抗式打磨的一切价值都建立在上下文隔离之上。 如果所有角色共享同一个上下文窗口,模型会不可避免地受到前序角色输出的污染——稻草人的批评会让改写者过度迎合,综合者会偏向后看到的版本,评委会被改写说明暗示。这不是"注意力不集中"的问题,是架构层面的根本缺陷。
每个角色必须作为独立的 sub-agent 生成(spawn)。 这是硬性要求,不是建议。
具体做法:
关键原则:
稻草人 prompt:
你是一位挑剔的资深中文科技内容编辑。你的任务是审阅一篇文章,只找问题,不给修复方案。
## 任务描述
{task_prompt}
## 待审阅文章
{current_A_text}
## 你的职责
[...稻草人角色指令全文,见下方"角色 1"章节...]
请直接输出批评报告,不要输出任何前言。
改写者 prompt:
你是一位有能力的中文科技内容作者。你需要根据一份批评报告改写一篇文章。
## 任务描述
{task_prompt}
## 原文
{current_A_text}
## 批评报告
{strawman_critique}
## 你的职责
[...改写者角色指令全文,见下方"角色 2"章节...]
请输出完整的改写版本,不要输出任何前言。
综合者 prompt:
你是一位客观的中文科技内容编辑。你面前有同一任务的两个版本,需要取长补短合成最优版本。
## 任务描述
{task_prompt}
## 版本甲
{randomly_assigned_version_1}
## 版本乙
{randomly_assigned_version_2}
## 你的职责
[...综合者角色指令全文,见下方"角色 3"章节...]
请输出完整的综合版本,不要输出任何前言。
评委 prompt(每位评委相同模板,独立 spawn):
你是一位盲审评委。你需要从三个版本中选出最好的一个。你不知道这些版本的作者或来历。
## 任务描述
{task_prompt}
## 版本 X
{randomly_labeled_version_X}
## 版本 Y
{randomly_labeled_version_Y}
## 版本 Z
{randomly_labeled_version_Z}
## 你的职责
[...评委角色指令全文,见下方"角色 4"章节...]
请直接输出你的排名和理由,不要输出任何前言。
Claude.ai 没有 sub-agent,所有角色在同一个上下文中执行。这意味着真正的上下文隔离无法实现。为了尽可能模拟隔离效果:
<文章目录>/adversarial-polish/
├── round-0/
│ └── A-original.md # 原始稿件
├── round-1/
│ ├── strawman-critique.md # 稻草人批评
│ ├── B-rewrite.md # 改写版本
│ ├── AB-synthesis.md # 综合版本
│ ├── judge-ballots.md # 三位评委投票
│ └── round-summary.md # 本轮总结
├── round-2/
│ └── ...
├── evolution-log.md # 全程进化日志
└── final/
├── final-article.md # 最终定稿
└── polish-report.md # 打磨报告
round-0/A-original.md每轮循环包含四个角色 + 一个收敛判断。
⚡ 执行方式:spawn 为独立 sub-agent(使用上方稻草人 prompt 模板)
身份: 一个挑剔的资深读者/编辑。
可见信息: 任务描述 + 当前版本 A(仅此而已,不看历史批评和修改)。
职责:
输出格式:
# 稻草人批评报告 - 第 N 轮
## 总体印象(2-3 句话)
## 问题清单
### 🔴 致命问题
1. [具体位置] [问题描述]
2. ...
### 🟡 显著问题
1. [具体位置] [问题描述]
2. ...
### 🟢 轻微问题
1. [具体位置] [问题描述]
2. ...
## 稻草人总结
- 致命问题 X 个,显著问题 Y 个,轻微问题 Z 个
- 最关键的一个问题是:[...]
保存到: round-N/strawman-critique.md
⚡ 执行方式:在稻草人完成后,spawn 为新的独立 sub-agent(使用上方改写者 prompt 模板)
身份: 一个有能力的作者,接到了修改任务。
可见信息: 任务描述 + 当前版本 A + 稻草人批评报告。
职责:
输出: 完整的改写版本(不是 diff,是完整文章)。
在文章末尾附上改写说明:
---
## 改写说明
- 采纳批评 N 条,忽略 M 条
- 主要改动:[列出 3-5 个关键修改]
- 忽略理由:[解释为什么某些批评不采纳]
保存到: round-N/B-rewrite.md
⚡ 执行方式:在改写者完成后,spawn 为新的独立 sub-agent(使用上方综合者 prompt 模板)
身份: 一个客观的编辑,面前有两个版本,需要取长补短。
可见信息: 任务描述 + 版本 A + 版本 B(随机标记为"版本甲""版本乙",打乱顺序避免位置偏差)。
职责:
输出: 完整的综合版本。
在文章末尾附上综合说明:
---
## 综合说明
- 版本甲贡献:[哪些段落/表达来自甲]
- 版本乙贡献:[哪些段落/表达来自乙]
- 原创融合:[哪些地方做了创造性合并]
保存到: round-N/AB-synthesis.md
⚡ 执行方式:同时 spawn 3 个独立 sub-agent 并行执行(使用上方评委 prompt 模板)。三位评委之间完全隔离,互不可见。
身份: 三位独立评委,只关心"哪个版本最好地完成了任务"。
可见信息: 任务描述 + 三个版本(随机标记为 X/Y/Z,打乱顺序,隐去所有作者信息和改写说明)。
重要: 提交给评委的版本必须去掉末尾的"改写说明"和"综合说明",只保留文章正文。
评判标准:
每位评委独立排名并给出理由,然后用 Borda 计分汇总:
# 盲评投票 - 第 N 轮
## 评委 1
排名:[X > Y > Z] 或其他顺序
理由:[2-3 句话]
## 评委 2
排名:[...]
理由:[...]
## 评委 3
排名:[...]
理由:[...]
## Borda 计分
(第一名 2 分,第二名 1 分,第三名 0 分)
| 版本 | 评委 1 | 评委 2 | 评委 3 | 总分 |
|------|-------|-------|-------|------|
| X | ? | ? | ? | ? |
| Y | ? | ? | ? | ? |
| Z | ? | ? | ? | ? |
## 结果
- 胜出版本:[X/Y/Z](揭晓为 [A/B/AB])
- 得分差距:[大/小/微弱]
保存到: round-N/judge-ballots.md
每轮结束后,检查收敛条件:
安全阀: 最多循环 4 轮。如果 4 轮后仍未收敛,取历史最高分版本作为最终结果。
每轮结束生成轮次总结:
# 第 N 轮总结
- 稻草人发现:🔴 X 个 / 🟡 Y 个 / 🟢 Z 个
- 改写者采纳:M 条批评
- 盲评结果:[版本] 胜出(Borda 分 X 分)
- 收敛状态:streak = N / 未收敛,继续
- 当前最佳版本:[来源说明]
保存到: round-N/round-summary.md
汇总所有轮次的演变过程,保存到 evolution-log.md:
# 稿件进化日志
## 任务描述
[task prompt]
## 进化轨迹
### 第 1 轮
- 稻草人核心批评:[...]
- 改写关键改动:[...]
- 盲评结果:[版本] 胜出
- streak: 0 → N
### 第 2 轮
...
## 收敛分析
- 总轮次:N
- 收敛方式:[A 连续两轮胜出 / 达到最大轮次]
- 最终版本来源:[第 X 轮的 A/B/AB]
- 关键进化点:[稿件在哪些方面有了质的提升]
final/final-article.md):干净的文章正文,不含任何说明final/polish-report.md):outputs/将以下文件复制到输出目录:
final-article.md — 最终定稿polish-report.md — 打磨报告evolution-log.md — 进化日志使用 present_files 展示最终定稿和打磨报告。
有 sub-agent 时:每个角色必须 spawn 为独立 sub-agent。 这是对抗式打磨的根基,详见上方"执行模型"章节。
每个 sub-agent 只接收其"可见信息"范围内的内容:
所有角色都必须尊重原文的核心观点、态度和风格。打磨是优化表达,不是重写内容。改写者和综合者首先忠于原作者的意图。
评委必须真实评判,不能"为了显示价值而选新版本"。如果原版确实更好,就选原版。真正好的内容能经受住对抗式检验。
每个角色的每次输出都保存为独立文件。这不仅是为了可追溯,也让用户可以在任何阶段介入:
如果用户明确说"快速打磨"或稿件较短(< 1000 字),可以缩减:
默认使用完整模式。
循环中的每一轮结束后,简要向用户报告本轮结果。默认自动继续下一轮,除非:
每轮开始时告诉用户当前状态:
> 第 2 轮开始(streak=0,上轮 AB 综合版胜出,已替换为新基准)
> 稻草人正在审视新基准…
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take jimliu/adversarial-polish from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.