From elixir-phoenix
Analyzes Phoenix context boundaries and module coupling via mix xref. Checks cross-context calls, validates dependencies, assesses health scores before splitting modules or reviewing architecture.
How this skill is triggered — by the user, by Claude, or both
Slash command
/elixir-phoenix:boundariesThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Analyze module dependencies to ensure clean context separation and proper architectural boundaries.
Analyze module dependencies to ensure clean context separation and proper architectural boundaries.
/phx:boundaries # Check for violations
/phx:boundaries --assess # Score context health (0-100)
/phx:boundaries --fix # Suggest fixes for violations
--assess Mode: Context Health ScoreEvaluate overall boundary health with a quantified score.
| Metric | Healthy Range | Red Flag | Weight |
|---|---|---|---|
| Modules per context | 3-15 | >20 or <2 | 20% |
| Public API surface | 5-30 funcs | >40 funcs | 15% |
| Fan-out (contexts called) | 1-4 | >6 | 20% |
| Fan-in (called by contexts) | 1-6 | >10 | 15% |
| Circular dependencies | 0 | >0 | 15% |
| Boundary violations | 0 | >0 | 15% |
Use Glob to count .ex files per context directory under lib/my_app/*/.
Use Grep to count public function definitions per context file under lib/my_app/*.ex.
Run mix xref graph --format stats for dependency analysis.
Run mix xref graph --format cycles --label compile for compile-time circular dependencies.
## Context Health Assessment
### Overall Score: 82/100 (Good)
| Context | Modules | API | Fan-Out | Fan-In | Score |
|---------|---------|-----|---------|--------|-------|
| Accounts | 5 | 12 | 2 | 4 | 95 |
| Orders | 18 | 45 | 8 | 3 | 62 |
| Shared | 2 | 8 | 0 | 12 | 78 |
### Issues Found
1. **Orders** - Too large (18 modules, 45 funcs)
- Consider: Extract Fulfillment, Invoicing sub-contexts
2. **Orders** - High fan-out (8 contexts)
- Consider: Review if all dependencies necessary
### Recommendations
- Split Orders into Orders + Fulfillment
- Review Accounts ← Billing dependency
mix xref first — Refactoring without dependency data creates new violations; always map the dependency graph before moving modules| Layer | Can Call | Cannot Call |
|---|---|---|
| Controllers | Contexts, Plug, Conn | Repo, Schemas directly |
| LiveViews | Contexts, Components, PubSub | Repo, Schemas directly |
| Contexts | Own schemas, Repo, other contexts | Web layer modules |
| Schemas | Ecto types, validations | Contexts, Repo |
Run mix xref graph --label compile-connected.
Run mix xref graph --sink MyApp.Accounts --label compile.
Run mix xref callers MyApp.Accounts.get_user!/1.
Run mix xref graph --format cycles --label compile.
| Issue | Detection Command | Fix |
|---|---|---|
| Repo in web layer | grep -r "Repo\." lib/my_app_web/ | Move to context |
| Schema with queries | grep -r "import Ecto.Query" lib/my_app/**/schemas/ | Move queries to context |
| Cross-context schema import | grep -r "alias MyApp.Other.Schema" lib/my_app/ctx/ | Call context API |
| Business logic in LiveView | grep -r "Repo\.|Ecto\.Multi" lib/my_app_web/live/ | Extract to context |
mix xref graph --label compile-connected for overviewAlways end with actionable follow-up — findings without a plan get lost:
- `/phx:plan` — Create a plan to fix violations (recommended for 3+ issues)
- `/phx:quick` — Fix a single boundary violation directly
- `/phx:review` — Review specific modules for deeper issues
For detailed patterns, see:
${CLAUDE_SKILL_DIR}/references/context-design.md - Context design principles${CLAUDE_SKILL_DIR}/references/refactoring-boundaries.md - Fixing boundary violationsnpx claudepluginhub oliver-kriska/claude-elixir-phoenix --plugin elixir-phoenixReviews Phoenix apps for controller patterns, context boundaries, routing, plugs, and JSON APIs. Use when auditing controllers, contexts, routers, or error handling.
Guides Phoenix context design: creating/splitting contexts, Scope (1.8+), Ecto.Multi, PubSub, routers, plugs, controllers. Use when editing contexts, routers, or designing boundaries.
Detects code duplication (>70% similarity), ABC complexity (>30), unused private functions, and duplicated HEEx templates in Elixir projects. Invoke for analysis or refactoring.