deslop — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited deslop (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
/deslop takes any public-facing text — a manuscript paragraph, grant prose, an email, a cover letter — and removes the fingerprints of AI writing so it reads like the user's own voice rather than model default. It runs two passes: a deterministic mechanical scrub, then a semantic rewrite into the user's cadence.
The detection taxonomy lives in references/ai-tells.md (tunable, versionable — the delve-list shifts as models change). The econometrics whitelist lives in references/domain-whitelist.md. The voice target lives in references/voice-samples.md, which holds two registers — Correspondence and Manuscript/grant — each falling back to the configured voice reference (personal_config.user.voice_style_ref) until populated. Read all three on every invocation — do not summarize from memory. The pass-2 rewrite uses ONE register, selected per the "Voice register" section below.
Not for: verifying citations (→ /bibcheck), drafting new prose (→ /draft).
The argument is either a file path or pasted text.
.tex, .md, .txt): edit in place. Recoverable viagit / file history, so no review diff is needed (see Output behavior).
Flags:
--voice=correspondence|manuscript — force the pass-2 voice register, skippingauto-detection. Aliases: --voice=email → correspondence; --voice=paper and --voice=grant → manuscript. See "Voice register" below.
--report — print the tell-scorecard only; do NOT apply any change. Use whenthe user wants a preview.
--mechanical-only — run pass 1 (deterministic scrub) and skip the LLMrewrite. Faster, fully predictable, no voice judgment.
--domain=marketing|econ|generic — selects the whitelist strictness(references/domain-whitelist.md). Default: the user's field. generic relaxes the econometrics whitelist for non-technical prose (emails, letters).
The pass-2 rewrite targets ONE of two registers from references/voice-samples.md. The mechanical pass-1 scrub is register-independent (em-dash thinning, delve-list, artifact stripping, sentence-case headings, etc. apply to all text) — register selection affects only pass 2, plus the one punctuation rule noted below.
Select the register in this order:
correspondence / email → Correspondence;manuscript / paper / grant → Manuscript.
.tex file, OR content containing \citep, \section,\begin{abstract}, or \Cref, OR the user says "paper / manuscript / section / abstract / grant / proposal / R&R" → Manuscript register.
"email / message / note / reply / cover letter", OR short informal text with a greeting and/or sign-off → Correspondence register.
not stop to ask. STATE the choice in the scorecard (one line, e.g. Register: manuscript) so the user can re-run with --voice= if it was wrong.
Register-conditional punctuation rule (the one pass-1 exception):
the user's correspondence convention (see references/voice-samples.md); never introduce an em-dash.
NOT force the spaced hyphen. Still thin em-dash overuse by frequency, but a correctly-used em-dash in formal prose is fine.
Apply the regex + word-list detectors in references/ai-tells.md, in this order. Each detector is keyed on frequency, not presence — see the thresholds in the reference file. Run every delve-list candidate through domain-whitelist.md before flagging it.
Detector families (full patterns + thresholds in references/ai-tells.md):
"in the heart of", "rich tapestry of", etc.
not only … but, it's not …, it's ….oaicite, contentReference,turn0search, grok_card, stray utm_source=. Always strip on any match.
**Bold:** description lists, Title Case headings → sentence case, emoji in headings, --- before a heading. (Em-dash handling is register-conditional — see "Voice register": user's correspondence convention vs. standard academic usage in Manuscript.)
Pass 1 fixes are mechanical and safe (artifact removal, formatting, em-dash thinning, sentence-case headings). Anything requiring judgment about meaning is deferred to pass 2.
Skip this pass under --mechanical-only or --report. Otherwise, first select the voice register (see "Voice register" above), then rewrite the flagged-but-not-mechanically-fixable prose into the user's voice for that register — the correspondence voice for emails/messages/cover letters, or the manuscript voice for papers/sections/abstracts/grants:
→ "is a town".
("it's important to note that"); KEEP the author's genuine substantive hedges.
kill the "Challenges and Future Prospects" conclusion frame.
represents" where it just means "is" → "is".
Ground the voice in the SELECTED register of references/voice-samples.md (each register falls back to the configured voice reference when its samples are empty; for manuscript input that reference is the same one /draft uses). Preserve every substantive claim, number, quotation, and title exactly — adjust phrasing and cadence only. For .tex, respect LaTeX: keep \emph over \textit, \Cref, natbib citations; do not mangle math or macros.
See references/domain-whitelist.md. The short version: a delve-list word is suppressed (not flagged) when it sits within a few tokens of a stats anchor (standard errors, regression, specification, identification, controls, p-value, …). "robust standard errors", "leverage points", "significant at the 5% level", "comprehensive controls" are technical vocabulary, not slop. The verb "leverage a dataset" IS a tell; the noun "leverage points" is not.
Per the user's explicit preference, do not run an interactive accept/reject loop per edit.
Edit tool. The userrecovers prior versions via git / file history if needed.
After applying (or in --report mode), print a short scorecard — what changed, by category, with counts. Not a per-edit diff; a summary:
deslop scorecard — <file or "pasted text"> [domain=econ]
Register: manuscript (auto-detected; override with --voice=correspondence)
HARD FAIL artifacts stripped ........ 2 (oaicite, contentReference)
Delve-list words removed/replaced ... 5 (delve→examine, tapestry→set, …) [3 suppressed by whitelist]
Stock phrases rewritten ............. 3
Em-dashes thinned ................... 4 → 1
Negative parallelism rewritten ...... 1
Vague attributions flagged .......... 2 (need a citation — see below)
Title-case headings → sentence ...... 2
Rule-of-three triplets pruned ....... 1
Semantic rewrites (pass 2) .......... 6 sentences
Whitelist suppressions: "robust standard errors", "leverage points", "comprehensive controls"
Unresolved: 2 vague attributions need a real source — route to /cite or cut."additionally" is fine. Tune thresholds; never zero out a construction.
unknown fact, flag it — do not fabricate.
writer's own style. The user's genuine hedges and rhythm stay.
/draft writes new prose in the user's voice. /deslop cleans existingtext — they compose: draft → deslop, or deslop text written elsewhere.
/referee-response writes R&R letters in-voice; run /deslop on a pastedparagraph if it came from another tool and needs the AI cadence removed.
/deslop never adds citations or verifies them — that is /bibcheck (audit)and /cite (add).
Email (pasted, `--domain=generic`). Input: "I wanted to reach out to delve into a potential collaboration. Your groundbreaking work stands as a testament to your commitment to excellence — not only is it rigorous, but it also showcases a nuanced understanding of the field." → Output: "I'm writing about a possible collaboration. Your work is rigorous and shows a careful understanding of the field, which is why I'd like to talk." Scorecard: 1 stock phrase, 1 delve word, 1 negative-parallelism, 1 em-dash, "groundbreaking" puffery — all cleaned.
Manuscript paragraph (file, `--domain=econ`). Input contains "We leverage a rich tapestry of data. Our robust standard errors underscore the pivotal role of the treatment, highlighting its enduring significance." → The whitelist suppresses "robust" (anchored to "standard errors"). "leverage" (verb), "rich tapestry", "underscore", "pivotal role", and the trailing "-ing" clause are fixed: "We use a large panel. The treatment effect is precisely estimated (robust standard errors)." Scorecard notes the whitelist suppression so the user sees the term was deliberately kept.
/bibcheck (audit existing .bib), /cite (addone entry). /deslop only flags vague attributions; it never invents or verifies a citation.
/draft.decline; /deslop targets the user's own voice only.
The AI-tell detection taxonomy in references/ai-tells.md (delve-list, stock-phrase set, negative-parallelism patterns, formatting tells, markup artifacts, vague-attribution markers) is derived from the Wikipedia essay "Signs of AI writing" — <https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing> — used under CC BY-SA. That derived taxonomy text carries the CC BY-SA attribution + share-alike obligation; the skill code / workflow itself is MIT (see the repo LICENSE). See ATTRIBUTION.md for the repo-level credit.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.