Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when tidying raw, pasted, or dictated prose: normalize sentence-initial capitalization, single-space sentence spacing, and strip trailing whitespace — the plain-text conventions cheaper models apply inconsistently.
.claude/skills/plain-text-normalization/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 19 |
| gemini-3.1-pro-preview | 100% | 1 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | 0% | +295% | 0% | 22 | 54d ago |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
| case-09 | ✓→✓ | = Same ✓ | — | — |
| case-05 | ✗→✗ | = Same ✗ | — | — |
| case-04 | ✗→✗ | = Same ✗ | — | — |
Enforces three fixed plain-text conventions when cleaning up prose without rewording it: (1) every sentence starts with a capital letter, (2) exactly one space separates one sentence from the next, and (3) no line carries trailing whitespace. Apply whenever asked to tidy, clean up, or make presentable a block of raw text — a pasted note, chat transcript, dictation, or scraped paragraph — where the job is to fix spacing and capitalization, not to rewrite the wording. (Trailing spaces below are shown as ␣ so they are visible.)
sentence is uppercase. A sentence begins at the very start of the text and immediately after every sentence-ending ., ?, or !. Uppercase that first letter even if the input typed it lowercase. Do not change the case of any other word (leave existing proper nouns and mid-sentence words as-is).
ends a sentence and the first character of the next sentence there is exactly ONE ordinary space:
done.Next, done.next) getsa single space inserted (done. Next).
done. Next, done. Next, or a tab)collapses to one (done. Next). This is the modern single-space-between-sentences convention, not the typewriter two-space habit. The same one-space rule applies after a sentence that ends in ? or !.
line (before the newline) and at the very end of the text. A blank line becomes truly empty — no spaces on it. This never removes meaningful content, only the invisible run-off at line ends.
drop, reorder, or reword sentences; do not touch internal punctuation, numbers, or line breaks other than trailing-space removal. The output is the same text, correctly cased and spaced.
Rule 1 — a lowercase sentence start is capitalized (both the first word and the one after a period).
BEFORE: the kettle boiled. we brewed a fresh pot.
AFTER: The kettle boiled. We brewed a fresh pot.Rule 2 (missing space) — a period glued to the next sentence gets one space.
BEFORE: Add the flour.Stir gently until it thickens.
AFTER: Add the flour. Stir gently until it thickens.Rule 2 (extra spaces) — two spaces after the period collapse to one.
BEFORE: The trail was steep. The summit view repaid every step.
AFTER: The trail was steep. The summit view repaid every step.Rule 1 + 2 combined — glued AND lowercase.
BEFORE: the garden needs water.the tomatoes are wilting.
AFTER: The garden needs water. The tomatoes are wilting.Rule 3 — trailing spaces at line ends are stripped (␣ = a trailing space).
BEFORE: Pack the tent.␣␣
Fill the water bottles.␣
AFTER: Pack the tent.
Fill the water bottles.Rule 4 — spacing/case only; wording is untouched (a ? sentence too).
BEFORE: did the ferry leave?we missed it by minutes.
AFTER: Did the ferry leave? We missed it by minutes.e.g., i.e., etc.,Dr., Mr., U.S., a.m. does NOT start a new sentence: keep the following word's case unchanged and do not force a capital. we ship many formats, e.g. json and yaml. → We ship many formats, e.g. json and yaml. (leading we capitalized; json stays lowercase).
3.14, v2.0, or 1.5 cups is nota sentence terminator — never insert a space and never capitalize after it.
config.yaml, example.com, or a.b.c are partof the token; do not treat them as sentence breaks.
... (or …) intact — do not split it into separatedperiods and do not insert spaces between the dots.
leave it exactly as-is; do not "re-fix" what already conforms.
start, even though no period precedes it.
the first letter of every sentence.
collapse them to exactly one.
them.
only capitalization and whitespace.
Always limit the sentence-boundary rules to real sentence ends.
the source used instead of normalizing to one.
word.Word, leaving the two sentences run together.followed a period on the same line.
the rendered text.
e.g. / Dr. / a decimal, orinserting a space inside 3.14 or config.json.
and case.
after a ., ?, or !).
double spaces.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of 0 percentage points is the difference between those two pass rates over the 22 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 7/9/2026 | +38% |
Other measured skills in the registry, with their headline benchmark lift.