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, and + masking means a mask block reached it. 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:
entities is a list, so one rule can name several. A rule can also name result columns instead, 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

A rule set that reaches a lane enforces — there is no observe-only switch to leave off. To measure first, run the new rules on a lane pointed at a staging copy of the resource, send real query shapes through it, and read what got denied:
Each violation names the rule that fired and the message the client read, so an over-broad rule is visible by name before it reaches production. For a rule you want live on production without deciding on its own, give it action: defer and let OPA allow it while you watch the findings.

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: guardrails.rules concatenate with the listener’s first, while a listener’s mask and opa blocks replace the top-level ones rather than extending them.

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.