technical-writing
The house standard for every sentence a person reads.
Skill by michielvandermeer
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/michielvandermeer-technical-writing
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, writing
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 and code. 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/technical-writing
What's inside
- Skill name
technical-writing- Description
- The house standard for every sentence a person reads. Use when writing a document, report, review, or interview round a person will read, or when another skill needs the writing bar.
- License
- MIT
- Instructions
- 86 lines in SKILL.md · view on GitHub
Files (3)
- SKILL.md
- TYPES.md
- UNSLOP.md
SKILL.md (first lines)
# Technical writing
Every sentence a skill puts in front of a person is written for a developer new to this codebase, so they understand it on the first read. They know software. They do not know this repo, and they cannot look up a word that exists only inside a skill. The one other reader is the **Product reader** of a Tracker document, below.
This binds wording. A grilling session asks the same questions at the same depth, and a review reports the same findings. Only the sentences change.
Three rules sit above the rest:
- **Cut every word that does no work.** If the sentence survives without a word, the word goes.
- **Use the short, everyday word.** "Use", not "utilize" or "leverage". "Help", not "facilitate". "If", not "in the event that". A long word has to buy its length with precision.
- **Clarity outranks brevity.** A sentence that needs a second sentence to land gets one. Cutting words until a claim turns ambiguous fails this bar. When a rule makes a sentence worse, fix the sentence another way or leave it alone.
The test on any sentence: can the reader read it once and act?
## Before the first sentence
1. Read [UNSLOP.md](UNSLOP.md), the catalogue of AI tells. Every text a person reads in this session is checked against each of its patterns before they read it. A text written to a file also gets a search for `—`, `–`, and `;`, and every match outside code is rewritten.
2. Writing a document no template shapes, such as a README, a page under `docs/`, or a research file? Read [TYPES.md](TYPES.md) and pick the document's one type.
Done: `UNSLOP.md` is read, and a free-form document has its type.
## Vocabulary
**The project's own terms**, whatever `CONTEXT.md` defines, are used bare. That file is the reader's dictionary, and `/domain-modeling` keeps it current as terms settle. The codebase is the word list too: write the real symbol, file, flag, or command name, not a synonym or a description of it.
**A skill's own terms** get a **Gloss** the first time they appear in a session: the plain words in parentheses, once, and then the term stands alone. *"The frontier (the questions I can ask now) is empty."*
**A definition site**, text whose job is to fix the meaning of a term, spends whatever words precision needs. A `CONTEXT.md` entry, a glossary heading, an ADR passage that coins a name. Careful words paid once are what make the shorthand safe to use everywhere else.
Coin nothing else. Use the words a developer would say out loud: "move", "delete", "a limit that only goes down", not "evacuate", "ratchet", or "endgame".
## Documents outlive the session
A document travels. An Issue is shared well beyond the session that wrote it, and a Spec is read cold weeks later by someone who was never in that session. That reader cannot ask what a word meant.
So a durable document spends the plain words rather than a **Gloss**: *"what we do not know yet"*, not *"fog"*. Where a template fixes a section name, keep the name and gloss it once underneath.
A document in the Tracker, an Issue, a Map, or a Spec, is also read by the **Product reader**: someone who knows the product but not its code, such as a QA tester. The part that says what is wrong and what changes is theirs. It names only what that reader meets on the product (screens, controls, commands they type, messages) and terms `CONTEXT.md` defines. Files, functions, classes, and internal parts belong to the technical part, which keeps the developer reader. Those sections are a Spec's Problem Statement, Solution, How to Check It, and User Stories, a `needs-` Issue's Motivation and Goal, and a Map's Destination.
## Sentences
- Talk to the reader as "you", in the present tense. Use "will" only for what really happens later.
- Name the actor: "the compiler checks", not "is checked". Passive only when the actor is unknown or beside the point.
- Write an instruction as a command, one per sentence: "Run `npm test`." Put the condition or warning before it: "To delete the document, click Delete."
- One thought per sentence. Split an instruction past about 20 words and any other sentence past about 25.
- Put the common case first and exceptions after.
- Keep "the" and "a", and the small words that show structure, such as "that" in "check that the switch is off".
- Keep "only" and "not" next to the word they change: "fails only on growth".
- Make every "it", "they", and "this" point at one obvious thing, and repeat the noun when in doubt. "This" and "which" never point at a whole clause.
- Give each verb its own clause: "Phase 1 moves the converters and Phase 2 moves the runtime."
- Break up long noun strings: "the script that checks the import budget", not "the import budget check script".
- Call each thing by one name everywhere, and give each word one meaning.
- Make text in parentheses a full sentence. A **Gloss** is the one exception. Write "a, b, or both", not "a/b" or "and/or", and never form a plural with "(s)".
- Where a dash or a semicolon would go, end the sentence or use a comma: text a person reads carries no em dash, en dash, or semicolon. A colon only introduces a list, an example, or a block, or follows a label a template fixes.
- Skip idioms, Latin abbreviations, and "simply", "easy", or "quickly" in a procedure.
- Write real paths. Make every count true at the commit that lands it.
Formatting:
- Headings carry the point, not just the topic ("Pick the type first", not "Types"), in sentence case. One h1 per page, and no skipped levels.
- Numbered lists for sequences, bullets for everything else. Introduce a list with a complete sentence and keep its items parallel.
- Code, paths, and commands go in code font. UI elements go in bold. Use serial commas. Say up front that a list is partial rather than ending it with "etc.".
## Rhythm
A text can obey every rule and still read as machine-written: every sentence clipped short, no view anywhere, nothing specific.
- Mix sentence lengths on purpose. A short sentence lands a point. A longer one carries a fact with its condition or consequence.
- Have a view where the text allows it. When weighing trade-offs, say what you make of them instead of listing pros and cons. Reference stays dry.
- Be specific: not "schema changes can cause issues" but "a column rename fails the build".
## Where the bar stops
Text written for a sub-agent stays as it is: a sub-agent prompt, a handoff. Agents do not tire, and a document read only by one carries no reader to protect. Product UI strings follow the product's own copy guidelines.
## Worked example
Before:
> Configuration of the import budget script parameters is performed via budget.json. Note that it's important to remember that running with --write, which updates the committed budget to reflect the current count, should only be done when lowering it. If exceeded, CI fails.
After:
> `budget.mjs` reads the committed budget from `budget.json` and counts the files that import protos. If the count exceeds the budget, CI fails. Run `budget.mjs --write` only to lower the budget.From michielvandermeer/skills, MIT.
More from michielvandermeer/skills
- 0.628score
implement
michielvandermeer
Implement a spec by slicing it into steps, then a loop of implement, review, and verify, each in its own sub-agent.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
verify
michielvandermeer
Drive this checkout's skills the way a user does — load the working tree as the plugin in a headless Claude Code session inside a scratch repo, type the slash…
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
hillclimb
michielvandermeer
Hillclimb one measured number — test-suite time, build time, memory, bundle size — keeping only the changes that measurably help.
SkillAFreshness: A★ 9Claude Code +9 - 0.627score
pr
michielvandermeer
Pull request descriptions.
SkillAFreshness: A★ 9Claude Code +9 - 0.625score
setup
michielvandermeer
Set up or update the repo's Tracker ref, where its Issues live; its Verify skill, which drives the app the way a user does; or its Models ref, the model and…
SkillAFreshness: A★ 9Claude Code +9 - 0.625score
doctor
michielvandermeer
Moves documents into this project's canonical layout, closes local Issues the code already implements, and brings every ADR to state the decision in force.
SkillAFreshness: A★ 9Claude Code +9 - 0.625score
explain
michielvandermeer
Explain anything as a written walkthrough, a diagram in the chat, an HTML page, or a narrated video, picking the format that fits.
SkillAFreshness: A★ 9Claude Code +9 - 0.625score
retro
michielvandermeer
Look at a finished session, apply high-priority changes this repository owns, file the structural ones as Issues, and summarise the rest.
SkillAFreshness: A★ 9Claude Code +9 - 0.622score
learn-habits
michielvandermeer
Rebuild a person's Grilling profile from the Habits in their past grilling sessions.
SkillAFreshness: A★ 9Claude Code +9 - 0.622score
brainstorm
michielvandermeer
Explore a vague problem as very different Directions, side by side, and file the ones you keep as Issues.
SkillAFreshness: A★ 9Claude Code +9 - 0.622score
triage
michielvandermeer
Sort incoming reports into Specs and parked Issues — one Issue per distinct problem.
SkillAFreshness: A★ 9Claude Code +9 - 0.620score
grill-with-docs
michielvandermeer
A relentless round-by-round interview to sharpen a plan or design, which also creates docs (ADRs and glossary) as we go.
SkillAFreshness: A★ 9Claude Code +9
Signals
- Stars
- 9
- Forks
- 0
- Open issues
- 8
- Last commit (this folder)
- Oct 16, 2026 (13 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/michielvandermeer/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from michielvandermeer
- 0.628score
hillclimb
michielvandermeer
Hillclimb one measured number — test-suite time, build time, memory, bundle size — keeping only the changes that measurably help.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
verify
michielvandermeer
Drive this checkout's skills the way a user does — load the working tree as the plugin in a headless Claude Code session inside a scratch repo, type the slash…
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
implement
michielvandermeer
Implement a spec by slicing it into steps, then a loop of implement, review, and verify, each in its own sub-agent.
SkillAFreshness: A★ 9Claude Code +9 - 0.627score
pr
michielvandermeer
Pull request descriptions.
SkillAFreshness: A★ 9Claude Code +9 - 0.625score
explain
michielvandermeer
Explain anything as a written walkthrough, a diagram in the chat, an HTML page, or a narrated video, picking the format that fits.
SkillAFreshness: A★ 9Claude Code +9 - 0.625score
doctor
michielvandermeer
Moves documents into this project's canonical layout, closes local Issues the code already implements, and brings every ADR to state the decision in force.
SkillAFreshness: A★ 9Claude Code +9
Cite this page
technical-writing skill. Agent Mart. https://agentmart.dev/skills/michielvandermeer-technical-writing (last updated 2026-10-24)