v0.1 — a specification
Say what kind of message you're sending, before you say it.
Text strips out tone — the same six words land calm from one reader and hostile from another. Conventional Conversations adds one small, explicit tag to the front of a message, so intent doesn't have to be guessed from 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 or emoji, 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 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,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): ...infovsfeeling— the test isn't whether it's phrased as a question, it's whether the content can be produced on demand. A number, a time, a status can always be pulled up and handed over — that'sinfo. A feeling can't be manufactured to order; it either already exists or it doesn't. "I need to know how you feel about this" is stillfeeling, notinfo, no matter how factually it's phrased.- The message SHOULD add something the tag didn't already say. A scope names a category, not a script —
require(plan): send me a plan by Mondayis circular;require(plan): I need the approach by Mondayadds the part the tag couldn't. - There is no separate tag for retracting or revising a prior message — reuse the same tag as the thing being revised, and say so in the message.
tell(decision): actually, holding until Monday — the migration needs another passsupersedes an earlier decision without needing new grammar. - 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. This covers declining too: "I can't take this on right now" is a decision, aimed at someone else's ask instead of your own plan, not a separate category.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 28 — check yours against it before adding a new scope.
| scope \ force | ask | tell | require | offer |
|---|---|---|---|---|
| advice | What do you think I should do? | I think you should do X. | I need your recommendation. | Happy to give my recommendation if it's useful. |
| decision | Where are we landing on this? | Went with X. | I need your call by Friday. | I can make the call. |
| feedback | What do you think of the draft? | I think the draft's clear — cut section two. | Review the draft by end of day. | I can review the draft if you want a second pair of eyes. |
| info | What's the deploy time? | Deploy's at 5pm. | Send me the deploy time. | I can send you the deploy time. |
| clarification | What did you mean by that? | What I meant was X. | Walk me through this by tomorrow. | Happy to walk through it again if that landed wrong. |
| plan | How are we doing this? | Here's how this is going: X. | I need the approach by Monday. | I can put together the approach. |
| feeling | How are you feeling about this? | I'm frustrated with this. | I need an honest read on how this landed. | I'm here if you want to talk through how this landed. |
Scope list is illustrative, not exhaustive — see rule 12. 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 seven scopes fit?
Use the bare force with no scope (rule 13), 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 — a required field on a form doesn't imply judgment about the person filling it in. Once a team knows require means "I need this content," not "obey me," the word does its job without the edge.
What if a message needs more than one tag?
It doesn't get one — pick the dominant force and let the rest live in the words. If a tagged message keeps growing long, that's usually the tell: it's covering two forces under one tag, not that it needs more explanation. Split it into two tagged messages instead, the same way a commit that wants "and" in its subject line is usually two commits.
None of this is meant to catch every subtlety of a message — it's a signal for general intent, not a full parse. Treat the tag as a heading, not a summary.
Where does this taxonomy come from?
Loosely, John Searle's speech act theory — his taxonomy of illocutionary acts, building on J.L. Austin's earlier work in How to Do Things with Words. Searle split utterances into assertives, directives, commissives, expressives, and declaratives. tell maps to assertive; ask and require both sit under directive, weak and strong ends of the same category; offer maps to commissive. feeling covers what Searle called expressive, as a scope rather than its own force. Declaratives — utterances that change reality just by being said, like "I now pronounce you..." — didn't have a place in everyday text, so there's no fifth force.