Overview
Prepare a grounded, venue-compliant rebuttal for conference paper reviewer feedback. The skill follows a 3-phase pipeline:
- Review Analysis — Parse reviews, atomize concerns, classify severity/type, identify shared themes
- Strategy Plan — Per-reviewer response strategy with attitude, angle, evidence mapping, and experiment gap report
- Draft & Validate — Write rebuttal with placeholders for pending experiments, run lints and stress test, produce paste-ready output
The skill writes all rebuttal prose except experiment results. For issues requiring new experiments, it writes the surrounding context and inserts [INSERT: ...] placeholders where results should go.
Arguments
<paper-path> (required)
Path to the submitted paper. Can be:
- A PDF file (absolute or relative path)
- A LaTeX project directory (will look for
main.tex or first .tex file)
<reviews-path> (required)
Path to a markdown file containing reviews copied from OpenReview/CMT/HotCRP. Reviewer IDs should be preserved (e.g., ## Reviewer 1, ## Reviewer #2, ## R3).
--venue (optional)
Target conference. Options: NeurIPS, ICML, CVPR, ACL, AAAI, ICCV, ICLR.
- Default: auto-detect from review format and scoring scale
- Fallback: generic format
- Determines character limits, response structure, and review parsing heuristics
--char-limit (optional, default: venue-specific or 5000)
Character limit for the rebuttal. Overrides venue default. This is the total limit across all reviewer responses.
--plan-only (optional)
Stop after Phase 2. Outputs ISSUE_BOARD.md + STRATEGY_PLAN.md + EXPERIMENT_GAPS.md without drafting the rebuttal. Useful for reviewing the strategy before committing to a draft.
--followup (optional)
Follow-up round mode. Expects an existing output directory from a prior run. Parses new reviewer comments and generates delta replies only.
Setup
Install dependencies:
python -m pip install -r "BASE_DIR/scripts/requirements.txt"
Workflow
Phase 1: Review Analysis
Step 1.0: Detect Paper Source
If paper-path is a PDF: read directly with the Read tool (paginate for PDFs over 20 pages).
If paper-path is a directory:
- Check if the directory contains a compiled PDF — if so, prefer the PDF
- Otherwise, look for
main.tex or the first .tex file found
- Resolve
\input{} and \include{} by recursively reading referenced files
- Parse concatenated
.tex content as the paper text (equations remain as LaTeX source)
Step 1.1: Read and Understand the Paper
Read the entire paper. While reading, compile notes on:
- Title, authors, affiliation
- Core claims and contributions (from abstract + introduction)
- Methodology — key techniques, algorithms, theoretical results
- Experimental setup — datasets, baselines, metrics, ablations
- Results — key numbers, tables, figures
- Limitations — author-acknowledged weaknesses
- Specific sections/tables/equations — note identifiers (e.g., "Table 3", "Eq. 5", "Section 4.2") for citation in rebuttal
Step 1.2: Parse and Normalize Reviews
- Read the reviews markdown file
- Split by reviewer ID. Supported patterns:
Reviewer 1, Reviewer #1, R1, Reviewer A, or markdown headings (## Reviewer 1). If the format is non-standard, ask the user to clarify reviewer boundaries.
- For each reviewer, extract:
- Scores (if present): overall score, confidence, sub-scores
- Strengths section
- Weaknesses section
- Questions section
- Minor issues
- Save verbatim copy to
REVIEWS_RAW.md in the output directory
Step 1.3: Atomize and Classify Concerns
For each reviewer, break down their feedback into discrete atomic concerns. Each concern gets:
| Field |
Description |
issue_id |
Unique ID: R{reviewer}-C{number} (e.g., R1-C1, R2-C3) |
raw_quote |
Verbatim excerpt from the review |
issue_type |
One of: novelty, empirical_support, baseline_comparison, theorem_rigor, assumptions, complexity, clarity, reproducibility, practical_significance, other |
severity |
critical (blocks acceptance), major (significant concern), minor (nice-to-fix) |
reviewer_stance |
Inferred from scores + tone using the lookup table in references/rebuttal_guidelines.md |
needs_experiment |
true if addressing this concern requires new experimental results |
status |
Initially open for all concerns |
Step 1.4: Identify Shared Themes
Scan across all reviewers for overlapping concerns:
- Group issues by
issue_type and semantic similarity
- Flag themes raised by 2+ reviewers (these go in the global opener)
- Note contradictions between reviewers (one praises what another criticizes)
Step 1.5: Situation Assessment
Compute and write a summary:
- Scores per reviewer (raw and normalized stance)
- Champions vs swing voters vs detractors
- Shared themes with reviewer overlap
- Path to acceptance: which reviewers to convert and what it takes
Output: ISSUE_BOARD.md
# Situation Assessment
- Scores: R1 (6/10, lean_accept), R2 (4/10, lean_reject), R3 (5/10, neutral)
- Champions: R1 | Swing voters: R3 | Detractors: R2
- Shared themes: [scalability concerns (R2, R3), missing ablation (R1, R2)]
- Path to acceptance: Convert R3 by addressing scalability + ablation
# Issue Board
| ID | Reviewer | Type | Severity | Quote | Needs Experiment | Status |
|----|----------|------|----------|-------|-----------------|--------|
| R1-C1 | R1 | clarity | minor | "Section 3.2 is hard to follow" | false | open |
| R1-C2 | R1 | empirical_support | major | "Ablation missing for component X" | true | open |
| R2-C1 | R2 | empirical_support | critical | "No comparison with Method Y" | true | open |
| R2-C2 | R2 | novelty | major | "Similar to Z (2024)" | false | open |
| R3-C1 | R3 | complexity | major | "Scalability not demonstrated" | true | open |
Phase 2: Strategy Plan
Step 2.1: Assign Response Modes
For each issue in ISSUE_BOARD.md, assign a response mode using this decision tree (in priority order — prefer the first applicable mode):
Does the reviewer factually misread the paper or miss existing content?
→ direct_clarification — Point to specific section/table/equation they missed
Is there existing evidence in the paper that answers the concern?
→ grounded_evidence — Cite specific numbers, theorems, or results already present
Is this a novelty dispute?
→ nearest_work_delta — Name the closest prior work + exact technical difference
Does the concern require new experimental results to address?
→ additional_experiment — Placeholder in draft, added to EXPERIMENT_GAPS.md
Is the reviewer correct about a limitation?
→ narrow_concession — Acknowledge honestly, then scope the impact narrowly
Is the concern valid but out of scope for this paper?
→ future_work — Commit to future investigation, explain current scope boundary
If multiple modes apply, prefer the one higher in the list (stronger evidence first).
Step 2.2: Define Response Angles
For each issue, write 1-2 sentences describing:
- What to say — the core argument or evidence to present
- Tone — e.g., "Politely clarify that Table 3 already shows this", "Acknowledge the gap and present the planned ablation"
Step 2.3: Build Experiment Gap Report
Create EXPERIMENT_GAPS.md listing all needs_experiment: true issues:
# Experiment Gaps
| ID | Issue | Experiment Needed | Metric | Satisfies | Priority |
|----|-------|-------------------|--------|-----------|----------|
| R2-C1 | No comparison with Method Y | Run Method Y on datasets A, B | Accuracy, FLOPs | R2-C1, R3-C1 | P0 (blocks acceptance) |
| R1-C2 | Missing ablation for X | Ablate component X | Accuracy delta | R1-C2 | P1 (strengthens case) |
Step 2.4: Build Character Budget
Calculate character allocation based on --char-limit:
- 10-15% — Global opener (thank reviewers + shared theme resolutions)
- 75-80% — Per-reviewer responses (proportional to issue count × severity weight: critical=3, major=2, minor=1)
- 5-10% — Closing (resolved summary + acceptance case)
Order reviewers by priority: detractors first (most to gain), then swing voters, then champions.
Step 2.5: Present Strategy for Confirmation
Write STRATEGY_PLAN.md:
# Response Strategy
## Global Themes (for opener)
1. Scalability: addressed by [approach]
2. Missing ablation: [approach]
## Per-Reviewer Strategy
### R2 (lean_reject → target: neutral+)
| ID | Mode | Angle | Priority |
|----|------|-------|----------|
| R2-C1 | additional_experiment | Run comparison with Y on benchmarks A, B; placeholder until results ready | P0 |
| R2-C2 | nearest_work_delta | Clarify 3 key differences from Z (2024): [diff1], [diff2], [diff3] | P1 |
### R3 (neutral → target: lean_accept)
| ID | Mode | Angle | Priority |
|----|------|-------|----------|
| R3-C1 | additional_experiment | Scale-up experiment on dataset C; shares evidence with R2-C1 | P0 |
### R1 (lean_accept → target: champion)
| ID | Mode | Angle | Priority |
|----|------|-------|----------|
| R1-C1 | direct_clarification | Rewrite Section 3.2 intro paragraph for clarity | P2 |
| R1-C2 | additional_experiment | Ablation study for component X | P1 |
## Character Budget
- Opener: ~600 / 5000 chars
- R2: ~1800 chars (2 issues, 1 critical + 1 major)
- R3: ~1200 chars (1 issue, 1 major)
- R1: ~900 chars (2 issues, 0 critical)
- Closing: ~500 chars
- Total: ~5000 / 5000 limit
--plan-only exit point: If set, present ISSUE_BOARD.md + STRATEGY_PLAN.md + EXPERIMENT_GAPS.md to the user and stop.
Otherwise: Present the strategy plan to the user. Ask: "Does this strategy look right? Adjust any response modes, angles, or priorities before I draft the rebuttal." Wait for confirmation before proceeding to Phase 3.
Phase 3: Draft, Validate & Finalize
Step 3a: Draft Rebuttal
Write REBUTTAL_DRAFT.md following the confirmed strategy plan.
Structure:
Global opener (10-15% of budget)
- Thank all reviewers for their thorough feedback
- Address 2-4 shared themes with concise resolutions
- Set the narrative: what the rebuttal will demonstrate
Per-reviewer responses (75-80% of budget, in priority order)
For each issue, follow this pattern:
- Sentence 1: Direct answer to the concern
- Sentences 2-4: Grounded evidence (cite specific paper sections, tables, equations, or numbers)
- Last sentence: Implication — why this strengthens the paper or resolves the concern
- For
additional_experiment issues: write full surrounding prose but replace results with [INSERT: description of what goes here, e.g., "accuracy comparison between our method and Method Y on datasets A, B (Table format: Method | Dataset A | Dataset B)"]
Closing (5-10% of budget)
- Summary of what is resolved
- Remaining items (with
[INSERT: ...] marked)
- Case for acceptance directed at meta-reviewer
Drafting heuristics:
- Evidence > assertion — always cite specific numbers, tables, sections
- Global narrative before per-reviewer detail
- Name closest prior work + exact delta for novelty disputes
- Concede narrowly when reviewer is correct — honest narrow concession > broad denial
- Answer champion reviewers too — reinforce their positive framing
- Don't argue unwinnable points more than once
- For theory: separate core contribution from technical assumptions
- Concrete numbers for counter-intuitive claims
Hard rules:
- NEVER invent experiments, numbers, derivations, or citations
- NEVER promise experiments the user hasn't confirmed
- Every claim must trace to: paper content, reviewer's own statement, or
[INSERT: ...] placeholder
- If no strong evidence exists for a point, say less not more
Step 3b: Automated Lints
Run 5 checks on the draft and write results to LINT_REPORT.md:
Coverage check — For every issue in ISSUE_BOARD.md, verify there is a corresponding response in the draft. Flag any missing issues.
Provenance check — For every factual claim in the draft:
- Claims citing paper sections/tables/equations: verify the referenced section/table exists in the paper
- Claims citing reviewer statements: verify the quote appears in REVIEWS_RAW.md
[INSERT: ...] placeholders: verify correct formatting
- Other factual claims with no clear source: flag as "needs manual verification"
Tone check — Flag these problematic patterns:
- Aggressive: "the reviewer is wrong", "this is clearly stated", "obviously"
- Submissive: "we apologize", "we are sorry", excessive hedging
- Evasive: changing the subject, answering a different question
- Replace with neutral-professional alternatives
Consistency check — Verify no contradictions across reviewer replies (e.g., telling R1 "we do X" and R2 "we don't do X")
Character count check — Count exact characters in the draft. If over the limit, compress using this priority:
- Identify and merge duplicate arguments across reviewer responses
- Remove filler phrases and tighten wording throughout
- Trim responses to minor issues from champion reviewers
- Shorten closing section
- Compress opener to bare essentials
- NEVER drop responses to critical/major issues
- If still over after all compression, flag to user: "Cannot fit within limit — need manual cuts"
Step 3c: Stress Test (Adversarial Self-Review)
Re-read the entire draft from the perspective of an adversarial meta-reviewer. Systematically check:
- Unanswered concerns — Any issue from ISSUE_BOARD.md that the draft fails to address convincingly?
- Unsupported claims — Any factual statement not traceable to paper, review, or
[INSERT: ...]?
- Risky promises — Any commitment to work the user hasn't confirmed?
- Tone problems — Aggressive, defensive, evasive, or submissive passages?
- Backfire risk — Which paragraph is most likely to annoy the meta-reviewer? Why?
Write findings to STRESS_TEST.md with a verdict: safe_to_submit | needs_revision.
If needs_revision: apply minimal grounded fixes (no invented evidence), re-run the lint checks, and produce the final version. Maximum 1 revision round. If still problematic after revision, flag remaining issues to user for manual intervention.
Step 3d: Finalize — Two Outputs
Produce two versions:
PASTE_READY.txt — Strict venue-compliant version
- Plain text only (no markdown formatting)
- Exact character count within venue limit
- Ready to paste directly into OpenReview/CMT/HotCRP
[INSERT: ...] placeholders preserved for user to fill
REBUTTAL_DRAFT_rich.md — Extended version
- Same structure with more detail: fuller explanations, additional evidence, optional paragraphs
- Sections marked
[OPTIONAL — cut if over limit] for easy trimming
- Pre-written material for potential follow-up rounds
- Authors read this version, then decide what to keep/cut/rewrite
Present to user with:
- Character count of PASTE_READY.txt vs venue limit
- Number and list of
[INSERT: ...] placeholders that need filling
- Any remaining risks from STRESS_TEST.md
- Suggested next steps (fill placeholders, run experiments, review rich version)
Follow-up Rounds (--followup)
When re-invoked with --followup:
Load state: Read existing output directory (requires ISSUE_BOARD.md, STRATEGY_PLAN.md, REBUTTAL_DRAFT.md at minimum). If directory is missing or incomplete, ask user for the correct path.
Parse new comments: Read the updated reviews file. Identify new reviewer comments that weren't in the original REVIEWS_RAW.md.
Link or create issues: For each new comment:
- If it relates to an existing issue in ISSUE_BOARD.md, link it and update the issue status
- If it's a new concern, create a new issue entry
- If the new comment contradicts a prior rebuttal claim, flag as conflict and ask user for resolution
Draft delta reply: Write responses to new comments only — not a full rewrite. Reference prior rebuttal responses where relevant.
Validate: Re-run lint checks and stress test on the delta reply.
Save: Append to FOLLOWUP_LOG.md with round number and timestamp.
Follow-up rules:
- Escalate technically, not rhetorically
- Concede if reviewer is right and no new evidence exists
- Stop arguing immovable points — answer once and move on
- If same issue is re-raised, reference prior response and only add new content if prior response was insufficient
Output Directory
All outputs are saved to: ./output/rebuttal/YYYY-MM-DD-HHMMSS/
./output/rebuttal/YYYY-MM-DD-HHMMSS/
├── REVIEWS_RAW.md # Verbatim copy of input reviews
├── ISSUE_BOARD.md # Phase 1: classified concerns + situation assessment
├── STRATEGY_PLAN.md # Phase 2: per-reviewer response strategy + character budget
├── EXPERIMENT_GAPS.md # Phase 2: experiments needed with priorities
├── REBUTTAL_DRAFT.md # Phase 3: working draft
├── REBUTTAL_DRAFT_rich.md # Phase 3: extended version with optional sections
├── PASTE_READY.txt # Phase 3: venue-compliant plain text for submission
├── LINT_REPORT.md # Phase 3: automated lint check results
├── STRESS_TEST.md # Phase 3: adversarial self-review findings
└── FOLLOWUP_LOG.md # Follow-up round responses (if --followup)
Best Practices
- Provide complete reviews: Copy the full review text from OpenReview including scores and confidence — more context leads to better analysis
- Include reviewer IDs: Preserve reviewer numbering from the venue system
- Specify the venue: While auto-detection works, explicit
--venue ensures correct character limits and format
- Use
--plan-only first: Review the strategy before committing to a full draft, especially for contentious reviews
- Fill placeholders promptly: After running experiments, replace
[INSERT: ...] markers with actual results
- Review the rich version: REBUTTAL_DRAFT_rich.md contains extra material useful for follow-up rounds
- Check character count: Always verify PASTE_READY.txt fits within the venue limit before submitting
- Don't over-argue: If the strategy marks something as
narrow_concession, trust that framing — conceding gracefully is stronger than arguing weakly
Limitations
- Does NOT run experiments — produces placeholders where experimental results are needed
- Does NOT edit or upload revised PDFs
- Does NOT submit to OpenReview/CMT/HotCRP
- Cannot verify claims about unpublished or in-progress work
- Novelty assessment for
nearest_work_delta depends on knowledge of the field
- Character count is approximate until PASTE_READY.txt is generated
Related Skills
paper-reviewing — Generate conference-style reviews (useful for self-review before submission)
paper-polishing — Get ICML meta-review style feedback on drafts
citation-assistant — Find and insert missing citations
literature-survey — Survey related work for novelty defense
1---2name: rebuttal3description: Rebuttal pipeline for conference paper reviews. Parses reviewer feedback, classifies concerns by severity/type, builds a per-reviewer response strategy, and drafts a venue-compliant rebuttal with placeholders for pending experiments. Supports follow-up rounds. Use when user says "rebuttal", "reply to reviewers", "respond to reviews", "rebuttal draft", or wants to answer reviewer comments for a conference submission.4---56## Overview78Prepare a grounded, venue-compliant rebuttal for conference paper reviewer feedback. The skill follows a 3-phase pipeline:9101. **Review Analysis** — Parse reviews, atomize concerns, classify severity/type, identify shared themes112. **Strategy Plan** — Per-reviewer response strategy with attitude, angle, evidence mapping, and experiment gap report123. **Draft & Validate** — Write rebuttal with placeholders for pending experiments, run lints and stress test, produce paste-ready output1314The skill writes all rebuttal prose except experiment results. For issues requiring new experiments, it writes the surrounding context and inserts `[INSERT: ...]` placeholders where results should go.1516## Arguments1718### `<paper-path>` (required)19Path to the submitted paper. Can be:20- A PDF file (absolute or relative path)21- A LaTeX project directory (will look for `main.tex` or first `.tex` file)2223### `<reviews-path>` (required)24Path to a markdown file containing reviews copied from OpenReview/CMT/HotCRP. Reviewer IDs should be preserved (e.g., `## Reviewer 1`, `## Reviewer #2`, `## R3`).2526### `--venue` (optional)27Target conference. Options: `NeurIPS`, `ICML`, `CVPR`, `ACL`, `AAAI`, `ICCV`, `ICLR`.28- Default: auto-detect from review format and scoring scale29- Fallback: generic format30- Determines character limits, response structure, and review parsing heuristics3132### `--char-limit` (optional, default: venue-specific or 5000)33Character limit for the rebuttal. Overrides venue default. This is the total limit across all reviewer responses.3435### `--plan-only` (optional)36Stop after Phase 2. Outputs ISSUE_BOARD.md + STRATEGY_PLAN.md + EXPERIMENT_GAPS.md without drafting the rebuttal. Useful for reviewing the strategy before committing to a draft.3738### `--followup` (optional)39Follow-up round mode. Expects an existing output directory from a prior run. Parses new reviewer comments and generates delta replies only.4041## Setup4243Install dependencies:44```bash45python -m pip install -r "BASE_DIR/scripts/requirements.txt"46```4748## Workflow4950### Phase 1: Review Analysis5152#### Step 1.0: Detect Paper Source5354If paper-path is a PDF: read directly with the Read tool (paginate for PDFs over 20 pages).5556If paper-path is a directory:571. Check if the directory contains a compiled PDF — if so, prefer the PDF582. Otherwise, look for `main.tex` or the first `.tex` file found593. Resolve `\input{}` and `\include{}` by recursively reading referenced files604. Parse concatenated `.tex` content as the paper text (equations remain as LaTeX source)6162#### Step 1.1: Read and Understand the Paper6364Read the entire paper. While reading, compile notes on:65- **Title, authors, affiliation**66- **Core claims and contributions** (from abstract + introduction)67- **Methodology** — key techniques, algorithms, theoretical results68- **Experimental setup** — datasets, baselines, metrics, ablations69- **Results** — key numbers, tables, figures70- **Limitations** — author-acknowledged weaknesses71- **Specific sections/tables/equations** — note identifiers (e.g., "Table 3", "Eq. 5", "Section 4.2") for citation in rebuttal7273#### Step 1.2: Parse and Normalize Reviews74751. Read the reviews markdown file762. Split by reviewer ID. Supported patterns: `Reviewer 1`, `Reviewer #1`, `R1`, `Reviewer A`, or markdown headings (`## Reviewer 1`). If the format is non-standard, ask the user to clarify reviewer boundaries.773. For each reviewer, extract:78 - **Scores** (if present): overall score, confidence, sub-scores79 - **Strengths section**80 - **Weaknesses section**81 - **Questions section**82 - **Minor issues**834. Save verbatim copy to `REVIEWS_RAW.md` in the output directory8485#### Step 1.3: Atomize and Classify Concerns8687For each reviewer, break down their feedback into discrete atomic concerns. Each concern gets:8889| Field | Description |90|-------|-------------|91| `issue_id` | Unique ID: `R{reviewer}-C{number}` (e.g., R1-C1, R2-C3) |92| `raw_quote` | Verbatim excerpt from the review |93| `issue_type` | One of: `novelty`, `empirical_support`, `baseline_comparison`, `theorem_rigor`, `assumptions`, `complexity`, `clarity`, `reproducibility`, `practical_significance`, `other` |94| `severity` | `critical` (blocks acceptance), `major` (significant concern), `minor` (nice-to-fix) |95| `reviewer_stance` | Inferred from scores + tone using the lookup table in `references/rebuttal_guidelines.md` |96| `needs_experiment` | `true` if addressing this concern requires new experimental results |97| `status` | Initially `open` for all concerns |9899#### Step 1.4: Identify Shared Themes100101Scan across all reviewers for overlapping concerns:102- Group issues by `issue_type` and semantic similarity103- Flag themes raised by 2+ reviewers (these go in the global opener)104- Note contradictions between reviewers (one praises what another criticizes)105106#### Step 1.5: Situation Assessment107108Compute and write a summary:109- Scores per reviewer (raw and normalized stance)110- Champions vs swing voters vs detractors111- Shared themes with reviewer overlap112- **Path to acceptance**: which reviewers to convert and what it takes113114#### Output: `ISSUE_BOARD.md`115116```markdown117# Situation Assessment118119- Scores: R1 (6/10, lean_accept), R2 (4/10, lean_reject), R3 (5/10, neutral)120- Champions: R1 | Swing voters: R3 | Detractors: R2121- Shared themes: [scalability concerns (R2, R3), missing ablation (R1, R2)]122- Path to acceptance: Convert R3 by addressing scalability + ablation123124# Issue Board125126| ID | Reviewer | Type | Severity | Quote | Needs Experiment | Status |127|----|----------|------|----------|-------|-----------------|--------|128| R1-C1 | R1 | clarity | minor | "Section 3.2 is hard to follow" | false | open |129| R1-C2 | R1 | empirical_support | major | "Ablation missing for component X" | true | open |130| R2-C1 | R2 | empirical_support | critical | "No comparison with Method Y" | true | open |131| R2-C2 | R2 | novelty | major | "Similar to Z (2024)" | false | open |132| R3-C1 | R3 | complexity | major | "Scalability not demonstrated" | true | open |133```134135---136137### Phase 2: Strategy Plan138139#### Step 2.1: Assign Response Modes140141For each issue in ISSUE_BOARD.md, assign a response mode using this decision tree (in priority order — prefer the first applicable mode):1421431. **Does the reviewer factually misread the paper or miss existing content?**144 → `direct_clarification` — Point to specific section/table/equation they missed1451462. **Is there existing evidence in the paper that answers the concern?**147 → `grounded_evidence` — Cite specific numbers, theorems, or results already present1481493. **Is this a novelty dispute?**150 → `nearest_work_delta` — Name the closest prior work + exact technical difference1511524. **Does the concern require new experimental results to address?**153 → `additional_experiment` — Placeholder in draft, added to EXPERIMENT_GAPS.md1541555. **Is the reviewer correct about a limitation?**156 → `narrow_concession` — Acknowledge honestly, then scope the impact narrowly1571586. **Is the concern valid but out of scope for this paper?**159 → `future_work` — Commit to future investigation, explain current scope boundary160161If multiple modes apply, prefer the one higher in the list (stronger evidence first).162163#### Step 2.2: Define Response Angles164165For each issue, write 1-2 sentences describing:166- **What to say** — the core argument or evidence to present167- **Tone** — e.g., "Politely clarify that Table 3 already shows this", "Acknowledge the gap and present the planned ablation"168169#### Step 2.3: Build Experiment Gap Report170171Create `EXPERIMENT_GAPS.md` listing all `needs_experiment: true` issues:172173```markdown174# Experiment Gaps175176| ID | Issue | Experiment Needed | Metric | Satisfies | Priority |177|----|-------|-------------------|--------|-----------|----------|178| R2-C1 | No comparison with Method Y | Run Method Y on datasets A, B | Accuracy, FLOPs | R2-C1, R3-C1 | P0 (blocks acceptance) |179| R1-C2 | Missing ablation for X | Ablate component X | Accuracy delta | R1-C2 | P1 (strengthens case) |180```181182#### Step 2.4: Build Character Budget183184Calculate character allocation based on `--char-limit`:185- **10-15%** — Global opener (thank reviewers + shared theme resolutions)186- **75-80%** — Per-reviewer responses (proportional to issue count × severity weight: critical=3, major=2, minor=1)187- **5-10%** — Closing (resolved summary + acceptance case)188189Order reviewers by priority: detractors first (most to gain), then swing voters, then champions.190191#### Step 2.5: Present Strategy for Confirmation192193Write `STRATEGY_PLAN.md`:194195```markdown196# Response Strategy197198## Global Themes (for opener)1991. Scalability: addressed by [approach]2002. Missing ablation: [approach]201202## Per-Reviewer Strategy203204### R2 (lean_reject → target: neutral+)205| ID | Mode | Angle | Priority |206|----|------|-------|----------|207| R2-C1 | additional_experiment | Run comparison with Y on benchmarks A, B; placeholder until results ready | P0 |208| R2-C2 | nearest_work_delta | Clarify 3 key differences from Z (2024): [diff1], [diff2], [diff3] | P1 |209210### R3 (neutral → target: lean_accept)211| ID | Mode | Angle | Priority |212|----|------|-------|----------|213| R3-C1 | additional_experiment | Scale-up experiment on dataset C; shares evidence with R2-C1 | P0 |214215### R1 (lean_accept → target: champion)216| ID | Mode | Angle | Priority |217|----|------|-------|----------|218| R1-C1 | direct_clarification | Rewrite Section 3.2 intro paragraph for clarity | P2 |219| R1-C2 | additional_experiment | Ablation study for component X | P1 |220221## Character Budget222- Opener: ~600 / 5000 chars223- R2: ~1800 chars (2 issues, 1 critical + 1 major)224- R3: ~1200 chars (1 issue, 1 major)225- R1: ~900 chars (2 issues, 0 critical)226- Closing: ~500 chars227- Total: ~5000 / 5000 limit228```229230**`--plan-only` exit point**: If set, present ISSUE_BOARD.md + STRATEGY_PLAN.md + EXPERIMENT_GAPS.md to the user and stop.231232**Otherwise**: Present the strategy plan to the user. Ask: "Does this strategy look right? Adjust any response modes, angles, or priorities before I draft the rebuttal." Wait for confirmation before proceeding to Phase 3.233234---235236### Phase 3: Draft, Validate & Finalize237238#### Step 3a: Draft Rebuttal239240Write `REBUTTAL_DRAFT.md` following the confirmed strategy plan.241242**Structure:**2432441. **Global opener** (10-15% of budget)245 - Thank all reviewers for their thorough feedback246 - Address 2-4 shared themes with concise resolutions247 - Set the narrative: what the rebuttal will demonstrate2482492. **Per-reviewer responses** (75-80% of budget, in priority order)250 For each issue, follow this pattern:251 - **Sentence 1**: Direct answer to the concern252 - **Sentences 2-4**: Grounded evidence (cite specific paper sections, tables, equations, or numbers)253 - **Last sentence**: Implication — why this strengthens the paper or resolves the concern254 - For `additional_experiment` issues: write full surrounding prose but replace results with `[INSERT: description of what goes here, e.g., "accuracy comparison between our method and Method Y on datasets A, B (Table format: Method | Dataset A | Dataset B)"]`2552563. **Closing** (5-10% of budget)257 - Summary of what is resolved258 - Remaining items (with `[INSERT: ...]` marked)259 - Case for acceptance directed at meta-reviewer260261**Drafting heuristics:**262- Evidence > assertion — always cite specific numbers, tables, sections263- Global narrative before per-reviewer detail264- Name closest prior work + exact delta for novelty disputes265- Concede narrowly when reviewer is correct — honest narrow concession > broad denial266- Answer champion reviewers too — reinforce their positive framing267- Don't argue unwinnable points more than once268- For theory: separate core contribution from technical assumptions269- Concrete numbers for counter-intuitive claims270271**Hard rules:**272- NEVER invent experiments, numbers, derivations, or citations273- NEVER promise experiments the user hasn't confirmed274- Every claim must trace to: paper content, reviewer's own statement, or `[INSERT: ...]` placeholder275- If no strong evidence exists for a point, say less not more276277#### Step 3b: Automated Lints278279Run 5 checks on the draft and write results to `LINT_REPORT.md`:2802811. **Coverage check** — For every issue in ISSUE_BOARD.md, verify there is a corresponding response in the draft. Flag any missing issues.2822832. **Provenance check** — For every factual claim in the draft:284 - Claims citing paper sections/tables/equations: verify the referenced section/table exists in the paper285 - Claims citing reviewer statements: verify the quote appears in REVIEWS_RAW.md286 - `[INSERT: ...]` placeholders: verify correct formatting287 - Other factual claims with no clear source: flag as "needs manual verification"2882893. **Tone check** — Flag these problematic patterns:290 - Aggressive: "the reviewer is wrong", "this is clearly stated", "obviously"291 - Submissive: "we apologize", "we are sorry", excessive hedging292 - Evasive: changing the subject, answering a different question293 - Replace with neutral-professional alternatives2942954. **Consistency check** — Verify no contradictions across reviewer replies (e.g., telling R1 "we do X" and R2 "we don't do X")2962975. **Character count check** — Count exact characters in the draft. If over the limit, compress using this priority:298 1. Identify and merge duplicate arguments across reviewer responses299 2. Remove filler phrases and tighten wording throughout300 3. Trim responses to minor issues from champion reviewers301 4. Shorten closing section302 5. Compress opener to bare essentials303 6. NEVER drop responses to critical/major issues304 7. If still over after all compression, flag to user: "Cannot fit within limit — need manual cuts"305306#### Step 3c: Stress Test (Adversarial Self-Review)307308Re-read the entire draft from the perspective of an adversarial meta-reviewer. Systematically check:3093101. **Unanswered concerns** — Any issue from ISSUE_BOARD.md that the draft fails to address convincingly?3112. **Unsupported claims** — Any factual statement not traceable to paper, review, or `[INSERT: ...]`?3123. **Risky promises** — Any commitment to work the user hasn't confirmed?3134. **Tone problems** — Aggressive, defensive, evasive, or submissive passages?3145. **Backfire risk** — Which paragraph is most likely to annoy the meta-reviewer? Why?315316Write findings to `STRESS_TEST.md` with a verdict: `safe_to_submit` | `needs_revision`.317318If `needs_revision`: apply minimal grounded fixes (no invented evidence), re-run the lint checks, and produce the final version. Maximum 1 revision round. If still problematic after revision, flag remaining issues to user for manual intervention.319320#### Step 3d: Finalize — Two Outputs321322Produce two versions:3233241. **`PASTE_READY.txt`** — Strict venue-compliant version325 - Plain text only (no markdown formatting)326 - Exact character count within venue limit327 - Ready to paste directly into OpenReview/CMT/HotCRP328 - `[INSERT: ...]` placeholders preserved for user to fill3293302. **`REBUTTAL_DRAFT_rich.md`** — Extended version331 - Same structure with more detail: fuller explanations, additional evidence, optional paragraphs332 - Sections marked `[OPTIONAL — cut if over limit]` for easy trimming333 - Pre-written material for potential follow-up rounds334 - Authors read this version, then decide what to keep/cut/rewrite335336Present to user with:337- Character count of PASTE_READY.txt vs venue limit338- Number and list of `[INSERT: ...]` placeholders that need filling339- Any remaining risks from STRESS_TEST.md340- Suggested next steps (fill placeholders, run experiments, review rich version)341342---343344### Follow-up Rounds (`--followup`)345346When re-invoked with `--followup`:3473481. **Load state**: Read existing output directory (requires ISSUE_BOARD.md, STRATEGY_PLAN.md, REBUTTAL_DRAFT.md at minimum). If directory is missing or incomplete, ask user for the correct path.3493502. **Parse new comments**: Read the updated reviews file. Identify new reviewer comments that weren't in the original REVIEWS_RAW.md.3513523. **Link or create issues**: For each new comment:353 - If it relates to an existing issue in ISSUE_BOARD.md, link it and update the issue status354 - If it's a new concern, create a new issue entry355 - If the new comment contradicts a prior rebuttal claim, flag as conflict and ask user for resolution3563574. **Draft delta reply**: Write responses to new comments only — not a full rewrite. Reference prior rebuttal responses where relevant.3583595. **Validate**: Re-run lint checks and stress test on the delta reply.3603616. **Save**: Append to `FOLLOWUP_LOG.md` with round number and timestamp.362363**Follow-up rules:**364- Escalate technically, not rhetorically365- Concede if reviewer is right and no new evidence exists366- Stop arguing immovable points — answer once and move on367- If same issue is re-raised, reference prior response and only add new content if prior response was insufficient368369---370371## Output Directory372373All outputs are saved to: `./output/rebuttal/YYYY-MM-DD-HHMMSS/`374375```376./output/rebuttal/YYYY-MM-DD-HHMMSS/377├── REVIEWS_RAW.md # Verbatim copy of input reviews378├── ISSUE_BOARD.md # Phase 1: classified concerns + situation assessment379├── STRATEGY_PLAN.md # Phase 2: per-reviewer response strategy + character budget380├── EXPERIMENT_GAPS.md # Phase 2: experiments needed with priorities381├── REBUTTAL_DRAFT.md # Phase 3: working draft382├── REBUTTAL_DRAFT_rich.md # Phase 3: extended version with optional sections383├── PASTE_READY.txt # Phase 3: venue-compliant plain text for submission384├── LINT_REPORT.md # Phase 3: automated lint check results385├── STRESS_TEST.md # Phase 3: adversarial self-review findings386└── FOLLOWUP_LOG.md # Follow-up round responses (if --followup)387```388389## Best Practices3903911. **Provide complete reviews**: Copy the full review text from OpenReview including scores and confidence — more context leads to better analysis3922. **Include reviewer IDs**: Preserve reviewer numbering from the venue system3933. **Specify the venue**: While auto-detection works, explicit `--venue` ensures correct character limits and format3944. **Use `--plan-only` first**: Review the strategy before committing to a full draft, especially for contentious reviews3955. **Fill placeholders promptly**: After running experiments, replace `[INSERT: ...]` markers with actual results3966. **Review the rich version**: REBUTTAL_DRAFT_rich.md contains extra material useful for follow-up rounds3977. **Check character count**: Always verify PASTE_READY.txt fits within the venue limit before submitting3988. **Don't over-argue**: If the strategy marks something as `narrow_concession`, trust that framing — conceding gracefully is stronger than arguing weakly399400## Limitations401402- Does NOT run experiments — produces placeholders where experimental results are needed403- Does NOT edit or upload revised PDFs404- Does NOT submit to OpenReview/CMT/HotCRP405- Cannot verify claims about unpublished or in-progress work406- Novelty assessment for `nearest_work_delta` depends on knowledge of the field407- Character count is approximate until PASTE_READY.txt is generated408409## Related Skills410411- `paper-reviewing` — Generate conference-style reviews (useful for self-review before submission)412- `paper-polishing` — Get ICML meta-review style feedback on drafts413- `citation-assistant` — Find and insert missing citations414- `literature-survey` — Survey related work for novelty defense