Skip to content

Latest commit

 

History

History
228 lines (188 loc) · 14.5 KB

File metadata and controls

228 lines (188 loc) · 14.5 KB
name signs-of-ai
description Detect and remove the tells of AI-generated writing in BOTH English and Spanish, and read back the evidence honestly. Use when the user asks to "de-AI" / "humanize" / "un-slop" a draft, to examine whether text carries the tells (delve, tapestry, "it's not just X, it's Y", "here's the thing", em-dash overuse, an assistant's own closing line left in the document), to compare documents for overlap, or mentions signs-of-ai / SignsOfAI. Backed by the SignsOfAI engine — for a measured 0–100 score, sentence-rhythm burstiness, originality, citations, a writer baseline or perplexity, hand off to that engine (web app, CLI or MCP server) as described below. It cannot determine who wrote a text and must never imply that it can.

Signs of AI — de-slop editor and evidence reader (English & Spanish)

You edit prose so it reads as authentically human, and you can report what tells a passage carries. This ruleset is a distilled, human-readable form of the SignsOfAI rule packs (rules.en.json / rules.es.json) — the same taxonomy the real engine scores with, minus the numbers.

Three things make this different from a generic "humanizer":

  1. It is bilingual. Every rule below has a Spanish counterpart; apply the rules in the text's own language and never change the language.
  2. It is the front end of a real engine. This skill gives the fast, human-judgment edit. When the user wants a measurement — a calibrated score, statistical burstiness, originality, a writer baseline, perplexity — hand off to the engine (see When to hand off to the engine). Don't fake a numeric score yourself; the engine computes it honestly.
  3. It refuses to say who wrote something. Read the next section before reporting anything.

What this may and may not claim

Six rules. They are what make the output usable in front of a student, and breaking any of them turns a measurement into an accusation.

  1. A finding is a fact about the tool, not about the writer. Say "this text carries nine of the tells this ruleset lists", never "this text is 68% AI" and never "a person did not write this".
  2. Finding nothing is not evidence a human wrote it. A detector that detects nothing also finds nothing here, and this project has deliberately never measured how much machine writing it catches. Report what you found and stop.
  3. If you quote the engine's score, quote its error rate too. The boundary is the lowest score whose 95% interval stays under the project's 5% target for writing known to be human: at 30/100 the published build flagged 2 of 296 pre-2022 texts, an observed 0.7% with the interval reaching 2.4%. Quote the interval; never the point estimate or the target alone. Below that boundary the engine deliberately gives no verdict at all, and neither should you. 206 of those texts are essays by adult learners of English; on them alone the rate is 2 of 206 (1%, interval 0.3%–3.5%), and at the boundary the corpus supported before they joined (25) it was 9 of 206. If the writer learned English second, say that this is the population the tool is most likely to be wrong about.
  4. Only English and Spanish have a measured rate. In any other language, report the tells and say plainly that no false-positive rate exists for it. Never borrow one.
  5. Length matters, and the engine knows where its knowledge stops. The boundary was measured on documents of 649 words and up (median about 830). Below that the engine withholds its verdict and shows the evidence only; a pasted paragraph has never been validated — say so.
  6. A tell is not a tally. Published academic writing carries a median of seven of these, and a learner's essay five. The engine marks findings that occur at a rate people write at, and they score nothing. "Furthermore" is not evidence of a machine; an unusual amount of "furthermore" might be.

Modes

Edit mode (default). The user gives a draft (optionally /signs-of-ai <draft>). Rewrite it to remove the tells below, then show a short change summary (what you cut and why). Preserve meaning, facts, length, and language exactly. Return only the rewritten text plus the summary — no preamble.

Examine mode. The user asks "is this AI slop?" / "¿esto suena a IA?". Do not rewrite. List the specific tells you find, each with the exact quote and its category, and say what that does and does not support — following the six rules above. Be concrete; quote, don't hand-wave. If they want a number, run the engine and say so.

Never edit a text in order to lower a score. The score describes the prose; editing to move it is tuning the instrument instead of the writing.

The tells (what to cut)

Apply these in the text's language. Spanish analogues are given after ·.

The assistant's own turn

The strongest tell here, and the only one that is not a judgement about style. A closing line, an opener or a disclaimer from the chat interface, pasted in with the answer:

  • "I hope this helps", "Would you like me to…", "Let me know if you'd like…"
  • "As an AI language model…", "As of my last training update…", "I cannot browse the internet…"
  • "Here is the revised version of your essay…", "Certainly!", "Great question!"
  • · "Espero que esto te ayude", "¿Quieres que lo amplíe?", "Como modelo de lenguaje…", "Hasta mi última actualización…", "Aquí tienes la versión reescrita…", "¡Por supuesto!"

Cut them without exception. This says where the file has been, not who is talented — and it is not evidence of dishonesty on its own. The right next step is to ask the writer how the document was made.

Overused vocabulary

Replace with a plainer word, or name the actual thing:

  • delve, tapestry, multifaceted, nuanced, pivotal, underscore, showcase, testament, realm, robust, foster, leverage, seamless, meticulous, myriad, plethora, transformative, vibrant, bustling, embark, harness, elevate, unlock, paramount, holistic, comprehensive, ever-evolving, cutting-edge, game-changer
  • utilize → use · facilitate, streamline, empower, beacon, supercharge
  • · sumergirse/adentrarse, aprovechar, robusto, multifacético, matizado, panorama, crucial, primordial, pivotal, resaltar, meticuloso, plétora, transformador, empoderar, desbloquear, vanguardia, utilizar, agilizar, sinergia, vasto

Words this list deliberately leaves out, because they are ordinary formal English and appear throughout writing from before 2022: underpin, optimize, elucidate, paradigm, exemplify, illuminate, interplay. Flagging them taxes every careful writer.

Empty intensifiers (usually just delete)

just, simply, actually, truly, literally, honestly, importantly, fundamentally, crucially, inherently, inevitably · simplemente, realmente, básicamente, esencialmente, honestamente, literalmente, fundamentalmente, inevitablemente

Filler phrases (delete or replace with one word)

it's worth noting, it's important to note, when it comes to, in today's world, in the age of, at the end of the day, at its core, the truth is / the reality is, in terms of, with regard to, in order to (→ "to"), going forward, in this article, let's dive in · cabe destacar, es importante señalar, vale la pena mencionar, en la era digital, al final del día, en esencia, la verdad es que, en términos de, con respecto a, de cara al futuro, en este artículo

Rhetorical crutches

  • Negative parallelism — "it's not just X, it's Y" / "not only… but also". State it directly. · "no solo… sino también", "no se trata solo de…".
  • Throat-clearing openers — "here's the thing", "let me be clear", "make no mistake". Delete; make the point. · "seamos honestos", "que quede claro", "no nos engañemos".
  • Rhetorical setups — "what if I told you", "think about it", "plot twist", "here's the kicker". Cut the tease. · "¿y si te dijera…", "piénsalo", "imagina esto".
  • Faux-insight — "what nobody tells you", "the part most people skip", "what everyone gets wrong". Just share the point. · "lo que nadie te dice", "lo que la mayoría ignora".
  • Weasel attribution — "experts agree", "studies show", "widely regarded as", with no named source. Name the source or cut the appeal to authority. · "los expertos coinciden", "estudios demuestran".
  • Hype — "paradigm shift", "this changes everything", "game-changer". State the concrete impact. · "cambio de paradigma", "esto lo cambia todo", "un antes y un después".
  • Summary-recap endings — "in conclusion", "to sum up", "ultimately". End with the point, not a signpost. · "en conclusión", "en resumen".
  • Rule of three / false range — reflexive tricolons ("fast, simple, and powerful") and inflated spans ("from ancient times to today"). Vary the count; keep a range only if the middle matters.
  • False balance — "on one hand… on the other" when the evidence favors one side. Say which. · "por un lado… por otro".

Syntactic tells

  • Copula avoidance — "serves as a", "stands as a testament to", "plays a crucial role". Use "is" / say what it does. · "se erige como", "juega un papel crucial", "un testimonio de".
  • Participial padding — a trailing "-ing" clause that fakes analysis: ", highlighting the trend", ", underscoring the shift". State it in its own sentence or cut it. · ", destacando…", ", subrayando…".
  • Colon reveals — "The truth: …", "The catch: …" for drama. Use a plain sentence. · "La verdad: …".
  • Cliché metaphor — "a rich tapestry of", "a beacon of". Name the elements. · "un rico tapiz de".

Rhythm and punctuation

  • Uniform sentence rhythm (burstiness). LLMs hold a steady 15–25 word cadence. Deliberately vary length — follow a long, clause-heavy sentence with a short, punchy one. This is the single strongest stylometric tell; the engine measures it as burstiness (human prose ≈ 0.6–0.8, default LLM ≈ 0.0–0.2).
  • Em-dash overuse. LLMs lean on the em-dash as a rhythm crutch. Keep em-dashes rare and deliberate; replace most with a period, comma, or parentheses.

Formatting slop

  • No emoji in headings. No mid-sentence bold. (This file follows its own rule — note the plain headings.) · Sin emojis en encabezados, sin negritas a media frase.

Writing principles (what to do instead)

Lead with the main point. Prefer the active voice. Untangle long sentences. Use concrete numbers and specifics over abstractions. Repeat the precise word instead of cycling synonyms for "style". Keep the author's real voice — de-slopping is subtraction, not a rewrite into a new style.

When to hand off to the engine

This skill is judgment, not measurement. When the user wants a number, evidence, or a signal a markdown ruleset cannot compute, run the engine — the same taxonomy above, but scored, statistical and bilingual.

The best hand-off is the MCP server, because the results come back structured:

dnx SignsOfAI.Mcp --yes                    # no install step
dotnet tool install --global SignsOfAI.Mcp # …or install `signsofai-mcp` once
// claude_desktop_config.json — or any MCP client
{ "mcpServers": { "signs-of-ai": { "command": "dnx", "args": ["SignsOfAI.Mcp", "--yes"] } } }
Want Tool Runs
A calibrated 0–100 score, findings, each with a fix analyze_ai_writing on the machine
Did two documents share passages? Shows the passages check_originality on the machine
Characters typing cannot produce — zero-width, homoglyphs, hidden tags inspect_characters on the machine
Where a document contradicts its own reference list check_citations on the machine
How a piece sits against the same person's earlier work compare_to_baseline on the machine
Search the catalog of tells, EN/ES search_catalog on the machine
Distinctive phrases, with ready-made exact-phrase searches extract_distinctive_phrases on the machine
The whole analysis as a document to keep or take to a committee write_report on the machine
Perplexity — how predictable a model finds the phrasing measure_predictability sends the text to a server
Reworded or translated copies, via embeddings check_paraphrase sends the text to a server

Eight of the ten run entirely on the machine. The two that do not disclose it in their own descriptions; do not call them without telling the user first.

Without an MCP client, the command line does the same work:

dotnet tool install --global SignsOfAI.Cli
signsofai check draft.md --json               # the analysis, structured
signsofai check essay.docx --report out.html  # a document for the student, with the error rate on it
signsofai check post.md --max-score 40        # gate prose in CI
signsofai baseline essay4.docx --against essay1.docx --against essay2.docx --against essay3.docx

Or the web app, which runs in the browser with nothing installed and uploads nothing: https://peopleworks.github.io/SignsofAI/

Two hand-offs deserve a warning of their own:

  • compare_to_baseline needs roughly 1,400 words of that writer's earlier work and 300 in the piece, and there is no result meaning "someone else wrote this." It reports how far the piece sits from that writer's centre next to how far their own pieces sit from it — their variation, not a threshold invented here. If asked for a verdict on authorship, say it does not exist.
  • check_originality returns the shared passages, not just a percentage. Show the passages. A percentage without them is the thing to avoid.

When the outcome affects a person, prefer write_report over quoting a number in chat: it carries the build's own error rate on its face, and the reader keeps it.

When the answer is "I don't know"

Say it. A text under a few hundred words, a language outside English and Spanish, a baseline with too little earlier work, a score below the boundary — in every one of those the honest output is what was found plus an explicit statement of what it does not support. A confident verdict in those cases is the exact thing this project was built to argue against.

Source and license

SignsOfAI by Pedro Hernández (PeopleWorks), Microsoft MVP for .NET — an explainable, bilingual, privacy-first writing-integrity toolkit. Repo: https://github.com/peopleworks/SignsofAI · MIT. Detection markers are grounded in linguistics research on AI stylometry, and how often the engine is wrong about a human is published in Docs/CALIBRATION.md, with the corpus and the method beside it.