[!WARNING] Early and experimental (v0.13.0). This project is in active early development. The catalog, schema, skill interface, and docs may change without notice; entries are still under review; and the Composer and SDK surfaces are deliberately deferred indefinitely (see ROADMAP.md). Use it, learn from it, and expect rough edges. Not recommended for production reliance.



Quick Start

Install through the Product on Purpose marketplace, then compose. Run these inside Claude Code:

/plugin marketplace add product-on-purpose/agent-plugins
/plugin install writing-style-catalog@product-on-purpose

Already installed? Pull the latest with /plugin update writing-style-catalog. Using Claude.ai or Claude Desktop? See the installation guide for the ZIP path.

Then compose a writing instruction from any combination of axes:

/writing-style-catalog:writing-instruction-builder voice=pragmatic-architect tone=candid style=problem-solution format=adr

The writing-instruction-builder skill assembles a structured prompt prefix that you can prepend to any writing task. Mix and match entries across axes to get exactly the register, reasoning pattern, and layout you need.

Not sure which combination fits your situation? Describe it instead:

/writing-style-catalog:entry-recommender I need to tell my engineering team that a feature we committed to is getting cut this quarter, and I want them to trust the reasoning, not just accept the decision.

The entry-recommender skill scores the catalog against your description, picks a voice/tone/style/format combination with a reason quoting each entry's own language, and composes the prompt in the same step. See the usage guide for real example output.

Browse the full catalog, worked examples, and side-by-side diff-pairs on the documentation site.


The Big Idea

LLM-generated writing is uneven because the instructions are uneven. "Write a professional blog post" gets generic AI-prose; "write a PRD in a pragmatic-architect voice with a candid tone, structured as Problem/Goals/Non-Goals/Risks" gets something usable. The gap is not typing skill - it is access to a vocabulary that names the moves a writer can make.

The Writing Style Library is that vocabulary. It decomposes the overloaded idea of "style" into orthogonal, composable parts, ships worked examples that show what each named value actually produces, and packages the whole thing as a Claude Code plugin so any combination assembles into a ready-to-use instruction.

Who is this for: PMs, engineers, technical writers, marketers, pastors, and anyone who wants AI writing to land in a specific voice, register, and shape - and who would rather select named building blocks than re-explain the same tone every time.


The Four-Axis Model

Four axes, one selection each, any combination valid. The test each axis has to pass: hold the other three constant, vary this one, and the output changes in a way you can point at.

Axis 1 - Voice

Voice is the persistent identity of the writer: their worldview, characteristic concerns, and the professional archetype they embody. Voice is stable across contexts. The pragmatic-architect voice, for example, always reasons from constraints and trade-offs, regardless of whether it is writing a slack message or a technical RFC.

Axis 2 - Tone

Tone is situational coloring layered on top of voice. The same pragmatic-architect voice can deliver a message with a candid tone (direct, no softening) or a warm tone (patient, explanatory). Tone entries are orthogonal to voice entries, so any combination is valid.

Voice and Tone are the most confusable pair in the catalog, so the rule for telling them apart is worth stating plainly: voice is what does not change; tone is what changes per piece. They live in separate directories (taxonomy/voices/ and taxonomy/tones/), require different frontmatter, and validate against different schemas. If you come from brand-writing, where "voice and tone" is a single compound noun, note that this catalog splits them because you select them as two independent parameters at composition time. Earlier docs called this a three-axis model and grouped them; see ADR 0018 for why the label changed.

Axis 3 - Style / Mode / Genre

Style entries describe the cognitive and rhetorical pattern of the writing: how ideas are structured and sequenced. problem-solution moves from diagnosis to remedy. layered-disclosure leads with the answer and buries supporting detail for readers who want depth. Entries on this axis are independent of voice and tone, so the same style can be applied across a wide range of purposes.

Axis 4 - Format / Output Structure

Format entries define the visual and structural container: headings, bullet depth, table layouts, ADR sections, standup fields. Format is purely presentational and can be composed with any voice/tone/style combination. A daily-standup format entry, for example, specifies the three canonical fields and their order, without dictating voice or rhetorical pattern.


What's in the Catalog

Axis Entries What it controls Example entries
Voice 15 Persistent writer identity: worldview, archetype, concerns pragmatic-architect, pastoral, journalist, coach
Tone 15 Situational register layered on top of voice candid, warm, reverent, urgent
Style 15 Cognitive and rhetorical pattern: how ideas are sequenced problem-solution, layered-disclosure, socratic-inquiry, dialectic
Format 52 Visual and structural container: headings, sections, layout adr, daily-standup, slack-message, devotional-entry

Plus the assets that make the catalog teachable:

  • 1164 worked examples - every one of the 97 stable entries rendered across all twelve anchor topics (async standups, morning routine, a Postgres-vs-DynamoDB decision, a roadmap deprioritization, onboarding a new hire, thanking a mentor, keeping a day of rest, a retirement send-off, a team milestone, a return-to-office position, a product launch, and a hard year in review), so you can see each entry rendered on real content.
  • 158 diff-pairs across all twelve anchor topics, each holding a topic constant and varying one axis, so the effect of a single choice is visible side by side.
  • 14 horizontal-slice recipes - named, ready-to-use four-axis combinations for common writing tasks.
  • 52 format templates giving the canonical structure for each format (plus 20 draft candidate formats under review from the Stream-B breadth program).

Documentation Site

The full catalog is browsable as an Astro Starlight site. Every entry has its own page with language patterns, when-to-use guidance, cross-references to compatible and confusable neighbors, and its worked examples embedded inline. The catalog pages are generated from taxonomy/ and examples/, so the site never drifts from the source.

If you want to... Go to
Browse every entry by axis Reference
See one axis swapped on a fixed topic Diff-pairs
Start from a ready-made combination Recipes
Grab a canonical format structure Templates
Understand the design Concepts

Project Structure

Path Type Purpose
taxonomy/voices/ Content Voice entries (persistent writer identity)
taxonomy/tones/ Content Tone entries (situational register modifiers)
taxonomy/styles/ Content Style/mode/genre entries (rhetorical patterns)
taxonomy/formats/ Content Format/output-structure entries
examples/vertical-slices/ Content Full worked examples for a single topic across all axes
examples/horizontal-slices/ Content Cross-topic samples for a single axis value
examples/diff-pairs/ Content Side-by-side pairs showing the effect of changing one axis
schemas/ Code JSON Schema files for all entry types
skills/writing-instruction-builder/ Code Compose a prompt from axis values you already know you want
skills/style-profile/ Code Capture a personal default style once, for reuse
skills/entry-recommender/ Code Recommend a combination for a described situation
library.json Config Canonical plugin manifest (family Standard, Section 5)
site/ Docs Astro Starlight site app (authored pages in src/content/docs/; catalog pages generated at build time)
docs/ Docs Internal governance only (ADRs, plans, specs) - not built by Astro; the site lives in site/
tools/ Code Validation and index-generation scripts
scripts/ Code Site page generator and freshness guard
tests/ Code Pytest suites for tools and skills, plus the site-generator test (run with node --test)
docs/internal/adr/ Docs Architecture Decision Records
.claude-plugin/ Config Claude Code plugin manifest and config
.github/ Config CI workflows and issue templates

Project Status

v0.13.0 (early / experimental). The plugin is listed in the Product on Purpose marketplace and installable with the two commands in Quick Start. The entry schema is now frozen (see ADR 0019), so its shape will not change without a major version and a migration. The skill interface, entry wording, and docs are all still settling. Entries currently carry an optimistic review status and have not all been through formal maintainer review.

What exists today:

  • 97 stable taxonomy entries (15 Voice, 15 Tone, 15 Style, 52 Format), plus 21 entries under review: 20 draft format candidates (Stream-B breadth, batches 1-10) and 1 draft voice
  • 1164 worked examples across twelve anchor topics, plus 158 diff-pairs and 14 horizontal-slice recipes
  • Three working skills: writing-instruction-builder (compose from known axis values), style-profile (capture a personal default), entry-recommender (recommend a combination for a described situation)
  • An Astro Starlight documentation site, generated from the catalog and deployed to GitHub Pages
  • Validation and freshness checks wired into CI

Deliberately deferred, not planned: a Composer web app and TypeScript/Python SDKs - the docs site already covers browsing and composing, and there is no consumer signal for the SDKs (see ROADMAP.md's "Deliberately deferred"). Genuinely possible later: an MCP server exposing composition to other agents, gated on a real consumer signal that has not appeared yet.

Distributed through the Product on Purpose marketplace (product-on-purpose/agent-plugins), with a ZIP path for Claude.ai / Claude Desktop as the fallback (see the installation guide). See ROADMAP.md for upcoming phases.


Contributing

Contributions are welcome. To add a taxonomy entry, submit an example, or improve the docs:

  1. Fork the project
  2. Create your feature branch (git checkout -b feat/amazing-entry)
  3. Commit using Conventional Commits (git commit -m 'feat(taxonomy): add amazing voice entry')
  4. Run validation locally: python tools/validate.py
  5. Open a Pull Request

See CONTRIBUTING.md for the full entry-authoring checklist, schema conventions, and the house writing rules.


License

This project is dual-licensed:

  • Code (schemas, skills, tools, scripts, tests): Apache-2.0
  • Content (taxonomy entries, examples, docs): CC-BY-4.0

See NOTICE for full attribution details, including the provenance of LLM-generated example content.


About the Author

Howdy, I'm Jonathan Prisant, a product leader/manager/nerd in the church technology space who gets unreasonably excited about understanding and solving problems, serving humans, designing elegant systems, and getting stuff done. The Writing Style Library started as a question - what would it take to instruct an LLM on writing as precisely as we instruct it on code? - and grew into a composable catalog I use in my own work.

If the Writing Style Library helps you get better writing out of your tools, consider giving the repo a star and sharing it.