Polish prose
Skill ShaishavMaisuria/research-paper-lifecycle-skills/skills/polish-prose
42 AI agent skills for literature review, academic writing, citation verification, conference submission, rebuttal, publication, and presentations.
npx -y skills add ShaishavMaisuria/research-paper-lifecycle-skills --skill polish-proseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 14 stars14 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
De-AI-ifies and tightens academic prose without changing any technical claim. Use when a researcher says "this sounds like ChatGPT / AI-written", "humanize my paper", "remove the AI words", "too many delves and leverages", "polish my writing", "tighten the prose", "fix my hedging", "too many Moreover/Furthermore", "make my contributions active", or "keep my terminology consistent". Runs deterministic stdlib linters — prose_lint.py (leftover chatbot artifacts, LLM-tell vocabulary, connective stacking, em-dash density, double hedges, overclaiming boosters, passive contribution statements) and terminology_check.py (dataset/data set/data-set variants, acronym discipline, -ise/-ize mixing, glossary enforcement) — then drives a section-by-section edit pass using rewrite catalogs and the venue family's register norms. Numbers, results, claims, and citations are never altered; the venue's AI-use disclosure policy is surfaced and respected, never dodged.
SKILL.md
10.9 KB, as published. Nobody here has run it
Polish Prose
Turn an AI-flavored or overwrought draft into prose that reads like a careful researcher wrote it — without moving a single number, claim, or citation. Reviewers now pattern-match the LLM register (delve/leverage vocabulary, Moreover-stacked paragraphs, em-dash chains, uniform hedging), and a leftover "Certainly! Here is..." or "[insert citation]" is a desk-reject-grade embarrassment. This skill finds all of it deterministically, then guides a disciplined human-in-the-loop rewrite: expression changes, content does not.
When to use
- "My paper sounds like ChatGPT wrote it" / "humanize this" / "de-AI-ify"
- "Remove the AI words" / "it keeps saying delve and leverage"
- "Tighten / polish my writing" / "this is too wordy"
- "Fix my hedging" — overclaimed contributions or drowned-in-maybes results
- "Make my contribution statements active" ("a method is proposed..." → "We propose...")
- "Is my terminology consistent?" (dataset vs data set, acronym discipline, British vs American spelling)
- Called before
preflight-checkas part of the final submission pass, or after heavy drafting with any LLM assistant.
Inputs
- The draft: a
.texfile (preamble/math/verbatim are masked automatically), a.md/.txtfile, or pasted text via stdin. - Optional: the venue profile
venues/conferences/<venue>-<year>.yml(schema invenues/schema.yml) — supplies the venue family for register norms andreview.llm_policyfor AI-use disclosure duties. - Optional: a project glossary (
canonical term = variant | variantper line) if the team has already standardized terminology.
Process
-
Freeze the technical content first. Build the no-touch inventory before editing anything: every number and unit, every
\citekey, every stated result, dataset name, and system name. Snapshot it:grep -oE '[0-9][0-9.,]*\s*(%|\\%|ms|s|GB|MB|x|×)?' draft.tex | sort | uniq -c > /tmp/numbers-before.txtThe same command must produce identical output after the edit pass (step 9). If polishing would require changing a claim, stop and tell the user — that is a content decision, not a style edit.
-
Resolve the venue register and the LLM policy. If a venue profile is given, read its
family(register norms per references/venue-register.md) andreview.llm_policy. Re-verify the LLM policy against the livecfp_urlbefore relying on it — these policies churn every cycle. Tell the user plainly: polishing AI-assisted text does not remove a disclosure obligation. If the venue requires an AI-use statement, help write an honest one; never frame this skill as a way to avoid it. -
Run the linters (Python 3, stdlib only, no network):
python3 scripts/prose_lint.py main.tex python3 scripts/terminology_check.py main.tex --allow GPS,SDKBoth accept
.tex, plain text, or-for stdin;--jsonfor machine-readable output;--strictto exit 1 while findings remain. Exit codes: 0 ok, 1 strict-failure, 2 bad input.--allowskips the undefined-acronym check for acronyms your community treats as universally known;--glossary FILEenforces a terminology table. Findings are candidates with line numbers, never auto-replacements — domain terms can look like tells ("leverage scores", "robust statistics"). -
Kill RISK findings immediately. Chatbot artifacts ("As an AI model...", "Certainly! Here is...", "[insert X]") are deleted or filled in, full stop. Several venues treat undisclosed LLM output as a desk-reject trigger; an unfilled placeholder is also a missing citation — route real citation needs through
verify-citations, never invent one. -
Edit pass A — lexical and structural tells. Work section by section with references/llm-tells.md open. For each WARN: keep it if it is a domain term or genuinely the best word (occasional use is fine — density is the tell, not existence); otherwise apply the rewrite pattern. Break Moreover/Furthermore paragraph chains by deleting the connective — if the logic no longer flows, the paragraph order was wrong, which is worth knowing. Recast surplus em-dashes as separate sentences or commas. Propose edits as diffs (old → new, with line numbers) and apply only with the user's approval.
-
Edit pass B — hedging and claims. Calibrate per references/hedging-and-claims.md: contributions, definitions, and completed actions lose their hedges ("we propose", not "we attempt to propose"); interpretations, generalizations, and limitations keep exactly one honest hedge; double hedges collapse to one; boosters (clearly, undoubtedly) are cut — the evidence carries the claim or nothing does. Rewrite passive contribution statements as active, specific claims that say what is new. Never strengthen a claim beyond what the paper's own evidence supports, and never weaken a result the user measured.
-
Edit pass C — terminology. Turn every
compound-variant,spelling-mix, and acronym finding into a one-line decision: present the variants with counts, let the user pick the canonical form (default: the majority form; spelling per the venue register), then apply it everywhere. Record decisions in a glossary file and re-run:python3 scripts/terminology_check.py main.tex --glossary glossary.txtFix acronym discipline: define once at first use, expand consistently, drop definitions never used again.
-
Edit pass D — venue register. Apply the family norms from references/venue-register.md: person and voice conventions, tense discipline, spelling convention, contraction policy, and the register differences between ML, systems, HCI, and LNCS venues. When no profile is given, default to consistent American spelling and the conventions already dominant in the draft.
-
Verify nothing technical moved. Re-run both linters (clean, or each remaining finding consciously accepted by the user); re-run the step-1 number snapshot and diff it — any difference is a bug in the edit pass and must be reverted; confirm the
\citecount and keys are unchanged. Present a short before/after table for every sentence whose claim strength changed in pass B so the user signs off on each one. -
Optional gate for CI or pre-submission:
prose_lint.py main.tex --strictexits 1 while any RISK/WARN remains — useful as a final check alongsidepreflight-check.
Output
- Two lint reports (Markdown or
--json) with line-numbered findings. - Proposed edits as diffs, applied only with approval, one pass at a time.
- A terminology decision table plus a reusable
glossary.txt. - A verification note: numbers/citations diff clean, claim-strength changes enumerated, remaining accepted findings listed.
What this skill is not
- Not an AI-detector evasion tool. The goal is prose quality and an
honest register, not beating a classifier. If the user's actual goal is
to hide LLM use from a venue that requires disclosure, decline that goal,
show the venue's
llm_policy, and offer to draft the disclosure instead. - Not a content editor. It does not restructure arguments, add
citations, or change what the paper claims —
tailor-to-venuehandles repositioning,write-abstracthandles the abstract,verify-citationshandles references.
Relationship to other skills
write-abstract— abstract-specific structure and venue metadata norms.preflight-check— the desk-reject gate; run it after polishing.anonymize-paper— identity leaks; this skill does not touch them.verify-citations— any citation need surfaced here routes there.
Adapt to your discipline
The tell lexicons are field-agnostic; the register is not. Fork and adjust
references/venue-register.md for your
field's journals (many mandate British spelling or third-person voice),
extend the --allow acronym list for your community's alphabet soup, and
add discipline-specific tells to prose_lint.py's TELL_PATTERNS table.
Guardrails
- Never alter numbers, results, claims, citations, or technical statements; expression only. Verify with the step-9 diff, every time.
- Never auto-apply lexicon findings — every WARN is a judgment call and domain terms ("leverage scores") are innocent.
- Never fabricate text for "[insert X]" placeholders; ask the user for the
real content or route citations through
verify-citations. - Never present the result as "undetectable" or "human-written"; never help
evade an AI-use disclosure requirement — surface
review.llm_policyand re-verify it against the livecfp_url. - Never submit anything to any system on the user's behalf.
- Quote at most the flagged line in reports; never reproduce large portions of the paper in outputs.
Memory
This skill uses the shared .paper-memory/ convention in the user's paper
directory (full spec: paper-memory-convention.md).
- At start: read
.paper-memory/lessons.mdandprofile.yml. Usewriting_preferences(style signature, spelling, voice) to set the target register, and lead with anyrecurringprose habits already recorded (e.g. "you habitually write passive contribution statements") so you watch for them first instead of re-explaining them. - At end: append durable findings in the shared format
- [YYYY-MM-DD] (polish-prose | <scope>) pattern -> recommendation(viareflect-and-improve'sreflect_log.py append, which dedupes and dates). A tell or habit seen across drafts isrecurring; a one-off fix isthis-paper. Do not log routine one-shot edits. - Create
.paper-memory/on demand if absent and offer to add it to the project.gitignore. It is local-only; never upload it or copy it into this repo.