Unified paper audit skill supporting Chinese & English academic papers.
Supports LaTeX (.tex), Typst (.typ), and PDF (.pdf) input formats.
Three modes: self-check (pre-submission), review (peer review simulation),
gate (quality gate pass/fail).
Use when user mentions: audit, review, check paper, paper quality,
pre-submission check, score paper, or any paper auditing task,
polish paper, deep polish, adversarial review, refine writing,
caption audit, 图表标题审查.
Unified paper audit skill supporting Chinese & English academic papers.
Supports LaTeX (.tex), Typst (.typ), and PDF (.pdf) input formats.
Three modes: self-check (pre-submission), review (peer review simulation),
gate (quality gate pass/fail).
Use when user mentions: audit, review, check paper, paper quality,
pre-submission check, score paper, or any paper auditing task,
polish paper, deep polish, adversarial review, refine writing,
caption audit, 图表标题审查.
Script-evaluable dimensions (Soundness, Clarity, Presentation, partial Reproducibility) are scored automatically. For complete assessment, supplement with LLM evaluation of Novelty, Significance, Ethics, and Reproducibility. See SCHOLAR_EVAL_GUIDE.md.
CLI: python scripts/audit.py paper.tex --mode polish --style A --journal neurips
Supported Formats
Format
Parser
Notes
LaTeX (.tex)
LatexParser
Full support — all checks available
Typst (.typ)
TypstParser
Full support — all checks available
PDF (.pdf) basic
PdfParser (pymupdf)
Text extraction with font-size heading detection
PDF (.pdf) enhanced
PdfParser (pymupdf4llm)
Structured Markdown with table/header preservation
PDF Limitations: Math formulas may be lost; some checks (format, figures) skip for PDF. Recommend providing source files (.tex/.typ) for maximum accuracy.
Read .polish-state/precheck.json from the paper's directory.
Check hard blockers
If precheck.json["blockers"] is non-empty, display them and STOP.
Say: "Fix these Critical issues before polish can proceed:" + list.
Do NOT spawn any agent until user confirms fixes.
Handle non-IMRaD structure (if precheck.json["non_imrad"] == true)
Show detected sections, ask user: "Proceed with polish on these sections?"
Spawn Critic Agent via Task:
Subagent type: general-purpose
Prompt template:
You are an adversarial academic reviewer.
Paper: {file_path} | Language: {lang} | Journal: {journal} | Style: {style}
Step 1: Read the paper using the Read tool (file: {file_path}).
Step 2: The rule-based precheck found these issues: {precheck_issues_summary}
Step 3: Produce a CRITIC REPORT as valid JSON (no markdown fencing):
{
"global_verdict": "ready_to_polish" | "needs_revision_first" | "major_restructure_needed",
"global_rationale": "2-3 sentences",
"section_verdicts": [
{
"section": "<name>",
"logic_score": 1-5,
"expression_score": 1-5,
"blocks_mentor": false,
"blocking_reason": "",
"top_issues": [{"type": "logic|expression|argument", "description": "..."}]
}
],
"cross_section_issues": ["..."]
}
blocks_mentor = true ONLY when logic_score <= 2 or section is structurally absent.
Save the Critic's JSON output to .polish-state/critic_report.json using Bash:
Display Critic Dashboard and gate
Render the Critic report as a markdown table (see dashboard format).
Show blocked sections. Ask:
"How to proceed?
[1] Polish all sections (override blocks)
[2] Skip blocked sections, polish the rest
[3] Stop and revise blocked sections first"
Wait for response.
Spawn Mentor Agents per section (sequential, one at a time):
For each approved section in IMRaD order:
Subagent type: general-purpose
Prompt template:
You are a writing mentor specializing in academic polish.
CRITICAL RULES (NEVER VIOLATE):
- Never modify \cite{}, \ref{}, \label{}, \eqref{} in LaTeX
- Never modify @cite, #cite(), #ref(), <label> in Typst
- Never modify math environments: $...$, \begin{equation}..., \begin{align}...
- Never add/remove citations
- Mark any domain terminology changes as [TERM CHANGE: confirm?]
Section: {section_name} (lines {start}-{end})
Target style: {style} ({style_description from POLISH_GUIDE.md})
Critic scores — Logic: {logic_score}/5, Expression: {expression_score}/5
Critic top issues: {top_issues}
Pre-check expression issues in this section: {filtered_expression_issues}
Read lines {start}-{end} of {file_path}:
Use Read tool with offset={start-1} and limit={end-start+1}.
Produce MENTOR REPORT in this format:
## Section: {section_name}
### Polish Suggestions
[MENTOR] (Line N) [Severity: Major|Minor] [Priority: P1|P2]: description
Original: <exact original text>
Revised: <revised text preserving all LaTeX/Typst commands>
Rationale: <one sentence>
### Section Summary
<2-3 sentences on overall quality and key improvements>
After each Mentor completes:
Display its output
Ask: "Section {name} polish done. Accept and continue to next section?"
Wait for confirmation before spawning next Mentor.
Final status dashboard (after all sections done):
See dashboard format below.