关于 kill-argument
kill-argument 是面向论文投稿和答辩准备的审阅技能。它先让一位审稿人提出最有力且简洁的拒稿论点,再由新的独立审稿人逐点对照论文评估,突出尚未解决的异议,而非罗列均衡的弱点。
主要功能
- 01生成聚焦的拒稿论点
- 02分别执行攻击与裁定审阅
- 03按论文当前文本分类异议
- 04输出 Markdown 和 JSON 报告
- 05可选将报告渲染为 HTML
适用场景
- 01投稿前找出论文最致命的异议
- 02准备对可能审稿批评的回应
- 03检验理论论文的范围与主张是否一致
MCP 相关
该技能通过 Codex MCP 分别发起攻击和裁定审阅调用;第二次审阅使用独立线程,不复用第一次的线程。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wanshuiyin/ auto-claude-code-research-in-sleep --skill kill-argument安装后在 Claude Code 中输入/kill-argument确认已加载。
详细介绍
Kill Argument 练习:对抗式攻击-防御评审
每次评审开始前,请遵循 可选评审者: 按顺序解析调用参数 →
.aris/reviewer.json→ Claude Code 默认值(Codex MCP), 并通过规范的辅助解析器调用reviewer_route.py,保留本次评审的等级、新鲜上下文、源文件/图像输入和确定性门控。 下方的 Codex 示例/固定设置仅适用于backend=codex;其他路由使用各自的首次调用/回复约定。保存路由和实际返回的身份; 不可用的选项标记为REVIEW_UNAVAILABLE。根据实际的模型系列/完成情况/范围对接受情况进行分类。 将调用中的评审者/模型/effort 覆盖参数传递给包含评审者的子任务。生成工作线程不变。
🔒 不要将此技能包装在
/loop、/schedule或CronCreate中。 它会给出裁决——产生对抗式接受/拒绝结论(攻击 → 裁决)。按墙上时钟定时重复运行不会带来新信号(只有论文发生变化时,攻击才会变化)。应安排在它之前的外部等待——草稿稳定后,再在投稿前运行一次。参见shared-references/external-cadence.md。
针对论文的核心主张,用最有力的拒绝论据进行压力测试:$ARGUMENTS
存在的意义
基于评分的常规评审(/research-review、/auto-paper-improvement-loop)往往会给出均衡的弱点列表。每个弱点获得的关注度大致相同,并按 CRITICAL > MAJOR > MINOR 排序。经验表明,这会漏掉一种特定的失败模式:评审者会在拒稿段落中写出的杀伤力最强的单条论据——也就是领域主席读到后会直接否决论文的那句话。
均衡的评审者可能会将“范围过度主张风险”列为 MAJOR,并与另外 3-5 个 MAJOR 并列,却始终不明确表态。对抗式评审者必须明确表态:他们的全部任务就是在 200 词内说服领域主席拒绝论文。
此技能会有意执行这一对抗式评审,然后要求第二位全新的评审者逐点进行辩护,将每项拒稿理由分类为已修复/部分修复/仍未解决,并揭示哪些问题实际上具有决定性影响。
**经验依据:**在一次真实的投稿流程中,经过多轮常规改进(评分为 7-8/10)后,杀手论据练习发现了此前所有评审都未发现的表述弱点(例如,某种设定实际上主要是有条件的,而非真正通用;或者某个基线与真实系统无关)。作者的反驳促使其在摘要和讨论中明确限定范围,而仅凭基于评分的评审无法发现这些问题。
与其他评审技能的区别
| 技能 | 向评审者提出的问题 | 输出 |
|---|---|---|
| 常规同行评审 | “为这篇论文打分,并按严重程度列出弱点” | 均衡的弱点列表 |
/research-review | “深入评审方法和主张的技术内容” | 结构化的深度批评 |
/proof-checker | “这个定理是否真的得到了证明?” | 逐步审查证明义务 |
/paper-claim-audit | “论文是否如实报告了数据?” | 逐项核验主张证据 |
/citation-audit | “引用是否真实,且使用语境是否正确?” | 对每条引用给出 KEEP/FIX/REPLACE/REMOVE |
/kill-argument | “写出最有力的一段拒稿理由,然后为其辩护。” | 攻击备忘录 + 逐点辩护 + 揭示未解决的问题 |
此技能是补充工具,并非替代方案。常规评审后,在你想了解最坏情况下评审者会如何写作、以及在准备最终稿或答辩之前运行此技能。
适用场景
- 在
/auto-paper-improvement-loop经过 1–2 轮迭代并达到稳定分数后、投稿前使用。找出还能通过哪些额外修改来缩小标题与论文实际内容之间的落差。 - 准备 rebuttal 时,预测审稿人 2 最有力的反对意见,以便提前准备回应。
- 对于标题较为宏大、可能过度简化实际定理的理论论文(最常见的拒稿攻击模式)。
- 对于审稿人可能会质疑研究范围、假设与主张不匹配、证明义务缺失,或证据与标题主张存在差距的论文。
这项技能对理论论文最有价值,尤其是包含 ≥5 个定理类环境的论文(因此标题主张取决于实际的证明义务)。对于没有定理的实证论文,请改用 /research-review。
常量
- REVIEWER_MODEL =
gpt-6-astra(默认;根据shared-references/reviewer-routing.md,gpt-6.1-sol是首选的模型能力回退选项,只有在明确指定旧版覆盖时才使用gpt-5.4)。攻击/辩护/裁定线程的审稿推理强度 =ultra(深度审计级;根据shared-references/reviewer-routing.md回退模型能力,绝不低于xhigh)。Beast 模式轴向探测保持为xhigh。 - CONTEXT_POLICY =
fresh(REVIEWER_BIAS_GUARD)。每个线程都是一次全新的mcp__codex__codex调用。绝不使用mcp__codex__codex-reply。先前的审稿摘要、修改清单或执行者说明均不得进入任一提示词。 - ATTACK_LENGTH = 约 200 个单词(不得超过 250 个单词)。单个连贯论点,不要写成列表。
- DEFENSE_DECOMPOSITION = 从攻击备忘录中提取 3–7 个原子级拒稿理由。每个理由都要单独分类。
- CLASSIFICATION =
answered_by_current_text/partially_answered/still_unresolved。(选择这些名称,是为了避免裁定者认为“已解决”意味着此前曾进行过修改——他们会像一位初次审稿的审稿人一样阅读论文。) - OUTPUT = 论文目录中的
KILL_ARGUMENT.md(供人阅读)+KILL_ARGUMENT.json(供机器读取)。 - RENDER_HTML = true — 设为
true(默认值)时,报告写入后会自动将KILL_ARGUMENT.md渲染为 HTML。使用完整 Codex 审稿关卡(审计级产物——完整的渲染保真度检查符合该技能的跨模型审计不变量;同时也会将旁侧文件KILL_ARGUMENT.json传递给渲染器)。设为false可跳过,或传入— render html: false。
工作流
第 1 步:查找论文文件
定位论文目录并清点源文件。
PAPER_DIR="$ARGUMENTS" # e.g., paper-overleaf/ or paper/
cd "$PAPER_DIR"
# Find the LaTeX entry point
ENTRY=$(grep -lE '^\\documentclass' *.tex 2>/dev/null | head -1)
echo "Entry: $ENTRY"
# Find all source files codex should read
find . -name "*.tex" -not -path "./.git/*" 2>/dev/null
find . -name "*.bib" -not -path "./.git/*" 2>/dev/null
find figures/ -name "*.pdf" -o -name "*.png" 2>/dev/null
ls -la *.pdf 2>/dev/null # compiled PDF
如果缺少编译后的 PDF,该技能仍应仅基于 .tex 源文件运行,但提示词应说明这一点,以免审稿人浪费时间尝试从不存在的 PDF 中提取内容。
第 2 步:攻击备忘录(线程 1,全新 codex)
使用以下提示词结构调用 mcp__codex__codex(不要使用 codex-reply):
请先解决此审稿人角色;以下是
backend=codex的示例。
mcp__codex__codex:
model: gpt-6-astra
config: {"model_reasoning_effort": "ultra"}
sandbox: read-only
cwd: <paper directory>
prompt: |
You are simulating a hostile NeurIPS / ICLR / ICML reviewer for a paper.
This is a kill-argument adversarial check — your task is NOT to give a
balanced review but to construct the **single strongest argument for
rejecting this paper**.
## Files to read
- LaTeX entry: <ENTRY>
- All section files under sections/ or wherever they live
- Macro files (math_commands.tex, etc.)
- Compiled PDF: <main.pdf> (if available)
Read the source carefully. Do not consult any prior reviews, fix lists,
or summaries; this must be a fresh, zero-context adversarial pass.
## Your task
Construct the single best argument to reject this paper in approximately
200 words. Your goal is to write the worst-case rejection memo a senior
NeurIPS area chair would produce after reading the paper.
Focus on these axes (pick the most damaging combination, do not list all):
1. Theorem validity: are central theorems actually proved as stated?
2. Assumption-vs-claim mismatch: does the body silently retreat to a
narrower object than the title/abstract advertise?
3. Missing proof obligations: is a fundamental lemma invoked but not
proved (e.g., concentration, generic position, prefactor envelope)
that the headline depends on?
4. Limit-order ambiguity: are limits in K/n/d/eps composed in a way the
paper does not commit to?
5. Claim-vs-evidence gap: is the empirical/numerical evidence too narrow
to support the breadth of the stated theorem or take-away?
6. Scope overclaim: does the title or abstract sell a result substantially
broader than what the body proves?
## Constraints
- Approximately 200 words total (do NOT exceed 250).
- Single argument, not a list — pick the most damaging line of attack
and develop it.
- Cite specific file:line locations or equation numbers when accusing.
- Tone: dispassionate but uncompromising. Do NOT hedge. Do NOT acknowledge
mitigations the paper might have made elsewhere. This is the rejection
paragraph; the defense gets the next pass.
- Do NOT reference prior review rounds, fix lists, or any context outside
the current paper files.
Output: just the rejection memo, nothing else.
保存返回的 threadId 以便追踪;不要将它传递给线程 2。原样保存攻击备忘录——线程 2 和供人阅读的报告都会使用它。
步骤 2.5(可选,beast effort):多轴攻击扩展
默认关闭。 此技能的交付内容就是一个结论——最有力的一段拒稿理由——而
shared-references/fan-out-pattern.md
明确指出:不要扩展结论;只扩展为结论提供依据的证据。 默认的单一立场攻击(步骤 2)是刻意设计的——强制写出一段话,比平衡罗列更能产生犀利的反馈(参见为何存在)。不要用列表取代它。
在 beast effort 下,你可以拓宽该立场所依据的证据,而不削弱立场:
- 轴向探查(证据广度)。 将六个攻击轴(定理有效性/假设与主张之别/遗漏的义务/极限顺序/主张与证据之别/范围夸大)作为彼此独立的新 codex 探查来运行,每次只要求在该轴上提出最有力的约 120 字论点。这些探查用于收集证据,不是结论。探查使用
xhigh(而非ultra)——六次串行委派调用会增加成本,而 ultra 层级的立场提交仍会重新评判这些证据。- 这些不是 Claude 子 Agent,而且刻意没有授予
Agent权限。 每次探查都是一次全新的mcp__codex__codex调用——对手必须跨模型(非 Claude)。Codex MCP 采用串行调用(并发的 codex 调用会挂起),因此探查会依次运行——这是扩展阶梯中的第 3 层。这正是kill-argument的allowed-tools中没有列出Agent的原因:它不会生成任何内容;它会串接 codex 调用。
- 这些不是 Claude 子 Agent,而且刻意没有授予
- 立场提交(结论,仍然只有一个)。 最后一次全新的 codex 综合调用会读取六份探查结果和论文,并且必须提交最具杀伤力的一段约 200 字拒稿理由——选择并融合至多两个攻击轴,而不是罗列全部六个。步骤 2 的立场提交要求保持不变;这些探查只是确保提交立场前没有遗漏任何攻击轴。
随后,仲裁(步骤 3)会像默认流程一样,针对这一已提交的攻击展开。成本:beast 会额外增加约 6 次串行 codex 调用——仅在高风险论文最终提交前使用,不要作为常规操作。
追踪:在追踪记录中记录每次探查的 threadId(axis_probe_thread_ids[])以及综合调用的 threadId,方式与步骤 2–3 保存其 thread id 相同。步骤 3 使用的是已提交的攻击备忘录,而不是六份探查结果。
步骤 3:仲裁备忘录(线程 2,使用攻击内容和论文进行全新的 codex 调用)
调用第二次 mcp__codex__codex(仍然不要使用 codex-reply——线程 2 独立于线程 1 的 codex 历史记录):
请先解决此审稿人环节;以下是
backend=codex示例。
mcp__codex__codex:
model: gpt-6-astra
config: {"model_reasoning_effort": "ultra"}
sandbox: read-only
cwd: <paper directory>
prompt: |
You are an independent area-chair adjudicator examining whether the
current paper text answers a hostile reviewer's rejection memo.
You are NOT the paper's defender — your job is to read the attack
point-by-point and rule, from the current source files alone,
whether each point stands or falls. Fresh, zero-context adjudication;
do not reference any prior reviews / fix lists.
## Paper files
[list paths same as Step 2]
## The hostile reviewer's rejection memo (the "attack")
> <attack memo verbatim from Thread 1>
## Your task
The attack is one continuous argument, but it makes multiple distinct
rejection points that you must adjudicate separately. Decompose the
attack into its atomic rejection points (3-7 of them), then for each
point classify it:
- answered_by_current_text: the current paper source already mitigates
this point (cite specific file:line evidence)
- partially_answered: paper has some response but not enough to refute
the attack as written
- still_unresolved: paper has no effective response
The label `answered_by_current_text` is intentional — "fixed" implies
history of patching and biases toward optimism. You are reading the
paper as a reviewer would, with no knowledge of prior round drafts.
For each rejection point, output:
### Point P_n: <short label>
**Attack claim**: <the specific accusation, ~30 words>
**Verdict**: answered_by_current_text | partially_answered | still_unresolved
**Evidence (or lack of)**: <cite file:line, ~50 words>
**Severity if unresolved**: critical | major | minor
**If unresolved, recommended fix**: <one specific actionable sentence>
After per-point analysis, output:
## Summary
Total rejection points: N
- answered_by_current_text: X
- partially_answered: Y
- still_unresolved: Z
## Net assessment
<one short paragraph: would this paper survive a senior area-chair read
of the attack memo, given only what is in the current source? Be honest —
if Y or Z > 0 and they hit the headline, say so.>
## Top action items (in priority order, max 3)
1. ...
2. ...
3. ...
## Constraints
- Do NOT consult any prior round reviews or fix lists. Adjudication must
be made strictly from current paper files.
- If the paper cannot refute a point, do NOT minimize — keep severity
honest.
- If a point reflects an author-chosen position (e.g., conscious title
scope decision), classify as `partially_answered` with a note that the
position is intentional, AND say whether this position is sustainable
under the attack — do NOT auto-grade as `answered_by_current_text`
just because it is intentional.
- Be specific. No flattery, no hedging, no rationalizing on the paper's
behalf.
保存返回的 threadId。
步骤 4:编写 KILL_ARGUMENT.md 和 KILL_ARGUMENT.json
编写面向读者的报告 <paper-dir>/KILL_ARGUMENT.md:
# Kill Argument Report — <paper title>
**Date**: <YYYY-MM-DD>
**Reviewer model**: <resolved pair that actually ran — target gpt-6-astra ultra>, fresh threads (no codex-reply)
**Attack thread**: <threadId 1>
**Adjudicator thread**: <threadId 2>
**Verdict**: <PASS / WARN / FAIL / NOT_APPLICABLE / BLOCKED / ERROR> (`reason_code: <...>`)
## Net assessment
<paragraph from adjudicator memo's "Net assessment">
## Attack memo (verbatim)
> <attack memo from Thread 1>
## Adjudication (per-point)
<copy verbatim from Thread 2 — uses labels answered_by_current_text / partially_answered / still_unresolved>
## Top action items
<copy from Thread 2>
## Recommendation
If P_4 (or whatever still_unresolved critical) is research-level, record
it as a known open problem in the conclusion / limitations. If it is
writing-level, queue for next /auto-paper-improvement-loop round.
按照 ARIS Audit Artifact Schema(shared-references/assurance-contract.md)编写机器可读文件 <paper-dir>/KILL_ARGUMENT.json:
{
"audit_skill": "kill-argument",
"verdict": "PASS | WARN | FAIL | NOT_APPLICABLE | BLOCKED | ERROR",
"reason_code": "<see verdict mapping below>",
"summary": "<one-line summary, ~80 chars>",
"audited_input_hashes": {
"main.tex": "sha256:<...>",
"sec/0.abstract.tex": "sha256:<...>",
"sec/<each-section>.tex": "sha256:<...>",
"references.bib": "sha256:<...>",
"main.pdf": "sha256:<...>"
},
"trace_path": ".aris/traces/kill-argument/<date>_run<NN>/",
"thread_id": "<defense threadId — primary; attack threadId in details>",
"reviewer_model": "<resolved — the model that actually ran (target: gpt-6-astra)>",
"reviewer_reasoning": "<resolved — the effort that actually ran (target: ultra)>",
"generated_at": "<UTC ISO-8601>",
"details": {
"attack_thread_id": "<threadId 1>",
"defense_thread_id": "<threadId 2 — same as top-level thread_id>",
"attack_memo": "<verbatim>",
"decomposed_points": [
{
"id": "P_1",
"label": "<short label>",
"attack_claim": "<...>",
"verdict": "answered_by_current_text | partially_answered | still_unresolved",
"evidence": "<file:line citation>",
"severity_if_unresolved": "critical | major | minor",
"recommended_fix": "<...>"
}
],
"counts": {
"answered_by_current_text": <int>,
"partially_answered": <int>,
"still_unresolved": <int>
},
"net_assessment": "<adjudicator memo's net assessment>",
"top_action_items": ["...", "...", "..."]
}
}
哈希输入(audited_input_hashes):使用论文相对路径,计算所有已使用 .tex 文件以及 references.bib 的 sha256,如果已编译,则还要计算 main.pdf 的 sha256。验证器会在运行 verify_paper_audits.sh 时重新计算这些文件的哈希;如果用户在运行审计后编辑了论文,则会标记为 STALE。
判定结果映射(每个(计数,严重性)元组必须且只能匹配一行):
| 判定结果 | reason_code | 触发条件 |
|---|---|---|
FAIL | unresolved_critical | 至少有 1 个严重性为 critical 的 still_unresolved |
WARN | unresolved_major_or_minor | 至少有 1 个严重性为 major 或 minor 的 still_unresolved(且没有 critical) |
WARN | partial_critical_or_repeated_major | still_unresolved 为 0,且至少有 1 个严重性为 critical 或 major 的 partially_answered |
PASS | defense_survives_with_minor_partial_only | still_unresolved 为 0,且至少有 1 个 partially_answered,并且全部严重性均为 minor |
PASS | defense_survives | still_unresolved 为 0,且 partially_answered 为 0 |
NOT_APPLICABLE | not_theory_or_scope_paper | 论文中的 \begin{theorem|lemma|proposition|corollary} 少于 2 个,且摘要中没有范围/一般性主张 |
NOT_APPLICABLE | headline_unstable | 标题或摘要在最近 2 次提交中发生了变化——待标题稳定后重新运行 |
BLOCKED | paper_compile_failed | 缺少已编译的 PDF,且 main.tex 未能干净编译——裁定需要忠实于源文件 |
BLOCKED | source_files_missing | 找不到 main.tex,或没有 sec/*.tex 文件 |
ERROR | codex_api_error | mcp__codex__codex 调用失败 |
ERROR | decomposition_parse_failed | 裁定线程未返回可解析的逐项结构 |
ERROR | trace_save_failed | 写入跟踪目录失败 |
PASS 要求 still_unresolved == 0。当 still_unresolved == 0 时,只要存在严重性为 major 或更高的 partially_answered,最佳可用判定结果就是 WARN,绝不能是 PASS。
判定结果根据逐项计数计算;不要让辩护线程直接输出顶层判定结果(否则它就能自我评分)。判定结果映射由技能代码完成。
步骤 5:打印摘要
向用户显示:
🗡 Kill Argument complete.
Attack: <one-sentence summary of the rejection thrust>
Adjudication breakdown:
answered_by_current_text: X
partially_answered: Y
still_unresolved: Z ← critical: <names>
Verdict: <PASS / WARN / FAIL / NOT_APPLICABLE / BLOCKED / ERROR>
Reason: <reason_code, e.g., defense_survives, unresolved_critical>
Top action items:
1. ...
2. ...
3. ...
Full report: <paper-dir>/KILL_ARGUMENT.md
输出约定
<paper-dir>/KILL_ARGUMENT.md— 面向读者的报告<paper-dir>/KILL_ARGUMENT.json— 机器可读的记录.aris/traces/kill-argument/<date>_runNN/— 每个线程的 codex 跟踪记录(攻击备忘录 + 裁定备忘录)- 可选:仅当用户明确请求时才应用修复;默认情况下只检测,不自动修改。
<paper-dir>/KILL_ARGUMENT.html(当RENDER_HTML = true时,默认为 true)— 通过/render-html "<paper-dir>/KILL_ARGUMENT.md" --json "<paper-dir>/KILL_ARGUMENT.json"自动渲染的单文件 HTML 视图。适用完整审查门槛。.review.json旁文件包含渲染保真度判定结果。不阻塞:如果/render-html失败(缺少辅助工具、Codex MCP 不可用、文件写入错误),则记录失败并将技能视为已完成——HTML 视图仅为便利功能,不是判定结果的先决条件。
关键规则
- 每次调用都使用全新线程。 Attack 和 Adjudication 都使用
mcp__codex__codex,绝不使用codex-reply。线程 1 和线程 2 不得共享 codex 上下文。 - 不提供任何先前上下文。 两个线程都不得接收先前轮次的评审、修复列表、执行器摘要或改进循环日志。
- Attack 必须明确指出问题。 使用单个参数,约 200 个英文单词。不要用“还可以考虑……”之类的模糊措辞。关键在于迫使评审者选出破坏性最大的一句话。
- Adjudicator 必须进行分类,而不是淡化问题。 如果论文没有有效回应,诚实地标记为
still_unresolved。除非确有证据,否则不要降级为partially_answered。 - 作者选择的立场(例如,刻意设定的标题范围、刻意省略的限定语):标记为
partially_answered,并注明该立场是有意为之,同时说明该立场在这项攻击下是否站得住脚。不要仅仅因为立场是有意选择的,就自动评为answered_by_current_text。 - Verdict 由 skill 计算,而非 adjudicator 决定。 Codex 线程输出逐项分类;skill 代码根据第 4 步的表格,将这些分类映射为 6 种审计 verdict 之一。绝不允许 adjudicator 自行评定顶层 verdict。
- 直接调用时仅检测;也可由
/auto-paper-improvement-loop第 5.5 步调用,随后将未解决的问题合并到修复列表中。 用户直接运行/kill-argument paper/时,输出仅供参考,由人工决定是否采取行动。从自动改进循环内部调用此 skill 时,循环会读取KILL_ARGUMENT.json,与现有弱点列表去重,并将新发现的still_unresolved问题纳入第 6 步的修复;/kill-argument本身绝不编辑论文文件。
何时不应使用
- 没有定理或范围主张的实证论文——
/research-review更有用。对于此类情况,该 skill 会输出NOT_APPLICABLE,并设置reason_code: not_theory_or_scope_paper。 - 标题尚未稳定的非常早期草稿——先修改标题。如果标题或摘要在最近 2 次提交中有过更改,该 skill 会输出
NOT_APPLICABLE,并设置reason_code: headline_unstable。 - 正在进行实验的论文——等结果稳定后再运行。
- (
/auto-paper-improvement-loop第 5.5 步过去会内联运行此协议;自 2026 年 5 月起,它改为调用/kill-argument并读取KILL_ARGUMENT.json,因此不再有“不得在自动循环内部调用”的限制。)
评审追踪
每次调用 mcp__codex__codex 评审者后,都应按照 shared-references/review-tracing.md 保存追踪记录(Policy C — forensic;绝不可悄然跳过)。使用 save_trace.sh(根据 shared-references/integration-contract.md §2 中的调用链解析),或直接将文件写入 .aris/traces/kill-argument/<date>_run<NN>/。两个线程的原始响应都应保留。
说明
此 skill 于 2026 年 5 月从 /auto-paper-improvement-loop 第 5.5 步中提取,成为独立的基础功能;此前的实践表明,它能发现基于评分的评审所遗漏的标题与正文范围不一致问题。保留“先攻击、后辩护”的模式,正是因为实证证据表明,让一个模型“撰写拒稿意见”与让它“评审并打分”会产生质性不同的反馈——前者迫使模型明确表态,后者则容易含糊其辞。