Skip to content
StringLane

FREE CLI · CODING AGENTS, CI, TERMINAL

Your coding agent translates.StringLane checks.

Claude Code, Cursor, Codex and five other agents translate through StringLane over MCP, and CI fails the build on a broken locale. A failed check writes nothing to your files.

Read https://stringlane.app/docs/cli/agent-setup.md and set up StringLane for this project.

Or install it yourself: npm install -g @stringlane/cli v0.9.0 · Node 22+ · free

claude · my-appIllustrative session

> add the checkout strings in every language

stringlane · add_keycheckout.total

stringlane · prepare_translation_plan→ 29 locales

translating 29 entries…

stringlane · validate_translations

28 pass · 1 refused: uk has no “many” form

fixing uk… validate_translations: all pass

Allow stringlane · apply_translations to write 30 files?

1. Yes2. No, and tell the agent why

WHY A GREEN BUILD IS NOT ENOUGH

What AI gets wrong, and your compiler never sees.

Your agent translates thirty languages in a minute. These three slip through every build. Over MCP and in CI, StringLane refuses each one before a file is written.

  • en{count} items selected
  • jaアイテムを選択しました
  • ↳ {count} is gone

A placeholder vanishes

The number was in the English. The translation dropped it, so every user sees a sentence with no count.

placeholder_mismatch
  • one{count} елемент
  • few{count} елементи
  • manymissing
  • other{count} елемента

A plural form is missing

English has two forms. Ukrainian needs four. The model wrote three, so a count like 5 gets the wrong ending.

missing_key
  • enCheckout
  • deZur Kasse
  • frPaiement
  • komissing

A key never arrived

You added a string last week. Twelve languages have it. One does not, and it ships in English.

missing_key

It also checks

Structure, not taste. Whether a sentence reads well is still yours.

  • ICU syntax

    Unclosed braces and broken selects, before the build does.

    icu_parse_error
  • Guarded terms

    Flags a brand or product name that got translated.

    guarded_word_violation
  • Length limits

    Per-key budgets, so a German label still fits its button.

    max_length_exceeded

Three ways in. One answer.

  1. In your coding agent

    Eleven MCP tools, six of them write. Your agent translates and StringLane checks before anything reaches your files.

    stringlane setup mcp --host cursorAgent setup guide
  2. In CI

    Exit 1 on issues, 2 when it could not run. A committed baseline lets a messy project adopt the gate today.

    stringlane check . --jsonCI guide
  3. In your terminal

    See which locales are behind and what is broken. Writes nothing to your files.

    stringlane check .Inspect and check a project

Works in eight coding agents. Guarded in seven.

The MCP server works in all eight. The write guard is built from whatever each host lets StringLane intercept, so it differs, and this is exactly how.

  • Claude Code

    Plugin

    Asks you first

  • Codex CLI

    Plugin

    Refuses, and says how to lift it

  • Gemini CLI

    Extension

    Refuses, and says how to lift it

  • Cursor

    Local plugin, or paste

    Refuses, and says how to lift it

  • Zed

    Config you paste

    Confirms, from Zed’s own permissions

  • OpenCode

    Config you paste

    Confirms, from OpenCode’s own permissions

  • VS Code Copilot

    One command

    Installs, but guards nothing yet

  • Windsurf

    Config you paste

    Refuses, and says how to lift it

Every host gets the real configuration, printed for the exact file it belongs in. Claude Code is the one host where StringLane writes it for you. What each of the eight gets.

Built to refuse.

Every check above runs before anything is written. When one fails, StringLane stops, writes nothing to your files, and tells your agent why.

  • Read commands cannot write

    inspect, check, plan and validate never touch your repo.

  • A stale plan is refused

    If a file changed since the plan, apply stops and says so.

  • All or nothing

    Every file is built and re-parsed first. One error, nothing written to your files.

  • Telemetry you can switch off

    Usage events, described on /privacy. Off with stringlane telemetry off.

Questions about the CLI

Is the CLI actually free, or free for now?
Free, today, with no asterisk on the usage: no licence key, no activation, no account, and no limit on machines, projects or CI runs, including at work. It is versioned separately from the desktop app precisely so the two are not entangled, and buying one grants nothing on the other in either direction. What we will not do is promise a price for a product still finding its shape, so “free forever” is not a claim you will find here. It is free software to use, not open-source software: the terms ship in the package.
Will it edit my files without asking?
inspect, check, plan and validate write nothing into your repository: not a lock file, not a re-saved locale file, not a byte. (They do keep state outside your project, in StringLane's own state directory: a random install ID unless usage data is off through DO_NOT_TRACK=1, STRINGLANE_TELEMETRY=0 or a CI environment, the date of the last update check unless that check is off, and from check a cache of the key names and line numbers it found in each source file.) The commands that do write ask first, and refuse outright when there is no terminal to ask at unless you passed --yes, so a CI job cannot commit a decision nobody made. Over MCP the line is drawn by your agent host: it asks you before any of the six writing tools runs, the same way it asks before editing a file. There is no flag the model fills in on your behalf. An earlier version had one, and it was removed because a field the agent sets itself is not consent.
Do I need an AI provider key?
Only for stringlane update, which is the one command that talks to a model and the one that spends money, and it asks before it does. Everything else runs without a key, including the whole agent workflow: in agent mode the model is the one your agent already uses. When you do use update, the key is read from your environment and nowhere else: never from stringlane.yaml, never written to a config file, a keychain, a log, or any report it produces.
Which coding agents does it work with?
The MCP server works in any host that speaks the protocol, and eight of them have a configuration StringLane writes out for you by name: Claude Code, Codex CLI, Gemini CLI, Cursor, Zed, OpenCode, VS Code Copilot and Windsurf. stringlane setup mcp --host <host> prints the entry in that host's own shape and names the exact file it belongs in. Claude Code is the one where --apply then writes it, after backing the file up; everywhere else it prints and you paste, because StringLane will not merge into a file format nobody has run yet. The write guard is narrower still and differs per host. What each host gets.
My project has hundreds of existing issues. Can I still gate CI on this?
Yes, but record where you are first. stringlane baseline write writes today's findings to .stringlane/baseline.yaml; commit it, and check then fails only on issues that are new. Accepted issues are still counted and printed on every run rather than hidden, a suppressed entry is reported as stale once you fix the underlying problem, and nothing expires on a timer. A gate that turns red on a date nobody chose is a gate that gets switched off. A baseline cannot hide a stale translation: with source stamps on, baseline write leaves out stale and unconfirmed translations and says how many, and check refuses a baseline that holds one.
Does the CLI send usage data?
Yes, and it tells you so on its first run on a machine, before it sends anything. Each command sends one event: the command name, how it ended, a rough duration, your project's format and a range for the issues it found. A stringlane update that calls a model adds one more: whether the provider is cloud or local, a range for how many strings it set out to translate, and whether it finished. The MCP server sends one event when it starts and one when the session ends, with ranges for how often each tool was used. Every event carries the CLI version, your operating system and a random ID generated on your machine, so runs from one install can be linked. It never sends your paths, keys, strings, argument values, or which provider or model you use. Turn it off with stringlane telemetry off, or STRINGLANE_TELEMETRY=0 or DO_NOT_TRACK=1 in your environment. It sends nothing at all when it detects CI, and no environment variable can switch it back on over a stored opt-out. The full policy.
Does it run on Windows and Linux?
Yes. Linux, macOS and Windows each run the full test suite on every change, because the failures a local binary has are mostly platform-shaped. It needs Node ≥ 22. One caveat, on Windows only: the plugin's bundled resolver is a POSIX shell script and will not run there, so install the CLI globally once yourself and the MCP server and hooks then behave identically.

Hand it to your agent.

Read https://stringlane.app/docs/cli/agent-setup.md and set up StringLane for this project.

Or install it yourself with npm install -g @stringlane/cli. The desktop app runs the same checks in a window.