Core concepts
Platforms
Presets for blog, X, threads, LinkedIn and email: what each one changes.
The platform parameter applies the conventions of where the text will be published: length, formatting, openings and endings. It changes form, never facts.
Presets at a glance
| platform | Length | Formatting | Notes |
|---|---|---|---|
blog | Source length ±10% | Paragraphs and links kept | Removes summary sections and restated closes unless your voice uses them. |
x | ≤ 280 characters | Plain text, no hashtags by default | Rejects sources that can't fit without dropping a protected fact (422). |
thread | Posts of ≤ 280 characters | Returned as an array in posts[] | The first post carries the point; no “🧵 1/”-style numbering unless your voice does it. |
linkedin | ≤ 3,000 characters | Short paragraphs, line breaks kept | At most 3 hashtags, only if your samples use them. |
email | Source length | Subject and preheader preserved | Sign-off taken from the voice, never invented. |
generic | Source length | Formatting preserved | The default. No platform conventions applied. |
LinkedIn launched a “seems like AI slop” report on 30 July 2026 and says flagged posts get about 40% fewer views. The linkedin preset avoids the patterns readers report most: one-line “hook” openers, emoji bullets and a closing question nobody asked for.
Threads
Threads return an extra posts array alongside text. Fidelity checks run across the whole thread, so a fact can move between posts but not change.
{
"text": "…",
"posts": [
"Most blog posts go wrong before anyone writes a word.",
"The writer gets a topic and nothing else. Here's what we send instead: …"
],
"fidelity": {
"status": "pass"
}
}Choosing a preset
Use the preset for where the text will be read, and a voice built from samples published there. A blog voice with the x preset works, but a voice built from the person's actual posts works better.