v0.1 — a specification
Say what kind of message you're saying, before you say it.
Text strips out tone. Conventional Conversations borrows the idea behind Conventional Commits — a small, explicit tag at the front of a message — so the reader parses your intent instead of guessing it from their own mood.
Examples
The same few words, different intents
Each message below is unambiguous the moment you read the tag — no tone to misjudge, nothing to reread at 11pm wondering if they're upset.
Why
Tone doesn't survive the trip through text
Spoken conversation carries tone for free — pitch, pace, a raised eyebrow, a pause. Text carries none of it. So the reader supplies the missing tone themselves, usually out of their own emotional weather rather than yours. A message written calm at 2pm gets read anxious at 11pm. A one-line reply meant as efficient reads as curt.
Most fixes for this ask you to write more: soften with an exclamation point, pad the request with "just wondering," apologize before you've even asked. That adds noise without adding signal — the reader still has to infer intent, just from a longer message.
Conventional Conversations asks you to write less, but write it explicitly. State what kind of message this is before you say it — the same way a commit states whether it's a fix or a feature before it says what changed. The tag carries the intent so the words don't have to perform it.
Specification
Grammar and rules
- Every message MUST begin with a force, chosen from:
ask,tell,require,offer. - The force MAY be followed by a scope in parentheses naming the topic —
advice,decision,feedback,info,clarification,risk,plan,feeling, or a term specific to your context. feelingnames the category, not the specific emotion — the emotion itself belongs in the message. Writetell(feeling): frustrated with this deploy process, nottell(frustrated): ...- The tag MUST be followed by a colon and a space, then the message.
asksignals the sender is soliciting a response and has no expectation beyond that.tellsignals the sender is stating something as settled from their side — no response required.requiresignals the sender needs the named content produced or delivered. It is a call for content, never for agreement with it —require(advice)means "give me your recommendation," not "obey it."offersignals the sender is making themselves available. It carries no obligation for the recipient to accept.- Scope terms SHOULD be drawn from a list shared across a team, so tags stay legible to everyone reading them. Teams MAY extend the list for domain-specific needs.
- A message with no natural scope MAY omit the parenthetical and use the bare force —
ask: got a minute?
require(feeling) reads best as an invitation to self-report, not a demand: "give me an honest read on how this landed" rather than "give me your feelings by Friday."Reference
The full matrix
Every force paired with every scope should read naturally in plain speech. Here's all 32 — check yours against it before adding a new scope.
| scope \ force | ask | tell | require | offer |
|---|---|---|---|---|
| advice | What should I do? | I think you should do X. | Give me your recommendation. | Happy to weigh in if useful. |
| decision | Have you decided? | I decided X. | Decide by Friday. | I can make the call. |
| feedback | Thoughts on my draft? | Draft was clear — cut section two. | Review this by end of day. | I can review it if you want a second pair of eyes. |
| info | What's the deploy time? | Deploy's at 5pm. | Send me the numbers. | I can pull the numbers. |
| clarification | What did you mean by that? | To clarify, I meant X. | Clarify this by tomorrow. | Happy to clarify if it wasn't clear. |
| risk | What could go wrong here? | This risks downtime. | Give me your risk read before we proceed. | I'll flag risks as I spot them. |
| plan | What's the plan? | Here's the plan: … | Send me a plan by Monday. | I can draft a plan. |
| feeling | How are you feeling about this? | I'm frustrated with this. | Give me an honest read on how this landed. | I'm here if you want to talk it through. |
Scope list is illustrative, not exhaustive — see rule 9. require(feeling) is the one soft cell — see the note above.
FAQ
Questions
Isn't tagging every message awkward?
Not every message needs one. Reach for it when the cost of misread tone is highest: async threads, cross-timezone handoffs, anything you'd normally soften with three exclamation points. Face-to-face and low-stakes chat don't need it.
What if none of the eight scopes fit?
Use the bare force with no scope (rule 10), or extend the list for your context. The four forces are meant to stay closed and small; scopes are meant to grow with the team using them.
Isn't "require" harsh?
It's a defined tag, not a tone of voice — the way fix in a commit message doesn't mean someone's to blame. Once a team knows require means "I need this content," not "obey me," the word does its job without the edge.