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
34 changes: 31 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,38 @@
# Scribe

A Claude Code plugin that catches AI-default writing patterns before they ship.
**Make AI-assisted drafts sound like you wrote them.**

Scribe routes every draft through a persona system, picks a varied subset of anti-patterns per run (so two runs never produce the same critique), scores prose on a 0-100 sameness scale, and fixes voice, rhythm, vocabulary, structure, and rhetoric before the book goes to print.
Scribe is a Claude Code plugin for authors, essayists, and editors. It finds the patterns readers recognize as AI prose and rewrites them in a voice that fits your book.

Built for longform authors, essayists, ghostwriters, and editors. Runs a team of specialist agents that plan, draft, edit, and review collaboratively.
```
/plugin marketplace add raymondware/kern
/plugin install scribe@raymondware
/scribe:revise
```

Paste a passage after `/scribe:revise`. Scribe returns the rewrite, a diff, and a 0-100 sameness score.

### Before

> In today's fast-paced world, leadership isn't about authority; it's about influence. Great leaders don't just manage teams, but inspire them. By leveraging empathy, clarity, and vision, they unlock the full potential of their organizations. It's important to note that this is not a destination. It is a mindset.

| Flagged | Pattern |
|---|---|
| "In today's fast-paced world" | `in-todays-fast-paced-world` |
| "isn't about authority; it's about influence" | `negative-positive-restatement` |
| "don't just manage teams, but inspire them" | `not-just-x-but-y-reflex` |
| "empathy, clarity, and vision" | `tricolon-reflex` |
| "leveraging", "unlock the full potential" | `marketing-verb` |
| "It's important to note that" | `its-worth-noting-throat-clearing` |
| "not a destination. It is a mindset." | `negative-positive-restatement` |

### After

<!-- Replace with real /scribe:revise output (business-book persona) and its score before publishing. -->

> Teams follow the manager who listens before deciding. She asks what is blocking the work, says plainly which goal matters this quarter, and then lets people do it.

**18 agents · 31 anti-patterns · 5 writer personas · a different critique subset every run**

## The Problem

Expand Down
3 changes: 3 additions & 0 deletions tests/test_prose_fingerprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ def test_detects_contracted_and_comma_spliced_frames(self):
"It isn't a tool, it's a mindset.",
"This was never about money. It was about respect.",
"We don't need more speed. We need impact.",
"Great leaders don't just manage teams, but inspire them.",
"Great leaders don\u2019t just manage teams, they inspire them.",
"The tool doesn't only format code; it rewrites it.",
]
for text in cases:
with self.subTest(text=text):
Expand Down
12 changes: 11 additions & 1 deletion tools/prose_fingerprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,17 @@ class Finding:
(
"not_just_but",
re.compile(
r"\bnot\s+(?:just|only|merely)\b[^.!?;]{0,160}\bbut(?:\s+also)?\b[^.!?]{0,160}",
rf"(?:\bnot|n{_APOS}t)\s+(?:just|only|merely)\b[^.!?;]{{0,160}}\bbut(?:\s+also)?\b[^.!?]{{0,160}}",
re.IGNORECASE,
),
),
(
# "Great leaders don't just manage teams, they inspire them." Same move as
# "not just X, but Y" with the "but" dropped and a pronoun restarting the clause.
"dont_just_comma_claim",
re.compile(
rf"\b(?:do|does|did)n{_APOS}t\s+(?:just|only|merely)\s+\w+[^.!?;]{{0,120}}?"
r"[,;]\s*(?:they|we|you|it|he|she|i)\s+\w+[^.!?]{0,140}",
re.IGNORECASE,
),
),
Expand Down
Loading