red-team-prose
Skill bundle for phil:red-team-prose command — reviews a doc, README, or release note for AI-generated tells, Elements of Style clarity, and fitness for its…
Skill by pmvanev
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/pmvanev-red-team-prose
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/red-team-prose
What's inside
- Skill name
red-team-prose- Description
- Skill bundle for phil:red-team-prose command — reviews a doc, README, or release note for AI-generated tells, Elements of Style clarity, and fitness for its audience, as one worst-first report with an opt-in fix pass. Use when asked to red-team, de-AI, or publish-check prose.
- License
- MIT
- Instructions
- 198 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Red-Team Prose
Red-team a document against **all three** prose standards this plugin owns, in one pass:
| Pass | Tag | Source | Asks |
|------|-----|--------|------|
| **Tells** | `[tells]` | `${CLAUDE_PLUGIN_ROOT}/skills/ai-eos/SKILL.md` | Does this read as AI-generated? (*register*) |
| **Clarity** | `[clarity]` | `${CLAUDE_PLUGIN_ROOT}/skills/eos/SKILL.md` | Is this clear, concise, and active? (*sentence*) |
| **Fitness** | `[fitness]` | `${CLAUDE_PLUGIN_ROOT}/rules/technical-communication.md` | Is this fit for its reader and purpose? (*document*) |
A document can fail any one independently. The third is the one the other two structurally cannot catch: every sentence can be tight, active, and free of tells while the document still omits what the reader needed.
**Note the asymmetry.** Two passes load skills; the fitness pass loads a **rule** directly, as `ux-review` does with `rules/ux.md`. There is no `technical-communication` skill — do not look for one.
**Review first and edit second, never both at once.** Report everything, get approval, then apply only what is safe to apply.
---
## Parse the Argument
Determine what `$ARGUMENTS` refers to:
| Pattern | Type | Example |
|---------|------|---------|
| `--changes` | Uncommitted changes | `--changes` |
| Digits separated by `-` or `:`, with an optional `lines:` prefix | Line range | `42-67`, `42:67`, `lines:42-67` |
| Has a file extension | File path | `README.md`, `docs/setup.md` |
| Ends with `/` or a directory with no extension | Directory path | `docs/`, `skills/` |
| No argument | Prose in the current context | — |
Resolve the argument once; give all three passes the same span. If the argument contains both a file and a line range (`docs/setup.md:12-30`), split them.
**Directory mode.** Emit one verdict triple and one findings list **per file**, files ordered worst verdict first, preceded by a one-line roll-up. For large directories (>20 files), an Explore agent may locate the prose files, but read each file yourself before its passes: exact spans and Step 6's edits need the text, not a summary.
**One exception.** The fitness pass judges the document as a whole — audience, completeness, structure. A line range cannot be judged for comprehensiveness or navigability. When the argument is a line range, read the whole file for the fitness pass, scope the other two to the range, and say so in the report.
---
## Step 1: Read Once
Read the target **once** and hold it for all three passes. Do not read the file three times.
Resolve the argument as `ai-eos` Step 1 specifies (`--changes` → `git diff --name-only HEAD` filtered to `**/*.{md,txt,rst}`, then `git diff HEAD -- {file}` per file; line range → read with surrounding context; directory → glob recursively). Review prose only — skip code blocks, frontmatter, config, link URLs, and generated output.
---
## Step 2: Run the Tells Pass
Load `${CLAUDE_PLUGIN_ROOT}/skills/ai-eos/SKILL.md` and apply its catalog and tiers to the text. Honor its `What NOT to Flag` section in full — especially the em-dash rule, the single-era-vocabulary-hit rule, and the illustrative-spans rule. Compute its density verdict.
Clustered whiffs report as `[tells]` findings with the whiff mechanism named and the cluster quoted, but, as `ai-eos` says, whiffs never count toward the rate or the mechanism count. Unclustered whiffs are not reported.
**Overrides while composing.** A sibling skill's own report template is suppressed — its findings feed the merged report at Step 5 only, never a second report of its own. `ai-eos`'s **Never edit** holds through Steps 1–5 and is lifted at Step 6 for `[auto-applicable]` fixes only. `eos` never writes before approval.
---
## Step 3: Run the Clarity Pass
Load `${CLAUDE_PLUGIN_ROOT}/skills/eos/SKILL.md` and apply its ten editing rules to the same text — but **diagnostically**. Identify each violation and its rewrite; do not edit the file yet. Honor `eos`'s Safety section: preserve meaning, formatting, tone, and domain terminology. A rewrite that adds a number, a name, an actor or a claim the text does not hold is `[NEEDS YOU]`, never `[auto-applicable]` — "caches for a while" cannot become "caches for 5 minutes" without the author. A span quoted as an example of bad prose is exempt from the clarity pass too, as `ai-eos` exempts it from the tells pass. Its File Path mode — which edits in place and emits its own summary — is suppressed here; both are deferred to Steps 5 and 6.
---
## Step 4: Run the Fitness Pass
Load `${CLAUDE_PLUGIN_ROOT}/rules/technical-communication.md` and apply it to the document **as a whole**. This pass is not span-by-span like the other two — it walks the measures of excellence and the checklist, asking whether the document serves its reader.
The fitness verdict uses this scale, so runs stay comparable:
| Verdict | Signal |
|---------|--------|
| **unfit** | the audience is never identifiable, **or** a reader cannot act on the document |
| **serviceable** | usable, but one or more measures fail |
| **fit** | no measure fails |
State which measures fail alongside the verdict.
Check, in this order:
1. **Audience and purpose** — is the primary reader identifiable, and can you state "after reading this, the reader will be able to ___"? If not, that is the first finding and usually the root of the others.
2. **Comprehensiveness** — what does the reader need that is not here? Missing prerequisites, unstated assumptions, absent success criteria.
3. **Accessibility and structure** — can a reader find one part without reading all of it? Do headings describe or merely label? Is nesting real?
4. **Honesty of the whole** — do true sentences add up to a true impression? Are limitations where the reader meets them?
5. **Instructions**, where present — imperative mood, prerequisites first, warnings before their step, no alarm inflation, success stated.
**Expect most fitness findings to be `[NEEDS YOU]`.** "The audience is never named" and "this omits the prerequisite" cannot be auto-fixed — the missing thing is information you do not have. That is a property of the altitude, not a defect in the pass. Never fabricate the missing content.
Report fitness findings even when they have no span. A missing section has no line number; anchor it to the nearest heading and say what is absent. This is the **one exception** to the quote-the-span rule below, and it applies to absence only — never to a vague impression.
---
## Resolving overlap between the passes
The three catalogs collide in a few places. Assign each finding to exactly one pass so nothing is reported twice:
| Finding | Owner | Why |
|---------|-------|-----|
| "utilize" → "use", "facilitate" → "help" | `eos` (fancy words) | A plain-word substitution, not a tell |
| "seamless", "cutting-edge" | `ai-eos` (promotional register) | Marketing register, not verbosity |
| "robust", "delve", "underscore" — single words | `ai-eos` (era vocabulary, **whiff**) | Only counts when three or more cluster |
| Title Case headings, skipped levels, `---` before a heading | `ai-eos` (formatting tells) | Deviation from the file's own pattern |
| Label-only headings, wrong nesting depth, unnavigable structure | `[fitness]` | A structure defect, not a register one |
| "it is important to note that" | `eos` (needless words) | Deletable filler with no AI signature |
| "highlighting its importance in..." | `ai-eos` (participle padding) | The signature construction |
| "absolutely essential", "completely unique" | `eos` (do not overstate) | Intensifier misuse |
| "stands as a testament to" | `ai-eos` (unearned significance) | Inflation of a mundane fact |
| Three near-synonym adjectives | `ai-eos` (rule-of-three padding) | Cadence padding |
| Passive voice, weak endings, parallelism | `eos` | No AI-tell equivalent |
| Conciseness, correctness, sentence-level clarity | `eos` | `technical-communication` names these measures but defers to `writing.md` for them |
| Overstated *register* ("powerful", "seamless") | `ai-eos` | Tone inflation |
| Misleading or missing *content* | `[fitness]` (honesty, comprehensiveness) | A content defect, not a word choice |
| Prerequisites, missing sections | `[fitness]` | No sentence-level equivalent |
| Audience mismatch, undefined purpose | `[fitness]` | Only this pass asks the question |
The honesty split is the one worth getting right: **`ai-eos` owns register, `[fitness]` owns content.** "A powerful, seamless solution" is a tells finding. "Claims 40% faster without saying faster than what" is a fitness finding. When a span genuinely violates two passes, report it once under the more severe and note the other rule on the same line. Never list one span twice.
---
## Step 5: Report All Three, Ranked TogetherFrom pmvanev/phil-claude-plugin, MIT.
More from pmvanev/phil-claude-plugin
- 0.570score
issue-board
pmvanev
Use when driving a GitLab or GitHub issue tracker or board from the command line with `glab` or `gh` — moving a card between board columns, reordering a…
SkillAFreshness: AClaude Code +9 - 0.570score
board-setup
pmvanev
Use when recording a repo's issue-board constants in its `CLAUDE.md` — the forge and repo, the project and Status field ids, every option id, the enabled…
SkillAFreshness: AClaude Code +9 - 0.570score
board-snapshot
pmvanev
Use when asked where an issue board stands right now rather than what is wrong with it — "summarise my board", "what's on the board", "where does the board…
SkillAFreshness: AClaude Code +9 - 0.570score
nwave-slice-status
pmvanev
Use when the user asks where an nWave feature stands — "how many steps are in this slice", "which ones are done", "which one are we on", "what's next", "is…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-wave-summary
pmvanev
Use when asked what finished work decided, rather than where it stands or what you were doing — "what did DISCUSS decide", "what did that stage settle"…
SkillAFreshness: AClaude Code +9 - 0.566score
groom-issues
pmvanev
Skill bundle for the phil:groom-issues, phil:groom-fix, phil:groom-set and phil:groom-ask commands — reads a whole issue board in one list call per forge —…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-issue-board
pmvanev
Use for any GitLab or GitHub board or tracker work in an nWave repo — one holding `.nwave/` or `docs/feature/` — including putting a feature on the tracker as…
SkillAFreshness: AClaude Code +9 - 0.565score
edd
pmvanev
Skill bundle for phil:edd command — Expectation-Driven Development front-door.
SkillAFreshness: AClaude Code +9 - 0.565score
adversarial-review
pmvanev
Skill bundle for phil:adversarial-review command — a general-purpose independent adversarial critic.
SkillAFreshness: AClaude Code +9 - 0.561score
ai-eos
pmvanev
Skill bundle for phil:ai-eos command — detects the stylistic tells that mark technical prose as AI-generated, with a density verdict and ranked findings.
SkillAFreshness: AClaude Code +9 - 0.561score
redesign-tests
pmvanev
Skill bundle for phil:redesign-tests command — human-approved, behaviour-changing test redesign loop with a coverage-equivalence claim per rewrite
SkillAFreshness: AClaude Code +9 - 0.561score
refactor-loop
pmvanev
Skill bundle for phil:refactor-loop command — gated closed-loop refactoring with a separate proposer and correctness critic, hard test gates, and a DAG ledger
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 10
- Last commit (this folder)
- Oct 13, 2026 (15 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/pmvanev/phil-claude-plugin
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from pmvanev
- 0.570score
nwave-slice-status
pmvanev
Use when the user asks where an nWave feature stands — "how many steps are in this slice", "which ones are done", "which one are we on", "what's next", "is…
SkillAFreshness: AClaude Code +9 - 0.570score
board-snapshot
pmvanev
Use when asked where an issue board stands right now rather than what is wrong with it — "summarise my board", "what's on the board", "where does the board…
SkillAFreshness: AClaude Code +9 - 0.570score
board-setup
pmvanev
Use when recording a repo's issue-board constants in its `CLAUDE.md` — the forge and repo, the project and Status field ids, every option id, the enabled…
SkillAFreshness: AClaude Code +9 - 0.570score
issue-board
pmvanev
Use when driving a GitLab or GitHub issue tracker or board from the command line with `glab` or `gh` — moving a card between board columns, reordering a…
SkillAFreshness: AClaude Code +9 - 0.566score
groom-issues
pmvanev
Skill bundle for the phil:groom-issues, phil:groom-fix, phil:groom-set and phil:groom-ask commands — reads a whole issue board in one list call per forge —…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-issue-board
pmvanev
Use for any GitLab or GitHub board or tracker work in an nWave repo — one holding `.nwave/` or `docs/feature/` — including putting a feature on the tracker as…
SkillAFreshness: AClaude Code +9
Cite this page
red-team-prose skill. Agent Mart. https://agentmart.dev/skills/pmvanev-red-team-prose (last updated 2026-10-24)