An agent skill for making public project prose less generic or AI-sounding without treating a blacklist or detector score as a style guide. It protects the facts, limits, commands, and project voice that open source depends on—and turns PR or issue verification requests into reproducible review evidence. Runs on Claude Code and Codex.
For PR and issue follow-ups
When a reviewer asks for a trace, benchmark, or before/after comparison, use the skill to produce an evidence response with:
- the exact base and head commits;
- the same test or translation path, fixture, and configuration for both states;
- raw output before interpretation; and
- the environment, comparison rule, covered scope, excluded cases, and final-head CI status.
The skill does not invent test output or prove a patch correct. It helps turn the evidence available in the repository into a response a reviewer can reproduce.
Quick start
The skill directory follows the Agent Skills format, so the same files work in Claude Code and Codex.
Install with Claude Code
Add this repository as a plugin marketplace, then install the plugin:
/plugin marketplace add ting-hong-shieh/polish-open-source-prose
/plugin install polish-open-source-prose
To install the skill without the plugin system, copy the directory instead:
git clone https://github.com/ting-hong-shieh/polish-open-source-prose.git
cp -r polish-open-source-prose/skills/polish-open-source-prose ~/.claude/skills/
Use .claude/skills/ in a project instead of ~/.claude/skills/ to scope the skill to
that repository.
Install with Codex
Invoke $skill-installer and ask:
Install the
polish-open-source-proseskill from this repository'sskills/polish-open-source-prosedirectory:https://github.com/ting-hong-shieh/polish-open-source-prose/tree/main/skills/polish-open-source-prose
You can also use the skill folder directly during local development:
skills/polish-open-source-prose
Invoke the skill
Claude Code loads the skill automatically when a request matches its description. To invoke it directly:
/polish-open-source-prose
In Codex:
$polish-open-source-prose
Try one of these requests:
Audit this README and propose only evidence-backed edits.
Localize these release notes for zh-Hant-TW without changing product behavior.
Review this PR description for unsupported claims and lost qualifications.
Before and after
These examples come from the current forward-case corpus. They show both kinds of decisions the skill makes: replacing vague prose with a verified behavior, and leaving clear technical text unchanged.
Replace promotion with behavior
Surface: README · Mode: rewrite
Before:
PolyglotGuard is a powerful, next-generation solution that seamlessly protects your multilingual codebase across today's rapidly evolving ecosystem.
After:
PolyglotGuard checks pull requests for translated strings that alter commands, links, or placeholders.
Why: The revision removes unsupported promotion and keeps the observable check.
Remove hype without changing behavior in zh-Hant-TW
Surface: README · Locale: zh-Hant-TW · Mode: rewrite
Before:
PolyglotGuard 是一款革命性的工具,全面賦能開發團隊,讓每個 pull request 都更有品質。它會檢查翻譯是否改動命令、連結或預留位置。
After:
PolyglotGuard 會在 pull request 中檢查翻譯是否改動命令、連結或預留位置。
Why: The Taiwan-locale case keeps the product name, command-related terms, and behavior while removing generic claims; it does not translate technical identifiers mechanically.
Keep clear technical prose unchanged
Surface: README · Mode: keep
Before:
The checker reads
.polyglotguard.yml, then groups files by locale. Without a config file it falls back to built-in rules but does not create one automatically.
After:
The checker reads
.polyglotguard.yml, then groups files by locale. Without a config file it falls back to built-in rules but does not create one automatically.
Why: The paragraph names the configuration file, processing order, fallback, and negative guarantee. Rewriting it would risk losing a constraint without adding clarity.
These corpus examples are expected outputs, not claims that the skill will produce the same wording for every repository. Real-world results depend on the source code, tests, project terminology, and document surface. See RocketPy #1141, RocketPy #1122, RocketPy #816, and Switchyard #428 for public case studies that require that project context.
Real-world collaboration case studies
The corpus examples above are stable regression specifications. These case studies show a different part of the skill: helping a contributor communicate with maintainers and reviewers using the facts of a real project.
Respond to a request with a reproducible before/after snapshot
Sources: Switchyard PR #389 and PR #397
Before: In each PR, a maintainer asked for an output or trace snapshot before and after the change so the behavior would be easier and faster to review.
After: The contributor posted #389's snapshot 29 minutes 46 seconds later and #397's snapshot 9 minutes 59 seconds later. Each response names the base and head commits, states the in-process path exercised, rules out a provider call, and shows the raw JSON before interpretation.
Observed outcome: #389 merged 21 hours 12 minutes after its snapshot (25 hours 37 minutes after the PR opened). #397 was still awaiting review when this case study was recorded, so it is not presented as merge-speed evidence.
Collaboration value: The reviewer can reproduce the requested comparison without deriving behavior from a prose summary.
Turn a broad feature request into a reviewable first step
Source: RocketPy issue #816 and PR #1144
Before: The request was to add tube fins similar to OpenRocket.
After: The contribution proposal defined the first slice: a TubeFins surface,
the supported geometry, a Ribner-based normal-force slope, a 20-degree angle-of-attack
cap, and a fixed quarter-chord center of pressure for Mach <= 0.5. It also listed
Mach-dependent center of pressure, component drag, cant, overlapping tubes, and yaw
behavior as deferred work.
Collaboration value: Maintainers can review a bounded implementation plan without having to infer which parts of the upstream model are being promised.
Answer a reviewer with evidence and a version boundary
Source: RocketPy PR #1122 comment
Before: A simple “the PR should proceed” would have implied that the latest head had been tested.
After: The response named the verified commit (9cc93a1), stated the behavior that
was checked, noted that the current head (fce9756) was not covered by that local
verification, and called out the failing Documentation check before merge.
Collaboration value: The reviewer gets a useful recommendation without an unsupported claim about the current branch.
Describe a security fix without exposing real credentials
Source: Switchyard PR #428
Before: The change needed a PR description that gave reviewers enough context about the source of the client-visible error and the verification boundary.
After: The description explains that transport and timeout source strings could
include a credential-bearing upstream URL, states which HTTP classifications remain
unchanged, and records regression tests using CANARY_ADMIN_QUERY_KEY only. It also
states that no provider endpoint or real credential was used.
Collaboration value: Reviewers can assess root cause, compatibility, and test coverage without asking the contributor to disclose sensitive data.
These historical examples are context-dependent case studies, not guaranteed output strings. The Switchyard snapshots predate the first public revision of this skill; they show the collaboration outcome that the current reviewer-follow-up guidance now specifies, not a claim that the skill generated them. Review and merge timestamps also depend on reviewer availability, CI, patch scope, and project policy. They should inform future forward cases while the corpus remains the deterministic test surface.
How it works
- Establish the source of truth. Inspect code, tests, configuration, and project terminology before trusting promotional copy.
- Protect semantic constraints. Lock facts, qualifications, identifiers, quotations, legal text, commands, links, and markup.
- Diagnose concrete costs. Revise vagueness, unsupported claims, missing actors, broken logic, repeated canned structures, and surface or locale mismatches.
- Run a semantic diff. Compare subjects, numbers, versions, conditions, negation, attribution, causality, and ordered steps before delivery.
The skill leaves clear, specific, voice-appropriate prose alone. Passive voice, parallel lists, fragments, questions, dashes, and polished sentences are not automatic defects.
What it protects
| Area | Examples |
|---|---|
| Meaning | Subjects, scope, comparisons, conditions, exceptions, uncertainty |
| Evidence | Numbers, dates, versions, attribution, causal claims |
| Technical text | Commands, flags, APIs, identifiers, paths, URLs, error strings |
| Quoted and governed text | Quotations, citations, licenses, policies, security steps |
| Structure | Headings, anchors, tables, lists, code fences, placeholders, frontmatter |
| Voice | Deliberate humor, community terms, register, and first-person stance |
Locale support
| Locale | Status | Coverage |
|---|---|---|
| English | Core guidance | Open-source editorial signals and surface rules |
| Chinese | Core guidance | Chinese editing signals and semantic safeguards |
zh-Hant-TW |
Dedicated locale pack | Taiwan terminology, punctuation, register, and forward cases |
| Other locales | Foundation only | Shared fidelity workflow; native pack and review still required |
The locale pack contract defines the evidence, terminology, false-positive, surface, and test requirements for adding a language-and-region target. It is also designed to become a policy layer for a future PolyglotGuard checker.
Boundaries
This project does not:
- determine whether a human or model wrote a passage;
- optimize prose to evade an AI detector;
- promise removal of a statistical watermark;
- invent metrics, product behavior, user stories, opinions, or personal experience;
- claim native support for a locale without a reviewed locale pack;
- replace legal, security, or domain review.
For authorship provenance, the skill recommends a signed canonical artifact rather than treating writing style or a statistical watermark as proof of identity.
Validation
Run all repository checks:
python3 scripts/validate_repo.py
Run the skill checks directly:
python3 skills/polish-open-source-prose/scripts/validate_skill.py
The current corpus contains 43 forward specifications: 17 cases that should remain unchanged and 26 that should be revised or answered with provenance guidance. Structural checks catch protected-token drift and corpus errors; native review is still required to judge real project prose.
.
├── .claude-plugin/
│ ├── plugin.json
│ └── marketplace.json
├── .codex-plugin/plugin.json
├── docs/assets/
├── scripts/validate_repo.py
└── skills/
└── polish-open-source-prose/
├── SKILL.md
├── agents/openai.yaml
├── references/
├── scripts/
└── tests/
Each host reads its own manifest directory and the shared skills/ tree, so adding an
agent platform does not fork the editorial content.
Repository documentation stays outside the skill directory so it is not loaded as agent instructions.
Contributing
Read CONTRIBUTING.md before proposing a broad editorial rule or new locale. Particularly useful contributions include:
- false-positive reports;
- missing semantic safeguards;
- contextual regional terminology;
- examples that can be redistributed;
- balanced change/keep forward cases;
- native review of locale packs.
License and acknowledgments
Original contributions are licensed under Apache-2.0. Material derived from
hardikpandya/stop-slop remains under its MIT license. See
THIRD_PARTY_NOTICES.md and
LICENSE.stop-slop.
The design was informed by public work from stop-slop, speak-human-tw, Humanizer-zh-TW, humanizer-zh-tw, and Humanizer-zh-TW-Pro.
No comments yet
Be the first to share your take.