Skip to content

feat(skills): add humanize, the ai-tells catalogue and Vale style; v0.4.0 - #2

Merged
sebastian-iancu merged 3 commits into
mainfrom
feat/humanize-skill
Sep 24, 2026
Merged

sebastian-iancu merged 3 commits into
mainfrom
feat/humanize-skill

Conversation

@sebastian-iancu

Copy link
Copy Markdown
Contributor

Summary

Adds /humanize, which removes AI writing patterns from existing prose, and makes the house style em-dash free. Prepares v0.4.0.

Three commits:

  1. feat(skills): the humanize skill, the catalogue and the Vale style.
    • skills/humanize/: picks an edit contract (line edit by default), runs the ai-tells Vale style, marks tells by strength, restates without adding or dropping facts, and reports. --report-only names patterns and never judges authorship.
    • references/ai-tells.md: the canonical catalogue. It covers leftovers, staging, inflation, rhythm and formatting, a strong versus weak-alone ranking, the em-dash rule, a when-not-to-act list, and why tells describe writing, not writers. It is written from scratch and sourced to Wikipedia's "Signs of AI writing" and Liang et al. (2023).
    • references/vale-styles/ai-tells/: seven rules.
      • Errors: chatbot-residue, tool-markup.
      • Warnings: signposting, stock-vocabulary, vague-attribution.
      • Suggestions: negation-contrast, em-dash. A person's deliberate dash never fails CI.
    • One-line hooks in the router, copy-editing, technical-writing, marketing-copy and prose-reviewer. /docs-lint-setup copies the style into a repo.
  2. style: every em dash removed from the plugin's own prose. Each replacement was chosen per sentence: a colon, comma, semicolon, parentheses or a new sentence. Punctuation only; no rule changes strength.
  3. chore(release): v0.4.0. Both manifests are bumped and the changelog is folded. The tag is cut on main after merge.

The em-dash rule (references/ai-tells.md §6, style-guide.md §3):

  • The assistant writes no em dashes.
  • An existing dash a person wrote stays, except in a humanize pass, and even there only where other tells share its paragraph.
  • Vale reports dashes as a suggestion. An author can silence a passage with <!-- vale ai-tells.em-dash = NO -->.

Testing done

  • Vale 3.18.0 fixtures:
    • A sloppy sample fires every rule.
    • A clean sample stays silent, including code, ranges like 2020–2026 and "not only … but also".
    • Fifteen false positives the skill review predicted were confirmed, then fixed. Examples: "as an AI pair programmer", "If it's not set, it is created", Apache Tapestry, "teams report incidents".
    • Typographic apostrophes now match.
    • vale sync leaves styles/ai-tells/ in place.
    • A missing style directory fails with E100 [loadStyles].
  • Behaviour test: a fresh agent ran the skill on a trap page. It cut an unsourced "studies show" without inventing a replacement. It kept a person's dash, a dash inside a code block, a legitimate "sync is not a backup" warning and a figure that came with its date. It reported the recap section instead of deleting it.
  • Skill review (plugin-dev:skill-reviewer): 1 critical and 8 major findings, all addressed.

Checklist

  • ./scripts/validate.sh passes (or claude plugin validate . if Python is unavailable)
  • claude plugin validate . passes. Its two warnings about unquoted ${CLAUDE_PLUGIN_ROOT} in hooks.json predate this PR.
  • Skill / agent triggering tested locally (see docs/testing.md). The skill was run by an agent following it directly; auto-triggering with --plugin-dir has not been tested yet.
  • Cursor install tested locally when manifest, rule, or hook content changed (see docs/install.md). Not tested; the Cursor rule and manifest changed.
  • Both manifests kept in sync when metadata changed: .claude-plugin/plugin.json and .cursor-plugin/plugin.json
  • Rules cite references/ rather than restating them; no rule duplicated across components
  • No unsourced claim added: no invented statistics, testimonials, customer names, awards, urgency, or superlatives, in the components or in this repo's own docs (references/claims-and-evidence.md)
  • Inventories and counts in README/AGENTS.md verified against the tree (8 skills, 7 worker skills, 5 canonical references)
  • New or renamed component wired into the router and hooks/session-start.sh (the validator enforces this)
  • Version bumped and CHANGELOG.md updated (if component content changed); see docs/versioning.md

After merge: tag v0.4.0 on main, publish a GitHub release titled v0.4.0, then repin docs-editing in Cadasto/plugin-marketplace.

🤖 Generated with Claude Code

Adds /humanize, which removes AI writing patterns from existing prose:
it runs the ai-tells Vale style, marks tells by strength, restates
without adding or dropping facts, and reports patterns without ever
judging authorship (--report-only for detection).

- references/ai-tells.md: canonical catalogue (leftovers, staging,
  inflation, rhythm, formatting), strong vs weak-alone ranking, the
  em-dash rule and the when-not-to-act list. Original wording, sourced
  to Wikipedia "Signs of AI writing" and Liang et al. (2023).
- references/vale-styles/ai-tells/: seven rules. chatbot-residue and
  tool-markup are errors; em-dash and negation-contrast are suggestions,
  so a person's deliberate dash never fails CI. Tested with positive and
  false-positive fixtures on Vale 3.18.0.
- House style: no em dashes in assistant-written prose; a human author's
  deliberate dash is kept.
- Wired into the router, copy-editing, technical-writing, marketing-copy,
  prose-reviewer, docs-lint-setup, the session-start hook and the Cursor
  rule.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
sebastian-iancu and others added 2 commits September 24, 2026 14:24
The house style now keeps em dashes out of assistant-written prose, and
the components are the text the model reads and imitates. Replaces every
em dash in skills, agents, references, rules, docs, README, AGENTS.md,
CHANGELOG, manifests and scripts with a colon, comma, semicolon,
parentheses or a new sentence, chosen per sentence. Punctuation only; no
rule changes strength. Lone "—" table cells in the router now read
"none".

Kept on purpose: the illustrative dash in references/ai-tells.md §6, the
em-dash token in the ai-tells Vale style, and one code span in CHANGELOG
quoting an old heading.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Bumps both manifests to 0.4.0 and folds [Unreleased] into a dated section. The tag is cut on main after merge (docs/versioning.md step 6).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@sebastian-iancu
sebastian-iancu merged commit 4cf982b into main Sep 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant