fm-init

Detects legacy Angular apps and monorepo layout to write the frontend migration plugin configuration.

1|Updated Feb 19, 2026
One-click install
npx skills add https://github.com/ohmyhotelco/hare-cc-plugins --skill fm-init-ohmyhotelco
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: fm-init
Source: https://github.com/ohmyhotelco/hare-cc-plugins/tree/main/frontend-migration-plugin/skills/fm-init
Command: npx skills add https://github.com/ohmyhotelco/hare-cc-plugins --skill fm-init-ohmyhotelco

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Setting up a legacy Angular to React Router v7 migration requires knowing the monorepo layout, app surfaces, routing flip mechanisms, and i18n configuration — gathering all of this manually into a consistent plugin config is error-prone and easy to get wrong. ## Core Features & Use Cases - Automatic Layout Detection: Scans the repository for legacy Angular apps (angular.json), React Router v7 targets, shared packages, and backend API contract directories. - Guided Configuration: Walks through per-app settings (domain, ports, SSR mode, webview, SSO, nginx vs CloudFront flip mechanism) and writes .claude/frontend-migration-plugin.json plus a migration tracker. - External Skill Installation: Vendors React Router framework-mode, Vitest, and React best-practices skills into .claude/skills/ and verifies Playwright for E2E gates. - Use Case: A team starting a Strangler Fig migration from Angular to React Router v7 runs this once to bootstrap the plugin config, tracker, and gate infrastructure before analyzing the first page. ## Quick Start Run the fm-init skill to detect my monorepo layout and initialize the frontend migration plugin configuration and tracker.

Frequently Asked Questions about fm-init

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

FAQPage Schema
How do I set up a legacy Angular to React Router migration project?▼

Run the fm-init skill, which detects legacy Angular apps via angular.json, finds React Router v7 target directories, and writes the plugin config to .claude/frontend-migration-plugin.json. It also creates the migration tracker at docs/migration/tracker.json.

How do I configure nginx vs CloudFront for a Strangler Fig route flip?▼

The skill asks per app which flip mechanism to use and records it as flipMechanism in the config. For nginx it stores infraDir (default infra/nginx); for CloudFront it stores cloudfrontDir and a version-controlled behavior manifest (default v2-routes.json).

Does the migration setup support multiple apps like PC, mobile, and webview?▼

Yes, it configures pc, mobile, and hana surfaces with per-app domain, ports, SSR mode (mixed or spa), webview flag, and SSO settings. PC is configured fully first, while mobile and hana get scaffolded defaults refined later.

Why does the freshness gate report unverifiable after running setup?▼

The pluginRoot value is written by the SessionStart hook, not by fm-init, so gates run in the same session as setup cannot record a tree hash. Restart the session after setup so the hook refreshes pluginRoot before running fm-verify, fm-e2e, or fm-parity.

What happens if the i18n locales directory is not found during setup?▼

The skill omits the entire i18n key from the config and warns that the i18n key-coverage spec will be skipped. Setup does not fail; the copy-parity gate simply cannot enforce per-language checks without the locales directory.