Strategic codebase re-direction when requirements change, architecture doesn't fit, or tech debt blocks progress. TRIZ-powered pivot protocol for large codebases.
From cmnpx claudepluginhub tody-agent/codymaster --plugin cmThis skill uses the workspace's default tool permissions.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Implements distributed tracing with Jaeger/Tempo for microservices, including Kubernetes/Docker setup and OpenTelemetry instrumentation (Python/Flask). Use for debugging latency, dependencies, and request flows.
When the code works but the direction is wrong, you don't debug — you REACT. TRIZ-powered protocol for pivoting large codebases without losing stability.
ALWAYS when:
Skip when:
cm-debuggingcm-clean-codecm-project-bootstrapNO REWRITE WITHOUT REACTOR ANALYSIS FIRST
Rewrites fail 70% of the time. Incremental strategic migration succeeds 90% of the time.
| # | Principle | How Applied |
|---|---|---|
| #35 | Parameter Change | Change the fundamental parameter (language, pattern, architecture) — not the symptom |
| #28 | Mechanics Substitution | Replace one mechanism with a more effective one (OOP → FP, REST → GraphQL, etc.) |
| #13 | The Other Way Around | Instead of adapting new code to old architecture, adapt old architecture to new requirements |
| #25 | Self-Service | Design the migration so each component can migrate independently |
| #1 | Segmentation | Break monolithic change into independent migration units |
| #10 | Prior Action | Prepare the codebase (interfaces, adapters) BEFORE the actual migration |
Phase 1: ASSESS → Understand what's wrong and why (not just symptoms)
Phase 2: MAP → Trace all dependencies and blast radius
Phase 3: DESIGN → Plan the migration path with strangler fig pattern
Phase 4: EXECUTE → Migrate incrementally, one unit at a time
Phase 5: VERIFY → Confirm direction is correct + clean up old code
Goal: Find the TRIZ contradiction — what do we WANT vs what BLOCKS us?
State the current direction:
Current: We built [X architecture/pattern/structure]
Problem: It doesn't support [Y requirement/scale/use case]
Identify the contradiction:
We WANT: [desired capability]
But: [current architecture] prevents it because [technical reason]
TRIZ Contradiction:
Improving [parameter A] worsens [parameter B]
Example: "Improving modularity worsens performance"
"Improving flexibility worsens type safety"
Define the Ideal Final Result (IFR):
The system ITSELF [achieves the goal]
WITHOUT [the current blocking factor]
WHILE maintaining [what currently works well]
Scope assessment:
Files affected: [count from codeintell or grep]
Components affected: [list]
Tests affected: [count]
External API changes: [yes/no — breaking change?]
Estimated effort: [S/M/L/XL]
Risk level: [Low/Medium/High/Critical]
Goal: Know exactly what touches what before changing anything.
Use Code Intelligence (if available):
codegraph_impact("target_symbol", depth=3)
→ Shows all callers, dependencies, affected files
codegraph_context("target_module")
→ Shows architecture around the area
Manual mapping (if codegraph unavailable):
grep -rn "import.*{module}" src/
grep -rn "{function_name}" src/
→ Build dependency tree manually
Categorize files by migration priority:
| Category | Description | Action |
|---|---|---|
| Core | The files that MUST change for the new direction | Migrate first |
| Dependent | Files that import/use Core files | Migrate after Core, use adapters |
| Peripheral | Files loosely connected | Migrate last or leave untouched |
| Dead | Files no longer needed after migration | Flag for deletion in Phase 5 |
Output: Migration Map Document
## Migration Map: [Initiative Name]
### Core (must change): [N files]
- file_a.ts → [what changes]
- file_b.ts → [what changes]
### Dependent (affected): [N files]
- file_c.ts → [how affected]
### Peripheral (optional): [N files]
- file_d.ts → [minimal change]
### Dead (remove after): [N files]
- old_module.ts → DELETE after migration complete
Goal: Design an incremental migration path — NEVER big-bang rewrite.
Strangler Fig Pattern (TRIZ #10 Prior Action):
1. Create NEW structure alongside OLD structure
2. Route NEW traffic/calls to NEW structure
3. Gradually migrate OLD consumers to NEW structure
4. Remove OLD structure when no longer used
Migration design template:
## Migration Path
### Step 1: Create Adapter Layer
- [ ] Create interface/abstraction that both old and new code satisfy
- [ ] All consumers now use the adapter, not direct implementation
### Step 2: Build New Implementation
- [ ] New code behind the adapter — can be tested independently
- [ ] Feature flag or config switch between old/new
### Step 3: Gradual Cut-over
- [ ] Migrate consumers one-by-one to new implementation
- [ ] Each migration is a separate commit/PR
- [ ] Tests pass at EVERY step (never break green)
### Step 4: Clean up (→ triggers cm-clean-code)
- [ ] Remove old implementation
- [ ] Remove adapter layer (if no longer needed)
- [ ] Remove feature flag
- [ ] Update documentation
Rules:
Goal: Execute migration plan step by step with quality gates.
Use cm-execution Mode A (Batch) or Mode E (TRIZ-Parallel):
For each migration step:
1. Write/update tests FIRST (cm-tdd)
2. Implement the change
3. Run full test suite
4. Commit with clear message: "reactor: [step description]"
5. If tests fail → STOP, diagnose, fix before next step
Progress tracking:
→ Update OpenSpec `tasks.md` and `cm-tasks.json` with each completed migration step
→ Update CONTINUITY.md with migration status
Commit convention:
reactor: create adapter layer for auth module
reactor: implement new auth service behind adapter
reactor: migrate login page to new auth
reactor: migrate signup page to new auth
reactor: remove old auth implementation
reactor: cleanup — remove adapter (direct usage now)
Goal: Confirm the new direction works AND trigger cm-clean-code.
Direction verification:
□ New architecture supports the originally blocked requirement
□ Performance is equal or better
□ All tests pass
□ No regression in existing features
□ Documentation updated
Trigger cm-clean-code:
After reactor completes → ALWAYS run cm-clean-code
Reason: Migration leaves dead code, unused imports, stale references
Record in CONTINUITY.md:
Decision: Migrated [X] from [old pattern] to [new pattern]
Rationale: [why — the TRIZ contradiction we resolved]
Scope: module:[affected module]
| Thought | Reality |
|---|---|
| "Let's just rewrite everything" | Big-bang rewrites fail 70%+ of the time |
| "It's faster to start from scratch" | You lose all edge-case handling and bug fixes |
| "We don't need tests during migration" | Migration without tests = guaranteed regression |
| "Let's change the direction AND add features" | One thing at a time. Direction first, features after |
| "This adapter layer is extra work" | Adapter saves you from big-bang. It pays for itself |
| "We can just search-and-replace" | Structural changes ≠ text changes |
| Skill | When |
|---|---|
cm-brainstorm-idea | UPSTREAM: Identifies need for direction change |
cm-codeintell | Phase 2: Dependency analysis via codegraph |
cm-planning | Phase 3: Formalize migration plan |
cm-execution | Phase 4: Execute migration steps |
cm-tdd | Phase 4: Tests before each migration step |
cm-clean-code | Phase 5: MANDATORY cleanup after reactor |
cm-debugging | If migration introduces bugs |
cm-continuity | Record direction decisions |
cm-brainstorm-idea → cm-reactor → cm-planning → cm-execution → cm-clean-code
(analyze) (redirect) (plan) (build) (hygiene)
Don't rewrite. React. Migrate incrementally. Clean up after. Every step must pass tests.