@harness-engineering/cli 1.6.2 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/dist/agents/personas/documentation-maintainer.yaml +3 -1
  2. package/dist/agents/personas/performance-guardian.yaml +23 -0
  3. package/dist/agents/personas/planner.yaml +27 -0
  4. package/dist/agents/personas/verifier.yaml +30 -0
  5. package/dist/agents/skills/claude-code/align-documentation/SKILL.md +13 -0
  6. package/dist/agents/skills/claude-code/cleanup-dead-code/SKILL.md +25 -1
  7. package/dist/agents/skills/claude-code/cleanup-dead-code/skill.yaml +5 -2
  8. package/dist/agents/skills/claude-code/detect-doc-drift/SKILL.md +12 -0
  9. package/dist/agents/skills/claude-code/enforce-architecture/SKILL.md +67 -1
  10. package/dist/agents/skills/claude-code/enforce-architecture/skill.yaml +5 -2
  11. package/dist/agents/skills/claude-code/harness-accessibility/SKILL.md +281 -0
  12. package/dist/agents/skills/claude-code/harness-accessibility/skill.yaml +51 -0
  13. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +119 -72
  14. package/dist/agents/skills/claude-code/harness-autopilot/skill.yaml +4 -2
  15. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +76 -4
  16. package/dist/agents/skills/claude-code/harness-brainstorming/skill.yaml +2 -0
  17. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +487 -234
  18. package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +15 -2
  19. package/dist/agents/skills/claude-code/harness-codebase-cleanup/SKILL.md +226 -0
  20. package/dist/agents/skills/claude-code/harness-codebase-cleanup/skill.yaml +64 -0
  21. package/dist/agents/skills/claude-code/harness-dependency-health/SKILL.md +35 -6
  22. package/dist/agents/skills/claude-code/harness-dependency-health/skill.yaml +1 -1
  23. package/dist/agents/skills/claude-code/harness-design/SKILL.md +265 -0
  24. package/dist/agents/skills/claude-code/harness-design/skill.yaml +53 -0
  25. package/dist/agents/skills/claude-code/harness-design-mobile/SKILL.md +336 -0
  26. package/dist/agents/skills/claude-code/harness-design-mobile/skill.yaml +49 -0
  27. package/dist/agents/skills/claude-code/harness-design-system/SKILL.md +282 -0
  28. package/dist/agents/skills/claude-code/harness-design-system/skill.yaml +50 -0
  29. package/dist/agents/skills/claude-code/harness-design-web/SKILL.md +360 -0
  30. package/dist/agents/skills/claude-code/harness-design-web/skill.yaml +52 -0
  31. package/dist/agents/skills/claude-code/harness-docs-pipeline/SKILL.md +460 -0
  32. package/dist/agents/skills/claude-code/harness-docs-pipeline/skill.yaml +69 -0
  33. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +73 -8
  34. package/dist/agents/skills/claude-code/harness-execution/skill.yaml +1 -0
  35. package/dist/agents/skills/claude-code/harness-hotspot-detector/SKILL.md +32 -6
  36. package/dist/agents/skills/claude-code/harness-hotspot-detector/skill.yaml +1 -1
  37. package/dist/agents/skills/claude-code/harness-i18n/SKILL.md +484 -0
  38. package/dist/agents/skills/claude-code/harness-i18n/skill.yaml +54 -0
  39. package/dist/agents/skills/claude-code/harness-i18n-process/SKILL.md +388 -0
  40. package/dist/agents/skills/claude-code/harness-i18n-process/skill.yaml +43 -0
  41. package/dist/agents/skills/claude-code/harness-i18n-workflow/SKILL.md +512 -0
  42. package/dist/agents/skills/claude-code/harness-i18n-workflow/skill.yaml +53 -0
  43. package/dist/agents/skills/claude-code/harness-impact-analysis/SKILL.md +51 -6
  44. package/dist/agents/skills/claude-code/harness-integrity/SKILL.md +35 -1
  45. package/dist/agents/skills/claude-code/harness-knowledge-mapper/SKILL.md +46 -5
  46. package/dist/agents/skills/claude-code/harness-knowledge-mapper/skill.yaml +1 -1
  47. package/dist/agents/skills/claude-code/harness-onboarding/SKILL.md +19 -1
  48. package/dist/agents/skills/claude-code/harness-perf/SKILL.md +37 -8
  49. package/dist/agents/skills/claude-code/harness-perf/skill.yaml +3 -0
  50. package/dist/agents/skills/claude-code/harness-perf-tdd/SKILL.md +17 -4
  51. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +57 -3
  52. package/dist/agents/skills/claude-code/harness-planning/skill.yaml +2 -0
  53. package/dist/agents/skills/claude-code/harness-release-readiness/SKILL.md +29 -9
  54. package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +562 -0
  55. package/dist/agents/skills/claude-code/harness-roadmap/skill.yaml +43 -0
  56. package/dist/agents/skills/claude-code/harness-security-review/SKILL.md +36 -2
  57. package/dist/agents/skills/claude-code/harness-security-review/skill.yaml +8 -6
  58. package/dist/agents/skills/claude-code/harness-security-scan/skill.yaml +1 -1
  59. package/dist/agents/skills/claude-code/harness-soundness-review/SKILL.md +1267 -0
  60. package/dist/agents/skills/claude-code/harness-soundness-review/skill.yaml +48 -0
  61. package/dist/agents/skills/claude-code/harness-test-advisor/SKILL.md +35 -6
  62. package/dist/agents/skills/claude-code/harness-verification/SKILL.md +66 -0
  63. package/dist/agents/skills/claude-code/harness-verification/skill.yaml +1 -0
  64. package/dist/agents/skills/claude-code/harness-verify/SKILL.md +37 -0
  65. package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +15 -1
  66. package/dist/agents/skills/claude-code/validate-context-engineering/SKILL.md +12 -0
  67. package/dist/agents/skills/gemini-cli/harness-accessibility/SKILL.md +281 -0
  68. package/dist/agents/skills/gemini-cli/harness-accessibility/skill.yaml +51 -0
  69. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +119 -72
  70. package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +4 -2
  71. package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/SKILL.md +226 -0
  72. package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/skill.yaml +64 -0
  73. package/dist/agents/skills/gemini-cli/harness-dependency-health/SKILL.md +35 -6
  74. package/dist/agents/skills/gemini-cli/harness-dependency-health/skill.yaml +1 -1
  75. package/dist/agents/skills/gemini-cli/harness-design/SKILL.md +265 -0
  76. package/dist/agents/skills/gemini-cli/harness-design/skill.yaml +53 -0
  77. package/dist/agents/skills/gemini-cli/harness-design-mobile/SKILL.md +336 -0
  78. package/dist/agents/skills/gemini-cli/harness-design-mobile/skill.yaml +49 -0
  79. package/dist/agents/skills/gemini-cli/harness-design-system/SKILL.md +282 -0
  80. package/dist/agents/skills/gemini-cli/harness-design-system/skill.yaml +50 -0
  81. package/dist/agents/skills/gemini-cli/harness-design-web/SKILL.md +360 -0
  82. package/dist/agents/skills/gemini-cli/harness-design-web/skill.yaml +52 -0
  83. package/dist/agents/skills/gemini-cli/harness-docs-pipeline/SKILL.md +460 -0
  84. package/dist/agents/skills/gemini-cli/harness-docs-pipeline/skill.yaml +69 -0
  85. package/dist/agents/skills/gemini-cli/harness-hotspot-detector/SKILL.md +32 -6
  86. package/dist/agents/skills/gemini-cli/harness-hotspot-detector/skill.yaml +1 -1
  87. package/dist/agents/skills/gemini-cli/harness-i18n/SKILL.md +484 -0
  88. package/dist/agents/skills/gemini-cli/harness-i18n/skill.yaml +54 -0
  89. package/dist/agents/skills/gemini-cli/harness-i18n-process/SKILL.md +388 -0
  90. package/dist/agents/skills/gemini-cli/harness-i18n-process/skill.yaml +43 -0
  91. package/dist/agents/skills/gemini-cli/harness-i18n-workflow/SKILL.md +512 -0
  92. package/dist/agents/skills/gemini-cli/harness-i18n-workflow/skill.yaml +53 -0
  93. package/dist/agents/skills/gemini-cli/harness-impact-analysis/SKILL.md +51 -6
  94. package/dist/agents/skills/gemini-cli/harness-knowledge-mapper/SKILL.md +46 -5
  95. package/dist/agents/skills/gemini-cli/harness-knowledge-mapper/skill.yaml +1 -1
  96. package/dist/agents/skills/gemini-cli/harness-perf/SKILL.md +37 -8
  97. package/dist/agents/skills/gemini-cli/harness-perf/skill.yaml +3 -0
  98. package/dist/agents/skills/gemini-cli/harness-perf-tdd/SKILL.md +17 -4
  99. package/dist/agents/skills/gemini-cli/harness-release-readiness/SKILL.md +29 -9
  100. package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +562 -0
  101. package/dist/agents/skills/gemini-cli/harness-roadmap/skill.yaml +43 -0
  102. package/dist/agents/skills/gemini-cli/harness-security-review/skill.yaml +8 -6
  103. package/dist/agents/skills/gemini-cli/harness-security-scan/skill.yaml +1 -1
  104. package/dist/agents/skills/gemini-cli/harness-soundness-review/SKILL.md +1267 -0
  105. package/dist/agents/skills/gemini-cli/harness-soundness-review/skill.yaml +48 -0
  106. package/dist/agents/skills/gemini-cli/harness-test-advisor/SKILL.md +35 -6
  107. package/dist/agents/skills/node_modules/.bin/vitest +2 -2
  108. package/dist/agents/skills/shared/design-knowledge/anti-patterns/color.yaml +106 -0
  109. package/dist/agents/skills/shared/design-knowledge/anti-patterns/layout.yaml +109 -0
  110. package/dist/agents/skills/shared/design-knowledge/anti-patterns/motion.yaml +109 -0
  111. package/dist/agents/skills/shared/design-knowledge/anti-patterns/typography.yaml +112 -0
  112. package/dist/agents/skills/shared/design-knowledge/industries/creative.yaml +80 -0
  113. package/dist/agents/skills/shared/design-knowledge/industries/ecommerce.yaml +80 -0
  114. package/dist/agents/skills/shared/design-knowledge/industries/emerging-tech.yaml +83 -0
  115. package/dist/agents/skills/shared/design-knowledge/industries/fintech.yaml +80 -0
  116. package/dist/agents/skills/shared/design-knowledge/industries/healthcare.yaml +80 -0
  117. package/dist/agents/skills/shared/design-knowledge/industries/lifestyle.yaml +80 -0
  118. package/dist/agents/skills/shared/design-knowledge/industries/saas.yaml +80 -0
  119. package/dist/agents/skills/shared/design-knowledge/industries/services.yaml +80 -0
  120. package/dist/agents/skills/shared/design-knowledge/palettes/curated.yaml +234 -0
  121. package/dist/agents/skills/shared/design-knowledge/platform-rules/android.yaml +125 -0
  122. package/dist/agents/skills/shared/design-knowledge/platform-rules/flutter.yaml +144 -0
  123. package/dist/agents/skills/shared/design-knowledge/platform-rules/ios.yaml +106 -0
  124. package/dist/agents/skills/shared/design-knowledge/platform-rules/web.yaml +102 -0
  125. package/dist/agents/skills/shared/design-knowledge/typography/pairings.yaml +274 -0
  126. package/dist/agents/skills/shared/i18n-knowledge/accessibility/intersection.yaml +142 -0
  127. package/dist/agents/skills/shared/i18n-knowledge/anti-patterns/encoding.yaml +67 -0
  128. package/dist/agents/skills/shared/i18n-knowledge/anti-patterns/formatting.yaml +106 -0
  129. package/dist/agents/skills/shared/i18n-knowledge/anti-patterns/layout.yaml +80 -0
  130. package/dist/agents/skills/shared/i18n-knowledge/anti-patterns/pluralization.yaml +80 -0
  131. package/dist/agents/skills/shared/i18n-knowledge/anti-patterns/string-handling.yaml +106 -0
  132. package/dist/agents/skills/shared/i18n-knowledge/frameworks/android-resources.yaml +47 -0
  133. package/dist/agents/skills/shared/i18n-knowledge/frameworks/apple-strings.yaml +47 -0
  134. package/dist/agents/skills/shared/i18n-knowledge/frameworks/backend-patterns.yaml +50 -0
  135. package/dist/agents/skills/shared/i18n-knowledge/frameworks/flutter-intl.yaml +47 -0
  136. package/dist/agents/skills/shared/i18n-knowledge/frameworks/i18next.yaml +47 -0
  137. package/dist/agents/skills/shared/i18n-knowledge/frameworks/react-intl.yaml +47 -0
  138. package/dist/agents/skills/shared/i18n-knowledge/frameworks/vue-i18n.yaml +47 -0
  139. package/dist/agents/skills/shared/i18n-knowledge/industries/ecommerce.yaml +66 -0
  140. package/dist/agents/skills/shared/i18n-knowledge/industries/fintech.yaml +66 -0
  141. package/dist/agents/skills/shared/i18n-knowledge/industries/gaming.yaml +69 -0
  142. package/dist/agents/skills/shared/i18n-knowledge/industries/healthcare.yaml +66 -0
  143. package/dist/agents/skills/shared/i18n-knowledge/industries/legal.yaml +66 -0
  144. package/dist/agents/skills/shared/i18n-knowledge/locales/ar.yaml +41 -0
  145. package/dist/agents/skills/shared/i18n-knowledge/locales/de.yaml +35 -0
  146. package/dist/agents/skills/shared/i18n-knowledge/locales/en.yaml +32 -0
  147. package/dist/agents/skills/shared/i18n-knowledge/locales/es.yaml +35 -0
  148. package/dist/agents/skills/shared/i18n-knowledge/locales/fi.yaml +35 -0
  149. package/dist/agents/skills/shared/i18n-knowledge/locales/fr.yaml +35 -0
  150. package/dist/agents/skills/shared/i18n-knowledge/locales/he.yaml +41 -0
  151. package/dist/agents/skills/shared/i18n-knowledge/locales/hi.yaml +35 -0
  152. package/dist/agents/skills/shared/i18n-knowledge/locales/it.yaml +32 -0
  153. package/dist/agents/skills/shared/i18n-knowledge/locales/ja.yaml +38 -0
  154. package/dist/agents/skills/shared/i18n-knowledge/locales/ko.yaml +38 -0
  155. package/dist/agents/skills/shared/i18n-knowledge/locales/nl.yaml +32 -0
  156. package/dist/agents/skills/shared/i18n-knowledge/locales/pl.yaml +35 -0
  157. package/dist/agents/skills/shared/i18n-knowledge/locales/pt.yaml +32 -0
  158. package/dist/agents/skills/shared/i18n-knowledge/locales/ru.yaml +35 -0
  159. package/dist/agents/skills/shared/i18n-knowledge/locales/sv.yaml +32 -0
  160. package/dist/agents/skills/shared/i18n-knowledge/locales/th.yaml +35 -0
  161. package/dist/agents/skills/shared/i18n-knowledge/locales/tr.yaml +35 -0
  162. package/dist/agents/skills/shared/i18n-knowledge/locales/zh-Hans.yaml +38 -0
  163. package/dist/agents/skills/shared/i18n-knowledge/locales/zh-Hant.yaml +35 -0
  164. package/dist/agents/skills/shared/i18n-knowledge/mcp-interop/i18next-mcp.yaml +56 -0
  165. package/dist/agents/skills/shared/i18n-knowledge/mcp-interop/lingo-dev.yaml +56 -0
  166. package/dist/agents/skills/shared/i18n-knowledge/mcp-interop/lokalise.yaml +60 -0
  167. package/dist/agents/skills/shared/i18n-knowledge/mcp-interop/tolgee.yaml +60 -0
  168. package/dist/agents/skills/shared/i18n-knowledge/testing/locale-testing.yaml +107 -0
  169. package/dist/agents/skills/shared/i18n-knowledge/testing/pseudo-localization.yaml +86 -0
  170. package/dist/bin/harness.js +64 -4
  171. package/dist/{chunk-UDWGSL3T.js → chunk-3JWCBVUZ.js} +3 -3
  172. package/dist/{chunk-IUFFBBYV.js → chunk-LNI4T7R6.js} +179 -61
  173. package/dist/{chunk-USEYPS7F.js → chunk-SJECMKSS.js} +2250 -40
  174. package/dist/{dist-4MYPT3OE.js → dist-BDO5GFEM.js} +295 -14
  175. package/dist/{dist-RBZXXJHG.js → dist-NT3GXHQZ.js} +95 -1
  176. package/dist/index.d.ts +266 -7
  177. package/dist/index.js +7 -3
  178. package/dist/validate-cross-check-2OPGCGGU.js +7 -0
  179. package/package.json +7 -7
  180. package/dist/validate-cross-check-CPEPNLOD.js +0 -7
@@ -0,0 +1,35 @@
1
+ locale: "fr"
2
+ name: "French"
3
+ native_name: "Français"
4
+ script: "Latin"
5
+ direction: ltr
6
+ cldr_plural_categories: [one, other]
7
+ expansion_factor: 1.20
8
+ script_characteristics:
9
+ avg_char_width: "narrow"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ number_format:
13
+ decimal_separator: ","
14
+ grouping_separator: "\u202F"
15
+ grouping_size: 3
16
+ date_format:
17
+ short: "DD/MM/YYYY"
18
+ long: "DD Month YYYY"
19
+ first_day_of_week: "monday"
20
+ common_pitfalls:
21
+ - pitfall: "Missing spaces before high punctuation"
22
+ example: "Bonjour! instead of 'Bonjour !' — French requires a non-breaking space before ; : ! and ?"
23
+ fix: "Insert a narrow non-breaking space (U+202F) before semicolon, colon, exclamation, and question marks"
24
+ - pitfall: "Confusing French number grouping"
25
+ example: "Displaying 1,234 instead of 1 234 — French uses narrow no-break space as grouping separator"
26
+ fix: "Use Intl.NumberFormat('fr') which correctly uses U+202F as the grouping separator"
27
+ - pitfall: "Not handling fr-FR vs fr-CA differences"
28
+ example: "Canadian French uses different vocabulary ('courriel' vs 'email') and some formatting conventions"
29
+ fix: "Support fr-FR and fr-CA as separate locales when targeting both markets"
30
+ - pitfall: "Gendered agreement in dynamic strings"
31
+ example: "'Vous etes connecte' vs 'Vous etes connectee' — adjective ending depends on user gender"
32
+ fix: "Use inclusive writing patterns or avoid gendered past participles in UI strings where possible"
33
+ - pitfall: "Quotation mark style"
34
+ example: "Using English \"quotes\" instead of French guillemets with spaces: 'texte'"
35
+ fix: "Ensure translation process converts quotation marks to locale-appropriate style (guillemets for French)"
@@ -0,0 +1,41 @@
1
+ locale: "he"
2
+ name: "Hebrew"
3
+ native_name: "עברית"
4
+ script: "Hebrew"
5
+ direction: rtl
6
+ cldr_plural_categories: [one, two, other]
7
+ expansion_factor: 1.20
8
+ script_characteristics:
9
+ avg_char_width: "standard"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ bidi_considerations:
13
+ mirror_icons: true
14
+ mirror_layout: true
15
+ mixed_direction_text: true
16
+ calendar_system: "gregorian"
17
+ digit_system: "western"
18
+ number_format:
19
+ decimal_separator: "."
20
+ grouping_separator: ","
21
+ grouping_size: 3
22
+ date_format:
23
+ short: "DD.MM.YYYY"
24
+ long: "DD b-Month YYYY"
25
+ first_day_of_week: "sunday"
26
+ common_pitfalls:
27
+ - pitfall: "Dual number form (unique to Hebrew among major languages)"
28
+ example: "Hebrew has a special form for exactly two: 'יום אחד' (1 day), 'יומיים' (2 days), 'ימים' (3+ days)"
29
+ fix: "Use CLDR plural categories [one, two, many, other] — do not skip the 'two' form"
30
+ - pitfall: "RTL layout mirroring without Hebrew-specific testing"
31
+ example: "Icons that should NOT mirror in RTL (checkmarks, media play buttons) get mirrored anyway"
32
+ fix: "Create an icon exception list for bidirectional layouts; test with native Hebrew speakers"
33
+ - pitfall: "Nikud (vowel diacritics) in UI text"
34
+ example: "Modern Hebrew usually omits nikud — adding it looks childish or overly formal in a UI context"
35
+ fix: "Use unvocalized Hebrew for UI strings unless targeting children's educational content"
36
+ - pitfall: "Mixed Hebrew and English in tech interfaces"
37
+ example: "Hebrew UI with English brand names, code, or tech terms creates complex bidi paragraphs"
38
+ fix: "Wrap English terms in spans with dir='ltr' to prevent bidi algorithm from reordering them"
39
+ - pitfall: "Hebrew calendar for date display"
40
+ example: "Some users expect Hebrew calendar dates alongside or instead of Gregorian dates"
41
+ fix: "Use Intl.DateTimeFormat('he-IL', {calendar: 'hebrew'}) when Hebrew calendar is needed"
@@ -0,0 +1,35 @@
1
+ locale: "hi"
2
+ name: "Hindi"
3
+ native_name: "हिन्दी"
4
+ script: "Devanagari"
5
+ direction: ltr
6
+ cldr_plural_categories: [one, other]
7
+ expansion_factor: 1.30
8
+ script_characteristics:
9
+ avg_char_width: "standard"
10
+ requires_complex_shaping: true
11
+ line_break_rules: "standard"
12
+ number_format:
13
+ decimal_separator: "."
14
+ grouping_separator: ","
15
+ grouping_sizes: [3, 2]
16
+ date_format:
17
+ short: "DD/MM/YYYY"
18
+ long: "DD Month YYYY"
19
+ first_day_of_week: "sunday"
20
+ common_pitfalls:
21
+ - pitfall: "Indian number grouping system"
22
+ example: "1,23,45,678 not 12,345,678 — groups of 2 after the initial group of 3 (from the right)"
23
+ fix: "Use Intl.NumberFormat('hi-IN') which produces correct Indian grouping automatically"
24
+ - pitfall: "Devanagari ligatures and conjunct consonants"
25
+ example: "Two or more consonants combine into a single ligature glyph — font must support conjuncts"
26
+ fix: "Use fonts with comprehensive Devanagari OpenType support (Noto Sans Devanagari, Mangal)"
27
+ - pitfall: "Shirorekha (headline) connecting characters"
28
+ example: "Devanagari characters connect via a horizontal line at the top — breaking this line breaks readability"
29
+ fix: "Never insert spaces or line breaks within a Devanagari word; use proper shaping-aware text rendering"
30
+ - pitfall: "Hindi vs English digit display"
31
+ example: "Hindi can use Devanagari digits (१२३) or Western digits (123) — preference varies by context"
32
+ fix: "Default to Western digits for digital interfaces; use Devanagari digits only for traditional/cultural contexts"
33
+ - pitfall: "Font size requirements for Devanagari"
34
+ example: "Devanagari script has more vertical complexity than Latin — 12px may be too small for readability"
35
+ fix: "Use minimum 14px for Devanagari body text; the script has ascenders, descenders, and matras that need space"
@@ -0,0 +1,32 @@
1
+ locale: "it"
2
+ name: "Italian"
3
+ native_name: "Italiano"
4
+ script: "Latin"
5
+ direction: ltr
6
+ cldr_plural_categories: [one, other]
7
+ expansion_factor: 1.20
8
+ script_characteristics:
9
+ avg_char_width: "narrow"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ number_format:
13
+ decimal_separator: ","
14
+ grouping_separator: "."
15
+ grouping_size: 3
16
+ date_format:
17
+ short: "DD/MM/YYYY"
18
+ long: "DD Month YYYY"
19
+ first_day_of_week: "monday"
20
+ common_pitfalls:
21
+ - pitfall: "Article-noun gender agreement in dynamic content"
22
+ example: "'il file' (masculine) vs 'la cartella' (feminine) — article must match noun gender"
23
+ fix: "Include the article in the translatable string with the noun, never construct 'article + noun' dynamically"
24
+ - pitfall: "Double consonant sensitivity"
25
+ example: "Truncating words can break meaning — 'anno' (year) vs 'ano' (anus)"
26
+ fix: "Never truncate Italian words programmatically; use ellipsis on full word boundaries"
27
+ - pitfall: "Apostrophe handling in articles"
28
+ example: "'l'utente' (the user) — the apostrophe is grammatically required, not optional punctuation"
29
+ fix: "Ensure text processing and search indexing handle apostrophes within Italian words correctly"
30
+ - pitfall: "Text expansion in button labels"
31
+ example: "'Save' (4 chars) becomes 'Salva' (5 chars); 'Cancel' becomes 'Annulla' (7 chars)"
32
+ fix: "Allow for 15-20% expansion in Italian; test button and navigation labels with translated strings"
@@ -0,0 +1,38 @@
1
+ locale: "ja"
2
+ name: "Japanese"
3
+ native_name: "日本語"
4
+ script: "CJK"
5
+ direction: ltr
6
+ cldr_plural_categories: [other]
7
+ expansion_factor: 0.8
8
+ script_characteristics:
9
+ avg_char_width: "wide"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "no-spaces"
12
+ cjk_width_handling: true
13
+ vertical_text_support: true
14
+ multiple_scripts: true
15
+ number_format:
16
+ decimal_separator: "."
17
+ grouping_separator: ","
18
+ grouping_size: 3
19
+ date_format:
20
+ short: "YYYY/MM/DD"
21
+ long: "YYYY年MM月DD日"
22
+ first_day_of_week: "sunday"
23
+ common_pitfalls:
24
+ - pitfall: "No word boundaries for line breaking"
25
+ example: "Japanese text has no spaces between words — standard word-wrap algorithms fail"
26
+ fix: "Use CSS word-break: auto or overflow-wrap: anywhere; rely on browser's built-in CJK line-break rules"
27
+ - pitfall: "Three writing systems in one string"
28
+ example: "A single sentence may mix kanji, hiragana, and katakana — font fallback chains must cover all three"
29
+ fix: "Specify comprehensive font stacks: system CJK fonts first, then fallback Latin fonts"
30
+ - pitfall: "Full-width vs half-width characters"
31
+ example: "Full-width 'A' (U+FF21) vs half-width 'A' (U+0041) — both valid but visually different widths"
32
+ fix: "Normalize input to consistent width forms; use Unicode normalization (NFKC) for search and comparison"
33
+ - pitfall: "Character count vs visual width"
34
+ example: "10 CJK characters occupy roughly the same width as 20 Latin characters"
35
+ fix: "Use visual width measurement (canvas measureText or CSS ch units) instead of string.length for layout"
36
+ - pitfall: "Honorific levels affecting string length"
37
+ example: "Polite forms (desu/masu) are longer than casual forms — UI strings vary by politeness level"
38
+ fix: "Establish consistent politeness level (typically polite/desu-masu for apps) and apply uniformly"
@@ -0,0 +1,38 @@
1
+ locale: "ko"
2
+ name: "Korean"
3
+ native_name: "한국어"
4
+ script: "Hangul"
5
+ direction: ltr
6
+ cldr_plural_categories: [other]
7
+ expansion_factor: 1.0
8
+ script_characteristics:
9
+ avg_char_width: "wide"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ cjk_width_handling: true
13
+ vertical_text_support: false
14
+ multiple_scripts: false
15
+ number_format:
16
+ decimal_separator: "."
17
+ grouping_separator: ","
18
+ grouping_size: 3
19
+ date_format:
20
+ short: "YYYY. MM. DD."
21
+ long: "YYYY년 MM월 DD일"
22
+ first_day_of_week: "sunday"
23
+ common_pitfalls:
24
+ - pitfall: "Korean has spaces between words unlike Japanese and Chinese"
25
+ example: "Korean uses spaces between words: '한국어 번역' — do not apply CJK no-space rules blindly"
26
+ fix: "Use standard word-wrap for Korean; it breaks between words unlike Chinese/Japanese character-level breaking"
27
+ - pitfall: "Honorific speech levels affecting text length"
28
+ example: "Korean has 7 speech levels — formal polite forms are longer than casual forms"
29
+ fix: "Standardize on formal polite level (합니다체) for apps and ensure consistent usage across all strings"
30
+ - pitfall: "Postposition particles attached to words"
31
+ example: "'파일을' (file + object marker) vs '파일이' (file + subject marker) — particle depends on context"
32
+ fix: "Include particles in the translatable string; never programmatically append Korean particles"
33
+ - pitfall: "Hangul syllable block composition"
34
+ example: "One Hangul syllable is composed of 2-3 jamo but displays as one character block"
35
+ fix: "Use Unicode NFC normalization for Korean text; decomposed jamo (NFD) render as separate components"
36
+ - pitfall: "Number grouping with man (10,000) convention"
37
+ example: "Large numbers sometimes group by 10,000 (만) instead of 1,000 in informal contexts"
38
+ fix: "Use Intl.NumberFormat('ko') for standard grouping; add 만/억 suffixes only where culturally appropriate"
@@ -0,0 +1,32 @@
1
+ locale: "nl"
2
+ name: "Dutch"
3
+ native_name: "Nederlands"
4
+ script: "Latin"
5
+ direction: ltr
6
+ cldr_plural_categories: [one, other]
7
+ expansion_factor: 1.20
8
+ script_characteristics:
9
+ avg_char_width: "narrow"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ number_format:
13
+ decimal_separator: ","
14
+ grouping_separator: "."
15
+ grouping_size: 3
16
+ date_format:
17
+ short: "DD-MM-YYYY"
18
+ long: "DD Month YYYY"
19
+ first_day_of_week: "monday"
20
+ common_pitfalls:
21
+ - pitfall: "Long compound words similar to German"
22
+ example: "'arbeidsongeschiktheidsverzekering' (disability insurance) — 35 characters without spaces"
23
+ fix: "Apply CSS hyphens: auto with lang='nl' and test overflow behavior with real Dutch translations"
24
+ - pitfall: "Confusing nl-NL and nl-BE (Flemish)"
25
+ example: "Using 'fiets' vs regional vocabulary differences between Netherlands and Belgium"
26
+ fix: "Support nl-NL and nl-BE separately when targeting both markets; formatting conventions differ"
27
+ - pitfall: "IJ digraph capitalization"
28
+ example: "Capitalizing only the I in 'IJsselmeer' — IJ is a single unit and both letters must capitalize"
29
+ fix: "When applying text-transform: capitalize, handle the IJ digraph as a special case for Dutch"
30
+ - pitfall: "Diminutive suffixes in UI labels"
31
+ example: "Dutch uses diminutives extensively (-je, -tje, -pje) which can change word length unpredictably"
32
+ fix: "Test with actual translations rather than estimating expansion; diminutives can shorten or lengthen labels"
@@ -0,0 +1,35 @@
1
+ locale: "pl"
2
+ name: "Polish"
3
+ native_name: "Polski"
4
+ script: "Latin"
5
+ direction: ltr
6
+ cldr_plural_categories: [one, few, many, other]
7
+ expansion_factor: 1.30
8
+ script_characteristics:
9
+ avg_char_width: "narrow"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ number_format:
13
+ decimal_separator: ","
14
+ grouping_separator: "\u00A0"
15
+ grouping_size: 3
16
+ date_format:
17
+ short: "DD.MM.YYYY"
18
+ long: "DD Month YYYY"
19
+ first_day_of_week: "monday"
20
+ common_pitfalls:
21
+ - pitfall: "Four plural forms with complex modular rules"
22
+ example: "1 plik, 2 pliki, 5 plikow, 22 pliki — similar to Russian but with different thresholds"
23
+ fix: "Use CLDR plural rules: one (1), few (2-4,22-24...), many (5-21,25-31...), other (fractional)"
24
+ - pitfall: "Special Polish characters in sorting and search"
25
+ example: "Polish has a, c, e, l, n, o, s, z, z — these sort differently than their base Latin equivalents"
26
+ fix: "Use Intl.Collator('pl') for sorting; Polish letters with diacritics have specific sort positions"
27
+ - pitfall: "Text expansion of 20-30%"
28
+ example: "'Settings' (8 chars) becomes 'Ustawienia' (10 chars); 'Delete' becomes 'Usun' (4 chars, shorter)"
29
+ fix: "Design for 30% expansion overall; individual strings may expand or contract unpredictably"
30
+ - pitfall: "Gendered past tense verbs"
31
+ example: "'You logged in' differs by gender: 'Zalogowales sie' (m) vs 'Zalogowalas sie' (f)"
32
+ fix: "Avoid past tense constructions in UI or use gender-neutral alternatives when possible"
33
+ - pitfall: "Consonant clusters in words"
34
+ example: "Polish has consonant clusters like 'wspolprace' that affect text-to-speech and hyphenation"
35
+ fix: "Use proper Polish hyphenation dictionaries; do not apply English hyphenation rules to Polish text"
@@ -0,0 +1,32 @@
1
+ locale: "pt"
2
+ name: "Portuguese"
3
+ native_name: "Português"
4
+ script: "Latin"
5
+ direction: ltr
6
+ cldr_plural_categories: [one, other]
7
+ expansion_factor: 1.25
8
+ script_characteristics:
9
+ avg_char_width: "narrow"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ number_format:
13
+ decimal_separator: ","
14
+ grouping_separator: "."
15
+ grouping_size: 3
16
+ date_format:
17
+ short: "DD/MM/YYYY"
18
+ long: "DD de Month de YYYY"
19
+ first_day_of_week: "monday"
20
+ common_pitfalls:
21
+ - pitfall: "Treating pt-BR and pt-PT as identical"
22
+ example: "Using 'celular' (Brazil) where 'telemovel' (Portugal) is expected, or vice versa"
23
+ fix: "Support pt-BR and pt-PT as separate locales; vocabulary, spelling, and formatting differ significantly"
24
+ - pitfall: "Spelling reform inconsistencies"
25
+ example: "Mixing pre-2009 and post-2009 orthographic agreement spellings in the same interface"
26
+ fix: "Standardize on post-reform spelling and ensure all translation memory is updated consistently"
27
+ - pitfall: "Gendered language in user-facing strings"
28
+ example: "'Bem-vindo' (masculine) vs 'Bem-vinda' (feminine) — greeting depends on user gender"
29
+ fix: "Use gender-neutral alternatives like 'Boas-vindas' or provide both forms based on user profile"
30
+ - pitfall: "Brazilian vs European number formatting"
31
+ example: "pt-BR and pt-PT both use comma for decimal, but currency symbol placement may differ"
32
+ fix: "Use locale-specific formatting (pt-BR vs pt-PT) rather than generic pt for currency display"
@@ -0,0 +1,35 @@
1
+ locale: "ru"
2
+ name: "Russian"
3
+ native_name: "Русский"
4
+ script: "Cyrillic"
5
+ direction: ltr
6
+ cldr_plural_categories: [one, few, many, other]
7
+ expansion_factor: 1.25
8
+ script_characteristics:
9
+ avg_char_width: "standard"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ number_format:
13
+ decimal_separator: ","
14
+ grouping_separator: "\u00A0"
15
+ grouping_size: 3
16
+ date_format:
17
+ short: "DD.MM.YYYY"
18
+ long: "DD Month YYYY g."
19
+ first_day_of_week: "monday"
20
+ common_pitfalls:
21
+ - pitfall: "Four plural forms with complex rules"
22
+ example: "1 файл, 2 файла, 5 файлов, 21 файл — the rule depends on the last two digits"
23
+ fix: "Use CLDR plural rules: one (1,21,31...), few (2-4,22-24...), many (5-20,25-30...), other (fractional)"
24
+ - pitfall: "Six grammatical cases affecting dynamic content"
25
+ example: "'Москва' changes form by case: Москвы (genitive), Москве (dative), Москву (accusative)"
26
+ fix: "Include case-inflected forms in translation strings; never try to programmatically decline Russian nouns"
27
+ - pitfall: "Cyrillic characters that look identical to Latin"
28
+ example: "Cyrillic 'а' (U+0430) looks like Latin 'a' (U+0061) but they are different characters"
29
+ fix: "Use Unicode-aware text comparison; visually identical Cyrillic/Latin chars cause search and auth issues"
30
+ - pitfall: "Number grouping with non-breaking space"
31
+ example: "1 000 000 not 1,000,000 — Russian uses non-breaking space as grouping separator"
32
+ fix: "Use Intl.NumberFormat('ru') for correct space-based number grouping"
33
+ - pitfall: "Abbreviated month and day names"
34
+ example: "Russian abbreviations follow different patterns than English — 'янв.' not 'Янв'"
35
+ fix: "Use Intl.DateTimeFormat('ru') for abbreviated date components; do not manually truncate month names"
@@ -0,0 +1,32 @@
1
+ locale: "sv"
2
+ name: "Swedish"
3
+ native_name: "Svenska"
4
+ script: "Latin"
5
+ direction: ltr
6
+ cldr_plural_categories: [one, other]
7
+ expansion_factor: 1.10
8
+ script_characteristics:
9
+ avg_char_width: "narrow"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ number_format:
13
+ decimal_separator: ","
14
+ grouping_separator: "\u00A0"
15
+ grouping_size: 3
16
+ date_format:
17
+ short: "YYYY-MM-DD"
18
+ long: "DD Month YYYY"
19
+ first_day_of_week: "monday"
20
+ common_pitfalls:
21
+ - pitfall: "Definite article suffixes changing word length"
22
+ example: "'hus' (house) becomes 'huset' (the house) — suffix adds characters unpredictably"
23
+ fix: "Account for suffix-based articles when estimating text length; Swedish words grow with definiteness"
24
+ - pitfall: "Special characters in sorting"
25
+ example: "Swedish alphabet ends with A, A, O — these sort AFTER Z, not with A and O"
26
+ fix: "Use locale-aware string comparison (Intl.Collator('sv')) for sorting Swedish text"
27
+ - pitfall: "ISO 8601 date format as default"
28
+ example: "Swedish natively uses YYYY-MM-DD (ISO 8601) — displaying DD/MM/YYYY feels foreign"
29
+ fix: "Use Intl.DateTimeFormat('sv') which correctly produces the ISO-style date format"
30
+ - pitfall: "Number grouping with space separator"
31
+ example: "Displaying 1,000 instead of 1 000 — Swedish uses non-breaking space as grouping separator"
32
+ fix: "Use Intl.NumberFormat('sv') for correct space-based number grouping"
@@ -0,0 +1,35 @@
1
+ locale: "th"
2
+ name: "Thai"
3
+ native_name: "ภาษาไทย"
4
+ script: "Thai"
5
+ direction: ltr
6
+ cldr_plural_categories: [other]
7
+ expansion_factor: 1.15
8
+ script_characteristics:
9
+ avg_char_width: "standard"
10
+ requires_complex_shaping: true
11
+ line_break_rules: "dictionary"
12
+ number_format:
13
+ decimal_separator: "."
14
+ grouping_separator: ","
15
+ grouping_size: 3
16
+ date_format:
17
+ short: "DD/MM/YYYY"
18
+ long: "DD Month YYYY"
19
+ first_day_of_week: "sunday"
20
+ common_pitfalls:
21
+ - pitfall: "No spaces between words — dictionary-based line breaking required"
22
+ example: "Thai text runs words together without spaces; standard word-wrap fails completely"
23
+ fix: "Use ICU or dictionary-based word segmentation (Intl.Segmenter with granularity: 'word') for line breaking"
24
+ - pitfall: "Stacking diacritics above and below characters"
25
+ example: "Thai uses above-character vowels, tone marks, and below-character vowels — vertical space needed"
26
+ fix: "Increase line-height to at least 1.8 for Thai text to accommodate stacking diacritics"
27
+ - pitfall: "Thai digits vs Western digits"
28
+ example: "Thai has its own digit set (๐๑๒๓๔๕๖๗๘๙) but Western digits are common in digital contexts"
29
+ fix: "Default to Western digits for apps; Thai digits are used mainly in formal/traditional documents"
30
+ - pitfall: "Buddhist Era calendar year"
31
+ example: "Thai calendar year = Gregorian + 543, so 2025 CE = 2568 BE — some users expect BE years"
32
+ fix: "Use Intl.DateTimeFormat('th', {calendar: 'buddhist'}) when Buddhist Era dates are appropriate"
33
+ - pitfall: "Complex character composition affecting string operations"
34
+ example: "A visual Thai 'character' may be composed of multiple Unicode code points (base + vowel + tone)"
35
+ fix: "Use grapheme cluster-aware string operations; never split Thai text by code point or char index"
@@ -0,0 +1,35 @@
1
+ locale: "tr"
2
+ name: "Turkish"
3
+ native_name: "Türkçe"
4
+ script: "Latin"
5
+ direction: ltr
6
+ cldr_plural_categories: [one, other]
7
+ expansion_factor: 1.20
8
+ script_characteristics:
9
+ avg_char_width: "narrow"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "standard"
12
+ number_format:
13
+ decimal_separator: ","
14
+ grouping_separator: "."
15
+ grouping_size: 3
16
+ date_format:
17
+ short: "DD.MM.YYYY"
18
+ long: "DD Month YYYY"
19
+ first_day_of_week: "monday"
20
+ common_pitfalls:
21
+ - pitfall: "Dotted vs dotless I — the most famous i18n bug"
22
+ example: "'istanbul'.toUpperCase() produces 'ISTANBUL' (ASCII I) instead of correct Turkish 'İSTANBUL' (İ, U+0130 Latin Capital Letter I With Dot Above)"
23
+ fix: "Always use locale-aware case conversion: toLocaleUpperCase('tr') and toLocaleLowerCase('tr')"
24
+ - pitfall: "Case-insensitive comparison breaking with Turkish locale"
25
+ example: "Comparing 'FILE' and 'file' with Turkish locale fails because I != i in Turkish"
26
+ fix: "Use locale-aware comparison (Intl.Collator) or normalize to a known locale for case-insensitive checks"
27
+ - pitfall: "Agglutinative grammar creating long words"
28
+ example: "'Avrupalilasamayanlardan' (from those who cannot be Europeanized) — suffixes stack"
29
+ fix: "Design for text expansion from suffix stacking; use CSS overflow-wrap: break-word for safety"
30
+ - pitfall: "Vowel harmony in suffixes"
31
+ example: "Suffixes change based on the last vowel: 'evde' (in the house) vs 'okulda' (in the school)"
32
+ fix: "Never programmatically append Turkish suffixes; always use translator-provided complete forms"
33
+ - pitfall: "Currency formatting for Turkish Lira"
34
+ example: "Turkish Lira symbol (₺) placement and number formatting must follow Turkish conventions"
35
+ fix: "Use Intl.NumberFormat('tr-TR', {style: 'currency', currency: 'TRY'}) for proper Lira formatting"
@@ -0,0 +1,38 @@
1
+ locale: "zh-Hans"
2
+ name: "Chinese (Simplified)"
3
+ native_name: "简体中文"
4
+ script: "CJK"
5
+ direction: ltr
6
+ cldr_plural_categories: [other]
7
+ expansion_factor: 0.6
8
+ script_characteristics:
9
+ avg_char_width: "wide"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "no-spaces"
12
+ cjk_width_handling: true
13
+ vertical_text_support: false
14
+ multiple_scripts: false
15
+ number_format:
16
+ decimal_separator: "."
17
+ grouping_separator: ","
18
+ grouping_size: 3
19
+ date_format:
20
+ short: "YYYY/MM/DD"
21
+ long: "YYYY年MM月DD日"
22
+ first_day_of_week: "sunday"
23
+ common_pitfalls:
24
+ - pitfall: "Text contraction causing UI elements to look empty"
25
+ example: "'Internationalization' (20 chars) becomes '国际化' (3 chars) — a 85% reduction"
26
+ fix: "Use min-width on buttons and containers to prevent them from collapsing with short CJK translations"
27
+ - pitfall: "No word spaces means no natural line breaks"
28
+ example: "A long Chinese sentence has no spaces — wrapping can break between any two characters"
29
+ fix: "Use CSS word-break: normal for CJK; browsers handle character-level breaking correctly by default"
30
+ - pitfall: "Confusing zh-Hans with zh-Hant"
31
+ example: "Showing traditional characters (繁體) to mainland China users who expect simplified (简体)"
32
+ fix: "Use explicit zh-Hans (simplified) vs zh-Hant (traditional) subtags; never use bare 'zh'"
33
+ - pitfall: "CJK punctuation width"
34
+ example: "Chinese uses full-width punctuation (。,!) not half-width (. , !) — affects text measurement"
35
+ fix: "Account for full-width punctuation in text width calculations and do not replace with ASCII equivalents"
36
+ - pitfall: "Font size minimum for CJK readability"
37
+ example: "Complex characters become illegible below 12px — strokes merge at small sizes"
38
+ fix: "Set minimum font size of 12px for CJK text; 14px is recommended for body text"
@@ -0,0 +1,35 @@
1
+ locale: "zh-Hant"
2
+ name: "Chinese (Traditional)"
3
+ native_name: "繁體中文"
4
+ script: "CJK"
5
+ direction: ltr
6
+ cldr_plural_categories: [other]
7
+ expansion_factor: 0.6
8
+ script_characteristics:
9
+ avg_char_width: "wide"
10
+ requires_complex_shaping: false
11
+ line_break_rules: "no-spaces"
12
+ cjk_width_handling: true
13
+ vertical_text_support: true
14
+ multiple_scripts: false
15
+ number_format:
16
+ decimal_separator: "."
17
+ grouping_separator: ","
18
+ grouping_size: 3
19
+ date_format:
20
+ short: "YYYY/MM/DD"
21
+ long: "YYYY年MM月DD日"
22
+ first_day_of_week: "sunday"
23
+ common_pitfalls:
24
+ - pitfall: "Regional vocabulary differences (Taiwan vs Hong Kong vs Macau)"
25
+ example: "'Software' is '軟體' in Taiwan but '軟件' in Hong Kong — same script, different terms"
26
+ fix: "Support zh-Hant-TW and zh-Hant-HK as separate locales when targeting both markets"
27
+ - pitfall: "Automatic simplified-to-traditional conversion producing wrong characters"
28
+ example: "One simplified character may map to multiple traditional characters based on context"
29
+ fix: "Never use automated character conversion; commission proper traditional Chinese translations"
30
+ - pitfall: "More complex characters requiring larger minimum font size"
31
+ example: "Traditional characters have more strokes than simplified — 體 vs 体 — needing higher resolution"
32
+ fix: "Use minimum 13-14px for traditional Chinese body text to ensure stroke clarity"
33
+ - pitfall: "Mixed CJK and Latin text spacing"
34
+ example: "No space between Chinese and English words looks cramped: '使用GitHub' vs '使用 GitHub'"
35
+ fix: "Apply CSS text-autospace or insert thin spaces between CJK and Latin text runs programmatically"
@@ -0,0 +1,56 @@
1
+ name: "i18next MCP"
2
+ description: "i18next-specific MCP server for project analysis, translation coverage reporting, key usage analysis, and namespace management"
3
+ mcp_server_id: "i18next-mcp"
4
+ source: "https://github.com/anthropics/i18next-mcp"
5
+
6
+ capabilities:
7
+ - name: "Project Analysis"
8
+ description: "Analyze i18next project structure, configuration, and translation file organization"
9
+ tools: ["analyze_project", "get_config", "list_namespaces"]
10
+ - name: "Translation Coverage"
11
+ description: "Report translation coverage per locale and namespace, identifying missing translations"
12
+ tools: ["get_coverage_report", "find_missing_translations", "find_unused_keys"]
13
+ - name: "Key Usage Analysis"
14
+ description: "Trace translation key usage in source code to find unused or missing keys"
15
+ tools: ["find_key_usage", "find_hardcoded_strings", "extract_keys"]
16
+ - name: "Namespace Management"
17
+ description: "Create, merge, and split translation namespaces"
18
+ tools: ["create_namespace", "merge_namespaces", "move_keys"]
19
+
20
+ when_to_use:
21
+ - scenario: "Project already using i18next that wants deeper translation insights"
22
+ reason: "i18next MCP understands i18next conventions (namespaces, pluralization suffixes, interpolation) natively"
23
+ - scenario: "Auditing an existing codebase for i18n completeness"
24
+ reason: "Key usage analysis finds hardcoded strings and unused translation keys without manual code review"
25
+ - scenario: "Refactoring translation file organization"
26
+ reason: "Namespace management tools help split large translation files or merge fragmented namespaces"
27
+
28
+ when_not_to_use:
29
+ - scenario: "Project using react-intl, vue-i18n, or other non-i18next frameworks"
30
+ reason: "i18next MCP tools are specific to i18next conventions and file structures"
31
+ - scenario: "Team needing full TMS capabilities (translator collaboration, review workflows)"
32
+ reason: "i18next MCP is a developer tool, not a TMS; use Tolgee or Lokalise for translator workflows"
33
+
34
+ integration_patterns:
35
+ - pattern: "Harness workflow with i18next MCP for translation audit"
36
+ description: "Use i18next MCP tools during the i18n assessment phase to analyze coverage and identify gaps"
37
+ config_example: |
38
+ // harness.config.json
39
+ {
40
+ "mcp": {
41
+ "servers": {
42
+ "i18next": {
43
+ "command": "npx",
44
+ "args": ["-y", "@anthropic/i18next-mcp"],
45
+ "env": {
46
+ "I18NEXT_PROJECT_PATH": "."
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ limitations:
54
+ - "Only supports i18next ecosystem; not compatible with other i18n frameworks"
55
+ - "Key extraction may miss dynamically constructed translation keys (t(`error.${code}`))"
56
+ - "Coverage reporting depends on consistent file structure matching the configured pattern"