Strategic codebase re-direction when requirements change, architecture doesn't fit, or tech debt blocks progress. TRIZ-powered pivot protocol for large codebases.
Scanned 5/29/2026
Install to Claude Code
npx -y skills add tody-agent/codymaster --skill cm-reactor --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Cm Reactor?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/tody-agent-cm-reactor)More formats (shields.io, HTML) on the badges page.
---
name: cm-reactor
description: "Strategic codebase re-direction when requirements change, architecture doesn't fit, or tech debt blocks progress. TRIZ-powered pivot protocol for large codebases."
---
# Reactor — Strategic Codebase Re-direction
> **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.
## When to Use
**ALWAYS when:**
- Requirements changed significantly after code was built
- Architecture no longer fits the problem (wrong patterns, wrong abstractions)
- 3+ patches on the same area — symptom of structural mismatch
- Tech debt blocks new feature development
- "We need to rewrite X" — STOP. Use this skill first.
- Migrating from one framework/library/pattern to another
- Post-mortem reveals systemic issues needing strategic change
**Skip when:**
- Simple bug fix → use `cm-debugging`
- Routine refactoring (extract method, rename) → use `cm-clean-code`
- New project from scratch → use `cm-project-bootstrap`
- Small scope change (< 5 files affected) → just refactor directly
## The Iron Law
```
NO REWRITE WITHOUT REACTOR ANALYSIS FIRST
```
Rewrites fail 70% of the time. Incremental strategic migration succeeds 90% of the time.
## TRIZ Principles Applied
| # | 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 |
## The 5-Phase Process
```
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
```
### Phase 1: ASSESS — Identify the Contradiction
> **Goal:** Find the TRIZ contradiction — what do we WANT vs what BLOCKS us?
1. **State the current direction:**
```
Current: We built [X architecture/pattern/structure]
Problem: It doesn't support [Y requirement/scale/use case]
```
2. **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"
```
3. **Define the Ideal Final Result (IFR):**
```
The system ITSELF [achieves the goal]
WITHOUT [the current blocking factor]
WHILE maintaining [what currently works well]
```
4. **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]
```
### Phase 2: MAP — Dependency Analysis
> **Goal:** Know exactly what touches what before changing anything.
1. **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
```
2. **Manual mapping** (if codegraph unavailable):
```
grep -rn "import.*{module}" src/
grep -rn "{function_name}" src/
→ Build dependency tree manually
```
3. **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 |
4. **Output: Migration Map Document**
```markdown
## 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
```
### Phase 3: DESIGN — Strangler Fig Migration
> **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:**
```markdown
## 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:**
- Never break the build at any step
- Each step MUST be independently deployable
- Tests must pass at every intermediate state
- If any step fails → STOP, don't cascade
### Phase 4: EXECUTE — Incremental Migration
> **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)
```
### Phase 5: VERIFY & CLEAN
> **Goal:** Confirm the new direction works AND trigger cm-clean-code.
1. **Direction verification:**
```
□ New architecture supports the originally blocked requirement
□ Performance is equal or better
□ All tests pass
□ No regression in existing features
□ Documentation updated
```
2. **Trigger cm-clean-code:**
```
After reactor completes → ALWAYS run cm-clean-code
Reason: Migration leaves dead code, unused imports, stale references
```
3. **Record in CONTINUITY.md:**
```
Decision: Migrated [X] from [old pattern] to [new pattern]
Rationale: [why — the TRIZ contradiction we resolved]
Scope: module:[affected module]
```
---
## Red Flags — STOP
| 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 |
## Integration
| 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 |
### Lifecycle Position
```
cm-brainstorm-idea → cm-reactor → cm-planning → cm-execution → cm-clean-code
(analyze) (redirect) (plan) (build) (hygiene)
```
## The Bottom Line
**Don't rewrite. React. Migrate incrementally. Clean up after. Every step must pass tests.**
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!