Skip to content
Agentmart
Submit a tool

prose-editing

Edits or audits prose that the caller supplies as text or a file, preserves its claims and voice, removes machine-writing patterns, and verifies the result…

Skill by redhat-developer

IndexedApache-2.0★ 18
Write a review

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/redhat-developer-prose-editing

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.

We use your email only for this newsletter. Privacy

About

Edits or audits prose that the caller supplies as text or a file, preserves its claims and voice, removes machine-writing patterns, and verifies the result with the bundled linter. Use for explicit requests such as "rewrite this draft", "edit this existing PR body", "make this sound human", or "audit this prose without changing it". It does not review code, decide what a pull request or Jira issue should say, or compose from a blank sheet.

Use cases: spreadsheets, security, writing

No 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 and code. Checked Oct 26, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/prose-editing

What's inside

Skill name
prose-editing
Description
Edits or audits prose that the caller supplies as text or a file, preserves its claims and voice, removes machine-writing patterns, and verifies the result with the bundled linter. Use for explicit requests such as "rewrite this draft", "edit this existing PR body", "make this sound human", or "audit this prose without changing it". It does not review code, decide what a pull request or Jira issue should say, or compose from a blank sheet.
License
Apache-2.0
Compatibility
Python 3.9+; the bundled linter is stdlib-only
Instructions
206 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (7)

  • SKILL.md
  • openai.yaml · agents/
  • compression.md · references/
  • mechanical.md · references/
  • voice.md · references/
  • NOTICE · scripts/
  • lint.py · scripts/

SKILL.md (first lines)

# Prose editing

Edit an existing draft without changing what it claims. The caller supplies
the prose and, when it knows, the register. Return only the prose when another
skill invokes this one.

## Choose the operation

Explicit edit intent wins. A request to rewrite, tighten, or humanize remains
an edit even when it also asks for findings or a score.

Use `audit` only when the caller explicitly asks for no changes, an audit, or
findings without a rewrite. Text written by somebody else is not automatically
read-only. Protect quoted third-party passages, but offer or make a requested
rewrite of the surrounding draft.

## Choose the primary register

A caller-provided register wins. Otherwise, use the document's primary purpose:

| Register | Primary purpose | Loaded references |
|---|---|---|
| `strict` | procedure, runbook, safety text, operator-facing error | [mechanical](references/mechanical.md) and all of [compression](references/compression.md) |
| `flavored` | README, technical docs, PR or MR body, Jira prose, code comment | [mechanical](references/mechanical.md) and the shared part of [compression](references/compression.md) |
| `voiced` | announcement, community message, blog post, personal prose | [mechanical](references/mechanical.md) and [voice](references/voice.md) |
| `audit` | explicit no-change inspection | all three references; recommendations follow the document's primary purpose |

Purpose outranks a byline. A technical README with an author's name remains
`flavored`. When the purpose is genuinely ambiguous and choosing wrong would
materially change the rewrite, ask one focused question. Otherwise use
`voiced`, which makes the least structural change.

Use one numeric primary score. Do not invent a register map. In a mixed
document, keep its primary register and manually apply `strict` rules to
procedural and safety sections. This local override does not produce a second
score.

If the user supplies a sample of their own writing, read it before the draft.
Its stable sentence rhythm, vocabulary, punctuation, transitions, and quirks
govern `voiced` edits. A sample can justify em dashes, curly quotes, repeated
openings, or other deliberate habits that are weak evidence by themselves.

## Prepare a safe working copy

Never write beside this installed skill. Create a unique directory with the
system temporary-directory API. Keep these paths inside it:

- `source.md`: an unchanged snapshot used for the meaning check.
- `rewrite.md`: the only bytes scored before and after; edit this file.
- `before.json`: the baseline report for that exact normalized `rewrite.md`
  path.
- `voice.md`: an unchanged snapshot of a supplied writing sample, when present.

For pasted text, write the supplied bytes to `source.md`, then copy it to
`rewrite.md`. For a user file, copy the file to both paths and do not touch the
original until the rewrite passes every guard. Use process argument arrays
where the host supports them. If a shell is unavoidable, quote every path,
including the trusted skill directory and all temporary paths. Never paste a
user-controlled path into an unquoted command.

When the user supplies a writing sample, copy its exact bytes to `voice.md` and
pass `--voice-sample "<unique-temp-dir>/voice.md"` on both linter runs. Omit the
option on both runs when there is no sample. A different or changed sample makes
the baseline incompatible.

Resolve `scripts/lint.py` relative to this `SKILL.md`. The equivalent shell
shape without a writing sample is:

```bash
python "<skill-dir>/scripts/lint.py" --json --register <register> \
  "<unique-temp-dir>/rewrite.md" > "<unique-temp-dir>/before.json"
```

When a sample exists, insert
`--voice-sample "<unique-temp-dir>/voice.md"` after the register argument.

Use the host's UTF-8 file APIs or redirection in the temporary directory. Do
not use a fixed `before.json`. Delete the unique directory after delivery.

## Edit loop

Skip to [Audit](#audit) for `audit`. For an edit:

1. Load the references named by the register. Read every rule that applies.
2. Score `rewrite.md` and save the complete JSON as `before.json`.
3. Read all `violations`, `samples`, `markers`, and manual checks. A zero score
   does not clear a marker or a rule that needs judgment.
4. Build a private source inventory. Record every proposition, condition,
   exception, scope qualifier, modal force, name, number, version, date, quote,
   citation, identifier, and safety consequence.
5. Rewrite `rewrite.md`. Change the smallest useful span, except when several
   patterns cluster in one paragraph; then rewrite that paragraph around its
   concrete point.
6. Score the same normalized `rewrite.md` path against `before.json`:

   ```bash
   python "<skill-dir>/scripts/lint.py" --json --register <register> \
     --baseline "<unique-temp-dir>/before.json" \
     "<unique-temp-dir>/rewrite.md"
   ```

   When the baseline used a writing sample, insert the same
   `--voice-sample "<unique-temp-dir>/voice.md"` argument after the register.

   A baseline metadata or path mismatch is a failed verification, not a score.
   Correct the invocation and rerun it. Never reuse a report from another
   register, quote policy, file, or linter score version.
7. Make at most one more rewrite-and-score pass.
8. Compare `source.md` with `rewrite.md` in both directions. Every source
   proposition and qualifier must survive, and every output proposition must
   come from the source or an explicit user instruction. Preserve `must`,
   `should`, `may`, `can`, uncertainty, negation, and exceptions unless the
   source itself licenses the change.
9. Run the manual checklist and an adversarial final read. Ask: "What still
   sounds generated?", "What fact or limit disappeared?", and "What did this
   rewrite add?" Repair any defect those questions expose.
10. Only now copy the final prose to the requested destination. For a user
    file, replace its prose while preserving protected spans. For pasted text,
    return the rewrite.

From redhat-developer/rhdh-skills, Apache-2.0.

More from redhat-developer/rhdh-skills

Signals

Stars
18
Forks
40
Open issues
1
Last commit (this folder)
Aug 17, 2026 (2 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from redhat-developer

Cite this page

prose-editing skill. Agent Mart. https://agentmart.dev/skills/redhat-developer-prose-editing (last updated 2026-10-24)