Generic Migration logo

Generic Migration

Organization
oh-my-dsh
generic-migration

Framework-agnostic methodology for migrating a plugin, extension, or integration across a breaking upstream release — inventory coupling points, classify changes, stage the migration, and verify in layers. Use when upgrading any plugin from one host-framework version to another without access to framework-specific migration notes. Not a substitute for vendor release notes; contains no framework-specific facts.

Overview

Publisheroh-my-dsh
Repositorydsh-plugin-upgrade-skill
Skill namegeneric-migration
Stars
300
Forks
36
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by oh-my-dsh on GitHub. Read the source before you install it.

Installation

Install the Generic Migration AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/oh-my-dsh/dsh-plugin-upgrade-skill/tree/main/skills/generic-migration
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/oh-my-dsh/dsh-plugin-upgrade-skill.git /tmp/dsh-plugin-upgrade-skill
mkdir -p .claude/skills
cp -r /tmp/dsh-plugin-upgrade-skill/skills/generic-migration .claude/skills/generic-migration
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Generic Migration in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Generic Migration on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Generic Migration is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Generic Plugin Migration Methodology

A disciplined procedure for moving a plugin across an upstream release that may contain breaking changes. Everything here is framework-agnostic: no product names, no version numbers, no API identifiers. Pair it with the upstream project's own changelog and release notes whenever those exist.

0. Ground rules

  • Never migrate blind. If you have not read the upstream changelog for every version in the corridor (start → target, inclusive), you are guessing.
  • Inventory before edits. A written list of what the plugin touches beats discovering breakage one crash at a time.
  • Change one layer at a time, and keep the old install runnable until the new one is proven (side-by-side installs, separate data directories).

1. Inventory the coupling surface

Before touching code, scan the plugin read-only and record every place it couples to the host. A generic coupling checklist:

  1. Manifest / metadata — declared compatibility ranges, entry points, permissions, capabilities the plugin requests.
  2. Host API imports — every module, symbol, or type imported from the host or its SDK; note which are used at load time vs call time.
  3. Lifecycle & events — activation hooks, event subscriptions, disposal.
  4. Services & RPC — services the plugin consumes or exposes; inter-process or request/response channels and their payload shapes.
  5. UI contributions — commands, views, panels, menus, themes, keybindings.
  6. Persistence — files, databases, or key-value stores the plugin reads or writes, including schema versions and migration code.
  7. Process & I/O seams — spawned subprocesses, sockets, pipes, parsers of host-generated output (logs, CLI text, serialized state).
  8. Configuration — settings keys read/written, defaults the plugin relies on, user-facing documentation of those keys.
  9. Dependencies — packages shared with the host (risk of duplicate instances), peer ranges, runtime version floors.

For each item record: file/line, what exactly is coupled, and how confident you are. "No hit" is only meaningful after you state what you scanned and what you could not rule out.

2. Read the corridor, not just the endpoints

Changes across a release corridor interact. Read every intermediate release's notes and diff, and build a net-state table:

  • A field removed in an intermediate version but restored later has zero net change — do not "migrate" it away.
  • A rename that happened in two steps (A → B → C) is migrated straight A → C.
  • Behavior changes (defaults, ordering, timing) are as breaking as API removals; list them explicitly.

Classify each upstream change as: breaking (must edit), behavioral (must re-verify), additive (optional), or informational.

3. Map, then edit

Map every inventory hit (§1) to a corridor change (§2). Only then edit, in dependency order:

  1. Manifest and compatibility ranges first — the host may refuse to load anything else you fix.
  2. Host API surface: renames, removals, signature changes.
  3. Lifecycle/events/services.
  4. Persistence migrations (never mutate the user's only copy; write-migrate on first run with a backup, or fail closed).
  5. UI and configuration.
  6. Dependency alignment: shared packages must resolve to the host's instance; check for duplicate copies in the installed tree.

4. Verify in layers

Cheap layers first; each layer must pass before the next means anything:

  1. Static: typecheck, lint, the plugin's own unit tests.
  2. Install-time: the host accepts the manifest and loads the plugin without warnings.
  3. Cold start: a real host process boots with the plugin enabled; check logs for deprecation and fallback warnings, not just crashes.
  4. Functional probe: one real end-to-end path per major feature, including the features you did not migrate (silent behavior drift hides there).
  5. Data: migrate a copy of real persisted data; verify round-trip and downgrade behavior.
  6. Rollback rehearsal: prove you can go back — reinstall the old version against the migrated data and confirm it still works or that you have a restore path.

5. Discipline and pitfalls

  • Prefer the host's documented replacement over re-implementing removed behavior yourself.
  • Treat "it typechecks" as the beginning of verification, not the end.
  • Deprecated-but-working is a scheduled failure: record it even if out of scope.
  • If a change's semantics are unclear, read the upstream source at the target tag; do not guess shapes from a one-line changelog entry.
  • Keep a written migration log: what you changed, why, and what you verified. It is the artifact that lets someone else trust the migration.

Frequently asked questions

What does the Generic Migration AI skill do?

Framework-agnostic methodology for migrating a plugin, extension, or integration across a breaking upstream release — inventory coupling points, classify changes, stage the migration, and verify in layers. Use when upgrading any plugin from one host-framework version to another without access to framework-specific migration notes. Not a substitute for vendor release notes; contains no framework-specific facts.

Why use Generic Migration on TypingMind?

Because you install it once and use it with any model. Generic Migration is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Generic Migration in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/oh-my-dsh/dsh-plugin-upgrade-skill/tree/main/skills/generic-migration. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Generic Migration?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Generic Migration?

As many as you like. As long as a model supports skills, you can use Generic Migration with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Generic Migration AI skill free?

Yes. It is published on GitHub by oh-my-dsh under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇