Skip to content

Commit c5a458a

Browse files
committed
docs(policy): move policy pages under how-it-works and fix links
Signed-off-by: Johnny Greco <jogreco@nvidia.com>
1 parent 4f63007 commit c5a458a

17 files changed

Lines changed: 126 additions & 108 deletions

File tree

‎docs/about/overview.mdx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ OpenShell applies defense in depth across the following policy domains.
4242
| Process | Blocks privilege escalation and dangerous syscalls. | Locked at sandbox creation. |
4343
| Provider credentials | Resolves opaque credential placeholders only at profile-authorized endpoints. | Attachments, rotation, and revocation update at runtime; new environment variables require a new process. |
4444

45-
For details, refer to [Customize Sandbox Policies](/how-it-works/policies/overview) and [Default Policy](/how-it-works/policies/default-policy).
45+
For details, refer to [Sandbox Policies](/how-it-works/policies/overview) and [Default Policy](/how-it-works/policies/default-policy).
4646

4747
## Common Use Cases
4848

@@ -61,4 +61,4 @@ Explore these topics to go deeper:
6161

6262
- To understand the runtime architecture, refer to [Architecture](/about/architecture).
6363
- To prepare an image and launch an agent, refer to [Run Your First Agent](/about/run-your-first-agent).
64-
- To learn how OpenShell enforces policy controls across protection layers, refer to [Customize Sandbox Policies](/how-it-works/policies/overview).
64+
- To learn how OpenShell enforces policy controls across protection layers, refer to [Sandbox Policies](/how-it-works/policies/overview).

‎docs/extensibility/isolation-backends.mdx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ crate. `OpenShellRuntimeBackend` is implemented in
4343
| Compute driver | Placement and fencing. The driver creates runtime resources, installs the outer egress fence, and supplies a verified descriptor. |
4444
| Isolation backend | Common behavior. The backend turns the shared Rust calls into a protected session with the sandbox runtime. |
4545

46-
For how `openshell-sandbox` enforces the boundary, refer to
47-
[Sandbox](/about/architecture/sandbox). For driver-specific workload behavior,
48-
refer to [Runtimes](/how-it-works/sandboxes/runtimes).
46+
For how `openshell-sandbox` enforces the boundary, refer to [Inside the Sandbox
47+
Boundary](/about/architecture#inside-the-sandbox-boundary). For driver-specific
48+
workload behavior, refer to [Runtimes](/how-it-works/sandboxes/runtimes).

‎docs/how-it-works/inference.mdx‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,10 @@ curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/providers/nvi
3535

3636
In `nvidia-native.yaml`, change `id` to `nvidia-native`, give the profile a
3737
distinct `display_name`, and set `binaries` to the executables that may call the
38-
API, as described in [Binary Matching](/sandboxes/network-rules#binary-matching).
39-
Keep the credential and endpoint definitions you intend to grant. For a Python
40-
workload, the edited fields can look like:
38+
API, as described in [Binary
39+
Matching](/how-it-works/policies/network-rules#binary-matching). Keep the
40+
credential and endpoint definitions you intend to grant. For a Python workload,
41+
the edited fields can look like:
4142

4243
```yaml
4344
id: nvidia-native
@@ -316,5 +317,5 @@ headers, model selection, request shape, streaming, and timeout behavior.
316317

317318
- [Profiles](/how-it-works/providers/profiles)
318319
- [Providers](/how-it-works/providers/overview)
319-
- [Customize Sandbox Policies](/how-it-works/policies/overview)
320+
- [Sandbox Policies](/how-it-works/policies/overview)
320321
- [Google](/how-it-works/providers/google#vertex-ai)

‎docs/how-it-works/policies/advisor.mdx‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ every sandbox by setting `manual` on the gateway.
181181

182182
### Proposal Risk Check
183183

184-
The policy advisor uses the [policy prover](/reference/policy-prover) to run a
185-
proposal risk check on every proposal. Unlike the boundary check that the
184+
The policy advisor uses the [policy prover](/how-it-works/policies/prover) to
185+
run a proposal risk check on every proposal. Unlike the boundary check that the
186186
`openshell-prover` CLI runs, it does not compare a policy with a boundary that
187187
you write. It compares what the sandbox can reach with and without the proposed
188188
rule. The check accounts for the credentials of attached providers and for
@@ -250,7 +250,7 @@ MCP tool rules, query matchers, credential settings, or endpoint path selectors,
250250
and it ignores them if an agent sends them. Review the rule that
251251
`openshell rule get` shows, not the agent's description of it. Add rules that
252252
need those fields yourself, as described in [Manage Sandbox
253-
Policies](/sandboxes/manage-policies).
253+
Policies](/how-it-works/policies/manage-policies).
254254

255255
If a proposed hostname resolves to a private address, OpenShell still blocks the
256256
connection after approval until you add an `allowed_ips` entry or declare the
@@ -305,10 +305,10 @@ if the agent was waiting for the decision. An automatic approval's
305305

306306
## Next Steps
307307

308-
- Use [Manage Sandbox Policies](/sandboxes/manage-policies) to change policies
309-
yourself.
310-
- Use [Network Rules](/sandboxes/network-rules) and the
311-
[Policy Schema Reference](/reference/policy-schema) for rules that agents
308+
- Use [Manage Sandbox Policies](/how-it-works/policies/manage-policies) to
309+
change policies yourself.
310+
- Use [Network Rules](/how-it-works/policies/network-rules) and the
311+
[Policy Schema Reference](/how-it-works/policies/schema) for rules that agents
312312
cannot propose.
313-
- Use the [Policy Prover](/reference/policy-prover) to check a
313+
- Use the [Policy Prover](/how-it-works/policies/prover) to check a
314314
complete policy against a boundary you define.

‎docs/how-it-works/policies/default-policy.mdx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ sandbox without `--policy` does not by itself mean the default is active,
2020
because the image or `OPENSHELL_SANDBOX_POLICY` can supply one. An invalid image
2121
policy keeps the workload from starting until you repair it. It does not select
2222
the default. Refer to [Where the Active Policy Comes
23-
From](/sandboxes/policies#where-the-active-policy-comes-from) for the complete
24-
selection order.
23+
From](/how-it-works/policies/overview#where-the-active-policy-comes-from) for
24+
the complete selection order.
2525

2626
## Default Filesystem Access
2727

docs/sandboxes/manage-policies.mdx renamed to docs/how-it-works/policies/manage-policies.mdx

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ openshell sandbox create --name my-sandbox
3535
```
3636

3737
Without either, the sandbox uses a policy from its image or the restrictive
38-
[default policy](/reference/default-policy).
38+
[default policy](/how-it-works/policies/default-policy).
3939

4040
## Ship a Policy in an Image
4141

@@ -69,7 +69,7 @@ to the sandbox's own policy. Use the effective policy to see everything the
6969
sandbox can reach, for example to find out why a request is allowed.
7070

7171
To save the effective policy as a YAML file, for example to review it or to
72-
check it with the [policy prover](/reference/policy-prover):
72+
check it with the [policy prover](/how-it-works/policies/prover):
7373

7474
```shell
7575
openshell sandbox get my-sandbox --policy-only > effective-policy.yaml
@@ -103,7 +103,7 @@ enforcement mode. `read-only` allows `GET`, `HEAD`, and `OPTIONS` requests,
103103
`rest` turns on HTTP request inspection, and `enforce` blocks every other
104104
request. The `--binary` value must be the real path of the executable inside the
105105
sandbox, as described in [Binary
106-
Matching](/sandboxes/network-rules#binary-matching).
106+
Matching](/how-it-works/policies/network-rules#binary-matching).
107107

108108
To allow another kind of request on an existing rule, add an allow rule. Name
109109
the rule with `--rule-name`, and list every binary in the rule with `--binary`.
@@ -214,11 +214,11 @@ flowchart TD
214214
The sandbox validates the revision again because it also accounts for provider
215215
rules and other changes that arrive at the same time. If the sandbox cannot load
216216
a revision, the `policy_validation_failure_mode` option in the [gateway
217-
configuration](/reference/gateway-config#full-example) decides what happens.
218-
With `fail_closed`, the default, the sandbox blocks network traffic until you
219-
submit a valid policy. With `retain_last_valid`, the last valid policy stays
220-
active. [A Change Fails to Load](#a-change-fails-to-load) explains how to repair
221-
a rejected change.
217+
configuration](/how-it-works/gateways/configuration#full-example) decides what
218+
happens. With `fail_closed`, the default, the sandbox blocks network traffic
219+
until you submit a valid policy. With `retain_last_valid`, the last valid policy
220+
stays active. [A Change Fails to Load](#a-change-fails-to-load) explains how to
221+
repair a rejected change.
222222

223223
## Change Filesystem and Process Settings
224224

@@ -229,7 +229,8 @@ edit these settings in the file.
229229

230230
When the policy allows network access, OpenShell adds the system paths that
231231
sandbox processes need, so list only the paths your workload requires. [Baseline
232-
Filesystem Paths](/reference/default-policy#baseline-filesystem-paths) lists
232+
Filesystem
233+
Paths](/how-it-works/policies/default-policy#baseline-filesystem-paths) lists
233234
those paths.
234235

235236
<Warning>
@@ -379,11 +380,11 @@ openshell sandbox start my-sandbox
379380

380381
## Next Steps
381382

382-
- Use [Network Rules](/sandboxes/network-rules) for example rules you can adapt
383-
to common services and protocols.
384-
- Use the [Policy Prover](/reference/policy-prover) to check that a policy
383+
- Use [Network Rules](/how-it-works/policies/network-rules) for example rules
384+
you can adapt to common services and protocols.
385+
- Use the [Policy Prover](/how-it-works/policies/prover) to check that a policy
385386
grants no more access than a boundary you define.
386-
- Use the [Policy Advisor](/sandboxes/policy-advisor) to let an agent propose
387-
the network rules it needs for your review.
388-
- Use the [Policy Schema Reference](/reference/policy-schema) for every field,
389-
default, and constraint.
387+
- Use the [Policy Advisor](/how-it-works/policies/advisor) to let an agent
388+
propose the network rules it needs for your review.
389+
- Use the [Policy Schema Reference](/how-it-works/policies/schema) for every
390+
field, default, and constraint.

docs/sandboxes/network-rules.mdx renamed to docs/how-it-works/policies/network-rules.mdx

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ an inspected endpoint. The `protocol` field selects what OpenShell inspects:
9898
| `websocket` | The WebSocket upgrade request and each text message the client sends. | [WebSocket](#allow-websocket-messages) |
9999
| `graphql` | GraphQL operation type, operation name, and top-level fields. | [GraphQL](#allow-graphql-operations) |
100100
| `mcp` | MCP method and tool name. | [MCP](#allow-mcp-tools) |
101-
| `json-rpc` | JSON-RPC method name. | [JSON-RPC rules](/reference/policy-schema#json-rpc-rules) |
101+
| `json-rpc` | JSON-RPC method name. | [JSON-RPC rules](/how-it-works/policies/schema#json-rpc-rules) |
102102
| `tcp` | No request rules. Use it for clients that speak a protocol other than HTTP, such as databases. | [Native TCP](#allow-native-tcp) |
103103
| Omitted | No request rules. | -- |
104104

@@ -161,8 +161,9 @@ send provider credentials there. OpenShell supplies a provider's credentials
161161
only to the destinations that the provider's profile or an explicit credential
162162
binding allows. When a request fails a credential check, correct the provider
163163
binding instead of widening the network rule. Refer to [Provider
164-
Profiles](/providers/profiles) for profile endpoints, and to [Credential
165-
Fields](/reference/policy-schema#credential-fields) for explicit bindings.
164+
Profiles](/how-it-works/providers/profiles) for profile endpoints, and to
165+
[Credential Fields](/how-it-works/policies/schema#credential-fields) for
166+
explicit bindings.
166167

167168
## Examples
168169

@@ -174,9 +175,10 @@ When a single `openshell policy update` command can create a rule, the example
174175
shows it. Otherwise, add the YAML under the `network_policies` section of a
175176
complete policy file and apply it with `openshell policy set`, as described in
176177
[Replace the Complete
177-
Policy](/sandboxes/manage-policies#replace-the-complete-policy). After you apply
178-
a rule, [verify the change](/sandboxes/manage-policies#verify-a-change) before
179-
testing traffic.
178+
Policy](/how-it-works/policies/manage-policies#replace-the-complete-policy).
179+
After you apply a rule, [verify the
180+
change](/how-it-works/policies/manage-policies#verify-a-change) before testing
181+
traffic.
180182

181183
### Allow Read-Only API Access
182184

@@ -264,14 +266,14 @@ agent needs only specific operations. It does not cover Git
264266
transport or GraphQL requests. To add a deny rule to an existing rule without a
265267
complete policy file, use `openshell policy update` with `--add-deny`, as
266268
described in [Add or Remove Network
267-
Access](/sandboxes/manage-policies#add-or-remove-network-access).
269+
Access](/how-it-works/policies/manage-policies#add-or-remove-network-access).
268270

269271
Apply the rule with a GitHub provider attached. Its profile must permit
270272
credential use at `api.github.com`, and the token must authorize the repository
271273
operations. Verify that `gh api repos/<org>/<repo>/issues` succeeds and that
272274
`gh api repos/<org>/<repo>/hooks` returns an OpenShell denial. For a complete
273275
Git push example, see [Grant GitHub Push Access to a Sandboxed
274-
Agent](/get-started/tutorials/github-sandbox).
276+
Agent](/tutorials/github-push-access).
275277

276278
### Allow PyPI Downloads
277279

@@ -350,9 +352,9 @@ openshell sandbox exec -n my-sandbox --no-login-shell -- \
350352
OpenShell blocks connections to private network addresses by default to prevent
351353
server-side request forgery (SSRF). An endpoint with an exact hostname can still
352354
reach the private addresses that its hostname resolves to, unless the endpoint
353-
comes from an approved [policy advisor](/sandboxes/policy-advisor) proposal.
354-
Loopback, link-local, and unspecified addresses, including the cloud metadata
355-
address `169.254.169.254`, are always blocked.
355+
comes from an approved [policy advisor](/how-it-works/policies/advisor)
356+
proposal. Loopback, link-local, and unspecified addresses, including the cloud
357+
metadata address `169.254.169.254`, are always blocked.
356358

357359
Use `allowed_ips` to limit the addresses an endpoint can reach, or to let a
358360
wildcard host such as `*.internal.example` reach private addresses. This rule
@@ -483,7 +485,7 @@ For allow rules, every top-level field in an operation must match. A malformed
483485
or disallowed operation denies an entire batched request. GraphQL field names
484486
are application-specific, so review them against the service's schema before
485487
you rely on them. For deny rules, persisted queries, and GraphQL over WebSocket,
486-
refer to [GraphQL Rules](/reference/policy-schema#graphql-rules).
488+
refer to [GraphQL Rules](/how-it-works/policies/schema#graphql-rules).
487489

488490
With a GitHub provider attached, verify a REST read with `gh api zen` and a
489491
query with `gh api graphql -f query='{ viewer { login } }'`, then confirm that a
@@ -528,10 +530,10 @@ tool can receive any arguments accepted by the server.
528530

529531
Omitting `mcp.versions` allows only the `2025-11-25` revision. To support an
530532
older server, list the exact revisions it needs, as described in [MCP Version
531-
Selection](/reference/policy-schema#mcp-version-selection). Server responses and
532-
SSE messages are relayed without MCP policy parsing. Do not put an MCP endpoint
533-
on the same host and port as an endpoint that uses a different protocol.
534-
`openshell policy update` rejects this combination.
533+
Selection](/how-it-works/policies/schema#mcp-version-selection). Server
534+
responses and SSE messages are relayed without MCP policy parsing. Do not put an
535+
MCP endpoint on the same host and port as an endpoint that uses a different
536+
protocol. `openshell policy update` rejects this combination.
535537

536538
### Allow Native TCP
537539

@@ -586,7 +588,7 @@ when the client starts TLS as soon as it connects, when the client must complete
586588
TLS itself, for example to present a client certificate, or when the server
587589
sends first, as with SMTP, IMAP, and MySQL. Clients that send first and
588590
negotiate TLS within their protocol, such as `psql`, do not need it. Refer to
589-
[Inspection Fields](/reference/policy-schema#inspection-fields).
591+
[Inspection Fields](/how-it-works/policies/schema#inspection-fields).
590592

591593
Prefer exact hostnames. A wildcard authorizes DNS queries for every matching
592594
name, which can expose a DNS-label exfiltration channel. An allowed hostname on
@@ -603,9 +605,9 @@ record.
603605

604606
## Next Steps
605607

606-
- Use [Manage Sandbox Policies](/sandboxes/manage-policies) to apply, verify,
607-
and roll back policy changes.
608-
- Use the [Policy Schema Reference](/reference/policy-schema) for protocol
608+
- Use [Manage Sandbox Policies](/how-it-works/policies/manage-policies) to
609+
apply, verify, and roll back policy changes.
610+
- Use the [Policy Schema Reference](/how-it-works/policies/schema) for protocol
609611
defaults, field constraints, and matcher semantics.
610-
- Use [Troubleshoot](/sandboxes/manage-policies#troubleshoot) when a request is
611-
denied unexpectedly.
612+
- Use [Troubleshoot](/how-it-works/policies/manage-policies#troubleshoot) when a
613+
request is denied unexpectedly.

0 commit comments

Comments
 (0)