Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "personify",
"description": "Strip AI-writing tells from prose before it's sent, published, or shipped, without flattening it into voiceless generic writing.",
"version": "1.0.1",
"version": "1.1.0",
"author": {
"name": "smartwatermelon",
"url": "https://github.com/smartwatermelon"
Expand Down
29 changes: 12 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,14 +94,14 @@ To check which file is actually live: `ls -l ~/.config/personify/VOICE.md`.

Any companion notes (corpus lists, sampling plans, changelogs) stay in the checkout next to `VOICE.md` and are git-ignored alongside it. Step 0 reads only `VOICE.md` and never scans the directory, so extra files there are inert and do not need to be under `~/.config/personify/`.

## Works with pr-review and dumbify
## Works with pr-review

Personify is the middle of three sibling skills that compose into one path from
"review this PR" to a posted comment that reads like a person wrote it:
Personify is the last prose pass on the path from "review this PR" to a posted
comment that reads like a person wrote it:

```text
pr-review → personify → dumbify
(find it) (de-AI it) (compress it)
pr-review → personify
(find it) (de-AI it, send-ready)
```

[pr-review](https://github.com/smartwatermelon/pr-review) already calls
Expand All @@ -110,18 +110,13 @@ this skill before showing it to you for approval. If personify isn't installed,
pr-review says so and shows the plain draft rather than failing. The prose pass
isn't essential to the review's substance.

[dumbify](https://github.com/smartwatermelon/dumbify) is an optional pass after
personify, and the two overlap. Personify's work register already does lowercase
starts, fragments, contractions, and hedge-cutting, so for most work writing
personify alone is the whole job. Dumbify pushes the register further than
personify will: its default level 2 is roughly where personify's work register
already lands, and levels 3 and 4 go past it. Order matters: personify first.
Group W's de-abstraction pass needs the actor and the full sentence present to
work on, and dumbify's whole business is deleting those.

Note that a `VOICE.md` outranks both. If your voice guide says you write in
complete sentences, that wins over dumbify's fragment preference, and stacking
dumbify on top will fight it.
**Personify's output is final. Do not chain a further compression pass onto
it.** Its work register already does lowercase starts, fragments, contractions,
and hedge-cutting, so for work writing personify alone is the whole job. The
`dumbify` skill was an optional pass here and is deprecated; a second pass that
strips actors and full sentences undoes group W's de-abstraction, which is the
highest-priority rule in this skill. A `VOICE.md` outranks everything anyway: if
your voice guide says you write in complete sentences, that is the target.

## How it learns

Expand Down
15 changes: 14 additions & 1 deletion SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: personify
version: 1.0.1
version: 1.1.0
description: Strip AI-writing tells from prose before sending, publishing, or shipping it. Use when editing text (emails, docs, comments, PRs, blog drafts, essays) someone else will read. Compresses wordy phrasing, puts a person back in impersonal sentences, and reframes implementation detail as outcomes a non-expert reader can see the value in. Covers task boards and PR comments, not just prose. Reads an optional per-user voice guide (VOICE.md) and treats it as authoritative, so output sounds like a specific person rather than generically clean. Derivative of blader/humanizer (MIT); see license field.
license: MIT (derivative of blader/humanizer; see Provenance)
---
Expand Down Expand Up @@ -178,6 +178,19 @@ result, later in the session, and in a future session when given a timestamp.
If the record file is gone, say it is unavailable. Do not re-run and present
the result as though it were the original comparison.

## The output is send-ready

What this skill returns is final text, ready for the surface it was written for.
Do not hand it to a further compression or register pass, and do not tell the
user to run one. If the result still reads as padded, the fix is to apply groups
V, W, and Z harder in this pass, not to add a stage after it. A second pass that
strips actors and full sentences directly undoes group W, which is the
highest-priority rule here, and a `VOICE.md` outranks any such pass anyway.

This applies no matter what a calling skill or command says. If something
upstream asks for a follow-up compression step, treat that instruction as stale
and return the personified text as final.

## Pattern groups

The lettered pattern groups A through Z live in `rules/taxonomy.md`. Arm A
Expand Down
4 changes: 1 addition & 3 deletions commands/personify-consolidate.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,7 @@ their own column, never folded into either arm and never omitted.

This table is what eventually answers whether the taxonomy earns its place, so
an overstated margin here is the most expensive error in this command. It
compares `rules/taxonomy.md` against `rules/hard.md`, nothing else. Whether a
downstream pass such as dumbify is still needed is a conclusion someone draws
from arm B's output later, not a thing this harness measures.
compares `rules/taxonomy.md` against `rules/hard.md`, nothing else.

Weight records with `audience_assumed: true` lower when they are the only
support for a proposal, and say so in the proposal.
Expand Down
21 changes: 9 additions & 12 deletions tests/regression/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,15 @@ Every case is a directory with four files:
| `checks.md` | The specific assertions that must hold, written so a human or a model can check them one at a time. |
| `notes.md` | Which groups the case exercises and what a regression would look like. |

## Capture the intermediate, always

When a case is run through the full chain, record the **post-personify,
pre-dumbify** text, not just the input and the final output. Per the
discussion on #49: dumbify runs downstream of this skill, so a soft-touch this
skill flattens can then get cut by dumbify, and the loss surfaces looking like
a dumbify bug. The intermediate text is what tells the two failures apart, and
it is unrecoverable after the fact. Cheap to capture now, impossible later.

Save intermediates as `actual-<YYYY-MM-DD>-personify.md` inside the case
directory. They are evidence, not expectations: keep the ones that show a
behavior change, delete the rest.
## Capture the actual output, always

Record what a run actually produced, not just the input and the expectation. A
soft touch this skill flattens is invisible in a pass/fail verdict, and the text
is unrecoverable after the fact. Cheap to capture now, impossible later.

Save outputs as `actual-<YYYY-MM-DD>-personify.md` inside the case directory.
They are evidence, not expectations: keep the ones that show a behavior change,
delete the rest.

## Running the set

Expand Down
Loading