referee-response — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited referee-response (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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 with name, overleaf_subdir, main_tex, and optional r2r_glob (defaults to R2R_*.tex).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.
The user invokes /referee-response when they have reviewer comments to respond to. Inputs come in several shapes:
/referee-response with 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 partial R2R_R<n>.tex already in the project.Re-read on every invocation — don't summarize from session memory.
in the project** — Glob the project's R2R_*.tex` and read the highest-numbered one. This is the tone match for the new round./cite rather 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.
voice_style_ref\begin{enumerate} list summarizing the main changes at a high level. Then per-role sections.\section*{Senior Editor}\section*{Associate Editor}\section*{Reviewer 1}\section*{Reviewer 2}Each section opens with a one-paragraph thanks unique to that role.
\textit{...}, then \newline, then response in plain text below.main*.tex. ... '' and bold the load-bearing phrases with \textbf{}`.\citep{atheyImbens2017}) and quote them inline. End by inviting the editor's discretion.\begin{comment}...\end{comment} blocks rather than deleting; preserves revision history.\citep{} / \citealt{} / \citet{} per the paper-voice rules. Never \cite{}.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.
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 |
Before writing the final response paragraphs, for every "Substantive change" or "Partial change" classification:
main*.tex at the location you plan to pin.\input{} files).Partial change with TODO, OR % TODO: user — please confirm change made and update location.The cost of getting this wrong is a credibility hit with the SE.
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 % TODOFile 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>Print to chat (not into the file):
R2R_R<n>.tex./cite before submitting.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):
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<n>.<m>: pushback downgraded under --five-q; weak answer to Q<k>".
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.
% TODO: user — needs your read; possibly substantive, not a guess./cite. Do not draft a response that pretends the paper is already cited.R2R_R<n-1>.tex for 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?. has been edited since the prior R2R was filed and you can't tell what's new**: don't assume edits exist — verify against current main*.tex`. If a location-pin can't be verified, downgrade per Step 3.\section*{...} convention.\cite{}; use \citep{} / \citealt{} / \citet{}.main*.tex. Use % TODO instead.\begin{comment} blocks from prior rounds — preserve them.main*.tex — the user does substantive paper edits themselves; this skill only drafts the response letter..bib — route through /cite.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.