mcpField
E
extract-engine

extract-engine

github.com/igmarinDevelopment2838 installsUpdated 4w ago
Repository

About extract-engine

extract-engine is a skill for moving existing code from a Rails application into an engine. It favors small, behavior-preserving extraction steps, with adapters for host dependencies and regression checks throughout.

Key features

  1. 01Bounded extraction planning
  2. 02Dependency and boundary analysis
  3. 03Domain logic moved before web layers
  4. 04Adapters for host dependencies
  5. 05Regression-test checkpoints

Use cases

  1. 01Extracting a service from a Rails app
  2. 02Separating host dependencies behind adapters
  3. 03Planning incremental engine migration

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/igmarin/rails-agent-skills --skill extract-engine

After installing, type/extract-enginein Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

assets/
checklist.json
examples.md
references/
adapter_examples.md

Details

From the project README

Extract Engine

Use this skill when the task is to move existing code out of a Rails app and into an engine. Prefer incremental extraction over big-bang rewrites. Preserve behavior first, then improve design.

Quick Reference

PhaseFocus
PrepIdentify bounded feature and host dependencies
LogicMove stable domain logic (POROs, services) first
SeamsAdd adapters/config for host dependencies
WebMove controllers, routes, views last

HARD-GATE

DO NOT extract and change behavior in the same step.
Extraction must preserve existing behavior; refactoring and improvements belong in a separate step after the move is complete and verified.

Core Process

  1. Identify the bounded feature to extract — one coherent responsibility.
  2. List hard dependencies on the host app (models, services, config).
  3. Define the future engine boundary and host contract.
  4. Move stable domain logic first: POROs, services, value objects, policies, query objects. Delay direct host model references, authentication, route ownership, and asset integration.
  5. Add adapters or configuration seams for host-owned dependencies. Replace hardcoded host references with config values, adapter objects, or service interfaces.
  6. Move controllers, routes, views, or jobs only after seams are clear.
  7. Keep regression coverage green throughout each slice.

Each slice must have: one coherent responsibility, minimal new public API, passing regression tests, and a clear next step.

Extended Resources

Pitfalls

PitfallWhat to do
Extracting too much at onceOne bounded slice per step
Direct host references in engineUse adapters or config
Behavior changes mixed with extractionPreserve behavior first; refactor after
Circular dependencies introducedVerify import graph before each slice
Implicit host contractExplicitly document and test the host app contract

Examples

First slice (move PORO, no host model yet):

mkdir -p my_engine/app/services/my_engine
mv app/services/pricing/calculator.rb my_engine/app/services/my_engine/pricing_calculator.rb
# Before (in host app): module Pricing; class Calculator
# After (in engine):
module MyEngine
  class PricingCalculator
    def initialize(line_items)
      @line_items = line_items
    end

    def total
      @line_items.sum { |item| item.price * item.quantity }
    end
  end
end

Verify regression coverage still passes before proceeding:

bundle exec rspec spec/services/pricing/ spec/requests/orders/

Adapter for host dependency:

module MyEngine
  def self.current_user_for(request)
    config.current_user_provider.call(request)
  end
end

# usage
OrderCreator.for_request(request) # resolves via MyEngine.current_user_for(request)

Output Style

  1. Propose one small, bounded extraction slice at a time.
  2. Outline the files moving, the new boundaries, and the regression tests to run.
  3. Language — Must be in English unless explicitly requested otherwise.

Integration

SkillWhen to chain
create-engineEngine structure, host contract, namespace design after extraction
test-engineDummy app, regression tests, integration verification
refactor-codeBehavior-preserving refactors before or after extraction slices

Comments

Markdown supported