Use when structuring Elixir code, deciding whether to use GenServer or plain functions, designing supervision trees, handling overload or unbounded message queues, organizing Phoenix contexts, or needing idiomatic OTP patterns
Guides Elixir architectural decisions from pure functions to OTP patterns based on runtime needs.
/plugin marketplace add jeffweiss/elixir-production/plugin install elixir-production@jeffweissThis skill inherits all available tools. When active, it can use any tool Claude has access to.
async-processing.mdboundary-enforcement.mddomain-patterns.mdescalation-ladder.mdmetaprogramming.mdotp-patterns.mdoverload-management.mdreferences/contexts.mdstate-machines.mdweb-api-design.mdweb-api-graphql.mdweb-api-rest-vs-graphql.mdweb-api-rest.mdStart with pure functions. Escalate to processes only when you need runtime concerns — fault isolation, parallelism, or state across calls. Separate domain logic from temporal logic.
| Level | What | Reach For |
|---|---|---|
| L0 | Pure functions, pipes, Enum | Data transformation with no side effects |
| L1 | Tagged tuples, with | Operations that can fail |
| L2 | Ecto.Changeset | Validating external input at boundaries |
| L3 | GenServer (or ETS) | State that persists across calls |
| L4 | Supervisors | Automatic crash recovery |
| L5 | Registry, Task, DynamicSupervisor | Dynamic process pools, concurrent work |
| L6 | Phoenix Contexts, Protocols | Domain architecture boundaries |
What are you solving?
Transform data, no side effects → Level 0 (pure functions)
Operations that can fail → Level 1 (tagged tuples, with)
Validating external input → Level 2 (Ecto.Changeset)
Need state across calls → Level 3 (GenServer, consider ETS first)
Process might crash → Level 4 (Supervision)
Many dynamic processes to coordinate → Level 5 (Registry, Task, DynamicSupervisor)
Organizing modules into domains → Level 6 (Contexts, Protocols, Behaviours)
Read the file that matches your current problem:
escalation-ladder.md — When: Deciding which pattern level to use. Full Pattern Escalation Ladder (Levels 0-6 with code examples and decision triggers)otp-patterns.md — When: Building GenServers, supervisors, or registries. GenServer, Supervisor, Registry, Task, Protocol, SGP anti-pattern, init guarantees, BEAM nuancesstate-machines.md — When: Modeling workflows with defined states. :gen_statem vs GenServer decision, state timeouts, postpone, state enter callbacks, why not :gen_eventoverload-management.md — When: System is slow or queues are growing. Back-pressure, load-shedding, circuit breaker critique, token bucket retries, adaptive concurrencydomain-patterns.md — When: Organizing business logic code. Phoenix contexts, code quality patterns, pattern matching, tagged tuples, changesetsreferences/contexts.md — When: Designing module boundaries. Full context design patterns, boundaries, anti-patterns, testingasync-processing.md — When: Choosing between GenServer, Oban, and Broadway. GenServer vs Oban vs Broadway decision framework, Oban worker patterns, Broadway pipeline architecture, testingmetaprogramming.md — When: Considering macros (last resort). When to use macros (last resort), how use works, quote/unquote, DSL patterns, hygiene, debugging, common mistakesweb-api-design.md — When: Building any external API. API design philosophy: error contracts, pagination, auth boundaries, versioning, input validationweb-api-rest-vs-graphql.md — When: Choosing between REST and GraphQL. Decision framework: when to choose REST, GraphQL, or both, with comparison tableweb-api-rest.md — When: Building REST endpoints. REST with Phoenix: thin controllers, router organization, fallback controllers, param validation, testingweb-api-graphql.md — When: Building GraphQL with Absinthe. GraphQL with Absinthe: Dataloader (required), thin resolvers, schema organization, auth middleware, complexity limits, subscriptions, testingboundary-enforcement.md — When: Enforcing architectural invariants mechanically. Structural tests for context boundaries, custom credo rules, cross-context join detection, agent-readable error messages/feature <desc> — Guided feature implementation using these patterns/review [file] — Review code against idiomatic OTP/Phoenix standards/cognitive-audit — Analyze module complexity and suggest refactorsActivates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools. Use when the user asks to find skills, browse skill catalogs, install a skill for Claude, or extend Claude's capabilities with reusable AI agent components.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.