From elixir-phoenix
Audits Phoenix LiveView socket assigns for memory bloat: estimates usage, flags missing temporary_assigns, unused assigns, and unbounded lists needing streams. Use for performance investigations.
How this skill is triggered — by the user, by Claude, or both
Slash command
/elixir-phoenix:assigns-auditThis 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 LiveView socket assigns for memory efficiency, clarity, and best practices.
Analyze LiveView socket assigns for memory efficiency, clarity, and best practices.
Use Grep to find all assign( and assign_new( calls in the target LiveView file.
Use Grep to find large data patterns: lists stored in assigns (assign.*\[\], assign.*Repo\.all) and full schema storage (assign.*Repo\.get) in the target file.
| Pattern | Problem | Solution |
|---|---|---|
assign(:items, Repo.all(...)) | Unbounded list | Use stream/3 |
assign(:user, Repo.get!(...)) | Full schema | Select only needed fields |
assign(:file_data, binary) | Large binary | Store reference, not data |
| Nested preloads | Excessive data | Preload only what's rendered |
Should use temporary_assigns:
def mount(_params, _session, socket) do
{:ok, socket, temporary_assigns: [flash_message: nil]}
end
Search for assigns defined but never used in templates:
Use Grep to extract all assign names (assign\(:(\w+)) from the LiveView file, then use Grep to find all @\w+ references in the corresponding .heex template. Compare to find unused assigns.
# BAD: @items might not exist
def render(assigns) do
~H"<%= for item <- @items do %>"
end
# GOOD: Initialize in mount
def mount(_params, _session, socket) do
{:ok, assign(socket, items: [])}
end
For each assign, estimate memory footprint:
| Data Type | Approx Size | Concern Level |
|---|---|---|
| Integer | 8 bytes | Low |
| String (100 chars) | ~200 bytes | Low |
| List of 100 maps | ~10-50 KB | Medium |
| List of 1000 items | ~100-500 KB | High |
| Binary (image) | Varies | Critical |
| Full Ecto schema | ~1-5 KB each | Medium |
Run /lv:assigns path/to/live_view.ex to generate an assigns inventory with memory estimates and optimization recommendations.
npx claudepluginhub oliver-kriska/claude-elixir-phoenix --plugin elixir-phoenixAnalyzes Elixir/Phoenix apps for performance issues: N+1 queries, assign bloat, Ecto optimizations, LiveView memory leaks, GenServer bottlenecks. Use for slowness, timeouts, high memory.
Reviews Phoenix LiveView code for lifecycle patterns, assigns/streams usage, components, and security in modules, .heex templates, and LiveComponents.
Enforces Phoenix LiveView best practices: @impl true callbacks, assign initialization in mount/handle_params, connected? checks, proper tuples, and two-phase rendering awareness. Invoke before LiveView modules or .heex templates.