**PyPI:** https://pypi.org/project/nemostation/

**The gated flow is now fully sorted (0.1.6, just shipped).** Here's exactly what a no-access user hits at each step:

1. `uv tool install nemostation` — installs the CLI only (installers can't run code, so nothing HF here).
2. First `marlin` / `marlin setup` — builds the engine, then prints `⚠ approve 1-click weight access (free): https://huggingface.co/NemoStation/Marlin-2B-MLX-8bit`. *(already worked)*
3. `marlin caption` / `marlin find` — **this was the gap, now closed two ways:**
   - **Proactive:** before the multi-minute engine build, it checks access and, if denied, fails fast with the form link — no wasted build.
   - **Reactive:** if the engine still dies pulling gated weights, it scans the log for the gated/401/403 signature and raises *"Marlin-2B weights are gated. Request 1-click access (free) at …, approve it, then re-run."* instead of the old opaque `engine exited (code X)`.

So **every path now points to the form** — install does nothing, but the first time they actually try to use it (setup or caption/find), they're sent to the gated repo. Verified: the detector fires on a real HF gated-error string, doesn't false-trigger on a normal log, and reads `True` for you (owner) so it never blocks you — your `find` still returned 6.5–7.5s after the change.

Two honest notes:
- I couldn't trigger a *real* 403 to watch the full path (you own the repo = always approved), so that branch is unit-verified, not live-fired. The owner path is confirmed unaffected.
- **The bigger launch lever:** the repo is gated **manual**, so an external user fills the form and then *waits for you to approve* before the weights download. If you want a frictionless launch, switch it to **auto-approve** on HF — still captures the lead, but they're unblocked instantly instead of waiting on you. Want me to walk you through flipping that (or check the base model's current setting)?