# `mix pixir.smoke.e2e`
[🔗](https://github.com/Ranvier-Technologies/pixir/blob/main/lib/mix/tasks/pixir.smoke.e2e.ex#L1)

Walks the whole v0.1 pipeline against the real backend, in a throwaway workspace:

  1. **Sign in** — if there's no credential, run the device-code flow (open the URL,
     enter the code). Skipped if already authenticated or `OPENAI_API_KEY` is set.
  2. **Run one Turn** — start a Session in a scratch dir and stream a prompt that
     forces tool use (write then read), exercising the Provider's streaming Responses
     call and the tool loop live.
  3. **Summarize** — fold the Log and report the events, the final answer, and the
     resumable session id.

Usage:

    mix pixir.smoke.e2e                         # default prompt, scratch workspace
    mix pixir.smoke.e2e --model gpt-5.4         # override the model id
    mix pixir.smoke.e2e --prompt "..."          # custom prompt
    mix pixir.smoke.e2e --probe-model           # validate the model id before the Turn
    mix pixir.smoke.e2e --dry-run-tools         # model calls tools, no disk writes
    mix pixir.smoke.e2e --keep                  # keep the scratch workspace
    mix pixir.smoke.e2e --no-login              # fail instead of prompting to sign in
    mix pixir.smoke.e2e --help                  # print this help and exit
    mix pixir.smoke.e2e --json --help           # print machine-readable help

Exit code is non-zero if any stage fails (so it can gate a release check).

# `run`

```elixir
@spec run([String.t()]) :: :ok | no_return()
```

Execute the end-to-end smoke Mix task with the given command-line arguments.

Parses CLI options, handles `--help`/`--json` (prints help and exits normally), validates unsupported options (fails with a structured error), starts the application, ensures the user is signed in (unless `--no-login`), optionally probes the selected model, and runs a single guided turn against the live backend. Any fatal error will be routed to the task's failure handler which exits the process.

---

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