Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add tonyghiani/ai-essentials --skill i18n-sweepgit clone --depth 1 https://github.com/tonyghiani/ai-essentialsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/tonyghiani/ai-essentials/i18n-sweep)<a href="https://agentmods.dev/skills/tonyghiani/ai-essentials/i18n-sweep"><img src="https://agentmods.dev/badge/skills/tonyghiani/ai-essentials/i18n-sweep/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/tonyghiani/ai-essentials/i18n-sweep"><img src="https://agentmods.dev/badge/skills/tonyghiani/ai-essentials/i18n-sweep.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00050 | $0.00768 |
| Opus 5.5 | $0.00020 | $0.00307 |
| Sonnet 5.5 | $0.00010 | $0.00154 |
| Haiku 4.5 | $0.00005 | $0.00077 |
Grade A, and why
i18n-sweep scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 18d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 74 lines — stays where its author put it; the contents beside it link to each section on GitHub.
i18n sweep
Two failure modes: strings that were never wrapped, and strings that were wrapped in a way translators can't work with. The second is more expensive because it looks done.
Untranslated strings
Scan for user-visible literals in JSX text, and in these props: title, label, placeholder, aria-label, alt, description, helpText, tooltip, emptyMessage, confirmButtonText, cancelButtonText, plus toast and error messages surfaced to the UI.
Not findings: test id attributes, className, ids, route paths, log messages, dev-only errors, and anything behind an internal flag no user sees.
Defects that break translation
Concatenation. Word order differs by language, so assembled sentences can't be translated.
// Broken
<>{count} {count === 1 ? 'item' : 'items'} found</>
// Correct: one message, pluralisation inside it
i18n.translate('xpack.myPlugin.itemsFound', {
defaultMessage: '{count, plural, one {# item} other {# items}} found',
values: { count },
})
Pluralisation by ternary. Many languages have more than two plural forms. Use ICU plural, always.
Gender or list interpolation built with string joins rather than ICU select and a list formatter.
Dates, numbers, currency formatted by hand. Use Intl or the framework's formatter so locale conventions apply.
Missing values for a message with placeholders, or a placeholder name that doesn't match the message.
Reused message id with different copy, or the same copy duplicated under two ids. Both create translation drift.
Unstable id built at runtime (`xpack.p.${key}`). The extractor can't find it, so it never gets translated.
JSX inside a plain i18n.translate. Use FormattedMessage when the message embeds markup, so translators see one coherent string with tags.
No context for an ambiguous word. "Open" is a verb and an adjective. Add a description so the translator knows which.
House conventions
- Ids: stable, namespaced, camelCase:
myApp.featureArea.descriptiveName. - Hoist to a SCREAMING_SNAKE module const when the message is used more than once or would bloat the JSX.
- Shared copy for a component folder goes in a colocated
translations.ts. FormattedMessageonly when the message contains JSX;i18n.translateotherwise.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 18d ago Changed 4d2d5b4cdac4
- 1mo ago First seen · 74 lines · 50 tokens per session scan A 83a4ff74c9fa
i18n-sweep is a skill published in the GitHub repository tonyghiani/ai-essentials (7 stars, last pushed 19d ago), licensed MIT. It adds 50 tokens to every session and 768 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
intl-expansion
International market expansion strategy. Market selection, entry modes, localization, regulatory compliance, and go-to-market by region. Use when expanding to new countries, evaluating international markets, planning localization, or building regional teams.
chinese-documentation
A Chinese technical-documentation style guide covering spacing, punctuation, numbers, terminology, and links when Chinese and English appear together.
azure-ai-translation-text-py
Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications. Triggers: "text translation", "translator", "translate text", "transliterate", "TextTranslationClient".
harden
Improve interface resilience through better error handling, i18n support, text overflow handling, and edge case management. Makes interfaces robust and production-ready. Use when the user asks to harden, make production-ready, handle edge cases, add error states, or fix overflow and i18n issues.
edit-site
Plans, coordinates and customizes PAC CLI-downloaded Standard or Enhanced data model non-SPA Power Pages sites created from Microsoft templates or manually in Design Studio. Use for requests involving pages, localized content, navigation, assets, snippets, site markers, Liquid/web templates, page layouts, or styling.…
asc-subscription-localization
Bulk-localize subscription, subscription-group, and in-app purchase display names across App Store locales using asc, including API 4.4.1 version-scoped v2 resources. Use when filling or updating subscription/IAP names and descriptions without App Store Connect UI work.