agentleFS
a2ui-projecta2ui-project/a2ui/.agents/skills/migration/SKILL.md

migration

Skill17k starsChanged 4 days agoApache-2.0View on GitHub

Migrates an app, renderer, catalog or agent that uses A2UI (or a predecessor such as Flutter `genui`) to a newer SDK or protocol version. Use when a task mentions migrating, upgrading, porting or moving A2UI code between SDKs, packages or protocol versions (v0.8, v0.9, v0.9.1, v1.0), when a dependency such as `genui`, `a2ui_core`, `@a2ui/web_core`, `a2ui-core` or an A2UI Swift package needs a major bump, or when payloads or fixtures must change wire version. The skill first identifies the language, the source and the target, then routes to a case-specific guide where one exists.

31 other projects use a version of this.

Adopted by

Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data

Week of Sep 13: 0 new projectsWeek of Sep 20: 0 new projectsWeek of Sep 27: 0 new projectsWeek of Oct 4: 0 new projectsWeek of Oct 11: 0 new projectsWeek of Oct 18: 0 new projectsWeek of Oct 25: 0 new projectsWeek of Nov 1: 0 new projects
Sep 2026Oct 2026Nov 2026
New projects taking a version of this file each week, over the 8 weeks our latest run read: only 0 in all, so this is a hint, not a trend.

Most recently taken up by

Who's talking about a2ui-project/a2ui

The biggest 5 of 55 mentions linking to the repository that our crawl found. Each line is their own headline.

See all 55

Talked about on GitHub and YouTube (55 times).

On GitHub · 50

45 more on GitHub

On YouTube · 5

Used with

Projects with it also use surgical-patch, lean-build and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • JuliusBrusseeSkill

    surgical-patch

    Fix bugs and small behavior changes at the narrowest responsible layer. Use when regression proof, preserved surrounding behavior, and task-relevant tests matter.

    Also in 8 projects that use this

  • JuliusBrusseeSkill

    lean-build

    Build feature work with high overbuilding risk. Use for new behavior, product slices, or integrations where repository reuse, strict scope, and an explicit stop condition matter.

    Also in 6 projects that use this

  • Terryc21Skill

    safe-refactor

    Plan refactoring with blast radius analysis, dependency mapping, and rollback strategy. Triggers: "refactor", "safe refactor", "restructure", "rename type", "extract protocol".

    Also in 8 projects that use this

  • +9 more from JuliusBrussee

The file

We split this skill into the rules it gives an agent

11 rules. 0 are common, 10 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 28 edited versions we read keep these.

  • 10

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Do not start editing before all three are written down.

    line 26
  2. Distinctive:

    Read the manifests in the repository, not just the file extensions:

    line 32
  3. Distinctive:

    Ask, or infer from the task, whether the target is a new SDK on the same protocol version, a new protocol version on the same SDK, or both.

    line 67
  4. Distinctive:

    When a row matches, read the guide in full and follow it.

    line 83
  5. Distinctive:

    Use this when no case guide exists, and as the outer loop around a case guide:

    line 89
  6. Distinctive:

    Payloads and prompts: Update fixtures, goldens and prompt text to the target wire version.

    line 101
  7. Distinctive:

    Behavioral differences: Read the target's behavior notes (a case guide has a section for them) and check each one against the app: error …

    line 104
  8. Distinctive:

    Verify: Run the analyzer or type checker, unit and widget tests, and one manual round trip against the real agent with a surface that has …

    line 107
  9. Distinctive:

    When you migrate something this skill has no guide for, add one so the next migration starts from it:

    line 116
  10. Very specific:

    Create references/<language>_<from>_to_<to>.md next to this file, named like references/dart_genui_to_1_0.md.

    line 119
  11. Distinctive:

    Add a row to the table in Step 4.

    line 124

“Common” is measured: kept by at least 6 in 10 of the 28 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

A2UI migration

This skill is a router. It identifies what is being migrated and then sends you to the guide for that case. A case is identified by three facts:

  1. Language / platform: Dart (Flutter), TypeScript (Lit, Angular, React, web core), Python (agent SDKs, ADK, A2A), Swift, Kotlin.
  2. Source: the SDK or package the code uses today and its version, and the protocol version it speaks on the wire.
  3. Target: the SDK the code should use afterwards, and the protocol version it should speak.

Do not start editing before all three are written down. A migration that changes the SDK and the wire version at the same time is two migrations; split it when the agent and the renderer are not released together.

Step 1: identify the language and the source SDK

Read the manifests in the repository, not just the file extensions:

ManifestDependency names to look for
pubspec.yaml, Bazel BUILD with dart_*genui, a2ui_core, a2ui_flutter, a2ui_agent, a2ui_cli, genai_primitives
package.json@a2ui/web_core, @a2ui/lit, @a2ui/angular, @a2ui/react, @a2ui/markdown-it, @a2ui/agent, @a2ui/catalog-*
pyproject.toml, requirements*.txt, uv.locka2ui-core, a2ui-agent-sdk, a2ui-a2a, a2ui-adk, a2ui-catalog-*
Package.swiftA2UISwiftCore, A2UISwiftUI, BasicCatalog, BasicCatalogSwiftUI (products of this repository's Package.swift)
build.gradle*the legacy Kotlin agent SDK under kotlin/agent_sdk_legacy/

Record the exact version constraint, and read that package's CHANGELOG.md in this repository for the release line the code is on.

Step 2: identify the wire protocol version

The SDK version does not always tell the protocol version; read the payloads the code sends or expects (fixtures, goldens, prompts, transport code):

Evidence in payloadsProtocol
beginRendering, surfaceUpdate, dataModelUpdate messagesv0.8
"version": "v0.9" with createSurface, updateComponents, updateDataModel, deleteSurface; bindings as {"path": ...} and calls as {"call": ...}v0.9
"version": "v0.9.1"v0.9.1
"version": "1.0"; bindings as {"@path": ...}, calls as {"@call": ...}; per-component catalogId; callRendererFunction / callAgentFunctionv1.0

Other signs: catalog ids (.../specification/v0_9/catalogs/basic/catalog.json is v0.9, .../specification/v1_0/catalogs/basic/catalog.json is v1.0; the v1.0 catalog files live under catalogs/<name>/v1/, but their ids keep the specification/v1_0 path), the metadata keys for capabilities (a2uiClientCapabilities is v0.9, a2uiRendererCapabilities is v1.0), and the names of the schema directories a project validates against (specification/v0_9/json versus specification/v1_0/json).

Step 3: fix the target

Ask, or infer from the task, whether the target is a new SDK on the same protocol version, a new protocol version on the same SDK, or both. When the task does not say, prefer the smallest step: the current SDK's latest release on the protocol version the agent already speaks. Record the target the same way as the source.

Step 4: route to a case guide

LanguageFromToGuide
Dartpackage:genui 0.10.x (A2UI v0.9)a2ui_core + a2ui_flutter (+ a2ui_agent), v0.9 or v1.0references/dart_genui_to_1_0.md
anyprotocol v0.8protocol v0.9specification/v0_9/docs/evolution_guide.md; Python payload converter samples/agent/adk/migrate_v08_to_v09.py; Lit renderer example in typescript/renderers/lit/README.md
anyprotocol v0.9protocol v0.9.1specification/v0_9_1/docs/evolution_guide.md
anyprotocol v0.9 / v0.9.1protocol v1.0specification/v1_0/docs/evolution_guide.md, then the SDK's CHANGELOG.md
anyan A2UI SDK releasea later release of the same SDKthat package's CHANGELOG.md (Breaking: entries first), then the generic procedure below

When a row matches, read the guide in full and follow it. When no row matches, follow the generic procedure and then add a case (see the end of this file).

Generic procedure

Use this when no case guide exists, and as the outer loop around a case guide:

  1. Inventory. List every file that imports or depends on the source SDK, every fixture or golden that holds payloads, and every prompt that describes the wire format to a model. Group them by the layer they touch: transport, renderer wiring, catalogs and components, functions, tests.
  2. Dependencies first. Change the manifest, then make the project resolve dependencies. Do not edit source until the new packages are installed.
  3. One layer at a time. Migrate transport, then renderer wiring, then catalogs and components, then functions, then tests. Compile after each layer; a layer that does not compile hides errors in the next one.
  4. Payloads and prompts. Update fixtures, goldens and prompt text to the target wire version. Do not blanket-replace keys; the evolution guides list which positions change.
  5. Behavioral differences. Read the target's behavior notes (a case guide has a section for them) and check each one against the app: error handling, validation strictness, unknown ids, ordering, markdown, theming.
  6. Verify. Run the analyzer or type checker, unit and widget tests, and one manual round trip against the real agent with a surface that has an input and an action.
  7. Record. Note in the change description which case was applied, which behavioral differences needed app changes, and anything the guide did not cover.

Adding a case

When you migrate something this skill has no guide for, add one so the next migration starts from it:

  1. Create references/<language>_<from>_to_<to>.md next to this file, named like references/dart_genui_to_1_0.md.
  2. Give it the same sections as the existing guide: scope and version assumptions, dependencies, a step per layer with before/after code, checklist, API mapping, recipes, and behavior changes.
  3. Add a row to the table in Step 4.
  4. Follow natural-writing and pr-hygiene for the text and the pull request.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.