Addendum: the mention detector accepts any currency sign, not only $, so the workaround above ("avoid $name") is incomplete.
At c79ef8c (main), apps/server/src/provider/Drivers/ClaudeSkillDispatch.ts:
| 1 | // lines 10-11 |
| 2 | const SKILL_MENTION_PATTERN = |
| 3 | /(^|\s)\p{Sc}(?![0-9][0-9_]*(?:[kKmMbBtT]|[eE][0-9]+)?(?:\s|$))(?=[a-zA-Z0-9:_-]*[a-zA-Z])([a-zA-Z0-9][a-zA-Z0-9:_-]*)(?=\s|$)/gu; |
\p{Sc} is any Unicode currency symbol, and ClaudeSkillDispatch.test.ts (lines 43-60) dispatches mentions prefixed with € £ ¥ ₹ ₩ ₿ 𑿝. Amounts such as €20 or $20k are excluded by the lookahead. So in a Claude thread, an agent's message containing €technical-writing should dispatch the skill exactly as $technical-writing does. This follows from the source and its tests; we reproduced it live only with $, and we did not test other signs in Codex threads.
For the fix: scheduledTasks/webhookTemplate.ts already breaks these mentions in untrusted webhook values (line 52, /[\p{Sc}@]|(?<=^|\s)\/(?=[^\s/]+(?:\s|$))|.../giu, followed by a U+2060 word joiner at line 170). Applying the same treatment to agent-originated t3_thread_send text would cover every currency sign and a leading /name.
On our side, a change accepted today makes sitrep, the cross-session messaging tool we use, push any message containing a currency sign as a neutral pointer. The recipient reads the exact text through its hook or by asking sitrep. That only covers our own sender; other agents calling t3_thread_send directly are still affected.