npx skills add ...
npx skills add bahayonghang/academic-writing-skills --skill paper-audit
Reviewer-style audit and submission gate for academic papers in .tex, .typ, or .pdf. Use for peer-review critique, readiness/gate decisions, blocker triage, revision roadmaps, journal-style reports, re-audits, and under-claim / self-weakening prose signals. Do not use for source editing, sentence polishing, bibliography search, or compile repair.
npx skills add bahayonghang/academic-writing-skills --skill paper-audit
paper-audit is deep-review-first: behave like a serious reviewer — find
technical, methodological, claim-level, and cross-section issues; keep
script-backed findings separate from reviewer judgment; return a structured
issue bundle plus a revision roadmap. Use it for audit and review, not as the
first tool for source editing, sentence rewriting, or build fixing.
A script-backed PRESUBMISSION layer handles final-week mechanical checks
(em dashes, AI-tone term frequency, abstract completeness, LaTeX
citation/label/equation hygiene, paragraph-shape weak signals, concrete
captions). It plugs into existing modes and is not a separate public mode;
see references/PRESUBMISSION_GUIDE.md.
Requirements: .tex/.typ audit needs only the Python standard library.
PDF mode needs pip install pymupdf (the enhanced extraction path also
needs pymupdf4llm); both are optional and lazily imported — a .pdf input
without them fails with a clear install hint.
Install layout: Full .tex/.typ script-backed checks resolve sibling
writing skills from the parent of this skill directory (latex-paper-en/scripts,
latex-thesis-zh/scripts, typst-paper/scripts). Recommended: keep all six
skill directories as siblings (cover-letter, paper-audit, latex-paper-en,
latex-thesis-zh, typst-paper, bib-search-citation). A single paper-audit
copy is limited coverage: missing sibling scripts are skipped and the
existing exit/gate behavior is unchanged (recorded standalone boundary:
missing=8, exit 0). Do not copy sibling scripts into paper-audit/.
quick-audit: fast submission-readiness screen with script-backed findings, incl. PRESUBMISSIONdeep-review: reviewer-style structured issue bundle with major/moderate/minor findingsgate: PASS/FAIL calibrated for submission blockers; PRESUBMISSION Major/Minor stay advisoryre-audit: compare current issue bundle against a previous audit, incl. mechanical regressionspolish: precheck-only handoff into a polishing workflowThe primary product is no longer just a score: the deep-review workspace
root contains exactly four reader-facing files — review_report.md,
revision_suggestions.md, and their HTML twins — with everything else under
artifacts/. Full artifact map and the --lang en|zh report-language rules:
references/output-layout.md.
.tex / .typcover-letterpaper-audit is a reviewer, not an editor; switch skills explicitly if the user wants prose changes, so review evidence stays separable from edits.[Script] from [LLM] findings — script-backed items have a deterministic anchor the user can rerun, while LLM findings need a quote or section to be falsifiable.paper-audit — keep prose rewrites in the format-specific writing skills.section_methods, load its focus block in references/SUBAGENT_TEMPLATES.md; that block points to the authoritative method contract. Phase 0 adds the Methods-section logic pass only for English .tex and for .typ inputs; Chinese thesis method narration remains an explicit latex-thesis-zh --method-narrative --section workflow outside the automatic audit chain.subsection_context_polish focus block
and references/SUBSECTION_CONTEXT_PROTOCOL.md. The lane is available to polish
orchestration and to deep-review full/logic focus only; its neighboring window
components are evidence, not additional rewrite targets.PRESUBMISSION, map CRITICAL / MAJOR / MINOR to Critical / Major / Minor script severities; only Critical or failed checklist items can fail gate — otherwise mechanical findings drown out the substantive ones (full matrix: references/PRESUBMISSION_GUIDE.md).--online or --literature-search unless the user explicitly
requested external verification/search or confirmed that sending title,
abstract, citation metadata, or queries to third-party APIs is acceptable.Three write levels, each adding to the one before it. The user selects a level
in one sentence; do not re-confirm it at every phase. T1 is the default.
| Level | User says | Newly forbidden | Still allowed |
|---|---|---|---|
T1 | nothing (default), "don't edit my paper" | editing the .tex / .typ / .pdf source | building a workspace, writing reports and artifacts anywhere |
T2 | "don't write into the repo" | writing any file inside the paper repository or this repository | writing to a user-named directory outside those trees |
T3 | "don't leave any files", "conversation only" | writing a file anywhere | returning findings in the conversation only |
Mode availability per level, with default flags. quick-audit, gate,
re-audit, and polish were measured on 2026-09-06 by running each in a
directory holding only the paper file and comparing the listing before and
after; every run finished and printed its report on stdout, so "writes
nothing" means the run completed and left no file. deep-review was not run —
its row comes from reading scripts/audit.py and
scripts/prepare_review_workspace.py.
Two writes are independent of the mode. --output PATH / -o PATH writes the
report to a file, so it breaks T3 whatever the mode — at T3 do not pass it
and do not redirect stdout. Separately, audit.py launches each check script
as a subprocess without -B, so Python writes __pycache__/ into this
repository's scripts/ directories; the parent's -B does not propagate. Set
PYTHONDONTWRITEBYTECODE=1 in the environment at T2 and T3.
quick-audit, gate: write no report or workspace file. Available at all
three levels, subject to the bytecode note above.re-audit: audit.py --mode re-audit writes nothing, but the second
documented command diff_review_issues.py may write revision_trajectory.md
— it does so unless you pass --no-trajectory, and only when at least one
issue bundle carries a numeric round score. Its default target follows the
current bundle, so it can land inside either repository. Available at T1;
at T2 and T3 pass --no-trajectory or skip that command.polish: writes .polish-state/ next to the paper file, not in the
current working directory. Available at T1; at T2 only when the paper
itself sits outside both repositories.deep-review: writes the review workspace. Available at T1. At T2 use
the two-step path: run prepare_review_workspace.py --output-dir <parent directory outside both repositories>, then pass the path it prints as
WORKSPACE: to audit.py --review-dir. That printed path is a slug
subdirectory of --output-dir, not --output-dir itself. The all-in-one
audit.py --mode deep-review path has no --output-dir and always writes
under ./review_results relative to the current working directory, so it is
T1 only.At T3, do not create review_results, do not create .polish-state, and do
not write a report file. Name every script that could not run, and split them:
the ones whose absence removes review evidence are missing evidence, while
the report renderers only failed to produce an output file — T3 forbids that
file by design, so do not call it missing evidence. The two lists are in
references/workflow-detail.md.
Never present a conversation-level reading as a completed script check. A
finding is [Script] only when its script actually ran in this session;
anything you reached by reading the text yourself is [LLM]. The checkers
inside quick-audit and gate do run at T3, so their findings stay
[Script]. An evidence-losing script that could not run yields missing evidence, never a finding.
| Requested intent | Mode |
|---|---|
| "check my paper", "quick audit", "submission readiness", "pre-submission review", "投稿前检查" | quick-audit |
| "review my paper", "simulate peer review", "harsh review", "deep review" | deep-review |
| "is this ready to submit", "gate this submission", "blockers only" | gate |
| "did I fix these issues", "re-audit", "compare against old review" | re-audit |
"polish cross-subsection handoffs with context" (subsection_context_polish) | polish |
| "polish the writing, but only if safe" | polish |
Legacy aliases (one compatibility cycle): self-check -> quick-audit,
review -> deep-review.
For per-mode workflow steps, input resolution rules, presentation surface
rules, and committee focus routing, see references/MODE_GUIDE.md.
Before reviewer-style work, read the criteria/rules references listed under
## References, plus references/CHECKLIST.md.
The deep-review workflow uses a 16-part issue taxonomy (formula/derivation
errors, overclaim, internal contradiction, theory contribution deficiency,
pseudo-innovation, paragraph-level argument incoherence, ...) — full numbered
list in references/DEEP_REVIEW_CRITERIA.md.
Each mode has the same shape: parse $ARGUMENTS, lock the paper path, infer
mode/report-style/focus/language if not provided, then run the canonical
command. Phase steps: references/MODE_GUIDE.md; per-step supplements:
references/workflow-detail.md.
quick-auditPresent Submission Blockers -> Quality Improvements -> checklist; tag
PRESUBMISSION mechanical findings with [Script] provenance. Escalate to
deep-review when the user wants reviewer-depth critique.
deep-reviewFive phases (detail: references/MODE_GUIDE.md,
references/workflow-detail.md):
scripts/prepare_review_workspace.py <paper> --output-dir ./review_results; state the resolved target directory before
running, because ./review_results is relative to the current working
directory; if the workspace exists, ask before overwriting (--overwrite
here; the all-in-one audit.py --mode deep-review path uses
--overwrite-workspace instead).committee/consensus.md.
Native delegated children with exclusive scopes only when this session
actually spawned them; otherwise sequential in one agent
(references/workflow-detail.md).full/logic focus. Same native-vs-sequential rule as
Phase 3A.consolidate_review_findings.py, verify_quotes.py --write-back, then render Markdown + HTML reports with --lang $LANG
(exact commands in references/workflow-detail.md).gateRun EIC Screening first via agents/editor_in_chief_agent.md (desk
reject blocks the gate), then PASS/FAIL, blockers, advisory. Only Critical
PRESUBMISSION blocks.
re-auditRequires --previous-report PATH.
polishIf blockers exist, stop and report them; polish only when the precheck is safe.
When subsection_windows.status == "ok", use its source-coordinate windows for
per-subsection Mentor handoff; otherwise retain the section-level fallback.
Frontmatter allowed-tools (Read, Glob, Grep, Bash, Task) is
Claude-compatible metadata. It is not a mandatory permission list on other
platforms. Map read / search / exec / delegate onto this session's available
capabilities. Script and semantic contracts do not depend on those literal
tool names.
For deep-review committee and lane work:
[Script] / [LLM]
provenance stay as specified in references/SUBAGENT_TEMPLATES.md and
references/workflow-detail.md.review_report.md and overall_assessment.txt MUST state
native delegated or sequential single-agent. Sequential output MUST
NOT say independent panel.CONSENSUS after sequential execution means cross-perspective agreement
in this session, not independent-reviewer consensus evidence.Keep root-cause analysis, academic judgment, severity, permission boundaries, and final acceptance on a strong model. Cheap-model work stays inside an approved file and test boundary. Escalate when a new interface appears, the change crosses unapproved directories, an academic conclusion changes, or a failure falls outside the plan. Five-tool live delegation stays UNVERIFIED until a captured real run exists.
For deep-review, each final issue follows the canonical JSON schema in
references/ISSUE_SCHEMA.md — required: title, quote (exact quote from
paper), explanation, comment_type (e.g. claim_accuracy), severity
(major|moderate|minor),
source_kind (script|llm); plus confidence, section/lane/root-cause
fields, gate_blocker, quote_verified, and optional claim-evidence fields
(evidence_anchor, claim_strength, missing_evidence,
allowed_wording, forbidden_wording).
Always prefer: exact quotes over vague paraphrase; evidence-backed findings over style commentary; issue bundle + roadmap over raw script dumps.
All under references/:
MODE_GUIDE.md (per-mode phases, committee focus routing), workflow-detail.md (overwrite rules, render commands, gate/re-audit/polish presentation), output-layout.md (artifact map, report-language rules), agent-roster.md (full agent roster), scripts-map.md (full script roster)REVIEW_CRITERIA.md (top-level scoring/mapping), DEEP_REVIEW_CRITERIA.md (16-part taxonomy, leniency rules), CONSOLIDATION_RULES.md (dedup/root-cause merge), ISSUE_SCHEMA.md (canonical JSON schema), CLAIM_EVIDENCE_CONTRACT.md (claim candidate / evidence anchor contract), OVER_CLAIM_GUARD.md (conservative-wording ladder + substitution tables), DATA_AVAILABILITY_ADVISORY.md (source-data / FAIR advisory boundary), ZH_THESIS_REVIEW_CRITERIA.md (Chinese dissertation 15-row indicators)REVIEW_LANE_GUIDE.md (section + cross-cutting lanes), REVIEWER_PSYCHOLOGY.md (reading path + suspicion-likelihood ranking), SUBAGENT_TEMPLATES.md (reviewer task templates)PRESUBMISSION_GUIDE.md (mode-integration matrix), PRE_SUBMISSION_RULES.md (mechanical rules and term list)references/editorial_decision_standards.md (cross-reviewer arbitration, decision matrix), references/quality_rubrics.md (five-dimension calibrated rubric), QUICK_REFERENCE.md (CLI cheat sheet), TROUBLESHOOTING.md (operational errors + review-quality failure paths F1-F8)Mode entrypoint is scripts/audit.py; deep-review also uses
prepare_review_workspace.py, build_claim_map.py (headline claims and
additive claim_candidates), consolidate_review_findings.py,
verify_quotes.py, render_deep_review_report.py, render_html_report.py,
and diff_review_issues.py. Optional scoring/search: scholar_eval.py,
scoring_model.py, literature_search.py, literature_compare.py.
Full script roster with purposes: references/scripts-map.md.
Deep-review runs 5 committee perspectives and 6+ lane perspectives, then uses
synthesis_agent.md. Native delegated children are used only when this
session actually spawned them; otherwise the same perspectives run
sequentially in one agent. The report and overall_assessment.txt must
state native delegated or sequential single-agent. Mode-specific agents
include editor_in_chief_agent.md for gate, revision_coach_agent.md for
re-audit, and revision_suggestion_agent.md after consolidation. Chinese
dissertations (lang == "zh", --focus full|editor) also run
zh_thesis_reviewer_agent.md on the zh_thesis_review lane. Specialized reviewer
playbooks under agents/ are reference material, not auto-dispatched. Full
roster and activation details: references/agent-roster.md.
paper.tex and tell me what blocks submission."