telegram-rich-message — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited telegram-rich-message (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Convert raw message copy into a valid, ready-to-use Telegram `InputRichMessage` payload that the engineering team can pass directly to the backend sendRich method — no manual edits required.
This skill is the product → engineering handoff for Telegram Rich Messages. The PM writes intent and copy; this skill produces the exact structured payload.
is_rtl defaults to true. Never translate the message content.If not already provided, ask the PM for:
markdown (default) or html. Default to markdown because it is readable; switch to html if the copy contains many Markdown-special characters or is assembled from dynamic values where escaping < > & is simpler.is_rtl: true for Persian/Arabic copy; false for purely LTR copy.Always output exactly one InputRichMessage JSON block. This is the object the backend places in rich_message:
{
"markdown": "<the formatted content>",
"is_rtl": true
}or, when HTML is chosen:
{
"html": "<the formatted content>",
"is_rtl": true
}Exactly one ofmarkdownorhtml— never both, never neither. The backendsendRichmethod throws otherwise.
Then add a short Notes for engineering block showing the call form:
await telegramSendMessageRepository.sendRich(chatId, { markdown /* or html */: "..." }, { isRtl: true });Map PM intent to Rich Markdown syntax. This differs from Telegram's legacy `parse_mode` Markdown — use the new syntax:
| Intent | Rich Markdown | ||||||
|---|---|---|---|---|---|---|---|
| Title / section heading | # Heading 1 … ###### Heading 6 | ||||||
| Bold | **bold** (not *bold*) | ||||||
| Italic | *italic* or _italic_ | ||||||
| Strikethrough | ~~strike~~ (not ~strike~) | ||||||
| Spoiler | `\ | \ | spoiler\ | \ | ` | ||
| Marked / highlight | ==marked== | ||||||
| Inline code / IDs | ` code ` | ||||||
| Code block | ``` `lang … ` ``` | ||||||
| Bulleted list | - item | ||||||
| Numbered list | 1. item | ||||||
| Task list | - [ ] todo / - [x] done | ||||||
| Blockquote | > quote (prefix each line) | ||||||
| Link | [label](https://…) | ||||||
| Divider | --- | ||||||
| Table | `\ | H1 \ | H2 \ | + \ | :--\ | --:\ | ` rows |
<b>, <i>, <u>, <s>, <code>, <mark>, <tg-spoiler>, <h1>…<h6>, <p>, <pre>, <blockquote>, <a href="…">, lists via <ul>/<ol>/<li>. Escape <, >, & in literal text as <, >, &.
If the copy is over a limit, flag it and propose trimming or splitting into multiple messages.
If the message includes a media block (photo/video/audio), warn: the bot must have media-send permission in the target chat (relevant for groups/channels). Media blocks accept only HTTP/HTTPS URLs and must be their own block.
InputRichMessage block — directly usable, no placeholders.is_rtl: true unless the copy is clearly LTR-only.PM raw copy (Persian):
گزارش روزانه. وضعیت سرور سالم است. تعداد درخواستها ۱۲۳۴۰. خلاصه: امروز بدون مشکل.
Output — InputRichMessage:
{
"markdown": "# گزارش روزانه\n\n- وضعیت سرور: **سالم**\n- تعداد درخواستها: `12,340`\n\n> خلاصه: امروز بدون مشکل.",
"is_rtl": true
}Notes for engineering:
await telegramSendMessageRepository.sendRich(
chatId,
{ markdown: "# گزارش روزانه\n\n- وضعیت سرور: **سالم**\n- تعداد درخواستها: `12,340`\n\n> خلاصه: امروز بدون مشکل." },
{ isRtl: true },
);~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.