What problem does it solve? Converting an existing Promise/async codebase to Effect all at once is risky and disruptive. This Skill provides a structured, incremental path that keeps non-Effect callers working while Effect callers move onto typed services early. ## Core Features & Use Cases - Step-by-step migration template: Eight ordered steps covering interface extraction, Context.Service declaration, Layer.effect construction, default layer wiring, ManagedRuntime bridging, async facades, caller updates, and facade pruning. - Backward compatibility bridge: A shared memoMap-based runtime bridge exposes runPromise/runSync so legacy async callers keep working during the transition. - Common transformations: Concrete before/after patterns such as replacing Promise.all fan-out with Effect.forEach and converting catchDefect handlers to typed catch/catchTag. - Use Case: You have an Items module with async get/list functions used across the app. Follow the template to create an Items.Service with a layer, keep thin async facades for old callers, migrate Effect callers to yield* Items.Service, then prune the dead facades in a separate commit. ## Quick Start Ask the AI to migrate a specific async module, such as 'convert my Items module to an Effect service while keeping the existing async functions working for legacy callers'.