name: referee-response
description: Drafts an R&R response letter in the user's R2R style — sectioned by role (Senior Editor / Associate Editor / Reviewer 1 / Reviewer 2), reviewer quotes in \textit{...}, location-pinned changes ("see Section 3", "Footnote 7", "Table 4"), "Done." for trivial fixes, polite pushback with cited authority, abandoned drafts kept in \begin{comment} blocks. Reads existing R2R_*.tex files in the project for tone match and grounds every location pin against the actual main*.tex. Use whenever the user asks to "respond to referees", "draft an R&R response", "write the R2R", "address reviewer comments", "respond to the AE", or pastes reviewer comments from an Outlook export / decision letter. Also triggers on "continue the R2R" (extend a partial draft). Output goes to <project>/R2R_R<n>.tex.
argument-hint: "[continue] [from-email] [@path/to/decision-letter.pdf] [--five-q]"
/referee-response — R&R response letter in the user's voice
Personalization
This skill resolves placeholders against ~/.claude/state/personal_config.json. See _config/README.md and _config/personal_config.example.json for setup. If the config is missing or a needed field is unset, the skill must surface an error to the user and refuse to proceed rather than guess.
Required config fields:
personal_config.user.voice_style_ref— file containing the user's R2R voice fingerprint (per-role sections, italics for quotes, "Done." conventions, hedged pushback templates).personal_config.paths.overleaf_root— root containing project subdirs.personal_config.projects[]— per-project entries withname,overleaf_subdir,main_tex, and optionalr2r_glob(defaults toR2R_*.tex).
Purpose
The R&R is a journal submission, so the cost of fabrication is high: a hallucinated "we added X on page 27" gets caught by the editor and erodes trust. This skill uses a multi-pass review pattern — classify every comment, verify every location pin against the actual manuscript, surface gaps explicitly — and renders the output in the user's R2R style: per-role sections, italics for quotes, location pins, "Done." for trivials.
When to invoke
The user invokes /referee-response when they have reviewer comments to respond to. Inputs come in several shapes:
/referee-responsewith comments pasted in the message body./referee-response @path/to/decision-letter.pdf(or.txt,.docx)./referee-response from-email— Outlook export pasted./referee-response continue— extend a partialR2R_R<n>.texalready in the project.
Required reading before drafting
Re-read on every invocation — don't summarize from session memory.
personal_config.user.voice_style_ref— full file, especially the R&R style section. This is canonical.- The latest existing
R2R_R*.texin the project — Glob the project'sR2R_*.texand read the highest-numbered one. This is the tone match for the new round. - The current
main*.tex— to ground location pins. Read at least the table of contents (section/subsection labels), the footnote count, and any explicitly-labeled tables/figures. - A bibliography reference — only if a reviewer cites a paper that needs adding; route through
/citerather than fabricating citations.
If a referee report is a scanned/image PDF with no OCR text, stop and ask for a text version. Do not invent comments from the title page.
Style rules — non-negotiable, from voice_style_ref
- Opening of the file: a one-paragraph global thanks ("We would like to thank the review team for your constructive, detailed, and insightful comments...") followed by a numbered
\begin{enumerate}list summarizing the main changes at a high level. Then per-role sections. - Per-role sectioning, in this order:
\section*{Senior Editor}\section*{Associate Editor}\section*{Reviewer 1}\section*{Reviewer 2}- (continue if more reviewers; preserve numbering received) Each section opens with a one-paragraph thanks unique to that role.
- Each comment: verbatim quote in
\textit{...}, then\newline, then response in plain text below. - "Done." — exactly that, one word, period — for trivial fixes with an explicit SE/AE instruction. Always followed by a one-sentence location pin: "Done. See Footnote 7." Never use "Done." for substantive comments.
- Location pins — every substantive change is anchored: "see Section 3.2", "see Web Appendix A.4", "Footnote 7", "Table 4". Never say "we changed it" without a location. Never invent a location not verified against
main*.tex. - Quoting new paper text into the R2R — wrap with LaTeX double quotes
... '' `` and bold the load-bearing phrases with\textbf{}. - Polite pushback when respectfully disagreeing — open with "To the best of our understanding..." or "We believe that our specification is aligned with...", then cite the relevant authority (e.g.,
\citep{atheyImbens2017}) and quote them inline. End by inviting the editor's discretion. - Abandoned drafts — keep prior or abandoned response drafts inside
\begin{comment}...\end{comment}blocks rather than deleting; preserves revision history. - Citations —
\citep{}/\citealt{}/\citet{}per the paper-voice rules. Never\cite{}.
Workflow
Step 1 — Parse the referee report
Extract structured comments. If the input is a PDF, use pdftotext (Windows: PowerShell pdftotext.exe if available; otherwise fall back to a quick Bash conversion). Convert to:
[
{ role: "Senior Editor", comments: [ "<verbatim>", "<verbatim>", ... ] },
{ role: "Associate Editor", comments: [ ... ] },
{ role: "Reviewer 1", comments: [ ... ] },
{ role: "Reviewer 2", comments: [ ... ] },
]
If the source isn't pre-labeled by role, ask once to confirm role assignments. If comments aren't numbered, preserve the source's structure (paragraphs, bullets) — don't impose numbering the user didn't receive.
Step 2 — Multi-pass classification
For each comment, pick a response strategy. Doing this as a separate pass before drafting catches misclassifications early.
| Strategy | When to use | Response template |
|---|---|---|
| Done. | SE/AE gave an explicit instruction with a single-action fix (typo, format, missing citation, swap a word) | Done. <location pin>. |
| Substantive change | Reviewer requested an analysis, a robustness check, additional discussion, or a model revision — and the change is genuinely incorporated | Multi-sentence: acknowledge → state what we changed → location pin → quote new text inline with key phrase \textbf{} |
| Partial / scoped change | Reviewer asked for X, we did a scoped version of X | Multi-sentence: acknowledge → describe scope of what we did → location pin → explain (briefly) why we scoped rather than full |
| Polite disagreement | Reviewer's premise is mistaken or contradicts a more-authoritative source | Open with "To the best of our understanding..." → state reasoning → cite authority with brief inline quote → end inviting editor's discretion |
| Deferred | Out of scope, separate paper, would require new data collection beyond R&R window | Acknowledge → state why deferred → point to where (if anywhere) we flag this in the paper |
| Needs user input | Cannot classify without substantive judgment | Leave % TODO: user — clarify what you want to do with R<n>.<m> and a one-sentence question |
Step 3 — Multi-pass verification (claim-discipline pass)
Before writing the final response paragraphs, for every "Substantive change" or "Partial change" classification:
- Open
main*.texat the location you plan to pin. - Confirm the change is actually there. Match the quoted text in the response against the text in the manuscript (or its
\input{}files). - If the change is not present, downgrade the classification:
- "Substantive change" with no evidence in manuscript →
Partial changewith TODO, OR% TODO: user — please confirm change made and update location. - Never assert "we added X to Section Y" without having read X in Section Y.
- "Substantive change" with no evidence in manuscript →
The cost of getting this wrong is a credibility hit with the SE.
Step 4 — Draft the response file
Output path: <project>/R2R_R<n>.tex where <n> is the round number specified, or one more than the highest existing R2R_R*.tex.
File header:
% Draft generated by /referee-response on <YYYY-MM-DD>
% Round: R<n>
% Project: <project name>
% Source style ref: <personal_config.user.voice_style_ref>
% Status: DRAFT — user to revise in Overleaf
% Verification: each "Substantive change" was checked against <main file>
% Inline TODOs flagged with % TODO
File body:
We would like to thank the review team for your constructive, detailed, and
insightful comments. We have substantially revised the manuscript in response.
The main changes are as follows:
\begin{enumerate}
\item <one-sentence summary of major change 1, with location>
\item <... change 2>
\item <... change 3>
\end{enumerate}
\section*{Senior Editor}
We thank the Senior Editor for <one-sentence specific thanks, not generic>.
\textit{<verbatim quote of SE comment 1>}
\newline
<response paragraph, location-pinned>
\textit{<verbatim quote of SE comment 2>}
\newline
Done. See Footnote 12.
\section*{Associate Editor}
We thank the Associate Editor for <specific thanks>.
\textit{<quote>}
\newline
<response>
\section*{Reviewer 1}
We thank Reviewer 1 for <specific thanks>.
\textit{<quote>}
\newline
<response>
\section*{Reviewer 2}
We thank Reviewer 2 for <specific thanks>.
\textit{<quote>}
\newline
<response>
Step 5 — Chat report
Print to chat (not into the file):
- Path to the new
R2R_R<n>.tex. - Count of comments parsed per role.
- Count of
% TODO:items needing user attention, with the comment IDs (e.g., R1.3, R2.7). - Substantive positions taken that the user should sanity-check — list each one with its location pin and the position taken. Surfaces anything where a judgment was made that the user might want to override.
- Any reviewer comments that cite a paper not yet engaged with in the manuscript — suggest routing those papers through
/citebefore submitting.
Modes
Default (no flags)
Behavior is exactly as described in the Workflow section above: per-role sectioning, \textit{...} quotes, location pins verified against main*.tex, "Done." for trivial fixes, hedged pushback with cited authority, abandoned drafts preserved in \begin{comment}...\end{comment} blocks. No additional gating.
--five-q — so-what gatekeeping on pushback (OPT-IN)
Activates a hostile-editor stress test on every paragraph classified as Polite disagreement in Step 2. Before drafting the pushback prose, answer the following five questions about the disputed claim, in a brief scratch block (not in the output file):
- What is the question?
- Why should anyone care?
- What is the finding?
- How do we know?
- What does it mean for the field?
If any answer is unclear, hand-wavy, or thinner than the reviewer's objection, switch strategy from "defend and push back" to "concede partially + strengthen with new evidence" (i.e., reclassify the comment from Polite disagreement to Partial / scoped change per the Step 2 table). Draft the new concede-and-strengthen paragraph as the active response, and preserve the original rejected pushback draft inside \begin{comment}...\end{comment} per the abandoned-draft convention.
In the Step 5 chat report, add a line per comment that was downgraded: "R
This flag is OPT-IN ONLY — invoked as /referee-response --five-q (combinable with continue, from-email, or a @path input). Without the flag, default behavior is unchanged. Never auto-trigger.
Failure modes
- Comments not labeled by role: ask once for labeling, then proceed.
- Comment too vague to classify ("the paper needs more context"): mark
% TODO: user — needs your read; possibly substantive, not a guess. - Reviewer cites a specific paper not in the bib: flag, suggest
/cite. Do not draft a response that pretends the paper is already cited. - PDF input is image-only / scanned with no OCR: stop; ask for a text version. Don't invent comments.
- Multiple reviewers raise the same point: respond to each separately within their own section — do not merge. Cross-reference with "(see also our response to Reviewer 1, Comment 3)" if helpful.
- Reviewer asks for something already pushed back on in a prior round: read the prior
R2R_R<n-1>.texfor the existing language; reuse / refine rather than restart the argument. Don't contradict the prior position without flagging it as a% TODO: user — prior round said X; do we still hold that line?. - AE gives directly conflicting instructions to a reviewer ("AE says X; R2 says not-X"): write the response following the AE's instruction (the AE is decisive) and surface the conflict explicitly in the chat report.
main*.texhas been edited since the prior R2R was filed and you can't tell what's new: don't assume edits exist — verify against currentmain*.tex. If a location-pin can't be verified, downgrade per Step 3.
Anti-patterns — never do these
- Don't restructure the per-role
\section*{...}convention. - Don't summarize multiple comments into one combined response.
- Don't drop a comment because it seems redundant — every comment gets an explicit reply.
- Don't write in first person singular — always "we".
- Don't use
\cite{}; use\citep{}/\citealt{}/\citet{}. - Don't claim a change was made without verifying against
main*.tex. Use% TODOinstead. - Don't delete the abandoned-draft
\begin{comment}blocks from prior rounds — preserve them. - Don't push to Overleaf or commit — Dropbox handles sync.
Out of scope
- Modifying
main*.tex— the user does substantive paper edits themselves; this skill only drafts the response letter. - Generating new analyses to address a reviewer concern — that's a separate workflow (run R/Python, regenerate tables, then come back to this skill).
- Adding citations to the
.bib— route through/cite. - Critiquing the reviewer's arguments substantively — surface positions, don't invent counter-arguments the user hasn't sanctioned.
- Writing the SE/AE thanks paragraph in generic boilerplate — make it specific to what the SE/AE actually said.