paper-sentence-loop
Skill0 starsChanged 6 months agoMITView on GitHub
Start from an existing draft (.docx/.md/.txt) or from a figure set, then revise or draft the scientific manuscript one part (1-2 paragraphs) at a time with the author, sentence by sentence, English next to a Korean (or other native-language) rendering. The author gives "feel" feedback (awkward, too long, abrupt, too narrow); Claude does not just rewrite but first measures it against a corpus of published papers, the cited primary sources and the author's earlier versions, shows a before/after proposal table, applies only the items the author picks, and saves a numbered version. The author reads everything in one self-updating HTML hub (sentence tables, proposals, whole-manuscript read-through, round log) and talks to Claude in chat. Built-in writing rules - explicit subject and verb, no pronoun references, fixed term table, claim-evidence pairs, no figure restatement, no defensive hedging. Uses corpus-phrase-check for evidence. Triggers - 문장 단위 피드백, 국문 영문 대조, 영문 국문 같이, 파트별 검토, 단락씩 고치자, 원고 문장 다듬기, 이 문장 어색해, 너무 길어, 논문 draft 이어서, 제안 표, 아직 수정하지 말고, sentence-by-sentence revision, bilingual manuscript review, paragraph review loop, /paper-sentence-loop.
In this repository15 other files it gives its agents.
- analysis-protocolSkill
- blender-atom-renderSkill
- corpus-phrase-checkSkill
- docx-scientific-formattingSkill
- html-minimalSkill
- layout-guardSkill
- matplotlib-scientificSkill
- paper-sectionsSkill
- paper-styleSkill
- reference-crosscheckSkill
- slide-auditSkill
- smart-compactSkill
- transcript2htmlSkill
- youtube2mp4Skill
- youtubeSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
22 rules. About 0 are common, 14 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈14
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 19
The author reads in the hub and talks in chat: All text, tables and evidence go into one HTML page (draft/hub.html) that is rebuilt every …
- Distinctive: line 26
Ask once for the target journal (it sets the register and the corpus to compare against).
- Very specific: line 31
Run draft_lint.py on each paragraph once and put a short map in round R1 (paragraph · flags · longest sentence percentile).
- Distinctive: line 40
C. Both: Start with A. Use the figure set as the basis column and to check that the text does not restate panels (rule 10).
- Very specific: line 53
Never overwrite an approved version.
- Distinctive: line 63
Scope: Do 1 to 2 paragraphs per round.
- Distinctive: line 64
Ask only the decisions that belong to that paragraph.
- Very specific: line 67
Write the paragraph version(s) (en, ko, basis, tool, changes).
- Very specific: line 91
If the author says "아직 수정하지 말고" or "don't change yet", give the table only and write no new version.
- Very specific: line 92
When the author picks items ("2, 4 적용"), apply only those and save P05_v4.json in the next round.
- Very specific: line 100
Run python draft_lint.py --file <paragraph> --terms draft/terms.json first.
- Distinctive: line 104
No pronoun references: Do not use it / its / this / that / them for a noun in an earlier sentence.
- Very specific: line 105
One term per concept: Use only the forms in terms.json.
- Distinctive: line 107
Claim-evidence pairs: Every claim sentence carries or is followed by its evidence (panel, value, citation).
- Distinctive: line 108
No colon joining claim and evidence: Write two sentences.
- Distinctive: line 110
Intensifiers: Before replacing "significantly" or "markedly", ask what the word was doing (signal of a reversed expectation, verdict …
- Distinctive: line 114
Deletion gate: Before deleting a clause that looks like a caveat, ask what it tells the reader to take from the previous sentence.
- Distinctive: line 115
Conflicting literature: Do not escape a conflict by narrowing to a condition ("because ours is liquid-phase").
- Distinctive: line 117
Hedges from sources: Do not copy a source's "often" or "may".
- Distinctive: line 118
Numbers: Check every numeric claim against the source page or data file yourself.
- Distinctive: line 123
Do not report style metrics as the goal.
- Distinctive: line 136
Keep it to one page that grows.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
paper-sentence-loop
A working loop for writing a manuscript with its author. The author reads each sentence in English and in their own language, reacts, and Claude answers each reaction with evidence before changing anything. The paper is improved part by part from versions the author already approved. It is never regenerated wholesale.
Evidence comes from the corpus-phrase-check skill (corpus_query.py). Scripts next to this file:
import_draft.py (draft -> paragraph files), draft_lint.py (mechanical pre-check),
build_hub.py (the review page).
The author reads in the hub and talks in chat. All text, tables and evidence go into one
HTML page (draft/hub.html) that is rebuilt every round. The chat reply stays short: what changed,
what to decide, then "허브 새로고침" (refresh the hub). Do not paste the sentence tables into chat
when the hub is in use.
0. Start: what the author brings
Ask once for the target journal (it sets the register and the corpus to compare against). Then pick the entry point:
A. An existing draft (revise). Input: .docx / .md / .txt (a full manuscript or one section).
python import_draft.py <draft> --draft-dir draftsplits it intoparagraphs/<ID>_v0.json(A abstract, I introduction, P results/discussion, M methods). It never overwrites existing files. Fill thekorendering for the paragraphs you show.- Seed
terms.jsonfrom the draft and the figure labels: list every name used for the same object and ask which one to keep. - Run
draft_lint.pyon each paragraph once and put a short map in round R1 (paragraph · flags · longest sentence percentile). Do not fix anything yet. - Build the hub (it opens in the browser the first time). Ask which part to start with. Then go round by round (section 1), 1 to 2 paragraphs at a time.
B. A figure set, no text yet (draft new). Input: figure images or PDF, captions or panel notes, data tables if any, and an earlier manuscript or thesis chapter on the same work if one exists (use it as the base version).
- Read every panel and write an outline first (
outline.json: paragraph · the one claim it makes · the panels and values that support it · the citations it needs; the hub shows it as a table). One claim per paragraph. Get the author's approval on the outline before writing sentences. - Take numbers only from the figures, the data and the author. If a sentence needs a value that is not there, ask. Never fill it in.
- Seed
terms.jsonfrom the figure labels (axis quantities, sample names, stage names). Text and figures must use the same words. - Draft 1 to 2 paragraphs per round (section 1). Start where the author chooses. Results first is often easier than the Introduction.
C. Both. Start with A. Use the figure set as the basis column and to check that the text does not restate panels (rule 10).
0.1 Project files (create on first use, in the manuscript folder)
draft/
hub.json {"title", "journal", "lang": "ko"|"en", "native_label": "국문"}
terms.json term table, the single source of truth (template: templates/terms.example.json)
paragraphs/P05_v3.json one file per paragraph version (template: templates/paragraph.example.json)
rounds.json one entry per round (template: templates/rounds.example.json); the last one is "now"
outline.json entry B only: paragraph plan
hub.html built by build_hub.py, never edited by handNever overwrite an approved version. A change always makes _v<N+1>.json.
Second language = Korean by default. Ask once if the author wants another language.
Earlier manuscripts (a previous submission, a thesis chapter) are base versions. Find and
load them before drafting anything new.
1. One round
Round number. Each author message (or a burst of messages sent while you work) is one
round R<n>. Increase it even for a one-word fix. The author uses R numbers to track feedback.
Scope. Do 1 to 2 paragraphs per round. Never draft a whole figure's worth of text at once. Ask only the decisions that belong to that paragraph.
Every round ends the same way:
- Write the paragraph version(s) (
en,ko,basis,tool,changes). - Append the round to
rounds.json:feedback(the author's words, short),done,parts,ask, andblocksfor any measurement or proposal table. python build_hub.py --draft-dir draftand reply in chat in 2 to 4 lines: what changed, what to decide, "허브 새로고침".
In the hub, each part is a sentence table (# · English · 국문 · basis · tool, widths 44/34/10/10 %),
then a read-through of the paragraph, the changes, and earlier versions collapsed.
- Basis = the figure panel, number or citation that supports the sentence (short). Long quotes go in
basis_full. - Tool = what evidence picked the wording (corpus count, earlier version, source page) (short). Details go in
tool_full. - The Korean column is a faithful rendering for the author to judge meaning. Do not polish it into different content.
- Without the hub (a quick one-off question), use the same table in chat.
When the author gives "feel" feedback ("어색해", "길어", "갑작스러워", "범위가 좁아"): do not rewrite yet. Measure first:
- Sentence length percentile (
corpus_query.py length). At 35 or more words, always report the percentile and give split options. - Phrase counts for the current wording and 2 to 3 alternatives in both the general and domain corpora (
corpus_query.py phrase). - The cited primary source: open the PDF and check the page when the sentence restates someone's result. Check that the conditions match (reaction, phase, method).
- Earlier versions: how did the author's previous manuscript say the same thing?
Then put a proposal table in the round's blocks and stop:
{"t": "table", "title": "Proposals", "cols": ["#", "Now", "Proposal", "What changed", "Basis"], "rows": [["1", "...", "...", "...", "..."]]}If the author says "아직 수정하지 말고" or "don't change yet", give the table only and write no new version.
When the author picks items ("2, 4 적용"), apply only those and save P05_v4.json in the next round.
Revising an approved paragraph. Open the last approved version and change only the flagged phrase. Keep the wording that earlier rounds chose with corpus evidence. Do not re-insert experimental conditions that were moved to Methods to shorten a sentence. Do not rewrite the sentence from scratch.
2. Writing rules (self-check every sentence before showing it)
Run python draft_lint.py --file <paragraph> --terms draft/terms.json first. The lint gives
prompts, and you make the decision.
- Explicit subject + verb. Each sentence says what (a real actor: the catalyst, the applied power, we) does what (a measurable action). Avoid abstract subject + vague verb ("This approach enables ...", "temporal control shapes ...").
- No pronoun references. Do not use it / its / this / that / them for a noun in an earlier sentence. Repeat the noun. Exception: only one candidate noun, immediately before. Never shorten a defined term ("low ratios" -> "low catalyst-to-substrate ratios").
- One term per concept. Use only the forms in
terms.json. Figures and text use the same words. If a new term is needed, propose a terms.json entry (use + first definition + basis) with corpus counts (see corpus-phrase-check section 2). - Few abbreviations. Define only those repeated in the main text. Spell out the rest.
- Claim-evidence pairs. Every claim sentence carries or is followed by its evidence (panel, value, citation). Paragraph = claim -> evidence -> meaning. Use at most 2 compared value pairs per sentence, so numbers do not bury the claim.
- No colon joining claim and evidence. Write two sentences.
- Linking. Each sentence connects to the previous one (connective, repeated noun, cause -> result). No bare noun-phrase sentence that jumps in without a link inside a paragraph. If a sentence feels abrupt, give the reason before the number.
- Intensifiers. Before replacing "significantly" or "markedly", ask what the word was doing (signal of a reversed expectation, verdict summary, size of a comparison). Replace it only if the sentence lacks the value or reference it implies.
- Expert reader. The judge is an expert in the target journal reading once. Do not argue for plain-language paraphrase on "readability" grounds. Look first for the precise technical term that compresses the idea ("high heat capacity and low thermal diffusivity" rather than "holds heat").
- Figures are read with the text. If a figure shows it, the text says what it means. Do not say where or how it is drawn.
(Fig. 4a)at the end of a sentence is enough. Do not write "the two curves drawn in Fig. 4a" or "see Fig. 4a". - Confident within the method's limits. State a limit once, as a fact that sets the scope. Then state conclusions inside that scope without stacked hedges. Do not pre-defend against questions nobody asked ("this is only an observation, not a factor"). Keep negative results as data. Rewrite negative author caveats as what was done.
- Deletion gate. Before deleting a clause that looks like a caveat, ask what it tells the reader to take from the previous sentence. If it carries that job, convert it to a positive statement instead of deleting it.
- Conflicting literature. Do not escape a conflict by narrowing to a condition ("because ours is liquid-phase"). State what was measured, and put condition differences in Methods/SI as facts. Claim "first" only for an explicit keyword intersection, and only after a literature search.
- Abstract. Open on the problem and the measured result. No numbers or citations from other papers.
- Hedges from sources. Do not copy a source's "often" or "may". Check if the scope can be narrowed so the hedge is no longer needed.
- Numbers. Check every numeric claim against the source page or data file yourself. Do not trust a paraphrase.
3. Reporting a revision
- Conclusion first. Then quote what was removed or changed and why (redundant claim, repeated wording, excess detail), using the original words.
- Do not report style metrics as the goal. Percentiles diagnose. One line at the end at most.
- Judge sentence by sentence. Some sentences should change and some should stay. Do not push the paragraph toward corpus medians. In a paragraph made of short sentences, the right fix can be adding a sentence that answers an expectation set earlier.
4. The hub page
python build_hub.py --draft-dir draft writes draft/hub.html, top to bottom:
- Review now: the current round, its parts and the questions to decide.
- The part cards of the current round, then the round's blocks (measurements, proposal tables).
- Earlier rounds, collapsed.
- The whole manuscript: a table of every paragraph (latest version, status, words) and an expandable read-through.
- Term table, outline (entry B), round log (newest first).
Rules:
- Keep it to one page that grows. Never make a new HTML file per round.
- It opens in the browser only when first created. Afterwards, rebuild and tell the author to refresh.
--openforces it,--no-opensuppresses it. ^{..}and_{..}in sentences render as superscript and subscript (CO_{2}, cm^{-1}).- Images in a round block use paths relative to
draft/.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

