The charter
The charter is your team's written async-communication rules. Ever Async
cites it in every nudge, posts it when it is invited to a channel, and returns
it from /async charter.
The point is authority. "Your message was unclear" is a machine's opinion. "Our charter says: if it has a link, include the link" is the team holding itself to something it already agreed to. Same nudge, completely different reception.
The defaults
Ship with these three and change them later — they are the rules the product was designed around:
[charter]
rules = [
"Give context immediately — explain what you need in the first message; link a document for anything complex.",
"Tag the relevant people — untagged messages get missed in busy channels.",
"If it has a link, include the link — the ticket, the PR, the doc, the conversation you are referring to.",
]
Each rule maps to something the classifier can actually detect:
| Rule | Detected as |
|---|---|
| Give context immediately | Missing::Details — naked greeting, contentless help plea |
| Tag the relevant people | Missing::Recipients — asks for action, mentions nobody |
| If it has a link, include the link | Missing::Link { artifact } — a vague reference with no URL |
That correspondence is the design constraint on a good charter: write rules a reader could check. "Be considerate" cannot be nudged; "link the ticket" can.
Writing your own
Replace the array with your team's actual rules. Keep them short — they are quoted inside an ephemeral message, not read as a policy document.
[charter]
rules = [
"Lead with the ask. First line says what you need and by when.",
"Link the artifact — PR, ticket, doc, dashboard. No 'the thing from yesterday'.",
"Name a person. @here is not a recipient.",
"If it needs a call, propose two slots instead of asking for availability.",
]
Rules are rendered as a bullet list wherever they appear:
• Lead with the ask. First line says what you need and by when.