Subject = a person, not a system. Verb = action, not existence. One claim per sentence. Under 16 words.
This page is the human-readable mirror. The canonical source is the writing skill in the hydra repository, at .claude/skills/writing/. Everything on this page is generated from the same rules an agent loads before it writes a word: references/voice.md for the rules below, references/ai-tells.md for the sweep, references/personas.md for who is speaking, references/moves.md for the editorial moves.
Both carry a version marker. If they disagree, the skill wins, and the drift is a bug worth a pull request. A rule that only one of the two executes is not a rule.
VOICE-VERSION: 2.0.0
Every piece ends with what the reader does next. Not with a summary of what they just read. This is the most-broken rule we have, on every surface we ship.
A blog closes on something the reader can start Monday. A tutorial closes on the next tutorial. A documentation page closes on the next task. A product page closes on the CTA pair. A walkthrough step closes on the thing to click.
The test: delete your last paragraph. Did the reader lose an instruction, or a recap? If it was a recap, the paragraph was a bow. Cut it and write the instruction instead.
Cynicism without direction doesn't count. The piece always ends in "you can and should fix this".
Depersonalised, legally safe, built for tender documents. Subject is always "the Solution", never a person. Reads like a specification, not a product.
"The Solution offers the capability to centrally configure templates including corporate identity."
"The Solution shall be reachable via a fully qualified domain name."
Functional requirements, imperative, testable. Subject is "the system". One step deeper into robot territory than register A, and twice as anonymous.
"The system must maintain an audit trail of all cost allocations."
"The system must register the dependency relation between charge orders and collection decisions."
A real person, a concrete goal, a motivation. With one tweak, drop "As a user", and it lands exactly on the Conduction tone.
"As a user I want to filter content, so only relevant content is available to me."
"As a user I want to assign tickets, so I can hand off cleanly to a colleague."
| Tender / requirement source | Conduction website |
|---|---|
| "The Solution supports the saving of search queries." | "Save your searches and use them again later." |
| "The Solution has one central admin environment in which authorisations can be managed." | "Manage all authorisations in one place." |
| "The Solution supports Single Sign On (SSO) authentication based on ADFS and SAML 2.0." | "Log in with your existing account via SSO (ADFS, SAML 2.0)." |
| "The system must provide a digital intake facility through which requests can be submitted." | "Let people sign up digitally, no paperwork." |
| "The system must permanently archive historical annual accounts." | "Annual accounts are archived automatically, findable forever." |
| "The Solution offers document-creation functionality to create documents and emails from templates." | "Generate documents and emails from templates, instantly, no plug-in." |
| "State-of-the-art platform that accelerates digital transformation." | "Twelve apps that run on your Nextcloud in two minutes." |
| "Book a demo for a personal conversation." | "Request a demo from a partner." |
| "Fully NLDS-compliant and future-proof." | "Open source. Free. GDPR-compliant by default." |
| "Our WOO app for municipalities." | "Our WOO solution, built on OpenCatalogi and Integriq." |
| "Synergistic chain collaboration for valuable insights." | Just delete it. Start over with one concrete claim. |
"You" · "we" beats "the Solution" · "the system" every time. Even when the system does the work, write from the user.
"Generate" beats "has the capability to generate". "Export" beats "offers export functionality". Active voice, no nominalisation.
User stories open with "As X I want Y so that Z". Flip it: "Y, so that Z." Or just "Y. Z."
If a sentence runs longer than 16, split it. Two short sentences read faster than one long one, and each claim becomes individually verifiable.
WOO coordinator? Fine, but explain it on first use. SAML? Fine in a tech context. Chain collaboration? Never.
"Wet open overheid (Woo)" on first mention. Just "Woo" after. Don't make readers google.
Marketing strings with multiple claims ("fast, scalable, secure and reliable") get skipped. One claim, one sentence. The reader can verify each claim separately.
Em-dashes (—) and double-dashes (--) are AI tells. Replace with a period, comma, or colon. Sentence case in headings, never Title Case. En-dashes (–) only for numeric ranges.
Each of these signals a sentence hiding behind generic language. Strike the word and see if the sentence still works. If yes, it was noise.
Exception · "Solution". The word is fine in customer-side translations of "solution", but never as a generic placeholder for our product. We have apps and solutions, never "the Solution".
Replace · "Kernel" → "workspace". Kernel reads as tech jargon (operating-system kernel, Linux kernel) and shuts SMB decision-makers out. Nextcloud calls itself a workspace; we quote that. "Six apps, one workspace, all open-source" instead of "six apps · one kernel". In API names we use slot="apex" for the centre element, same convention as cn-domain-tree.
AI never hands you anything bad enough to catch. It hands you the average version of every line, and average doesn't show up as a problem until you read six months of it back to back.
The full sweep runs to ten sections and lives in writing/references/ai-tells.md. These six are the expensive ones. Everything else in that file is hygiene; these are why the writing has no pulse.
It reads like somebody took a position, and nobody did, because both halves got written in the same breath and neither one was true to anybody before that sentence started. The test: which half did you hold before you wrote the line? Name it. If the answer is "neither, the shape sounded good", delete it and state one side flat. One per piece, maximum.
Short line. Shorter line. One word. The full stops everywhere, the triple commas. It sounds cheap. The repair condition: a short line only performs when something long ran right before it. That's a condition, not a ban, because our voice is short by design. What fails is short after short after short with nothing to push off.
Finally. Actually. Simply. Good writers use them sparingly. AI drops one into every third sentence for texture. The test: pull the word out and the line says exactly what it said with it in. This one bites documentation hardest: "simply click Apps" is longer than "click Apps", and it quietly tells a stuck reader their problem is easy.
Every piece wraps up by summarising itself, one last line telling you what you just read. People close on what they want you to do next, or on whatever they couldn't stop thinking about. This is rule zero at the top of this page, and it's the one we break most.
This is the one that costs money. What brand identity are you running if you sound like every other vendor in the market? The logo-swap test: swap our name for a competitor's and swap our app names for theirs. If you could still hit send, there's no voice in there to swap. Capability lists and adjective stacks survive the swap. A named customer, a real number, an opinion with a cost attached does not.
This one explains the other five. Good copy has somebody in it who made a call: this claim over that one, this objection answered first, that proof cut. AI doesn't decide anything. It takes the average of what everybody else already decided and hands it back to you. Before anything ships, answer one question: what did I decide here? "I covered the topic" is not an answer.
You don't have to stop drafting with AI. Speed is speed. But read every draft the way you'd read a junior's first pass. Kill the flips, cut the fragments, and answer the one question before it goes out. If the copy isn't good, it isn't good, and it doesn't matter how clean it reads or how fast it came out.
The reader runs a business with 10 to 500 people and has never heard of OpenRegister. Platform internals stay out of body copy: OpenRegister, Buildiq, Hermiq, schema, register, delta, layer, manifest, MCP, CalDAV, endpoint, JSON, leaf, token. A platform name is allowed in one place only: the CTA label that links to that app's page. Test: could your accountant's office manager read it without asking?
A capability is not an example. Three beats, in order: today (what they do by hand) · instead (what happens now) · so (what it saves). If you cannot name the gain, you described a mechanism. Pick scenes from their day: back in the car after a client visit, the VAT return on the last Friday of the quarter, the certificate that expires while nobody looks.
A scene is a promise. If the feature is spec-only, the example belongs in the spec, not on the page. Card eyebrows are verbs for the reader (Automate · Make it yours · Talk to it), never product names. Fixed CTA pair: "Install from the Nextcloud app store" · "Request a demo from a partner".
| We say (wrong) | They read (right) |
|---|---|
| "Clients are typed OpenRegister schemas with an audit trail." | "Every change is logged, so you always know who did what." |
| "Changes are stored as a delta over the shipped manifest." | "Your changes stay with every update." |
| "Two-way CardDAV sync with Nextcloud Contacts." | "Change a number in the CRM and it is right on your phone." |
| "Every action is exposed as an MCP tool with scope × reach grants." | "Every action can be handed to an assistant, and you decide per assistant what it may do." |
| "Accepting a quote starts a flow." | "The moment the quote is accepted, the project exists and the kick-off task is on the right desk. The discount over ten percent waits for your approval." |
The eight rules above apply to all Conduction copy. Opinion writing and blogs (rubenlinde.nl, guest contributions, iBestuur pieces) add a second layer: editorial moves. These are rhetorical moves that turn a blog into a blog instead of a product page with opinions. One move per beat. Don't stack them.
Always combine these with a persona. The moves are general Conduction; the persona colours the examples and the tone.
No "in this piece we'll look at". The first sentence states the position. The second sharpens or extends. Four variants: bold-declarative, scene-setting, rhetorical question, or "imagine if" scenario.
"Open source won't fix your lock-in. You have to do that yourself."
"I notice it more and more in [X]." Ties the piece to a real place or conversation. Vary the setting (meeting room, terrace, FOSDEM bar, LinkedIn thread); don't reuse the same opener.
"Every time I visit a municipality I hear the same three words..."
Signals the truth that nobody has said out loud yet. Once per piece, midway. The pivot earns its weight from what follows, not from the phrase itself.
"Let's be honest. The Dutch government chose this dependency themselves."
Identify who actually made the choice the reader is now complaining about. Name them (usually that's the reader). Don't soften with "we" if "you" is correct. The flip should feel uncomfortable.
"You built that lock-in yourself."
A visual analogy, deployed once, then dropped. First try to invent something fresh for the topic. If nothing comes, pick a persona metaphor that fits. A bad metaphor is worse than none.
"Open source is not a vacuum cleaner that sucks up your mess."
When the argument is abstract (lock-in, sovereignty, economics), make it concrete with an invented person. Give them a name, a job, a number. "Maria the bookshop owner, €5.50 a month."
"Maria from the bookshop switches from Microsoft 365 to Nextcloud on KPN."
Two to four concrete statistics in a row, with sources. Then a short pivot line ("Let that sink in.") followed by the takeaway in fragments. Only works if the numbers are verifiable.
"45% carry OWASP vulnerabilities. 2.74x more security issues. 19% slower."
Take an existing slogan and modify it to extend your argument. Works as a section title or as a close.
"Public Money is Public Code → Public Money is Public Functionality."
Rewritten. This used to be "three short sentences, the last one punches". That form is AI tell 2, and it no longer stands on its own. Two conditions now, both required: a long sentence runs immediately before the stack, and the last clause is the ask, not a summary. If the stack won't earn its run-up, write one sentence naming the action instead. No question, no "stay tuned", no "time will tell".
Fails: "Start today. Step by step. The rest will follow."
Passes: "...assembled one purchase order at a time, each signed by somebody who never read the exit clause. Go read yours."
After a load-bearing explanation, drop three or four short single-clause sentences. They act as pauses for emphasis. Once per piece is plenty. The contrast with the surrounding rhythm is what makes them land.
"No. Of course not. That was never the point."
Relabel the opposing position. Same object, sharper name. Two short sentences. The second noun has to bite. Gated: this is the shape of AI tell 1, so it only survives if you can name which half you held before you wrote the sentence. A real reframe renames something you already believed was misnamed. Shares one slot per piece with every other "it's not X, it's Y" construction, not one each. If it doesn't pass, drop the scaffolding and name the thing once: "That is lock-in with a friendlier invoice."
"That's not certainty. That's vendor lock-in wrapped as a service."
Show that the standard the reader applies to one thing isn't the one they apply to another. Name both sides explicitly. One short rhetorical question to finish is fine. Two is an AI tell.
"Google Workspace went in without discussion. For open source we demand 100% parity. Why?"
Reformulate the topic so the contested question is no longer "should we" but "how fast". Works as a hinge just before the close. Once per piece.
"The question isn't whether you need to migrate. The question is how fast you start."
After a quantity claim, drop a single-word sentence. "Literally." Or "Zero." Use sparingly; it loses power if repeated in the same piece.
"Lowers the bar to building your own to zero. Literally zero."
Short to mid-length pieces (300–900 words) follow the 4-beat outline: hook, personal observation, metaphor, flip with action. No headings needed; the beats are rhythm.
Long opinion pieces (1000+ words) follow the 5-phase Escalation Arc: fair acknowledgment (acknowledge the opposing position), honesty pivot, evidence stacking, confrontational peak, constructive conclusion. No numbered headings for the phases. They are emotional beats, not section titles. The reader should feel the escalation, not see it.
Pitfall: cynicism without direction doesn't count. The piece always ends in "you can and should fix this". Frustration is welcome as fuel, not as destination.