charm-migration

Migrate legacy Juju charms from reactive patterns to Ops patterns.

1|Updated Feb 8, 2026
One-click install
npx skills add https://github.com/tonyandrewmeyer/cantrip --skill charm-migration
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: charm-migration
Source: https://github.com/tonyandrewmeyer/cantrip/tree/main/src/cantrip/skills/charm-migration
Command: npx skills add https://github.com/tonyandrewmeyer/cantrip --skill charm-migration

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Migrates legacy Juju charms from reactive patterns, StoredState, Harness, and fetch-libs to modern Ops-based architectures.

Core Features & Use Cases

  • Guided per-file migration workflow that converts Reactive charms to a ported CharmBase structure.
  • Replacement of StoredState with derived state and peer data patterns; upgrade of Harness-based tests to Scenario-style tests; library fetch-libs to PyPI when available.
  • Audit-driven workflows that map diagnostics (DEP001-DEP004, LIB001/LIB002) to concrete migration steps.

Quick Start

Describe the legacy charm you want to migrate and start the migration workflow to begin modernization.

Frequently Asked Questions about charm-migration

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I migrate legacy Juju charms from reactive patterns to Ops?

Migrate legacy Juju charms by applying a per-file workflow that converts reactive handlers to CharmBase observers, replacing StoredState with derived or peer data patterns and updating deprecated code structures.

What is the best way to replace StoredState in a reactive Juju charm?

Replace StoredState during charm migration by adopting derived state and peer data patterns, shifting persistent data management from the legacy StoredState mechanism to modern Ops-based architecture.

Can I upgrade Harness-based tests to Scenario tests when modernizing Juju charms?

Upgrade Harness-based tests to Scenario-style tests as part of the charm migration workflow, transitioning legacy test frameworks to modern Ops testing patterns for reactive charm conversion.

How do audit diagnostics like DEP001 map to concrete Juju charm migration steps?

Audit diagnostics like DEP001-DEP004 and LIB001/LIB002 map directly to concrete migration steps, guiding the conversion of reactive handlers to CharmBase observers and updating library dependencies.

Do I need to convert charm libraries to PyPI packages during Ops migration?

Convert charm libraries from fetch-libs to PyPI packages during migration when available, replacing legacy library fetching with modern PyPI distribution as part of the Ops modernization workflow.

What deprecated patterns are removed when migrating reactive charms to Ops?

Removed deprecated patterns during reactive charm migration include StoredState usage, Harness-based testing, fetch-libs dependency management, and reactive handler structures replaced by CharmBase observers.