Grok invisible characters
What the Grok invisible character detector does
Paste in text copied out of Grok, whether from the standalone app or from inside X, and this tool finds the zero-width and non-printing Unicode characters inside it, without changing how the text looks. It answers the question people type into a search bar, why does text from Grok have hidden characters, with a specific list of what it found, not a vague warning about secret markers.
This is a server tool, not a browser script. Your text is sent to our AI server to be checked; you get 5 free checks in any rolling 24 hours. There's no account to create, and no text you paste is needed twice. What comes back is a list of findings, not an accusation, and this page explains honestly why they're there before getting into what to do about them.
The characters
The 14 hidden characters this detector checks for
Every character this tool looks for is an ordinary Unicode codepoint with a legitimate technical purpose, grouped here into seven families:
- Zero-width space (U+200B)
- Occupies a character slot and renders nothing. The single most common invisible marker in copied AI output.
- Zero-width joiners (U+200C, U+200D)
- The non-joiner and joiner, sometimes left over from how rich text renders certain characters and emoji.
- Word joiner (U+2060)
- An invisible joiner that prevents a line break at that point, often sitting near a bolded phrase.
- Byte-order mark (U+FEFF)
- A marker meant to sit at the start of a file, occasionally left mid-response by an export or copy path.
- Soft hyphen (U+00AD)
- Invisible until a line wraps there, then a hyphen appears in a word that never had one.
- Non-breaking spaces (U+00A0, U+202F, U+200A)
- Look identical to a normal space, behave differently in code, slugs and search.
- Bidi controls (U+202A to U+202E)
- Five directional embedding and override characters that can quietly reorder mixed-direction text.
How it works
How to check Grok text for invisible characters in three steps
It takes less time than reading the result does. There's no formatting to strip out first, and nothing to configure before you run the check: paste, run, read.
- Step 1
- Copy the text from Grok using the interface's own copy option rather than selecting it by hand. That's the version most likely to carry hidden characters.
- Step 2
- Press Check text. It goes to our AI server once, gets scanned for hidden Unicode characters, and the result comes back to the page.
- Step 3
- Read each flagged character and where it sits. Nothing about the text is changed; this page only reports what it found.
Where they come from
Why Grok text carries hidden characters
This is worth being straightforward about. Grok is embedded inside X's own chat surface as well as offered as a standalone app, and both interfaces render bold text, bullet lists and quoted material; converting that formatting to plain text on copy is where most of these characters slip in.
The same kinds of characters show up when you copy out of a Word document, a PDF or a translated page, none of which involve Grok. Finding a hidden character in text copied from Grok tells you something about that copy path. It doesn't, by itself, prove the words were written by Grok rather than another source, or that xAI marked the text on purpose.
What a finding actually means
Does finding a hidden character prove Grok wrote the text?
No, and this tool won't claim otherwise. A hidden character is a formatting artefact of the copy path, not a Grok-specific fingerprint. The same characters show up in human-typed documents exported from Word, translated text and PDF copy-paste, with Grok nowhere in the chain.
It's worth separating this from a different, real area of research: statistical, token-level watermarking, where a model's word-choice probabilities are tuned in a pattern a statistical test can detect, not by inserted characters. No character-level scan, including this one, can see it. A claim that Grok hides a watermark findable by scanning for zero-width characters describes something different from how real watermarking research works.
Why you might see a flag
Why human-written text can trigger this too
Plenty of ordinary human workflows produce the same characters as a Grok copy-paste, which is why a flag here isn't evidence of who wrote the underlying words.
- Copying from X or other social apps
- Rich-text rendering in social feeds and quote-post embeds can leave formatting characters behind on copy.
- Translation tools
- Machine and professional translation software frequently leaves directional or joining characters behind.
- PDF copy-paste
- Extracting text from a PDF often introduces stray characters the original document never displayed.
- Other chat interfaces
- ChatGPT, Claude and other assistants render rich text too, and can leave similar characters behind on copy.
- CMS and rich-text editors
- Switching between rich text and plain text views in a CMS is a common source of leftover formatting characters.
Why it matters anyway
What these hidden characters actually break
These characters cause real problems once text moves somewhere that parses it strictly. A zero-width space inside a heading splits a keyword, so a page's slug and visible title stop matching. A byte-order mark stuck inside a JSON file breaks the parser, and non-breaking spaces confuse diffing tools and find-and-replace.
Pasting straight from Grok into a CMS, an email or a code editor is exactly where these problems surface. Checking first turns a category of confusing formatting bugs into a non-event.
Who uses it, and the free checks
Who uses this detector, and how many free checks you get
Writers, editors and developers pasting Grok output into a CMS, an email or a codebase use this to catch formatting problems before they cause one. This is a server tool: your text travels to our AI server to be checked, then travels back, which is why there's a limit.
You get 5 free checks in any rolling 24 hours, tracked without an account. If you're cleaning the same kind of text repeatedly and want no limit at all, the site's dedicated zero-width space remover and watermark cleaner run entirely in your browser instead, with no server round trip and no daily cap.