No fancy ASCII
A person types what is on their keyboard. Curly quotes, middle dots, ellipsis
glyphs, and little arrow symbols mostly appear when text was generated by a model
or run through a formatter that "prettifies" punctuation. So when a reader sees
them, the writing feels machine-made, even when the words are good. Plain keyboard
characters read as written by a human.
The rule: if you would not produce the character by pressing one key (or an
obvious Shift combo) on a normal keyboard, do not put it in prose.
Replace these
| Fancy |
Use instead |
“ ” ‘ ’ smart quotes |
straight " and ' |
… ellipsis glyph |
three periods ... |
· middle dot, • bullet |
reword, a comma, a period, or a plain -; for real lists use list markup |
→ ← ▸ ▶ ▼ ► » « arrows/guillemets |
drop them, use a real icon/SVG, or plain text |
– en dash, — em dash |
see the no-em-dashes skill |
′ ″ primes used as quotes |
straight ' and " |
× used as "x" or "by" in prose |
x or the word by |
| non-breaking space, zero-width space, soft hyphen |
a normal space, or nothing |
Keep these
These are not ornaments, so leave them alone:
- Letters a language needs:
İ ı ş ğ ç ö ü, accented Latin, and any non-Latin
script. Stripping these breaks the words.
- Currency:
₺ € £ ¥ $.
© ® ™ where they are genuinely standard, such as a footer copyright line.
- Emoji, when it is a deliberate voice choice the user wants.
- Any symbol a code token, data format, or math expression actually requires.
Separators
Brand · Type and footer rows like A · B are where the middle dot sneaks in. A
person writes those with a comma, a period, a plain hyphen -, or a pipe |.
Pick one and stay consistent.
Before: APEX Autohaus · Showroom
After: APEX Autohaus, Showroom
Before: © 2026 · Built by Jane
After: © 2026. Built by Jane
The trap to avoid
Do not trade one fancy character for another: · becoming •, or " becoming
«, solves nothing. Go all the way down to the plain key. The same applies to
"prettifying" later: if an editor or formatter offers to turn " into “ ” or
... into …, decline.
Before you deliver
Scan the text for any character that is not a plain keyboard key. For each one,
ask: is it a letter this language needs, a currency sign, or required by code? If
not, replace it with the keyboard equivalent and read the result back to confirm
it still looks right.
Pair this with no-em-dashes (dashes) and no-filler-phrases (the broader set
of AI writing tells).
1---2name: no-fancy-ascii3description: Write text using only characters a person types on a normal keyboard. Use this WHENEVER producing or editing human-readable text: website copy, UI strings, headlines, taglines, marketing, READMEs, docs, code comments, commit messages, emails, social posts, or translations (any language). Decorative Unicode (middle dot ·, bullets •, curly quotes “ ” ‘ ’, ellipsis …, arrows → ▸ ▼, non-breaking spaces) reads as machine-generated, because people type straight quotes, three periods, and plain separators. Replace each fancy character with its plain keyboard equivalent; do not swap one ornament for another. Preserve characters a language genuinely needs (Turkish İ ı ş ğ ç ö ü, accents, non-Latin scripts), currency signs (₺ € £ $), and anything a code/data/math context requires. For dashes specifically, see the no-em-dashes skill.4---56# No fancy ASCII78A person types what is on their keyboard. Curly quotes, middle dots, ellipsis9glyphs, and little arrow symbols mostly appear when text was generated by a model10or run through a formatter that "prettifies" punctuation. So when a reader sees11them, the writing feels machine-made, even when the words are good. Plain keyboard12characters read as written by a human.1314The rule: if you would not produce the character by pressing one key (or an15obvious Shift combo) on a normal keyboard, do not put it in prose.1617## Replace these1819| Fancy | Use instead |20| --- | --- |21| `“ ” ‘ ’` smart quotes | straight `"` and `'` |22| `…` ellipsis glyph | three periods `...` |23| `·` middle dot, `•` bullet | reword, a comma, a period, or a plain `-`; for real lists use list markup |24| `→ ← ▸ ▶ ▼ ► » «` arrows/guillemets | drop them, use a real icon/SVG, or plain text |25| `–` en dash, `—` em dash | see the `no-em-dashes` skill |26| `′ ″` primes used as quotes | straight `'` and `"` |27| `×` used as "x" or "by" in prose | `x` or the word `by` |28| non-breaking space, zero-width space, soft hyphen | a normal space, or nothing |2930## Keep these3132These are not ornaments, so leave them alone:3334- Letters a language needs: `İ ı ş ğ ç ö ü`, accented Latin, and any non-Latin35 script. Stripping these breaks the words.36- Currency: `₺ € £ ¥ $`.37- `© ® ™` where they are genuinely standard, such as a footer copyright line.38- Emoji, when it is a deliberate voice choice the user wants.39- Any symbol a code token, data format, or math expression actually requires.4041## Separators4243`Brand · Type` and footer rows like `A · B` are where the middle dot sneaks in. A44person writes those with a comma, a period, a plain hyphen `-`, or a pipe `|`.45Pick one and stay consistent.4647- Before: `APEX Autohaus · Showroom`48- After: `APEX Autohaus, Showroom`4950- Before: `© 2026 · Built by Jane`51- After: `© 2026. Built by Jane`5253## The trap to avoid5455Do not trade one fancy character for another: `·` becoming `•`, or `"` becoming56`«`, solves nothing. Go all the way down to the plain key. The same applies to57"prettifying" later: if an editor or formatter offers to turn `"` into `“ ”` or58`...` into `…`, decline.5960## Before you deliver6162Scan the text for any character that is not a plain keyboard key. For each one,63ask: is it a letter this language needs, a currency sign, or required by code? If64not, replace it with the keyboard equivalent and read the result back to confirm65it still looks right.6667Pair this with `no-em-dashes` (dashes) and `no-filler-phrases` (the broader set68of AI writing tells).