@@ -18,43 +18,26 @@ operator-owned ceiling. It does not grant authority by itself.
1818
1919## Install the Prover
2020
21- Download the archive for your platform from the
22- [ OpenShell releases] ( https://github.com/NVIDIA/OpenShell/releases ) page:
23-
24- | Platform | Archive |
25- | ---| ---|
26- | Linux x86_64 | ` openshell-prover-x86_64-unknown-linux-musl.tar.gz ` |
27- | Linux aarch64 | ` openshell-prover-aarch64-unknown-linux-musl.tar.gz ` |
28- | macOS Apple Silicon | ` openshell-prover-aarch64-apple-darwin.tar.gz ` |
29-
30- Download ` openshell-prover-checksums-sha256.txt ` from the same release. On
31- Linux, verify the selected archive before extracting it:
21+ The standard OpenShell installer includes ` openshell-prover ` :
3222
3323``` shell
34- archive=openshell-prover-x86_64-unknown-linux-musl.tar.gz
35- grep " ${archive} $" openshell-prover-checksums-sha256.txt | sha256sum --check
36- tar -xzf " ${archive} "
37- mkdir -p ~ /.local/bin
38- install -m 0755 openshell-prover ~ /.local/bin/openshell-prover
24+ curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
25+ openshell-prover --version
3926```
4027
41- On macOS, use ` shasum ` for verification:
42-
43- ``` shell
44- archive=openshell-prover-aarch64-apple-darwin.tar.gz
45- grep " ${archive} $" openshell-prover-checksums-sha256.txt | shasum -a 256 --check
46- tar -xzf " ${archive} "
47- mkdir -p ~ /.local/bin
48- install -m 0755 openshell-prover ~ /.local/bin/openshell-prover
49- ```
28+ The prover remains independent of the gateway at runtime. If you only need the
29+ standalone binary, use the artifacts listed in the
30+ [ Support Matrix] ( /reference/support-matrix#standalone-policy-prover ) . These
31+ artifacts and ` openshell-prover-checksums-sha256.txt ` are attached to
32+ [ OpenShell releases] ( https://github.com/NVIDIA/OpenShell/releases ) .
5033
5134The release archive includes the solver linkage required by the executable.
5235It does not require the main ` openshell ` command, a gateway configuration, or
5336a separate Z3 installation.
5437
5538## Check a Policy Boundary
5639
57- Create a maximum policy:
40+ Create ` maximum.yaml ` with this maximum policy:
5841
5942``` yaml
6043version : 1
@@ -66,7 +49,7 @@ filesystem_policy:
6649 - /tmp
6750` ` `
6851
69- Create the fully composed candidate policy :
52+ Create ` candidate.yaml` with this contained candidate :
7053
7154` ` ` yaml
7255version: 1
@@ -84,6 +67,36 @@ openshell-prover check candidate.yaml --maximum maximum.yaml
8467` ` `
8568
8669A contained candidate prints `result : within_max` and exits with status `0`.
70+ To see an exceeding result and its counterexample, replace `candidate.yaml`
71+ with a policy that makes `/etc` writable even though the maximum grants only
72+ read access :
73+
74+ ` ` ` yaml
75+ version: 1
76+ filesystem_policy:
77+ read_only:
78+ - /usr
79+ read_write:
80+ - /tmp
81+ - /etc
82+ ` ` `
83+
84+ ` ` ` shell
85+ openshell-prover check candidate.yaml --maximum maximum.yaml
86+ ` ` `
87+
88+ To check the current effective policy of an existing sandbox, export it without
89+ display metadata :
90+
91+ ` ` ` shell
92+ openshell sandbox get my-sandbox --policy-only > candidate.yaml
93+ openshell-prover check candidate.yaml --maximum maximum.yaml
94+ ` ` `
95+
96+ This export includes provider-contributed rules. For a proposed change that is
97+ not active, supply the complete post-change effective policy. The standalone
98+ prover does not compose a base policy with provider rules.
99+
87100Use JSON when a script consumes the result :
88101
89102` ` ` shell
@@ -99,6 +112,17 @@ version. An exceeding result also includes a filesystem or network
99112counterexample. Automation should use `result` and `reason_code` instead of
100113parsing the human-readable explanation.
101114
115+ | Field | When populated |
116+ |---|---|
117+ | `counterexample` | An object for `exceeds_max`; otherwise `null`. |
118+ | `reason_code` | A stable identifier for an emitted `error`, `unsupported`, or `inconclusive` result; otherwise `null`. |
119+ | `reason` | A human-readable explanation paired with `reason_code`; otherwise `null`. |
120+
121+ The stable reason codes are `invalid_input`, `unsupported_policy_shape`,
122+ ` unresolved_workdir` , `unresolved_binary_path`,
123+ ` unresolved_filesystem_path` , `solver_timeout`, `solver_unknown`,
124+ ` resource_limit` , `invalid_witness`, and `cancelled`.
125+
102126The solver has a finite 10-second default budget. Set a different positive
103127budget with an integer followed by `ms`, `s`, or `m` :
104128
0 commit comments