# `mix mob.snapshot_loaded`
[🔗](https://github.com/genericjam/mob_dev/blob/main/lib/mix/tasks/mob.snapshot_loaded.ex#L1)

Asks a connected device's BEAM what modules it has loaded right now.
In interactive mode (Mob's default), a module is loaded only when
something calls into it — so the loaded set after a real user session
is the empirical "actually used" set.

Anything **shipped but never loaded** is a strong strip candidate.
Combine with `mix mob.audit_otp` (static reachability) for the
highest-confidence strip set:

    shipped ∩ statically-reachable ∩ NEVER-loaded = safe to strip

## Workflow

    mix mob.deploy                    # deploy the app
    # Use the app — every flow you care about
    mix mob.connect --no-iex          # set up the dist tunnel
    mix mob.snapshot_loaded           # snapshot
    mix mob.snapshot_loaded --json out.json  # machine-readable

## What the report shows

  * Total .beam files shipped
  * Modules currently loaded
  * Modules in the bundle that have never been loaded
  * Per-OTP-lib breakdown (which libs have any module loaded vs not)

## What this is NOT

Not a trace — it doesn't tell you *which* function was called or how
often. Just whether the module was touched. For per-function or
per-call-frequency data, use `mix mob.trace_otp` (host-side harness)
or extend `Mob.Diag` with `:recon_trace`-based on-device tracing.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
