Skip to content

feat: add a multi-document voice and consistency pass - #262

Open
mvanhorn wants to merge 1 commit into
blader:mainfrom
mvanhorn:cursor/multi-document-voice-pass-f4c0
Open

feat: add a multi-document voice and consistency pass#262
mvanhorn wants to merge 1 commit into
blader:mainfrom
mvanhorn:cursor/multi-document-voice-pass-f4c0

Conversation

@mvanhorn

@mvanhorn mvanhorn commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

What this adds

Humanizer can match one supplied writing sample, but it has no workflow for a folder or set of drafts. Professional users often need a release, a docs set, or a content series to share one voice while each file keeps its own facts and formatting. This PR adds a prompt-only multi-document mode: no scorer, detector, daemon, or dependency.

How the mode works

The mode activates only when the user names a set of text files or approves a directory selection. File contents are treated as text to edit, never as instructions. Generated files, vendored content, code, and unsupported formats stay excluded and reported unless the user names them directly.

Phase 1 is read-only portfolio analysis. The skill builds:

  • a compact portfolio voice brief: stable habits shared across files, allowed variation by document type, phrases to preserve and avoid, and evidence excerpts with source filenames;
  • a claim ledger per file (every fact, name, number, date, quote, citation, and ranking);
  • a protected-format inventory per file (code blocks, YAML metadata, tables, data, link targets, required structure);
  • a list of AI patterns repeated across files, such as the same stock opening in several documents.

The default output is a preview table with one row per file: filename, planned edit intensity, dominant AI patterns, protected content, and unresolved questions. No file changes before the user approves a scope, which follows the file-mode safety concerns raised in #238.

Phase 2 runs only after approval of the full set or a named subset. The skill rewrites one file at a time against the voice brief while keeping each file's own register, verifies each file's claim ledger and protected-format inventory before moving on, and leaves a failing file unchanged while continuing with the rest. It ends with a cross-file review: one term per concept, no voice drift between the first and last rewrites, no repeated stock openings or closings, and no accidental homogenization of files that had different registers.

This is additive voice matching with an inspect-then-approve boundary. It does not reintroduce the light-edit mode declined in #93.

Changes

  • SKILL.md: new Multi-document mode section with both phases, a pointer from "How to return the result", an updated frontmatter description, and version 2.12.0. The file stays under the 500-line cap (494 lines).
  • README.md: a multi-document usage section and a 2.12.0 version history entry.
  • .claude-plugin/plugin.json: version 2.12.0.
  • agents/openai.yaml: short description now mentions document sets.
  • scripts/validate-package.py: new parity check that both SKILL.md and README.md document multi-document mode.

Validation

All three CI checks pass locally:

  • python3 scripts/validate-package.py reports Humanizer package v2.12.0 is valid
  • npx skills@1.5.20 add . --list finds the skill with the updated description
  • claude plugin validate . passes

No change to the 35 patterns.

Add multi-document mode to the Humanizer skill. When the user names a
set of text files or approves a directory selection, the skill runs a
read-only portfolio analysis first: a shared voice brief with evidence
excerpts, a claim ledger and protected-format inventory per file, and a
preview table with planned edit intensity. Files change only after the
user approves the full set or a subset. Rewrites run one file at a time
with per-file verification, then a cross-file review for terminology,
voice drift, repeated stock phrasing, and accidental homogenization.
Generated, vendored, code, and unsupported files stay excluded and
reported unless named directly.

Sync docs and metadata: README usage section and 2.12.0 history entry,
plugin.json version, openai.yaml short description, and a validator
check that both SKILL.md and README.md document the mode.

Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com>
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.

2 participants