Getting it into your agent
This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.
/plugin marketplace add Viindoo/odoo-mcp-client/plugin install odoo-ai-agentsWrote 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/viindoo/odoo-mcp-client/odoo-i18n)<a href="https://agentmods.dev/skills/viindoo/odoo-mcp-client/odoo-i18n"><img src="https://agentmods.dev/badge/skills/viindoo/odoo-mcp-client/odoo-i18n/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/viindoo/odoo-mcp-client/odoo-i18n"><img src="https://agentmods.dev/badge/skills/viindoo/odoo-mcp-client/odoo-i18n.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.00238 | $0.06858 |
| Opus 5 | $0.00119 | $0.03429 |
| Sonnet 5 | $0.00048 | $0.01372 |
| Haiku 4.5 | $0.00024 | $0.00686 |
Grade B, and why
odoo-i18n scanned grade B with 1 finding 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 7d 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.
Recursive force deletemediumDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
`find <ISOLATE_DIR>/i18n/ -mindepth 1 -maxdepth 1 -type d -mmin +43200 -exec rm -rf {} +` Downgraded: this mod is about security review, or the phrase is quoted, so it is likely naming the pattern rather than instructing it.
How it starts
The opening of the file, as written. The whole thing — 367 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Role
i18n conductor for Odoo translation. Owns the .pot/.po lifecycle, the glossary, and the
subagent lifecycle for translating a module or module scope onto a target Odoo series. Makes the
orchestration decisions (phase model tier, when to stop for a human, when to dispatch the leaf
translator) and delegates actual term translation to the odoo-translator agent.
The load-bearing belief: a translation is MEMORY to be forwarded, never regenerated. Re-exporting a
.po from a database that has NOT loaded the existing translation overwrites it with empty
msgstrs and silently destroys 40-90% of the human translation with a clean exit code. The
non-destructive method: build a FRESH instance, LOAD the existing .po into it, re-export (which
then reproduces the translation), then RECONCILE by a git-ops diff-review - adjudicate every
removed/changed entry before commit (no polib), into the THREE buckets of
${CLAUDE_PLUGIN_ROOT}/snippets/po-entry-semantics.md § Adjudicating a removed or changed entry.
The second load-bearing belief, and the one a two-bucket habit gets wrong: a translation equal to
its source is stored as an EMPTY msgstr - that is Odoo's convention, not a lost string. Such an
entry comes back blank from every re-export, so a blank is NOT proof of missing work: it is either a
NEW term or an ARTEFACT of the round-trip, and translating an ARTEFACT overwrites a reviewed
do-not-localise decision. Both rules, with the test that separates them, are in
${CLAUDE_PLUGIN_ROOT}/snippets/po-entry-semantics.md; term choice is
${CLAUDE_PLUGIN_ROOT}/snippets/translation-term-policy.md. Neither is restated in this skill.
The third load-bearing belief, and the one that decides what a run can even SEE: the BUILD SHAPE
is part of the method. The catalog is bounded by what is in the database, so the export instance
must be installed WITH DEMO DATA (demo-owned records carry translatable terms and the exporter
filters by module alone), must have en_US plus every target language active, and must be the ONE
build every artifact of the run - the .pot and each .po - is exported from. A demo-less or
mixed-build run does not merely produce a smaller catalog: it makes committed entries reappear as
removals whose msgids are still in source, which is the exact shape that gets mis-ruled and
"fixed" by deleting real translation. Grounded, per-series flags and the gate that checks it:
references/i18n-recipe.md KT4/KT5 + Validation gate 6.
A clean export + a green
install is NOT proof the translation survived; only an adjudicated diff-review plus an Odoo -u
reload proves it. Full non-destructive recipe (3-layer L1/L2/L3 +
validation + glossary): references/i18n-recipe.md - the SSOT this skill and odoo-forward-port
both point at.
Sole dispatcher (single source of truth for i18n fan-out). This skill is the ONLY component
that launches the odoo-translator agent. Any other skill that needs a module translated, a
.pot/.po exported/merged, or cross-module terminology audited routes that work HERE via the
Skill tool instead of spawning the agent itself, so the non-destructive merge contract and the
per-language leaf scoping (P1-P5) are enforced in one place. A live instance is provisioned by
invoking the odoo-instance skill (never the raw odoo-instance-ops agent).
WORKTREE_PATH is required whenever this skill runs. .po / .pot files are git-tracked, so per
${CLAUDE_PLUGIN_ROOT}/snippets/dispatch-brief.md field 5 the write happens in a dedicated worktree -
never the principal checkout. A caller (forward-port, modules-upgrade, a run-harness node) passes
WORKTREE_PATH:; you forward it verbatim to every odoo-translator leaf. Invoked with no
WORKTREE_PATH and no worktree of your own -> provision one via git-toolkit:git-ops before P2, per
${CLAUDE_PLUGIN_ROOT}/snippets/git-delegation.md. The verification instance must load THAT tree, not
the principal checkout: pass WORKTREE_PATH through to odoo-instance
(${CLAUDE_PLUGIN_ROOT}/skills/odoo-instance/SKILL.md § WORKTREE_PATH substitution) so the export
reads the code you are translating.
What ships with it
2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- 7d ago First seen · 367 lines · 238 tokens per session scan B 92b343d01310
odoo-i18n is a skill published in the GitHub repository Viindoo/odoo-mcp-client (7 stars, last pushed 4d ago), licensed MIT. It adds 238 tokens to every session and 6,858 once invoked, about $0.0012 per session on Opus 5. A static security scan graded it B with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
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.
seedance-vocab-ja
This skill should be used when the user asks for Japanese Seedance 2.0 prompt wording, Japanese cinematic vocabulary, or translation of camera, lighting, action, VFX, audio, and production terms into Japanese.
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.
i18n-helper
A helper for adding internationalization, which lets software show different languages and regional text. It finds user-visible text written directly in code and moves it into language files.