Coding agents now read skills: short instruction files that teach them how a tool is meant to be used. The Dart and Flutter teams publish their own (npx skills add dart-lang/skills). FlutterLocalisation now ships one too, so an agent working on your app knows how its translations are managed instead of guessing.
Install
From the root of your Flutter app:
npx skills add tajaouart/flutter_localisation_cli --skill flutter-localisation
The command asks which agents to install it for. --agent universal puts it in the shared .agents/skills folder that most agents read. Update it later with npx skills update.
The skill drives the fl command line tool, so install that as well:
dart pub global activate flutter_localisation_cli
fl login --token flk_live_xxx
What the agent learns
Never edit the ARB files or the generated Dart by hand. The backend owns them, and a direct edit disappears on the next sync. The agent changes strings with fl add, fl edit or fl import, then runs fl sync.
Bulk work is one request. Asked to add forty strings, an agent left to itself calls fl add forty times and runs into the rate limit. With the skill it writes one ARB and runs fl import new_keys.arb -t, and adds several languages with a single fl languages add de fr it -t.
Fixing the setup after a Flutter upgrade. Current Flutter refuses synthetic-package: true, needs generate: true, and no longer has package:flutter_gen. The skill sends the agent to fl doctor --fix, which repairs all three. Flutter's own localisation skill still writes synthetic-package: true into new projects, so this matters.
The material_ui delegate trap. On an app migrated to material_ui, AppLocalizations.localizationsDelegates leaves Material widgets without localized strings. The skill gives the delegate list that works.
Live updates without leaking the key. The sk_live_ key goes in through --dart-define, never into source.
The native side. fl native declares the languages to iOS and Android and translates the iOS permission alerts, which the ARBs never reach.
Tested on a broken app
We broke a fresh Flutter app the way an upgrade does: synthetic-package: true in l10n.yaml and an import of package:flutter_gen/gen_l10n/app_localizations.dart. After installing the skill, the only instruction given to the agent was "AppLocalizations is not found, fix it". It loaded the skill on its own, ran fl doctor, then fl doctor --fix, and flutter analyze went from four errors to none.
Skill and MCP server
They do different jobs. The MCP server (fl_mcp) gives the agent tools: list projects, add and translate strings, pull the ARBs. The skill tells it when to use which one and what not to do. Use both:
claude mcp add flutter-localisation --env FL_API_TOKEN=flk_live_xxx -- fl_mcp
The full command reference is in the flutter_localisation_cli README.