Co-authored-by: Bruno Guilhermo de Barros Valério <[email protected]> Co-authored-by: Claude Sonnet 5.5 <[email protected]>
7.3 KiB
title, status, date, related
| title | status | date | related | ||
|---|---|---|---|---|---|
| Writing styles | accepted | 2026-10-12 |
|
Writing styles
Different documents have different readers. Each document has one style, and each style has an id. A style names the skills an agent loads when writing, the house rules that apply, and the checks that run on the result. This standard applies to every Ouroboric product and to everything they build.
1. Which style applies
The most specific setting wins:
style:in the document's front matter;- a
style:line in the nearest folderREADME.md(applies to everything beneath it); - the section default (§3);
- the repository default:
guide.
Styles apply per document, not per paragraph. When a document mixes kinds of text, the style
defines how to handle each block (for example, spec puts requirement sentences under STE rules).
2. The styles
Fourteen styles:
| Style id | Readers | Skills (vendored) | House rules |
|---|---|---|---|
direction |
decision-makers | business-writing, plain-language |
bottom line first; one decision per paragraph; the charter's vision and mission lines follow 7-branding/voice/ once it exists |
spec |
engineers and agents | google-dev-docs, asd-ste100 |
prose follows Google developer style; requirements and acceptance criteria follow ASD-STE100 (one meaning per sentence, approved vocabulary, at most 20 words); normative words follow RFC 2119 (MUST, SHOULD, MAY) |
guide |
operators and developers | google-dev-docs |
structured by Diátaxis (tutorial, how-to, explanation); second person; tasks start with a verb |
procedure |
someone following steps, possibly under pressure | asd-ste100 |
numbered steps, one action each; warnings and cautions before the step they concern; no explanation inside steps |
reference |
someone looking something up | google-dev-docs |
consistent tables and fields; mostly generated |
public-help |
a product's end users | gov-uk-style, plain-language |
reading age about 9; front-load the answer |
legal |
users and regulators | plain-language |
GDPR Article 12 requires privacy information "in a concise, transparent, intelligible and easily accessible form, using clear and plain language"; a qualified person reviews legal text before deploy-prod |
research |
future readers checking claims | journalism-ap |
every claim attributed and cited; facts kept separate from analysis (marked [ANALYSIS]); unverified items marked |
journal |
readers of the journey | orwells-rules |
concrete, honest, no jargon; include what went wrong |
brand-story |
everyone meeting the brand | orwells-rules + the house voice in 7-branding/voice/ |
the mythic story told clearly, never decoratively |
marketing |
people deciding whether to read on | scott-adams + the house voice; humanizer pass |
hook first; short sentences; no claim without evidence from the journal or ledger |
ui-copy |
a product's users, inside the interface | plain-language + the product's 7-branding/voice/ |
short, consistent labels; error messages say what happened and what to do |
prompt |
generative models (image, video, music, text) | none; house rules only | concrete visual or sonic description; exact text in quotes and spelled out; aspect ratio and purpose stated; one asset per prompt; never a humanizer pass |
agent-facing |
models | asd-ste100 |
imperative; one instruction per sentence; a map, not a manual (point to docs instead of repeating them); never a humanizer pass |
The humanizer pass
Humanizer removes tell-tale AI phrasing. It runs last, and only on text published for people:
marketing, public landing pages and blog posts. It never runs on spec, procedure, reference
or agent-facing text, where it would trade precision for natural-sounding prose.
3. Section defaults
| Path | Default style |
|---|---|
README.md (repo and docs landing) |
guide |
1-company/charter.md, roadmap.md, readiness/ |
direction |
1-company/legal/ |
legal |
1-product/charter.md, roadmap.md, design/ |
direction |
1-product/users.md |
direction |
1-product/legal/ |
legal |
2-engineering/ (all) |
spec |
3-using/tutorials/, how-to/, explanation/ |
guide |
3-using/reference/ |
reference |
3-using/operations/ |
procedure |
3-using/ in a product's end-user help centre |
public-help |
4-ways-of-working/ |
guide |
5-research/ |
research |
6-journal/ |
journal |
7-branding/story/ |
brand-story |
7-branding/identity/ |
guide |
7-branding/voice/ |
marketing |
7-branding/prompts/ |
prompt |
AGENTS.md, realm prompts, skill files |
agent-facing |
| interface text in product code | ui-copy |
4. Enforcement
- When writing: Gleipnir resolves the style by the rules in §1 and loads its skills explicitly into the agent's prompt. Gleipnir never leaves skills to trigger on their own.
- When reviewing: Vale runs in the docs rung of every check ladder. Its
configuration maps paths to rule sets that mirror §3 (for example, sentence-length and vocabulary
limits for
procedure, a readability floor forlegal). Vale results become typed findings, like any other check. - Unknown style ids fail the docs check.
5. Vendored skills
Every skill the factory uses is vendored: a pinned copy committed to the repository, never whatever happens to be installed on a machine and never fetched live.
- Why: agents run in sandboxes that don't see the host's skills. Other operators have different skills or none. Benchmarks are only comparable with the same skills. And a skill is instructions that an agent follows with full permissions, so changes must arrive as reviewed diffs.
- Where: in Havamal, the skill library module, together with our own skills and their evals.
- How: a
skills.lock(following marola's MIP-0080) records each skill's upstream repository, path, commit and licence, with a hash per file. A check fails when a vendored file differs from its lock entry. Updates arrive as pull requests whose diffs a human reviews. Every run'srun.jsonrecords the skill set's hash. - Licences: each vendored skill keeps its licence file. A skill whose licence doesn't allow redistribution can't be vendored, and so can't be part of the factory.
- Sources: vendor from the public upstream repository, never from a copy synced through an employer's or organisation's plugin system. Never vendor organisation-internal skills into a public repository.
- Operator skills: an operator may add private skills through their own L0 instance
configuration.
run.jsonrecords them, so benchmark results state which skills the run used.
| Skill | Upstream | Licence | Used by styles |
|---|---|---|---|
asd-ste100, business-writing, google-dev-docs, gov-uk-style, journalism-ap, orwells-rules, plain-language, scott-adams |
writing-skills (Surendran B), v0.6.0 | MIT | see §2 |
| humanizer | to be confirmed when vendored | to be checked when vendored | marketing pass |
Ponytail (ponytail-review, ponytail-audit) |
DietrichGebert/ponytail | MIT | reviewers (spec-driven development §8) |