# The `/__hmn/` control plane and the injected detection bundle Source: https://humanymous.net/explanation/control-plane-and-bundle.html Project: humanymous — defensive anti-bot / browser-automation detection (Apache-2.0). --- # The `/__hmn/` control plane and the injected detection bundle > **Quadrant:** Explanation (with an endpoint reference table). > **Audience:** Integrators debugging an integration, a Content-Security-Policy conflict, or a routing collision. This page explains the two things humanymous Gate ("Gate") adds to the request/response path that you can observe from your own app: a namespace of client-facing endpoints under `/__hmn/`, and a small detection bundle that Gate streams into your HTML. If a route stopped working after you put Gate in front of your origin, if your CSP started reporting violations, or if your single-page-app router began fighting a path, this is the page that tells you why and where to look. This repository is a reference implementation, not a production-hardened build. Where a detail is deferred to production or not fixed by the facts on hand, this page says so rather than guessing. For the full request lifecycle and shared vocabulary, see [How Gate sees a request](../concepts/how-gate-sees-a-request.md). For what Gate does and does not rewrite in a response, see [Will this break my app?](./will-this-break-my-app.md). For every flag named here, see the [CLI, Config & Per-Route Policy Reference](../reference/cli-config-policy.md). ## The two surfaces you can observe When Gate fronts your origin, two of its behaviors are visible from the browser and from your own code: 1. **The control plane** — a reserved namespace, `/__hmn/`, served by Gate on the public edge. Your origin never sees these requests; Gate answers them itself. 2. **The injected bundle** — a loader ` ``` The leading `` comment is an idempotency marker: if the injector sees it already present, it passes the page through untouched. If no head boundary is found within the 64 KiB look-ahead, the page is streamed through without injection (rather than buffering without bound). For the fuller picture of *what* the bundle collects across L1–L7, see [How Gate sees a request](../concepts/how-gate-sees-a-request.md). ## Avoiding collisions Most integration surprises come from one of four places. Here is how to keep each one clean. ### Keep your app off the `/__hmn/` prefix `/__hmn/` is reserved by Gate on the public edge, and requests to it are answered by Gate, not forwarded upstream. If your own application serves anything under `/__hmn/`, those paths will be shadowed — the browser will reach Gate's control plane, not your route. The fix is simple: do not mount application routes under `/__hmn/`. It is a deliberately unusual prefix precisely to make a collision unlikely. ### Expect the loader in your HTML Your HTML responses on injecting routes will contain a loader `