# 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 `