Skip to main content
You have a Sidecar running from the file in Overview. This page is what to do with it: confirm what it resolved, watch the rules fire, read what it recorded, and reshape the file as your setup grows. Every command below assumes that file and a Sidecar started with it.

Confirm what it resolved

Inheritance is merged at startup, so the file tells you what you asked for and the Sidecar tells you what it built. Ask before you deploy — nothing needs to be running:
One line per listener, already resolved: the rule count includes anything inherited from the top level, + masking means a mask block reached it, and observe-only means it is not denying. Ask a running process the same question:
This is the first thing to check when a rule you wrote never fires.

Connect through it

Point the client at the Sidecar’s port instead of the resource’s. Nothing else about the client changes:
The Sidecar reads the wire protocol, so it needs the connection in the clear. Terminate TLS in front of it — see Running the Sidecar for the Envoy shapes.

Watch masking work

The rule in the file rewrites emails on the way out. The client never receives the real value:
redact is one of four strategies, and swapping it is a one-line change:
A rule can also name result columns instead of an entity, which catches a value no detector recognizes:
More in Data Masking.

Watch a guardrail refuse

The operation rule denies drop, delete and truncate, and the statement never reaches the resource:
That is a real pgwire error carrying the message you wrote in the config, so the developer reads the reason in psql instead of watching a connection drop. On an HTTP listener the same denial arrives as 403 with an X-Hoop-Denied header. operation is one of eight rule types. Deny by table, by pattern, by detected PII, by HTTP resource or status, by word list, or by AI verdict — all in Guardrails.

Measure before you deny

Turning rules on against real traffic is easier when nothing breaks first. Set enforcement off and every statement is still inspected and recorded, but nothing is refused:
Then read what would have been denied:
When that list holds nothing you did not expect, set enforce: true.

Read what it recorded

Every session is recorded whether or not it issues a statement. The admin API is the fast way in:
The query endpoints filter on principal, connection, protocol, since, until, denied, open, and q for a substring, with limit and cursor for paging. /api/events also takes session_id and a repeatable kind. The same events go to stdout as JSON lines, which is the durable copy — the admin API reads in-memory buffers sized by audit.memory_buffer and audit.query_sessions. Full detail in Audit.

Put it in front of something else

protocol picks the codec, and the rest of the listener keeps its shape. SQL Server:
An HTTP API, which captures nothing until you ask it to:

Protect more than one resource

listeners is a list, so a second resource is a second entry rather than a second process. Each one carries its own rules and can override the top-level defaults:
One caveat worth knowing before you split rules across levels: policy.rules concatenate with the listener’s first, while a listener’s mask block replaces the top-level list rather than extending it.

Pass the config another way

--config also reads HOOP_SIDECAR_CONFIG, which is the shape a Kubernetes deployment wants — mount the ConfigMap, set the variable, pass no arguments:

Where to go next

Running the Sidecar

Transports, putting it behind Envoy, and a compose stack that runs the whole thing on your laptop.

Config File Reference

Every section, every field, and what startup refuses.

Agentic Access

Put an AI Analyzer in front of the rules and let the risk level pick what happens.