Skip to content

ccf/humanize

v0.3.1MIT

Audits a draft layer by layer (vocabulary, punctuation, sentence shape, openers, closers, grammar, narrative, per-model habits) against 13 studies, then rewrites what it flags in the author's voice.

Changelog

All notable changes to this project are documented here. The format follows Keep a Changelog, and the project uses Semantic Versioning.

Unreleased

Changed

  • README prose passed through humanize itself (audit-then-rewrite); tables, commands, and the file tree unchanged.
  • Credits section removed from the README; StoryScope attribution stays in data/README.md, fixture provenance in tests/fixtures/PROVENANCE.md. LICENSE renamed to LICENSE.md.

0.3.1 - 2026-09-14

Added

  • .gitattributes forcing LF on every clone, and a test that no tracked text file carries a CR: the Claude Desktop skill loader rejects CRLF frontmatter, and "Add from repository" is a Git clone subject to the host's core.autocrlf.

Changed

  • README: the Claude Desktop row now leads with the repository route (macOS and Windows) and says to restart the app after installing or updating a plugin — the / menu can list humanize:humanize before it is invocable. The skill zip is the alternative for claude.ai without the Desktop app.
  • Acceptance record: phase-2 outcomes (Codex and Hermes installs from main, the 0.2.0 → 0.3.0 plugin upgrade, Desktop on both platforms) recorded in docs/acceptance/v0.3/README.md.

0.3.0 - 2026-09-14

Added

  • Agent Plugins 1.0 manifest (plugin.json) and Codex manifest (.codex-plugin/plugin.json), so the plugin installs into Codex, Cursor, and Hermes with their own tooling.
  • tests/test_portability.py: spec-only frontmatter, no harness-specific content under skills/, runtime references named, guard-clean scripts, manifests and CHANGELOG in version lockstep, zip packager contract, study count matches SOURCES.md.
  • tools/package_skill_zip.py: builds the claude.ai skill upload from the plugin.
  • tools/smoke_harnesses.sh: local acceptance matrix with scanner-evidence PASS rule; transcripts under docs/acceptance/v0.3/.
  • README install table for Claude Code, Codex CLI, Cursor, Hermes Agent, Claude Desktop.

Changed

  • Repository layout: the plugin now lives at the root (skills/humanize/); the marketplace source is ./.
  • SKILL.md is harness-agnostic: relative scripts/surface_scan.py path, plain-words options, document extraction described generically; argument-hint removed (a hard error outside Claude Code). The /plugin install lines moved to the README.
  • Public copy describes humanize as grounded in the thirteen studies in references/SOURCES.md and covering every layer of a text; StoryScope is named where it is the source of a number.
  • pyproject.toml version now tracks the plugin version.

Migration

  • Existing Claude Code installs: claude plugin marketplace update humanize && claude plugin update humanize@humanize.

0.2.0 - 2026-09-14

Added

  • Repetition block: verbatim phrase and whole-sentence repeat detection, capped at a 60-token phrase length.
  • Grammar block: participial-tail and container-noun detection; nominalization hits.
  • Disclaimer-opener detection and sentence-tail keys in the scan output.
  • Four new --text summary lines; five new surface tells.
  • Principle 8: register and proficiency are not tells.
  • references/SOURCES.md, the citation registry for non-StoryScope numbers.
  • Report fixtures with sensitivity, specificity, direction, and pinned fairness gates.
  • SKILL.md line-budget test.

Changed

  • SKILL.md: register gate, passive guard, and convergence check.
  • Provenance invariant now allows cited non-StoryScope numbers on Scan:, Rule of thumb:, and Vintage: lines.
  • Apostrophe normalization changes words, wordlist.rate, and every per-1k rate on text containing look-alike apostrophe glyphs (they now tokenize as one word).

Fixed

  • Apostrophe look-alike glyphs between letters.

0.1.2 - 2026-09-14

Added

  • Word, PDF, PowerPoint, ODT, and RTF inputs: the skill now delegates text extraction to Anthropic's docx/pdf skills (document-skills plugin) and audits the extracted Markdown; README documents the optional install.

Fixed

  • surface_scan.py reports "not a text file — extract it first" instead of a UnicodeDecodeError traceback when given a binary document.

0.1.1 - 2026-09-13

Changed

  • /humanize is now the skill itself: the argument handling ([path | text], --audit-only, --fiction | --prose) moved into SKILL.md and the separate commands/humanize.md was removed. The two had registered as duplicate skills both named humanize.
  • Marketplace entry is strict: true and no longer duplicates component lists; plugin.json is authoritative.

Fixed

  • Plugin failed to load after install with "conflicting manifests: both plugin.json and marketplace entry specify components" (#2).
  • count_not_but double-counted a spelled-out "is not about X; it is about Y" and, after the first fix, dropped a genuine not-but that abutted a following "is not about" construction. Deduplication is now by the shared not token.

0.1.0 - 2026-09-13

Initial release (#1).

Added

  • humanize skill with a drafting mode (checks Claude's own prose against the tell lists) and a six-step audit mode (classify, scan, audit table of at most ten tells with quoted evidence and base rates, infer voice, rewrite, verify).
  • Reference docs: principles.md; surface-tells.md (17 vocabulary, punctuation, structure, and discourse tells); style-tells.md (20 StoryScope style features) and narrative-tells.md (57 fiction features), each with human-vs-AI base rates computed from StoryScope's released data; model-fingerprints.md (Claude, GPT, Gemini, DeepSeek, Kimi tendencies).
  • surface_scan.py: standard-library-only Python 3.9+ scanner reporting sentence and paragraph length statistics, punctuation rates and raw counts, tricolon / not-X-but-Y / rhetorical-question / parallel-opener counts, AI wordlist, hedge, and intensifier rates, summary-closer detection, dialogue ratio; strips Markdown before measuring; JSON or --text summary output.
  • data/storyscope_feature_gaps.csv (human-vs-AI gap for all 304 StoryScope features), the StoryScope taxonomy, and tools/gen_tell_scaffold.py to regenerate reference-doc scaffolds from them.
  • Paired AI/human fixtures with directional tests and a manual audit checklist (tests/fixtures/expected_tells.md).
  • Tooling: uv-managed dev dependencies, ruff, pre-commit hooks, GitHub Actions CI (pre-commit, pytest on Python 3.9 and 3.13, claude plugin validate --strict), and a Bugbot review guide.