Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when writing a reply that will be sent in a WhatsApp conversation: format it with WhatsApp's single-character markup, not standard Markdown — which cheaper models do not do by default.
.claude/skills/whatsapp-text-formatting/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flashlowest | 92% | 13 |
| gemini-3.1-pro-preview | 100% | 1 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +27% | +270% | 0% | 22 | 54d ago |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-18 | ✗→✓ | ▲ Improved | — | — |
| case-14 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
| case-05 | ✗→✓ | ▲ Improved | — | — |
Enforces WhatsApp's native text markup on every message you send into a WhatsApp chat: single-character emphasis delimiters, bare auto-linked URLs, and no heading syntax. Apply whenever the reply is destined for WhatsApp (a 1:1 chat or a group). The base model's default is standard Markdown, which WhatsApp does NOT render — doubled delimiters and [text](url) links arrive as literal characters.
WhatsApp emphasis uses ONE delimiter character on each side, not two. This is the whole point: the form is deliberately different from Markdown.
*text*. Never **text**. A doubledasterisk is NOT bold on WhatsApp; it renders as a literal * plus italic plus a literal *.
_text_. Never *text* for italic(that is bold here) and never __text__ (doubled underscores render literally).
~text~. Never ~~text~~; thedoubled-tilde Markdown form renders as literal tildes around the words.
text . Use it for short code,identifiers, commands, or values that must not be auto-formatted.
Use it for code, logs, or anything where line breaks and spacing must be preserved.
https://example.com on its own and WhatsAppauto-links it. NEVER use Markdown link syntax [label](https://example.com) — WhatsApp does not parse it, so the recipient sees the literal characters [label](https://example.com) and gets no clickable link. If you want a label, put the words and the bare URL near each other.
#/## heading syntax. A line that starts with # Titleshows the literal #. To make a heading-like line, BOLD it instead: a bold title line.
start and end against a non-space character. Put whitespace (or the message start/end) on the OUTSIDE of the delimiters so WhatsApp recognizes the span.
one underscore pair. Keep every delimiter balanced (one opener, one closer).
- (or * ) becomes a bullet; 1. becomes a numbered item; > becomes a quote. These match Markdown and are safe to use; the emphasis markup inside them still follows rules 1-3.
One BEFORE (the Markdown the base defaults to) → AFTER (the WhatsApp-native form).
Bold — server notice. Tell the channel maintenance is over, "resolved" emphasized.
BEFORE: Maintenance is **resolved** — all systems are back online.
AFTER: Maintenance is *resolved* — all systems are back online.Double asterisk → single asterisk.
Italic — a soft caveat.
BEFORE: We'll aim for Friday, *though that may slip*.
AFTER: We'll aim for Friday, _though that may slip_.Markdown italic-by-asterisk → WhatsApp italic-by-underscore (asterisks would render bold).
Strikethrough — a corrected figure.
BEFORE: The fee is ~~$40~~ now $25.
AFTER: The fee is ~$40~ now $25.Double tilde → single tilde.
Link — share a page.
BEFORE: Sign up here: [the registration page](https://acme.example/signup)
AFTER: Sign up here: https://acme.example/signupMarkdown link (renders as literal text on WhatsApp) → bare auto-linked URL.
Heading — a titled announcement.
BEFORE: # Release 2.0 is live
New dashboard and faster sync.
AFTER: *Release 2.0 is live*
New dashboard and faster sync.# heading (shows a literal #) → a bold title line.
Combined — bold name + italic note.
BEFORE: **Priya** will lead the call *(bring your notes)*.
AFTER: *Priya* will lead the call _(bring your notes)_.Each style switched to its single-character WhatsApp delimiter.
Monospace block — a snippet.
`BEFORE: Run `npm run deploy` then check the log. (inline is fine) AFTER: Run `npm run deploy` then check the log.
Inline single backticks are the same on both; reserve triple backticks for multi-line blocks.
2 * 3, a literal bullet glyph in prose): leave aspace on at least one inner side so WhatsApp does not treat it as a delimiter, e.g. 2 * 3.
my_file.py, a query string) are not italic —WhatsApp only treats _x_ as italic when the underscores bound a word run with outer whitespace; inside a token they stay literal. Don't try to "fix" them.
* text *) does NOT render — WhatsApp ignores it andshows the literal asterisks. Always hug the text: *text*.
*, _, or ~ with no formatting: separate it from word characters with aspace, or rephrase; WhatsApp has no backslash escape.
indentation survive.
human words and then the bare URL; never the [label](url) form.
**bold** _italic_ is half-wrong — the bold half won't render.Convert every emphasis run, not just some.
**bold**. ALWAYS write *bold* (single asterisk).~~strike~~. ALWAYS write ~strike~ (single tilde).*text* for italic. ALWAYS use _text_ (asterisks are bold here).[label](url). ALWAYS paste the bare URL.# for a heading. ALWAYS use a bold line instead.* x *). ALWAYS hug the text (*x*).**bold** out of Markdown habit — the most common failure; it renders wrong.~~strikethrough~~ (GitHub-flavored Markdown) instead of single ~.[text](url) links, which WhatsApp shows as raw characters with no link.#/## heading line that displays a literal #.*emphasis* meaning italic — on WhatsApp that is bold, so the intent flips.*x*, never **x**._x_, never *x* or __x__.~x~, never ~~x~~.[label](url).#/## heading lines — a bold line stands in for a heading.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | 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 +27 percentage points is the difference between those two pass rates over the 22 comparable cases. 3 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/10/2026 | +58% |
Other measured skills in the registry, with their headline benchmark lift.