Remove the AI-script tells viewers hear in a TikTok spoken script and caption: 2026 vocabulary by density, reveal bridges, staccato stacks, stacked triads, performed sincerity, written-not-spoken phrasing, \"hey guys\" filler; caps em dashes. Includes --mode audit pre-film check (hook, completion design, caption fit) and --mode profile. Not for beating AI detectors (no edit reliably does). Not for writing from scratch (use tt-hook-scripter). Keywords: humanize script, de-AI, audit before filming.
npx skills add https://github.com/sergebulaev/tiktok-skills --skill tt-humanizer
Rewrites a spoken script (and caption) to remove the AI tells that viewers
hear, and audits a finished draft against the 2026 TikTok checklist before you
film. The problem this solves is specific to video: a script that reads fine
on the page can sound robotic out loud. Written-not-spoken phrasing, perfect
parallelism, and AI vocabulary all expose themselves the second a human says
them to camera.
Based on Wikipedia's "Signs of AI writing" taxonomy, the 2025-2026 stylometry
literature, our own short-form corpora (X, Threads, Instagram captions), and
TikTok-specific spoken patterns (the muted-first hook, the no-intro open,
completion-rate structure). V3 (2026-09): recalibrated on 2026 evidence.
Vocabulary is scored by density, em dashes are capped instead of banned,
forced rhythm is now a tell instead of a fix, and there is an over-correction
guard.
What this skill does not do: it does not make text "pass" GPTZero,
Pangram, Turnitin or Originality. Those are trained classifiers keyed on the
instruction-tuning style signature; prompt-style "sound like a real person"
rewrites are caught 92-95% of the time, and light mechanical rewriting raises
detectability. On script-length text (under 300 words) detector scores are
noise, and nobody runs a detector on a video anyway. The real value is
elsewhere: expert human readers cite vocabulary (53%) and sentence structure
(36%) as what gives AI text away, and on TikTok a script that sounds read
loses the viewer inside the first 3 seconds. This skill removes what those
viewers react to.
Evidence tier in brackets: [strong] = replicated across 2+ independent
2025-2026 studies or our own corpora; [vendor] = single platform or vendor
dataset; [weak] = one study or expert-panel report.
(delve, tapestry, realm, journey) are decaying as humans avoid them [strong].
The durable 2026 markers are common words (significant, crucial, notably,
comprehensive, insights, robust, leverage, foster, landscape, nuanced,
streamline, elevate) plus grammar: nominalisations and "-ing" clause openers
at 5.3x the human rate [strong]. Spoken, they are worse: nobody says
"leveraging" to a camera. One marker in a script beat is not a verdict.
Three is.
the 3.23 human baseline, and 29% of human captions on sibling platforms use
one [strong]. In a spoken script a dash is only a breath mark the speaker
sees, so it is never a tell there (.. reads better on a teleprompter). In
the caption: cap at about 1 per 100 words. On an on-screen card (3-7 words):
at most one, and a card rarely needs one. Replace the excess with a comma,
colon, .. or a line break. Never a period.
long/short alternation is a learnable humanizer fingerprint [weak], and
"Short. Punchy. Done.", "No X. No Y. Just Z.", one-word lines for drama and
"The result?" reveals are the current top reader-cited tells [strong].
Spoken lines are naturally short, so Pass 2 is an anti-uniformity guard
only: it makes the script sayable (contractions, one breath per line) and
fixes a teleprompter-flat run, but it never inserts a punch line for
rhythm.
expert-human rate across 2026 frontier models [strong], and a perfect
tricolon read aloud ("learn, grow, succeed") is the most audible tell there
is. Stacked, perfectly parallel or hollow triads get scrubbed. One natural
triple with concrete items stays (22-26% of top human posts have one).
supported [strong]; an odd-precision number with a referent in the hook is
the strongest opener. Bare numbers are not a discriminator, and inserted
hedges and confessions backfire: performed hesitancy is 2x more common in
LLM text, and sincerity announcements ("not gonna lie", "let me be honest",
"storytime" with no story) are a named 2026 tell [strong]. Pass 3 asks for
a flat, dated, uncomfortable fact instead.
Pass 4 checks whether Passes 1-3 introduced the very patterns they were meant
to remove. Edits are proportional to real problems. When in doubt, leave it.
sub-skills/post-audit.md)
A spoken script (the hook line plus the body), optionally the caption, and
optionally voice samples (the user's past scripts or how they actually talk).
triggered a rewrite)
viewer-tell estimate, not a detector score)
# Default: scrub AI tells (forensic + strict) and fix spoken-word issues
tt-humanizer <script>
# Forensic only - minimum touch, just kill model leakage
tt-humanizer --mode forensic <script>
# Audit - detection-only pass-fail review, no rewrite
# Runs the 2026 TikTok pre-film checklist: first 1-3 second hook strength,
# muted-first text, completion design, caption fit, hashtag and settings sanity.
# Returns Blockers + Warnings + suggested fixes. See sub-skills/post-audit.md.
tt-humanizer --mode audit <script>
# Profile - build/update the user's Voice & Brand Profile. See the section below.
tt-humanizer --mode profile
Apply the tiered catalogs in references/scrub-rules.md. The unit of
judgement is the script beat (or caption paragraph), not the word: count
markers per beat, rewrite the beat at 3+, leave a single marker alone unless
it is a reveal bridge, negative parallelism, a sincerity marker, dead filler,
or forensic leakage.
(oaicite, contentReference, turn0search0), knowledge-cutoff disclaimers ("As of
my last update"), template blanks ([Your Name]), chat wrappers ("Certainly!",
"I hope this helps"), and em dashes above the cap in the caption or on an
on-screen card.
scored by density (significant, crucial, notably, particularly,
comprehensive, insights, robust, leverage, foster, landscape, nuanced,
streamline, elevate, empower), grammar markers (nominalisations,
sentence-opening "-ing" clauses), written connectives ("moreover",
"furthermore", "in order to"), the 2026 model-idiom layer (quietly, "X
matters.", compound, "a signal", "the work", "built different", "let that
sink in"), reveal bridges on a single hit ("The result?", "Here's what
nobody tells you", "Stop X, start Y", "plot twist:"), all forms of negative
parallelism, stacked or perfectly parallel triads, dead filler ("hey guys",
"without further ado", "in this video I will"), and dead closers, both
spoken ("thanks for watching", "don't forget to subscribe") and
caption-level ("What do you think?", "Drop your thoughts below").
hook and on-screen text differ, caption length, hashtag count, CTA stack.
Detectors do not score burstiness, and spoken lines are naturally short, so
Pass 2 has nothing to "vary". Its jobs are: make the script sound spoken,
remove manufactured drama-rhythm, and un-flatten only a run that reads
teleprompter-flat. It never adds a punch line as a tactic.
person talks. Contractions, natural fragments, one breath per line. "It is
something that you should consider" becomes "you should try this". This is
register, not rhythm; it applies to every line.
tongue. Split at the natural breath, never at a dramatic pause.
length and none carries a real clause, and then let the one line carrying
the most content take a clause (because / when / after). Never insert a
short punch line between long ones; the inserted punch is the humanizer
fingerprint.
No Y. Just Z."; "All the X. None of the Y."; "Simple. Effective. Easy."
adjective stacks; one-word lines for drama ("Still." "Exactly."); pseudo-
Socratic Q&A ("Why? Because..."); "Short. Punchy. Done." staccato runs.
Fragment runs are the tell, on the page and out loud.
A run of them staged for drama is the tell. In the caption, cap standalone
fragments at 2.
humanizer fingerprint and it sounds like one when read.
The check is "would a person say this, and did I add a staccato pattern",
not a variance number.
Require where the content allows:
when, or what it cost ("47 minutes on the third take", "$12 at the hardware
store", not "a few takes" and not "47"). A bare number is not a fingerprint;
the referent carries the signal.
comment that started this")
sentence before or after it. Not "not gonna lie, this one hurt: the client
fired us." Just "the client fired us on a Tuesday, 9 hours before the demo."
The fact carries the vulnerability. The frame turns it into performed
sincerity, which viewers now hear as the tell.
Forbidden as openers or pivots (sincerity announcements, a named 2026 tell):
"let me be honest", "I'll be real", "honestly?", "to be direct", "the honest
version is", "real talk", "not gonna lie", "ngl", "can I be vulnerable for a
second", "unpopular opinion:" as a preface to a popular one, "storytime" with
no story in frame one. Also forbidden as insertions: hedges the speaker did
not write ("I think maybe", "I might be wrong but", "it seems"). Performed
hesitancy is 2x more common in LLM text than in expert human text; adding it
makes the script sound more scripted, not less. ("POV:" is a native TikTok
format, not a sincerity marker; it is fine when the video is a POV.)
If the input lacks these, ask the user for a number or detail. Do not fabricate.
Humanizer output has its own fingerprint. Before returning, re-read the result
out loud once and answer three questions:
(a) Did Pass 2 create staccato stacks, "The result?" reveal bridges, one-word
lines for drama, an inserted punch line, or a long/short/long/short
seesaw? If yes, merge the fragments back into a spoken sentence.
(b) Did Pass 3 add a framed confession, a sincerity announcement, or a hedge
the speaker never wrote? If yes, strip the frame and keep only the flat
fact, or remove the insertion.
(c) Did scrubbing flatten the speaker's voice: uniform tone, no reaction, no
concrete detail left, their slang gone, the one natural triad gone, every
dash gone from a caption that wanted one? If yes, restore what the speaker
had.
If any answer is yes, dial back rather than scrub harder. Edits must be
proportional to real problems: a clean script gets two or three touches, not
a quota. When in doubt whether a pattern is the speaker or the model, leave
it.
Global voice rules: see root SKILL.md Voice rules. Additional skill-specific
rules (V3):
publish a script or caption, run at least the forensic + strict passes before it ships.
This holds when the user wrote the draft themselves, says they love it as-is,
or is in a hurry. Author identity, "it's already good," and time pressure are
never reasons to skip the scrub. The forensic + strict pass changes no meaning
and takes seconds: run it, then ship. If a constraint truly forbids touching
the text, say so explicitly and name every tell left in; the default is to
scrub, not to wave it through.
invent edits to justify the run, and do not report a detector score as the
result; report the tells found and fixed.
voice quirks and what they are claiming, NOT reveal bridges, staccato stacks,
dead filler, or a beat with 3+ vocabulary markers. Stripping those is not
changing their voice; it is the job.
script needs a vulnerable beat, ask for a dated fact and state it flat.
in the caption, one natural triad, one em dash in a caption that wants it).
answer honestly: nobody can promise that, and nobody runs a detector on a
video; the viewer's ear is the test.
triple with concrete items is fine.
seamless); one such word is a slip, three in a beat is a script.
staged for effect; an inserted punch line between two long ones.
See references/examples.md for worked before/after rewrites of spoken scripts.
SKILL.md - this file (rewrite scrubber + audit-mode entry)references/scrub-rules.md - V3 catalogs by tier, density scoring, em dash cap, spoken-word fixes, rhythm rules, forbidden insertionsreferences/examples.md - worked before/after script rewritesreferences/audit-checklist.md - the pre-film checklist with thresholdssub-skills/post-audit.md - pre-film audit workflow (detection-only, no rewrite)sub-skills/voice-profile.md - build/update the user's Voice & Brand Profile (--mode profile)sub-skills/illustration.md - optional Pixfaro image workflow--mode profile)tt-humanizer --mode profile builds or updates the user's Voice & Brand Profile at ../../references/voice-profile.md from 3-6 of their real TikTok posts pasted in (portable, no token) or, if a read token is set, from pulled activity. Once filled, every writing skill in this bundle drafts in the user's voice automatically. See sub-skills/voice-profile.md. Triggers: "build my voice profile", "learn my voice".
tt-hook-scripter - generates hooks that already pass the humanizertt-caption-writer - generates captions that already pass the humanizerTake sergebulaev/tt-humanizer from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.