OpenClaw EnterpriseDOCSGitHub

Protected static inference

New local development launches of this profile are retired. The launcher rejects OCC_DEVELOPMENT_PROTECTED_EGRESS=1 and any presence of OCC_DEVELOPMENT_OPENSHELL_HOST_GATEWAY_IP before effects, with no fallback. Unset, empty or 0 protected-egress selections retain ordinary authenticated OpenShell startup. See the retirement notice.

The controller contracts below remain for existing installations, source owners and historical specifications. Launcher retirement does not remove their admission, withdrawal or cleanup responsibilities.

Select the Credential Proxy Driver only with a Kubernetes Compute and OpenShell pair that enforces the whole-execution profile below. The security principal is one freshly admitted Agent execution. Its parent, a sibling and an ordinary client can use the same allowed operation. A different execution, even of the same Agent, cannot inherit that authority. The generated model routes use OpenShell's /** binary matcher to accept any verified absolute executable path in that execution. OpenShell still checks process identity, and credential middleware checks the admitted operation. Clients need no hook.

The bundled legacy OpenShell release cannot enforce this profile. Before using a candidate pair, qualify its installed dispatch and response custody and test the actual static inference path. A repository metadata read exercises the shared exchange but does not establish static inference or Git transport support.

Bundled OpenShell admission

The bundled OpenShell Credential Proxy Driver refuses new protected static OpenAI sources, live adoption or re-admission of a saved source, and new protected revisions using one. OCC returns 409 RESOURCE_CONFLICT. Source admission is refused before reading its Secret material. Deployment retirement is checked before contacting the counterpart, so an unavailable Gateway cannot turn the refusal into a retryable error. Ask an Installation administrator to configure a supported model access path.

Existing revisions keep the recorded provider for request authorization and recovery under the current Sandbox contract. Adoption still requires the exact current spec, including the inference /** matcher; older Sandboxes without it are unsupported. Withdrawal and cleanup still go to their original owners. This restriction does not change ordinary Gateway-only OpenAI sources.

Execution admission cutoff

New protected revisions record version 3 admission, including the Driver identity and configuration shared by Sandbox and Credential Proxy. Upgrade the API and workers before creating one: an older worker refuses this revision. Version 2 represents unprotected admission only. Protected versions 4, 5 and 6 carry the distinct repository authorization contracts. Version 7 requires exact-dispatch Git and authenticated reduction v2 support. Advertising v2 does not replace v4, v5 or v6 admission or imply v1 support. Ordinary v3 can omit reduction for one source; multiple static sources require explicit reduction v1 support. Production uses the selected Driver registration for these checks, including dedicated-only and static-only configurations. A pending reduction retains its original operation and installation receipt. Missing or inconclusive policy evidence keeps the credential denied and the original execution under reconciliation. Only positive recipient replacement or an explicitly unsupported legacy policy permits terminal retirement.

A protected plan with no bindings means deny all, including direct networking. Readers that cannot interpret the decision refuse the revision. Other Compute implementations refuse protected admission. A protected revision keeps only its Credential Proxy egress policy: per-Agent network policy additions are refused at save, live application and deploy with 409 SANDBOX_POLICY_PROTECTED_EXECUTION. See the developer upgrade and withdrawal procedure before migrating an installation with running Agents.

Kubernetes Compute waits for the authenticated current installation, records it and rechecks it before signing a fresh startup challenge with its control-plane Ed25519 key. The workload gets only the verifier. If startup or the serving check cannot establish the admitted installation, the execution stays unavailable. For a prepared credential, the source can be configured and a revision requested while the source's status.state is pending. Compute waits for the exact family to be warm before releasing the workload, then for the Harness to report serving before reporting ready. If the revision never becomes ready, deployment status reports the convergence timeout. Only the preparation worker can warm the family; startup, readiness and requests cannot.

Loaded enforcement

The OpenShell Gateway and trusted supervisor must report credential access, installation exchange, response custody and whole-execution authority, in that order. Credential Proxy compares the current source and effective policies, installation and supervisor identity. A loaded policy, executable-scoped capability, bearer or historical receipt cannot establish this authority.

The supervisor accepts the downstream response recipient before resolving a credential. It signs the exact opening, including ephemeral response custody, on the bidirectional installation exchange. All subsequent decisions belong to that stream. One required exchange owner verifies identity, captures the request origin and checks live response custody. Credential Proxy snapshots the bounded request before asynchronous verification. Credential reads share cancellation and an absolute deadline; nested Kubernetes reads cannot extend either bound, and an expired deadline prevents HTTP dispatch even before its timer fires. Closing the stream cancels pending access. Both before material access and before send, OCC checks the current installation, binding, withdrawal and native IAM permission. An acknowledged authorization of the exact dispatch releases one permit. If the COMMIT reply is lost, the origin might have been reachable, but no permit or retry follows. Retain that uncertain receipt.

Static source and response policy

Fresh static sources select the first provider for their type in catalog order. The selected provider ID and generation must identify one registration; duplicates return 409 before credential material is read. Multiple distinct providers for the same type remain supported. Reordering distinct providers does not change the provider selected for an existing source update.

The static OpenAI profile admits an explicitly configured model and a closed set of text inference requests. Unsupported operations, remote provider tools, arbitrary model selection and discovery are refused before reading the Secret. The trusted sender injects the selected version. Neither the Agent nor the admission snapshot receives its value.

Responses requests may declare local function and custom tools, including namespaces, in the top-level tools list or a developer additional_tools input item. Inline declarations use the same local-tool restrictions; they do not authorize hosted tools. Local function parameter schemas accept encrypted: true only on a string schema. This annotation does not itself encrypt data. Native agent_message input accepts bounded /root agent paths and one text part, optionally followed by one encrypted content part. Agent paths label the message. Credential authority still comes from the admitted execution. Request reasoning.effort accepts none, minimal, low, medium, high, xhigh and max. The JSON string in client_metadata["x-codex-turn-metadata"] may include reasoning_effort with the value none, minimal, low, medium, high, xhigh, max or ultra. The proxy accepts ultra only in telemetry; it does not translate effort values. The metadata can also include workspaces with one absolute Git root. Each entry must include at least one of latest_git_commit_hash (a lowercase SHA-1 or SHA-256 hash), has_changes (a Boolean), or associated_remote_urls (1–16 named Git remotes). The proxy accepts HTTPS URLs without user info and SCP-style URLs with the literal git transport user. Both forms use plain ASCII repository paths and omit queries and fragments. The separate optional client_metadata["mcp_attribution"] JSON string accepts exactly {"status":"none"}. These fields carry telemetry and grant no authority. For request_kind: "compaction", turn metadata may include a compaction object with a native trigger, reason and phase, implementation: "responses" and strategy: "memento". All five fields are required in that object. Replayed assistant output_text parts can include annotations and logprobs. Each field must be an empty array if present. Replayed reasoning items accept content: null or an array of reasoning_text parts. Codex can send null after loading a saved thread whose reasoning item omitted the field. The proxy refuses unknown request fields.

In streamed Responses envelopes, tool echoes may contain null descriptions, strict, defer_loading, or custom-tool format; their nonnull values retain the same type and local-tool restrictions. Namespace descriptions remain text. The optional image response object accepts only context_compression: "enabled" | "disabled", the effective policy reported by the provider. Missing or unknown members and other values are refused; the request-only "auto" value is not an effective response policy.

Static provider generation two identifies whole-execution authority. A generation-one grant remains narrower. Adopting live material and authorizing the broader execution are explicit, separate decisions; a Secret edit grants neither. The first cutover requires an unbound source and an explicitly admitted new binding. Leave an existing approved copy available until its owner can make that transition safely.

The supervisor withholds the complete bounded response, including the last trailer, until Credential Proxy permits its release. The 30-second operation deadline bounds the first response byte. The supervisor reports that first byte and subsequent progress. With current permission, a report can renew the lease for five minutes, up to fifteen minutes after the request was created (or the exchange credential's expiry, if sooner). After a successful check, new bytes can trigger the next policy check no sooner than 15 seconds later. A quiet stream triggers no checks and is discarded if its lease expires.

Credential Proxy records the upstream response, then checks current policy before releasing a leased response. If permission was withdrawn while the stream was quiet or while the observation was being saved, the proxy withholds the bytes. It also withholds them if it cannot confirm permission for the same source, the lease expires, or the exchange closes. A withdrawal after that check cannot recall bytes already released.

The receipt describes what the proxy observed upstream, even when it later withholds the response. A positive credential rejection fences only that material version. Neither the receipt nor permission to release the response proves delivery to the Agent or permits a retry.

Response protection checks joined assistant text in envelopes, independent items, and added-item seeds extended by streamed deltas. Safe projections may disagree; accepted response bodies retain their original bytes. In addition to raw text, protection checks the selected assistant consumer's literal, nonnested citation projection: <oai-mem-citation> through </oai-mem-citation> is hidden, with an unclosed citation hidden to the end. It also checks that projection in plan mode: a standalone <proposed_plan> line starts a nonnested hidden block ending at a standalone </proposed_plan> line or end of text. Tag lines use Unicode White_Space trimming and are removed with their newlines. Inline tags and unmatched closing tags remain text. Check the Plan itself, too. Codex extracts a completed Plan before removing citations, but can build a streamed Plan from deltas across several assistant items. If pending parser tails could change their order, withhold the response. These checks cover the named views of one finite response, not arbitrary future client transformations; they do not reinterpret function-call argument data.

Installation configuration

For retained controller installations, consult the OpenShell Backend and Sandbox configuration. These settings describe the existing installation and do not enable new bundled protected static inference admission. The retired local launcher cannot prepare this configuration. Select the same Driver ID in backend[].drivers.credential_proxy and the Installation's drivers.credential_proxy selection. Configuring only one is an error, not a request to disable protection. Startup also rejects the retired drivers.conduit key at either boundary, including when both keys are present; use drivers.credential_proxy instead. Set its middleware name and authorityScope: execution. Provide an authenticated HTTPS Gateway, the authority's TLS identity and trusted Gateway issuer public key. Keep the single authority process reachable for the whole exchange.

Prepared GitHub metadata is a separate, bodyless GET grant isolated to the named Agent. Deleting that Agent stops renewal and use at once; the worker then revokes the source's token. Delete the source afterwards. The grant's optional custody and trusted issuer settings belong to the Installation operator, not the credential source. Credential preparation describes the worker, cold behavior and recovery.

Search documentation