# Sonenta > Sonenta moves your app's UI text out of your codebase into a live content layer your own AI coding agent manages over MCP. You reference a key in code instead of a hard-coded string; your agent (Claude Code, Cursor, Claude Desktop) creates and translates that key locally, then publishes it to a global CDN; your app fetches the value at runtime. You change wording, a translation, or accessibility text and it reaches production in seconds, no code change, no redeploy. The agent stays on your machine and does the work; Sonenta is the persistent memory and delivery layer it calls, not an AI-translation service that takes over. Translation is the entry point; the same pipeline handles accessibility, in-context review, and user feedback. ## Why not just use my agent + GitHub? Your agent can already translate files and commit them. But on the next pass it loses context, the terminology drifts, and it re-translates everything. Sonenta gives your agent a persistent content memory it calls over MCP: a glossary, key descriptions, and project context that keep terminology consistent and translate only what changed, then ship it live to the CDN with no rebuild. The agent stays on your machine. Sonenta is the layer it calls, not a black box that takes over. ## How a string reaches your screen 1. In code you reference a key (e.g. t('checkout.title')), not a literal. 2. Your local agent, over the Sonenta MCP, creates and translates that key, grounded in a persistent glossary, descriptions and project context, so terminology never drifts and only what changed is re-translated. Runs on your machine, zero AI credits for routine work. 3. Publishing pushes the values to a global CDN (publish_cdn). 4. Your app's Sonenta SDK fetches the live values from the CDN at runtime. A fix ships in seconds, no rebuild, no app-store wait. The source of truth is Sonenta, resolved at runtime, not JSON files committed to your repo. That runtime layer is exactly what a DIY "agent + GitHub" loop and a legacy TMS do not give you. ## Connect (for coding agents) - MCP first: add the Sonenta MCP server, package @sonenta/mcp (npm) or sonenta-mcp (PyPI), configured with SONENTA_API_KEY and SONENTA_PROJECTS. Your agent then gets tools to create keys, translate, and publish. - One-call onboarding: GET https://api.sonenta.dev/v1/guide (or the sonenta_guide MCP tool) returns a structured playbook in a single call: how to connect, the main actions with their exact endpoints, and these pointers. - REST fallback: the public API base is https://api.sonenta.dev. The full machine-readable contract is the OpenAPI spec at https://api.sonenta.dev/openapi.json (browsable at https://api.sonenta.dev/docs). - Never hard-code a CDN host. Read the CDN base from GET /v1/orgs/{org}/projects/{id}/distribution, which returns distribution.cdn.base_url and a url_template. Projects can sit on a dedicated CDN zone, so no single shared host is the destination for every project. - Main actions an agent performs: authenticate with an API key, create namespaces and keys, write values, publish a release to the CDN, and read the distribution. See the guide and the OpenAPI spec for exact paths and examples. ## Docs - [Developer quickstart (MCP-first)](https://sonenta.com/docs/quickstart): connect your agent over MCP and ship from your editor. - [MCP setup](https://sonenta.com/docs/mcp/setup): configure the Sonenta MCP in Claude Code, Cursor, or Claude Desktop, plus the full tool list. - [CLI](https://sonenta.com/docs/cli): the sonenta binary (push, pull, import) for scripts and CI. - [Classic-interface quickstart](https://sonenta.com/docs/quickstart/gui): manage translations from the dashboard or by talking to Claude Desktop. - [Docs home](https://sonenta.com/docs): all guides and the API reference. ## Content model and generated reference (/docs/) > Générée depuis `@sonenta/cli` 0.79.1 et `@sonenta/mcp` 0.57.0 le 2026-09-10. ### CLI - @sonenta/cli v0.79.1 - [sonenta login](/docs/reference/cli/login/): Sign in to Sonenta. Default: account login via the browser (device flow): the session used by `projects create` / `api-keys create`. With --token: store an API key (Authorization: ApiKey) for runtime/MCP + content commands. - [sonenta logout](/docs/reference/cli/logout/): Remove stored credentials for a host (default: the current default host). - [sonenta whoami](/docs/reference/cli/whoami/): Show the host this directory talks to + which API key is in use. - [sonenta init](/docs/reference/cli/init/): Scaffold sonenta.config.json AND write a managed Sonenta block into CLAUDE.md / AGENTS.md so coding agents know how this repo uses Sonenta. - [sonenta setup](/docs/reference/cli/setup/): Show this folder's Sonenta setup (account, project link, API key, MCP) and the next step. - [sonenta projects](/docs/reference/cli/projects/): Inspect and create Sonenta projects. - [sonenta keys](/docs/reference/cli/keys/): Inspect translation keys for the current project. - [sonenta namespaces](/docs/reference/cli/namespaces/): Manage translation namespaces (the containers for keys) for the current project. - [sonenta api-keys](/docs/reference/cli/api-keys/): Manage API keys (credentials) for the organization. - [sonenta import](/docs/reference/cli/import/): Import i18next JSON file(s) into Sonenta in ONE call: creates missing keys and upserts translations (idempotent). Accepts nested or flat JSON. Language/namespace are inferred from the path (/.json) or forced with --language / --namespace. - [sonenta push](/docs/reference/cli/push/): Push the whole local locales/ tree to Sonenta, BATCHED: creates missing keys and upserts translations (idempotent). Reads locales//.json (flat dot-notation). Each key carries all its languages in one batch, so the source value is never split from its translations. - [sonenta pull](/docs/reference/cli/pull/): Pull translations from Sonenta into locales//.json (flat dot-notation). Overwrites local files: pair with `git status`. - [sonenta export](/docs/reference/cli/export/): Export translations as i18next JSON (default) or XLIFF (--format xliff). JSON is flat dot-notation by default (--nested for nested trees). Writes //.json with --out, otherwise prints { locale: { namespace: tree } } to stdout. - [sonenta status](/docs/reference/cli/status/): Diff local locales/ against the remote project state. - [sonenta releases](/docs/reference/cli/releases/): Manage CDN releases for the project. - [sonenta snapshot](/docs/reference/cli/snapshot/): Generate a build-time translations snapshot for @sonenta/react-i18next `initialBundles` (offline-first fallback). Fetches the PUBLIC CDN bundles (exactly what the SDK loads at runtime) and assembles Record>. Emits a .ts module (default) or .json. - [sonenta missing](/docs/reference/cli/missing/): List runtime-detected missing keys for the configured project. Requires the API key to carry the `mcp:*` scope. - [sonenta prompts](/docs/reference/cli/prompts/): Browse the Sonenta prompt library (read-only). - [sonenta plural-categories](/docs/reference/cli/plural-categories/): Show the CLDR plural categories a language requires (babel-authoritative). - [sonenta a11y](/docs/reference/cli/a11y/): Accessibility tooling: analyse the code that USES your keys, so each key carries its real semantic type. - [sonenta agents](/docs/reference/cli/agents/): Install Sonenta's Claude agents (e.g. sonenta-a11y) into .claude/agents/. Definitions are downloaded from the server. - [sonenta skills](/docs/reference/cli/skills/): Install Sonenta's Claude Code skills + i18n guardrail hooks into .claude/. - [sonenta ci](/docs/reference/cli/ci/): Analyze a PR/branch for i18n impact (hardcoded strings, key + placeholder changes, self-namespaced keys, translation-quality candidates) and print a PR-ready report. - [sonenta scan](/docs/reference/cli/scan/): Scan the WHOLE repository in one pass and report two things: (1) hardcoded, non-internationalized user-facing strings, and (2) every i18n key REFERENCE with its file:line (uploaded so the console can show a per-file / orphan-keys view). Detects and reports only: it never edits your code. - [sonenta tasks](/docs/reference/cli/tasks/): Work the project's todo list: list open tasks, read one, and move it along (start / done). - [sonenta update](/docs/reference/cli/update/): Refresh installed agents, skills and the MCP pin against what the server currently serves. - [sonenta upgrade](/docs/reference/cli/upgrade/): Update the Sonenta CLI itself to the latest published version. - [sonenta doctor](/docs/reference/cli/doctor/): Preflight the agent setup: verifies the @sonenta/mcp server is wired + reachable, the key has the mcp:* scope, and the project's a11y tools respond, with an exact fix for anything that's off. ### MCP tools - @sonenta/mcp v0.57.0 - [a11y_estimate](/docs/reference/mcp/a11y_estimate/): Preview the CREDIT cost of an a11y generate/translate run BEFORE spending anything (task 990). - [a11y_remediation_plan_apply](/docs/reference/mcp/a11y_remediation_plan_apply/): EXECUTE the APPROVED a11y remediation plan - the agent's bulk-execute entrypoint. - [a11y_remediation_plan_get](/docs/reference/mcp/a11y_remediation_plan_get/): Read the a11y REMEDIATION PLAN for the project (or null if none exists). - [a11y_report](/docs/reference/mcp/a11y_report/): Read-only WCAG ACCESSIBILITY quality report for the project (task 991): per key/surface/locale a11y… - [acknowledge_missing_keys](/docs/reference/mcp/acknowledge_missing_keys/): Batch-resolve a set of missing-event uuids. - [add_task_comment](/docs/reference/mcp/add_task_comment/): Post a comment on a task (Markdown), visible to the human on the task's fiche. - [analyze_cognitive](/docs/reference/mcp/analyze_cognitive/): Server-side AI cognitive analysis - the BILLED, opt-in FALLBACK to local scoring. - [annotate](/docs/reference/mcp/annotate/): Append one readable line to the current session's thread - a human-facing step summary, NOT… - [answer_task_decision](/docs/reference/mcp/answer_task_decision/): Record the answer to a decision comment. Usually the human replies via the dashboard or `sonenta… - [apply_new_key_cluster](/docs/reference/mcp/apply_new_key_cluster/): Consolidate a duplicate group onto a BRAND-NEW canonical key (NK1) - the BACKEND does the atomic… - [approve_translation](/docs/reference/mcp/approve_translation/): Approve ONE translation - promote it to `approved` (the reviewer-blessed status a proposer cannot… - [approve_translations_bulk](/docs/reference/mcp/approve_translations_bulk/): Approve up to 500 translations in one call - promote each to `approved`. - [complete_task](/docs/reference/mcp/complete_task/): CLOSE a task with a structured completion QA survey - the preferred way to finish, instead of a… - [confirm_code_scan_prop](/docs/reference/mcp/confirm_code_scan_prop/): AUTO-ACCEPT a (component, prop) as translatable - use this ONLY when the prop plainly carries… - [coverage_report](/docs/reference/mcp/coverage_report/): Read-only translation-COVERAGE report for the project (#752): global completeness, total key count,… - [create_context_section](/docs/reference/mcp/create_context_section/): Create a project context section. `title`, `type` and `body` are required; `languages` scopes it… - [create_key](/docs/reference/mcp/create_key/): Create a translation key, idempotent on (namespace, name). - [create_keys_bulk](/docs/reference/mcp/create_keys_bulk/): Batch version of create_key: create up to 500 keys in one call, idempotent per item (existing keys… - [create_namespace](/docs/reference/mcp/create_namespace/): Create a namespace (the container for keys). - [create_project_task](/docs/reference/mcp/create_project_task/): File a task on the project's todo list - surfaces on the human's Overview, attributed to your… - [create_surface](/docs/reference/mcp/create_surface/): Create a CUSTOM DEVICE surface for the project (task 928), e.g. 'watch', 'tv', 'kiosk'. - [delete_a11y_variant](/docs/reference/mcp/delete_a11y_variant/): Delete ONE a11y variant override for (key, language, surface) (a11y V1). - [delete_context_section](/docs/reference/mcp/delete_context_section/): Delete a context section by `section_id`. Irreversible from here. - [delete_keys_bulk](/docs/reference/mcp/delete_keys_bulk/): Soft-delete (move to TRASH) up to 500 keys by their key_uuid. Restorable via restore_keys_bulk. - [delete_surface](/docs/reference/mcp/delete_surface/): Delete a CUSTOM surface (task 928). Builtins cannot be deleted - deactivate them with… - [delete_variant](/docs/reference/mcp/delete_variant/): Delete ONE variant override for (key, language, surface), for ANY surface (device or a11y) - task… - [distribution_info](/docs/reference/mcp/distribution_info/): Get the project's CDN distribution status: the public CDN base URL + bundle URL template, the… - [eaa_statement](/docs/reference/mcp/eaa_statement/): EAA / EN 301 549 content-layer accessibility report (JSON). - [generate_a11y_variant](/docs/reference/mcp/generate_a11y_variant/): AI-generate SOURCE-language a11y variants for keys that lack them (task 990). - [get_context_section](/docs/reference/mcp/get_context_section/): Read ONE context section in full, including its `body`. - [get_project_info](/docs/reference/mcp/get_project_info/): Fetch a project's metadata: source language, all configured languages, namespaces, key count. - [get_project_task](/docs/reference/mcp/get_project_task/): Read ONE task in full - its Markdown `description`, `commands`, `agent_prompt`, `payload`, status… - [get_variants](/docs/reference/mcp/get_variants/): Read the full VARIANT MATRIX for one key (task 928): every surface OFFERED for the key x every… - [glossary_create](/docs/reference/mcp/glossary_create/): Create a glossary entry. rule_type is one of translation \| do_not_translate \| forbidden and… - [glossary_delete](/docs/reference/mcp/glossary_delete/): Delete a glossary entry by its uuid (entry_id). Returns {deleted: true, entry_id}. - [glossary_list](/docs/reference/mcp/glossary_list/): List a project's glossary entries - the terminology rules the backend applies when matching source… - [glossary_update](/docs/reference/mcp/glossary_update/): Update a glossary entry by its uuid (entry_id). - [health_report](/docs/reference/mcp/health_report/): Read-only SOURCE-HEALTH report for the project (#752): issues in the source strings with by_issue /… - [human_needed](/docs/reference/mcp/human_needed/): Raise a decision you are waiting on a human for - it appears as a todo in the dashboard and pauses… - [ignore_code_scan_prop](/docs/reference/mcp/ignore_code_scan_prop/): IGNORE a (component, prop) - or a WHOLE component (omit `prop`) - as NON-translatable, removing it… - [link_task](/docs/reference/mcp/link_task/): Cross-reference two existing tasks so they are navigable both ways on each task's fiche. - [list_a11y_gaps](/docs/reference/mcp/list_a11y_gaps/): List the actionable a11y gaps (the items[] of a11y_report, task 991), optionally filtered… - [list_a11y_review_queue](/docs/reference/mcp/list_a11y_review_queue/): Read the a11y REVIEW QUEUE - the per-(key, locale, surface) review items with their state. - [list_agent_tasks](/docs/reference/mcp/list_agent_tasks/): List the tasks a human FLAGGED for you to resolve - your work queue. - [list_code_scan_findings](/docs/reference/mcp/list_code_scan_findings/): List the HARDCODED, non-internationalized strings a `sonenta scan` run found in the project's… - [list_code_scan_prop_ignores](/docs/reference/mcp/list_code_scan_prop_ignores/): List the ignore rules - (component, prop) pairs, or WHOLE components (`prop` = null), already… - [list_code_scan_prop_inventory](/docs/reference/mcp/list_code_scan_prop_inventory/): List the (component, prop) pairs a scan found carrying a STRING LITERAL - the candidate set the… - [list_code_scan_prop_picks](/docs/reference/mcp/list_code_scan_prop_picks/): List the (component, prop) pairs ALREADY confirmed translatable, whether by a human in the console… - [list_cognitive_candidates](/docs/reference/mcp/list_cognitive_candidates/): List keys that are CANDIDATES for plain-language (cognitive) scoring: text-relevant keys (a type… - [list_context_sections](/docs/reference/mcp/list_context_sections/): List the project's context sections - LIGHT: each item = {uuid, title, type, languages, position},… - [list_keys](/docs/reference/mcp/list_keys/): List translation keys with their source-language value, their semantic `type`, and per-language… - [list_missing_keys](/docs/reference/mcp/list_missing_keys/): List pending missing-key events captured from the SDK runtime. - [list_placeholder_mismatches](/docs/reference/mcp/list_placeholder_mismatches/): List TRANSLATIONS whose interpolation VARIABLES drift from their source value (Placeholder… - [list_project_tasks](/docs/reference/mcp/list_project_tasks/): List the project's todo items - the unified task list the dashboard Overview shows. - [list_projects](/docs/reference/mcp/list_projects/): List projects accessible to the configured Sonenta API key. - [list_prompts](/docs/reference/mcp/list_prompts/): Browse the Sonenta prompt library (the global catalogue). - [list_source_duplicates](/docs/reference/mcp/list_source_duplicates/): List groups of keys that SHARE an identical source-language value (Source Health duplicates,… - [list_surfaces](/docs/reference/mcp/list_surfaces/): List the project's configurable SURFACES (task 928): the device and a11y surfaces variants can be… - [list_task_comments](/docs/reference/mcp/list_task_comments/): The task's discussion thread - comments + decision requests, each with its `answer` when one was… - [list_trash](/docs/reference/mcp/list_trash/): List trashed (soft-deleted) keys: items of {key_uuid, namespace, name, deleted_at},… - [list_untranslated_keys](/docs/reference/mcp/list_untranslated_keys/): List keys that DON'T yet have a valid translation in the target language. - [list_untranslated_surfaces](/docs/reference/mcp/list_untranslated_surfaces/): The TRANSLATION MAP: every a11y surface cell that has an APPROVED SOURCE value but is missing the… - [mark_cluster_applied](/docs/reference/mcp/mark_cluster_applied/): Mark ONE cluster of a duplicate group's merge plan as APPLIED - addressed by the group's… - [mark_code_scan_finding_treated](/docs/reference/mcp/mark_code_scan_finding_treated/): Record that a hardcoded string has been internationalized: mark ONE finding `treated` and store the… - [missing_keys_stats](/docs/reference/mcp/missing_keys_stats/): Count-only summary of missing-key events for a project. - [plural_categories](/docs/reference/mcp/plural_categories/): Get the CLDR plural categories a language REQUIRES (babel-authoritative - the canonical source, not… - [project_context_get](/docs/reference/mcp/project_context_get/): Read the project's markdown context document. - [project_context_set](/docs/reference/mcp/project_context_set/): Upsert the project's markdown context document. - [propose_code_scan_prop](/docs/reference/mcp/propose_code_scan_prop/): PROPOSE a (component, prop) as translatable when you are NOT certain - a hint for the human, not a… - [propose_duplicate_merge_plan](/docs/reference/mcp/propose_duplicate_merge_plan/): OPT-IN, METERED second opinion: a server-side LLM reads a duplicate group (keys + translations +… - [propose_translation](/docs/reference/mcp/propose_translation/): Submit a translation value. Auto-creates the key if it doesn't exist (write-through). - [propose_translations_bulk](/docs/reference/mcp/propose_translations_bulk/): Batch version of propose_translation: submit up to 500 translation values in one call. - [publish_cdn](/docs/reference/mcp/publish_cdn/): Trigger a CDN release for the project. Builds bundles for every (language, namespace) combo (or… - [recommend_surfaces](/docs/reference/mcp/recommend_surfaces/): Read-only per-key A11Y SURFACE RECOMMENDATIONS (#2): for each key, the a11y surfaces implied by its… - [resolve_prompt](/docs/reference/mcp/resolve_prompt/): Resolve the single best-matching prompt for a section and get its template ready to use, with… - [restore_keys_bulk](/docs/reference/mcp/restore_keys_bulk/): Restore up to 500 trashed keys by their key_uuid (from list_trash). - [score_cognitive_local](/docs/reference/mcp/score_cognitive_local/): Compute and persist cognitive-difficulty scores from a VALIDATED, deterministic READABILITY metric… - [search_context_sections](/docs/reference/mcp/search_context_sections/): Search the project context sections - substring match on title + body (case-insensitive). - [search_keys](/docs/reference/mcp/search_keys/): Find a term across a project's translation strings in every language at once (read-only, free, 0… - [session_end](/docs/reference/mcp/session_end/): Close the current observability session when the task is done (or aborted). - [session_start](/docs/reference/mcp/session_start/): Open an observability session so your work shows up as a live, timestamped thread in the Sonenta… - [set_a11y_variant](/docs/reference/mcp/set_a11y_variant/): Upsert ONE a11y variant override for (key, language, surface) - the manual fix for a gap (a11y V1). - [set_cognitive_score](/docs/reference/mcp/set_cognitive_score/): Record a key's cognitive-difficulty SCORE (0-100, higher = harder to read) and an optional… - [set_duplicate_status](/docs/reference/mcp/set_duplicate_status/): Set the triage STATUS of one duplicate group, addressed by its shared source_value (Source Health… - [set_duplicate_status_bulk](/docs/reference/mcp/set_duplicate_status_bulk/): Set ONE triage status across MANY duplicate groups at once (coarse triage). - [set_source_duplicate_merge_plan](/docs/reference/mcp/set_source_duplicate_merge_plan/): AUTHOR (or clear) the merge plan for one duplicate group, addressed by its shared source_value… - [set_variant](/docs/reference/mcp/set_variant/): Upsert ONE variant override for (key, language, surface) for ANY surface active on the project… - [sonenta_guide](/docs/reference/mcp/sonenta_guide/): Get the Sonenta usage guide: a concise, up-to-date overview of how this Sonenta instance works - … - [surface_coverage](/docs/reference/mcp/surface_coverage/): Read-only COVERAGE BY SURFACE (#3): per active surface, how complete it is. - [translate_a11y_variants](/docs/reference/mcp/translate_a11y_variants/): Translate EXISTING source-language a11y overrides into target locales (task 990). - [unignore_code_scan_prop](/docs/reference/mcp/unignore_code_scan_prop/): Remove one ignore rule by its `uuid` (from list_code_scan_prop_ignores) - so you can REVISE your… - [update_context_section](/docs/reference/mcp/update_context_section/): Update a context section - pass `section_id` plus at least one of `title`, `type`, `languages`,… - [update_key](/docs/reference/mcp/update_key/): Edit a key in place - its SOURCE-language value, its `type`, and/or its description (pass at least… - [update_keys_bulk](/docs/reference/mcp/update_keys_bulk/): Batch version of update_key: edit up to 500 keys' SOURCE values in one call. - [update_project_task](/docs/reference/mcp/update_project_task/): Move a task along its lifecycle - mark it `done` when you finished the work, `dismissed` when it no… - [update_surface](/docs/reference/mcp/update_surface/): Rename and/or toggle a surface (task 928): set its `label` and/or `active`. - [validate_translations](/docs/reference/mcp/validate_translations/): Lint a JSON i18next blob against the project: checks for missing keys, extra keys, and placeholder… - [wcag_report](/docs/reference/mcp/wcag_report/): WCAG 2.2 content-layer measurement, per success criterion and per locale. ### SDK - @sonenta/react-i18next v2.4.0 - [Runtime SDK (@sonenta/react-i18next)](/docs/reference/sdk/index/) - [SonentaProvider](/docs/reference/sdk/provider/) - [useTranslation](/docs/reference/sdk/use-translation/) - [Accessibility (a11y surfaces)](/docs/reference/sdk/a11y/) ## Product - [Pricing](https://sonenta.com/pricing): every plan has TWO limits: a number of included translation keys AND a CDN bandwidth quota. Both matter; pricing is not based on CDN consumption alone. See the Pricing model section below. - [Accessibility](https://sonenta.com/accessibility): generate accessible content (alt text, ARIA labels, plain-language) with the local sonenta-a11y agent; European Accessibility Act ready. Secondary differentiator, not the lead. - [Sonenta vs Lokalise](https://sonenta.com/vs/lokalise): how Sonenta compares to a legacy TMS. ## Pricing model Sonenta pricing has TWO axes per plan: the number of included translation keys AND the CDN bandwidth quota. Both scale together, tier by tier: a plan is never defined by CDN usage alone. One key = one content string managed and delivered by Sonenta. - Free, $0/mo: 500 keys, 5 GB CDN, 3 languages, 1 member. - Hobby, $9/mo: 5,000 keys, 50 GB CDN, 5 languages, 2 members. - Pro, $29/mo: 50,000 keys, 250 GB CDN, unlimited languages, 5 members. - Team, $79/mo: 250,000 keys, 1 TB CDN, unlimited languages, unlimited members. Overage beyond the included CDN bandwidth (or storage) is billed at $0.20/GB with no plan change. Enterprise plans add SSO/SAML, audit logs, SLAs, and dedicated deployment. ## Key facts - Sonenta is a Canadian company based in New Brunswick, Canada. - Packages: @sonenta/mcp, @sonenta/cli (binary: sonenta), @sonenta/react-i18next (a drop-in for react-i18next, keep your t() calls), @sonenta/astro (official Astro integration, this site runs on it). - The React package is @sonenta/react-i18next. There is no @sonenta/react package. - Sonenta never inserts markup into your translations and never interprets any of its own accord. Your strings are stored and delivered as text; the SDK renders only the tags you map yourself. Only the rich-text component renders mapped tags; t() returns plain strings and never parses markup. - There is no component. Text is rendered through the SDK's documented hooks and components. - The complete public API surface of @sonenta/react-i18next 3.0.0 is 30 runtime exports and 26 type exports, listed in full in llms-full.txt. Its exports map has no subpaths, so that list is the whole surface: if a name is not in it, the package does not export it. - Install the local accessibility agent: npx @sonenta/cli agents add sonenta-a11y - Open exports (JSON i18next, XLIFF, PO). No lock-in. - App and sign-up: https://app.sonenta.dev - Full reference for agents: https://sonenta.com/llms-full.txt