# Dr Cook:rebuttal Writer

> Draft professional peer review response letters and revision rebuttals. Use when writing a response to reviewers, rebuttal letter, point-by-point response, revision letter, or appeal of a rejection decision. Triggers on: rebuttal, response to reviewers, point-by-point response, reviewer comments, revision letter, appeal rejection, 回复审稿意见, 逐条回复, 修改说明, 审稿回复. Does NOT trigger on paper-reviewer (reviewing a paper for others) or citation-checker.

- Skill: `wen-chen/dr-cook-rebuttal-writer` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add wen-chen/dr-cook-rebuttal-writer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wen-chen/dr-cook-rebuttal-writer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: wen-chen (https://skillmd.com/u/wen-chen)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wen-chen/dr-cook-rebuttal-writer

---


# rebuttal-writer

## 1. Overview

rebuttal-writer helps authors craft professional, evidence-based responses to peer reviewer comments. Two modes: **full rebuttal** produces a complete point-by-point response letter covering all reviewer comments; **single comment** drafts a focused response to one specific comment. Tone is calibrated against the revision type and journal tier using `references/tone-calibration.md`, and letter structure follows `references/response-templates.md`. When upstream modules such as paper-reviewer have already run, rebuttal-writer inherits their `raw_text` as the reviewer comments source and their `domain`, `target_journal`, and `language` fields automatically.

## 2. Parameters

### Required

| Parameter | Values | Description |
|---|---|---|
| `reviewer_comments` | string (pasted text) | The raw reviewer comments. Paste directly or inherit from `context_output.raw_text` if an upstream module (e.g., paper-reviewer) has already produced them. |
| `manuscript_summary` | string | A 2–3 sentence description of the study — its question, methods, and key finding. Grounds all responses in the actual work and prevents generic replies. |

### Optional

| Parameter | Values | Description |
|---|---|---|
| `mode` | `full` \| `single` (default: `full`) | `full` = complete response letter addressing all reviewer comments; `single` = response to one specific comment. |
| `journal` | string | Journal name. Affects formality level and the degree of assertiveness appropriate in responses. |
| `domain` | `tcm` \| `bioinformatics` \| `clinical` \| `pharmacology` | Research domain. Affects terminology used in responses. Inherited from upstream context if available. |
| `revision_type` | `minor` \| `major` \| `rejection_appeal` | Affects tone depth and structure. If not provided, auto-detected in Step 3. |
| `language` | `en` \| `zh` (default: `en`) | Output language for the response letter. |

### Parameter collection rule

Collect one at a time: `reviewer_comments` first, then `manuscript_summary`. Infer or auto-detect optional parameters per the workflow below.

## 3. Workflow

**Step 1 — Check upstream context.**
Inspect `context_output` before asking the user anything. If a prior module has run, extract without re-asking: `domain`, `target_journal` → `journal`, `language`, `raw_text` → `reviewer_comments`. If upstream `status` is `failed`, halt. If `partial`, proceed with a warning.

**Step 2 — Collect missing required parameters.**
If `reviewer_comments` is absent, ask the user to paste them. If `manuscript_summary` is absent, ask: "Please provide a 2–3 sentence summary of your study (research question, methods, and key finding)." Collect one at a time.

**Step 3 — Detect revision_type.**
If `revision_type` was not provided by the user and is not present in upstream context, analyze the reviewer comment text for tone signals:
- If comments include any of: "reject", "fundamental flaw", "cannot recommend", "not suitable", "major conceptual issues" → propose `rejection_appeal`.
- If comments are brief (fewer than 300 words total) and consist mainly of small requests with no structural criticisms → propose `minor`.
- Otherwise → default to `major`.
Present the detected `revision_type` to the user (e.g., "Based on the comments, this appears to be a **major revision**. Does that sound right?") and wait for confirmation before proceeding.

**Step 4 — Load tone calibration.**
Read `references/tone-calibration.md`. Using the confirmed `revision_type` and, if known, the journal tier (top = Nature/Science/Cell/NEJM/Lancet; mid/general = all others), select the appropriate tone profile: Collegial, Respectful-assertive, or Measured-assertive. Apply the tone rules from that profile throughout drafting.

**Step 5 — Load response templates.**
Read `references/response-templates.md`. **Override rule**: When `revision_type` is `rejection_appeal`, Template 3 is always used regardless of `mode`. For all other revision types, select based on mode:
- `full` mode → Template 1 (Full Rebuttal Letter Structure)
- `single` mode → Template 2 (Single Comment Response)
- `rejection_appeal` type → Template 3 (Rejection Appeal Letter)

**Step 6 — Draft the response letter.**
Compose the response following the selected template and tone profile.

- **Full mode**: Parse individual numbered or bulleted items; group by reviewer. For each comment, produce three labeled sub-sections: `Reviewer N, Comment M:` (verbatim quote), `Response:` (2–8 sentences with evidence, data references, or literature), and `Manuscript change:` (location, or "No change required — see justification above").
- **Single mode**: Same three-part structure for the one comment provided.
- **Rejection appeal**: Open with a formal appeal request, summarize the study's contribution in 2 sentences, address each "fatal flaw" with direct evidence, close with a reconsideration request.

Apply domain terminology: TCM syndrome names for `tcm`; gene symbols in italics for `bioinformatics`; CONSORT/STROBE language for `clinical`; IUPHAR nomenclature for `pharmacology`. If `language: zh`, write in Chinese and keep reviewer comment quotes in their original language.

**Step 7 — Present output and offer iteration.**
Display the complete response letter. Then ask: "Would you like to adjust the tone (more assertive / more conciliatory), expand any specific response, or translate to Chinese?"

## 4. Output Format

```
[Rebuttal Letter — Mode: Full | Revision Type: Major]

Dear Editor [and Reviewers],

[Opening paragraph: 2–3 sentences of formal gratitude, noting all concerns have been
addressed and the manuscript is strengthened.]

---
REVIEWER 1

Reviewer 1, Comment 1: [Verbatim quote]
Response: [2–8 sentences. Lead with acknowledgment or respectful rebuttal. Cite
figures, tables, or literature as appropriate. State what was changed.]
Manuscript change: [Specific section and line/paragraph, or "No change required — see
justification above."]

Reviewer 1, Comment 2: [...]
Response: [...]
Manuscript change: [...]

---
REVIEWER 2
[...]

---
[Closing paragraph: 1–2 sentences expressing commitment to quality and, for rejection
appeals, a reconsideration request.]

Sincerely,
[Author names]
```

Header format: `[Rebuttal Letter — Mode: Full | Single] [Revision Type: Minor | Major | Rejection Appeal]`

If `language: zh`: write the entire letter in Chinese. Reviewer comment quotes remain in the original language (typically English). Use "感谢审稿人的宝贵意见" as the standard opener for each reviewer section.

## 5. context_output

### Reads from upstream

| Field | Source | Usage |
|---|---|---|
| `raw_text` | paper-reviewer, any upstream module | Used as `reviewer_comments` if not pasted directly by the user |
| `domain` | any upstream module | Terminology standard for domain-specific drafting |
| `target_journal` | any upstream module | Maps to `journal` parameter; informs journal tier detection |
| `language` | any upstream module | Output language (en or zh) |
| `parameters.*` | any upstream module | Prevents re-asking for already-collected values |

### Writes to output

```json
{
  "module": "rebuttal-writer",
  "summary": "Drafted full rebuttal addressing 12 reviewer comments across 2 reviewers",
  "raw_text": "<complete response letter>",
  "parameters": {
    "mode": "full | single",
    "revision_type": "minor | major | rejection_appeal",
    "journal": "<journal name or null>",
    "domain": "<domain or null>",
    "language": "en | zh"
  },
  "status": "success | partial | failed",
  "error_message": "string | null"
}
```

Downstream readers of `raw_text`: english-polisher, chinese-polisher.

## 6. References

See `references/` for:
- `tone-calibration.md` — Tone spectrum by revision type and journal tier; phrase-level rules for Collegial, Respectful-assertive, and Measured-assertive tones
- `response-templates.md` — Full rebuttal letter, single comment, and rejection appeal templates; mini-guide for handling common reviewer request types

