Writer
rileyhilliard/claude-essentials
Writing style and tone guide for human-sounding content. An agent skill from rileyhilliard/claude-essentials.
How to write prose that reads like human technical documentation rather than LLM output.
$ npx skills add pydantic/monty --skill writing-style -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pydantic/monty writing-style --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/pydantic/monty.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/writing-style .claude/skills/writing-style && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "writing-style" agent skill from https://github.com/pydantic/monty/tree/main/.agents/skills/writing-style into .claude/skills/writing-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-style", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/pydantic/monty/tree/main/.agents/skills/writing-styleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add pydantic/monty --skill writing-style -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pydantic/monty writing-style --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pydantic/monty.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/writing-style .agents/skills/writing-style && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "writing-style" agent skill from https://github.com/pydantic/monty/tree/main/.agents/skills/writing-style into .agents/skills/writing-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-style", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pydantic/monty --skill writing-style -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pydantic/monty writing-style --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pydantic/monty.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/writing-style .cursor/skills/writing-style && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "writing-style" agent skill from https://github.com/pydantic/monty/tree/main/.agents/skills/writing-style into .cursor/skills/writing-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-style", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/pydantic/monty.git --path .agents/skills/writing-style--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add pydantic/monty --skill writing-style -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pydantic/monty writing-style --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pydantic/monty.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/writing-style .gemini/skills/writing-style && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "writing-style" agent skill from https://github.com/pydantic/monty/tree/main/.agents/skills/writing-style into .gemini/skills/writing-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-style", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install pydantic/monty writing-styleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add pydantic/monty --skill writing-style -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pydantic/monty.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/writing-style .github/skills/writing-style && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "writing-style" agent skill from https://github.com/pydantic/monty/tree/main/.agents/skills/writing-style into .github/skills/writing-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-style", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pydantic/monty --skill writing-style -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pydantic/monty writing-style --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pydantic/monty.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/writing-style .opencode/skills/writing-style && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "writing-style" agent skill from https://github.com/pydantic/monty/tree/main/.agents/skills/writing-style into .opencode/skills/writing-style/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-style", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
writing-styleHow to write prose that reads like human technical documentation rather than LLM output.
Writing Style is an agent skill from pydantic/monty, published by the product's own GitHub organization. How to write prose that reads like human technical documentation rather than LLM output. Use whenever writing or editing docstrings, comments, limitations/ docs, READMEs, commit messages or PR descriptions, and when prose reads as smooth, salesy or generic.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `rewrap_md.py`).
It sits in Development, covering Technical documentation, Brand voice and tone and Pull requests. The repository describes itself as: A minimal, secure Python interpreter written in Rust for use by AI. The licence is MIT.
Read from SKILL.md and the folder at commit 5915273. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonpython3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Writing Style loads about 3.2k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 1,740 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from pydantic/monty at commit 5915273, republished under its MIT licence (© pydantic). 1,740 words, ~3,211 tokens.
.claude/skills/writing-style/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Applies to prose written in this repo: docstrings, comments, limitations/,
READMEs, commit messages, PR descriptions, and warnings like the one on
MountDir.
The reader is an engineer looking for a fact. Give them the fact. You are not persuading or building to a conclusion: say what happens, when, and what it costs.
The most common LLM tell. If a sentence would fit unchanged in any other project's docs, it carries no information.
✗ "This ensures the sandbox remains secure."
✓ "Every operation runs relative to a Dir opened at mount time, so .. and
symlinks cannot reach outside it."
✗ "Resource limits provide robust protection against runaway code."
✓ "The VM polls allocator usage every 255 instructions; crossing the
allocator's hard limit exits the worker with OOM_EXIT_CODE."
Openers that delay the sentence: "It's worth noting that", "It's important to understand", "In essence", "Simply put", "At its core", "Let's take a look at". Delete them; the sentence underneath is the content.
Building to a payoff is an essay move. Docs do not need one.
heap.rs isn't just another module — it's the foundation of the entire
safety model."heap.rs contains the unsafe code that HeapReader soundness depends
on. Changes need explicit review.""Powerful", "seamless", "robust", "elegant", "blazing fast", "significantly", "dramatically". Replace with a number, a mechanism, or nothing.
memory_usage_limit caps retained overlay data at 100 MB by default;
exceeding it raises MemoryError in the sandbox."A docstring that repeats the signature wastes the line it occupies. Say why it exists, what it costs, or where it bites.
MountTable::mount)Do not close a section by restating it, and do not announce what the next section will do.
Provenance is worth a clause only when it changes what the reader does. How the bug was found usually does not.
dataclasses.py and the client executed it during
ordinary result conversion."json.py into a read-write mount, or any module
not yet imported, and have the host's next import run it, including imports
pydantic_monty makes itself."A different failure from the tells above. Those pad out empty content; this dresses up real content, which makes it harder to spot and easier to approve.
Sentences engineered for rhythm read as conclusions, so the prose sounds like it is arguing when it is only listing facts. Balanced clauses and a stressed last syllable make a sentence sound authoritative whatever it contains, so one fact wearing three clauses gets read as three facts. Reference prose usually ends flatly, on a qualifier or a noun phrase, because the writer stopped when the information ran out rather than when the cadence resolved.
Timing for suspense. Commas and subordinate clauses arranged to delay the point.
Telling the reader how to feel. "you did not choose", "easy to miss", "without being asked", "often does". These supply a mood in place of a fact.
sys.path[0] is a directory you did not choose."sys.path[0] is the script's directory, or the cwd for python -m,
python -c and the REPL."Triples and reversals. A three-item list where one item carries the fact,
then a but clause positioned as the payoff.
The quotable closer. A generalisation at the end of a section, memorable, carrying no new fact. Delete it. The section ends at its last fact.
Symmetry for its own sake. Three-item lists where two items are real, paragraphs of matched length, every bullet opening with a bolded term. If the shape came first and the content was fitted to it, cut back to what is true.
Three checks:
Software described as objects moving through space, or as people with intentions. It is the register of a startup design review, not of reference documentation; CPython's docs use plain verbs throughout ("raises", "returns", "is stored in", "propagates", "Changed in version 3.11").
The metaphor also deletes the mechanism. "The error surfaces" does not say whether it raises, returns or logs. "Wire the tracker through" does not say parameter, field or global. "It lands in 3.14" does not say merged or released.
Motion and logistics:
| Instead of | Write |
|---|---|
| lands, landing | merged, released in 3.14 |
| ship, shipping | release |
| spin up, stand up | start, launch |
| wire up, plumb through | pass, connect |
| thread X through | pass X as a parameter |
| bubble up | propagate, or name the caller |
| surface (verb) | raise, return, report, log |
| hand back, hand off | return, transfer |
| bake in, baked into | built in, compiled in |
| punt on | defer, skip, leave to |
Structure as furniture:
| Instead of | Write |
|---|---|
| seam | interface, boundary |
| surface, surface area | API, the public functions |
| escape hatch | override, opt-out |
| knobs, dials | options, settings |
| load-bearing | required, relied on by X |
| X-shaped | with the same interface as X |
| lives in | is defined in, is stored in |
| sits on top of | wraps |
| under the hood | internally |
Code with intentions:
| Instead of | Write |
|---|---|
| the checker is happy | the check passes |
| knows about, is aware of | reads, checks, has a field for |
| talks to | sends requests to |
| teach the parser to | add X to the parser |
| wants, expects (of code) | requires |
| reaches into | accesses, reads |
Also: "for free", "just works", "out of the box", "first-class", "table stakes", "opinionated", "non-trivial", "unlock", "blast radius", "paper over".
In prose:
✗ "Errors from the worker surface to the caller."
✓ "Checkout::feed returns PoolError::Crashed when the worker exits
without a FatalError event."
✗ "The tracker is threaded through the whole VM."
✓ "Every allocation path takes &ResourceTracker as a parameter."
✗ "WorkerTransport is the NativeSession-shaped seam."
✓ "WorkerTransport has the same methods as NativeSession, so
session.ts drives either one."
Terms of art stay, even though they began as metaphors: heap, stack, pointer,
hot path, propagate, boilerplate, tombstone, sandbox escape, attack surface.
CLAUDE.md also sanctions foot-gun, happy path and single source of truth. The
test is whether a plain verb would say more than the metaphor does.
Hard-wrap markdown at 120 characters, one sentence per line where possible: each sentence starts a new line, and only a sentence longer than 120 characters wraps onto continuation lines. This keeps diffs one-sentence-sized — editing a sentence does not rewrap the paragraph around it.
Continuation lines of a list item are indented to the content column of the marker. Code blocks, tables and headings are never rewrapped; a table whose rows cannot fit 120 characters should become a list instead.
To reformat an existing file: python3 .claude/skills/writing-style/rewrap_md.py <file>...
(rewrites in place, skips fences/tables/headings/frontmatter).
| Instead of | Write |
|---|---|
| utilize, leverage | use |
| in order to | to |
| serves as, acts as, functions as | is |
| prior to, subsequent to | before, after |
| a variety of, a number of | several, or the number |
| allows you to, enables you to | you can, or the imperative |
| is responsible for handling | handles |
One term per concept. Choose the word and keep it. Alternating between
worker, child and subprocess for one thing makes the reader stop to check
whether they are the same thing. Consistency beats variety.
Noun clusters: three words at most. Longer stacks make the reader guess which noun modifies which.
Active voice and simple tenses. Use the passive only when the actor is unknown or irrelevant. Do not drop articles or verbs to save space, except in the Rust convention of a subjectless first line ("Returns the host path.").
PermissionError will have been raised by the mount."PermissionError."Em dashes should be avoided, or used very sparingly. But do not update code just to remove em dashes.
Contractions are fine. Second person for user-facing docs ("you can never see the host path"), imperative for instructions ("mount a dedicated directory"). Hedges ("generally", "typically", "may") are for genuine uncertainty; if the behaviour is defined, state it.
© pydantic, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .agents/skills/writing-style of pydantic/monty.
Open the folder on GitHubat commit 5915273
Writing Style next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Writing Style this skillpydantic/monty | 8.6k | — | ~3.2k | Automated safety check: Pass | MIT | |
| Writerrileyhilliard/claude-essentials | 130 | — | ~2k | Automated safety check: Pass | MIT | |
| Plain Writingdocwriter-org/plain-writing-skill | 462 | — | ~3.6k | Automated safety check: Pass | MIT | |
| Writing Styletimmo001/system-bridge | 356 | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| Prosestatic-web-server/static-web-server | 2.4k | — | ~971 | Automated safety check: Pass | Apache-2.0 | |
| Agent Stylepchalasani/claude-code-tools | 2k | — | ~1.4k | Automated safety check: Pass | MIT |
rileyhilliard/claude-essentials
Writing style and tone guide for human-sounding content. An agent skill from rileyhilliard/claude-essentials.
docwriter-org/plain-writing-skill
Writes and edits prose in a plain and boring style: simple everyday words, complete sentences, no dashes, no jargon, and no analogies.
timmo001/system-bridge
Write commit messages, PR and issue text and comments, docs (README), code comments, and user-facing strings (notifications, UI labels, toasts, error messages) in the project owner's voice: concise…
static-web-server/static-web-server
Author or edit any prose for the Static Web Server (SWS) project — documentation, design docs, READMEs, PR descriptions, issue bodies, commit message bodies, or other human-readable text — following…
pchalasani/claude-code-tools
Literature-backed English technical-prose writing rules (agent-style, 21 rules).
QwenLM/qwen-code
Writes a PR title file and a template-filled PR body file from the current branch diff, without pushing, commenting or creating the pull request.
pydantic/monty
Read the review comments left by the known agent reviewers on the current PR, resolve and reply.
pydantic/monty
Run and test Python code in a dedicated playground directory.
pydantic/monty
Review the current branch against its merge base for bugs, CPython divergence, sandbox escapes, resource-limit escapes, performance regressions, verbose comments and missing ./limitations/ or docs/…
pydantic/monty
Security review of the current branch against its merge base — sandbox escapes, memory errors, panics and resource-limit bypasses.
pydantic/monty
Check whether the common Python code an LLM would plausibly write still works on this branch, testing real cases in ./playground against CPython.
pydantic/monty
Fetch coverage diff from Codecov for the current branch or a specific PR.
Categories
How to write prose that reads like human technical documentation rather than LLM output. Writing Style is an agent skill from pydantic/monty, published by the product's own GitHub organization. How to write prose that reads like human technical documentation rather than LLM output.
Writing Style fits situations like: editing docstrings; limitations/ docs; commit messages; PR descriptions.
Run `npx skills add pydantic/monty --skill writing-style -a claude-code`. Or copy the skill folder (.agents/skills/writing-style in pydantic/monty) into .claude/skills/writing-style in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pydantic/monty --skill writing-style -a codex`. Or copy the skill folder (.agents/skills/writing-style in pydantic/monty) into .agents/skills/writing-style in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pydantic/monty --skill writing-style -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/writing-style, .gemini/skills/writing-style, .github/skills/writing-style and .opencode/skills/writing-style in your project.
Going by SKILL.md and its folder, Writing Style needs Python for the scripts in its folder and the command-line tools its instructions call (python and python3). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Writing Style is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Writing Style: Writer (rileyhilliard/claude-essentials, 130 stars), Plain Writing (docwriter-org/plain-writing-skill, 462 stars), Writing Style (timmo001/system-bridge, 356 stars) and Prose (static-web-server/static-web-server, 2.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
pydantic (a GitHub organization, an official publisher) maintains it in pydantic/monty, which has 8,607 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 9, 2026.
Source: pydantic/monty on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.