An agent skill for writing that says what matters and still sounds like the writer. It helps choose the point before drafting, preserves meaning during edits, and removes unnecessary material without stripping warmth, explanation, or personality.
Use it for replies, updates, essays, teaching, and spoken answers. It supports the Agent Skills SKILL.md format used by Codex and other compatible agents. A skill supplies editorial guidance; it does not replace the writer's judgment or guarantee a voice match.
Answer this in one sentence, keeping the caveat.
Shorten this note. Keep the apology and the invitation.
Fix only the punctuation. Keep my words and order.
Draft an explanation from these facts for a beginner. Use a labeled hypothetical example.
Review this without rewriting it. Tell me which parts bury the point.
The core skill handles short work on its own. Longer work loads only the relevant reference. It selects before drafting and reviews afterward; it does not impose a checklist, a short word count, or an executive-summary structure on every piece.
Clone this repository and run:
./scripts/install.shThe installer links the canonical checkout into the user skill roots for Codex and Hermes. If OpenClaw already exists, it also links its global root and discovered agent Codex homes. It does not install OpenClaw. For other agents, link or copy the repository into the supported skill directory as your-voice.
Set the default once in the agent's shared instructions:
For human-facing prose, apply Your Voice by default. Use its instructions as
one writing policy; do not stack or restate generic prose-cleanup rules.
For a linked installation, pulling updates in the canonical checkout updates the skill. Check supported host links with:
python3 scripts/check_install.py| File | Responsibility |
|---|---|
| SKILL.md | Editorial priorities, narrow task selection, and reference routing |
| Writing workflows | Generate, preserve, condense, review, and technical prose |
| Patterns | Optional symptom checklist; intentional matches can stay |
| Human expression | Spoken delivery and rehearsal |
| Voice profile template | Evidence-based personalization |
| Paras profile | Paras's baseline; specialist course choices load separately |
| Approval learning | Accepted and rejected decisions, with rules for promotion |
| Evaluation | Behavioral comparisons and calibrated judge evaluation |
| Discovery | Public-source review and adoption |
A recurring role can define the job, reader, output shape, must-keep content, and exclusions. For example: “Team handoff: work, owner, date, blocker, next action; leave out retrospective diagnosis.” Use that exclusion for the handoff, not for a later request to explain the decision. See writing briefs.
Copy the profile template to a private location and point your agent to it. Start with a few approved samples in the channels you use. Record what the writer notices, how they address different people, which edits they reject, and which rough edges should survive. Leave traits unknown when evidence is missing.
Keep private emails, messages, customer details, and internal drafts outside this public repository. The approval learning loop explains how feedback becomes a contextual or durable preference. Engagement statistics alone do not define voice.
Optional private rejection lists use this format. The template's examples are commented out until the writer chooses them:
mkdir -p ~/.config/your-voice
cp assets/forbidden-patterns.md ~/.config/your-voice/forbidden.mdpython3 scripts/audit_text.py draft.md
python3 scripts/audit_text.py guide.md --mode technical
python3 scripts/audit_text.py answer.md --mode spokenAdd --json for structured findings. Exit status 1 means there are candidates to review, not that the draft failed. The auditor cannot judge truth, taste, social fit, or whether a detail earns its space. It masks common code, URL, and table forms; quotations and other protected spans still need editorial care. Do not edit toward zero findings.
Technical mode uses general clarity principles inspired by ASD-STE100; it does not certify compliance. Spoken mode flags long sentences and written-only transitions; actual delivery needs rehearsal.
python3 -m unittest discover -s tests -v
python3 scripts/validate_evals.py evals/benchmark.json
python3 scripts/score_judges.py evals/labels.example.jsonl --split testThe September 22 review records the repo audit and a five-case independent writing comparison, including its limits. The Stanley follow-up records external feedback, revisions, and targeted preservation checks.
The 96-draft concision stress test reports modest length changes, blinded comparisons, and an observed uncertainty failure.
Unit tests validate tools, and the benchmark validator checks case structure. Neither proves better writing. Evaluation describes isolated baseline/treatment runs, blind review, human holdouts, and reporting limits. The synthetic judge-label file checks format, not production calibration.
An optional live Codex harness is configured in .plugin-eval/benchmark.json:
plugin-eval benchmark . --config .plugin-eval/benchmark.jsonReview its model and scenarios before running it. Deterministic output checks cover selected boundaries and facts; human meaning and voice judgments remain separate.
The scheduled discovery workflow creates a review queue, never automatic rule adoption. See ATTRIBUTIONS.md for sources and influence boundaries, and LICENSE for the MIT license.
The evaluation audit explains why the stress test cannot establish a 2× concision claim and defines a provisional, meaning-preserving target for a future held-out test.
The two-stage rerun tested two revisions across 180 comparison drafts. The released revision was 13.1% shorter than the prior skill on narrow questions, but did not meet the 2× target; the report retains fidelity flags and reproducible artifacts.
The September source refresh vets role-specific writing briefs and records seven upstream revisions. Its targeted comparison found no new regressions across 60 drafts; all three conditions passed, so no incremental quality gain is claimed.