Skip to main content
A hiloop sandbox runs untrusted, agent-driven code, so security claims here distinguish controls enforced outside the workload from features that have not shipped. Requests the deployment cannot enforce exactly are rejected at admission, never weakened into an apparently successful sandbox. Capabilities still landing are listed in what’s live today; nothing below depends on them.

Current guarantees

Network isolation

Creation starts at public; after the deployment activates the complete closed-policy bundle, the update API selects public, gateway_only, or none. Before activation, non-public updates return unsupported_capability. Enabled updates return only after the policy controller selects the exact live Pod. DNS and the proof-authenticated capture path remain available in every profile; all unlisted destinations are denied. Destination-level domain or CIDR lists are not part of the current API.

Network policy enforcement

Two different controls in this page rest on the same cluster property: the sandbox network floor above, and the fence that keeps in-cluster callers from reaching backend services directly and asserting an identity the edge never stamped. Both are Kubernetes NetworkPolicy, and NetworkPolicy only binds where the cluster’s CNI enforces it. A CNI without enforcement accepts every one of these objects and honours none of them, so both controls read as present and do nothing. Hosted deployments run with enforcement enabled. A self-managed install proves it rather than assuming it: a pre-install gate fences a target with a real NetworkPolicy, dials a port that policy denies, and refuses to install if the port keeps answering while the admitted port does. A policy still converging is given time to land, so only a denied port that answers throughout fails the install. A gate that cannot establish its own baseline connection, or that loses it mid-check, reports the run as inconclusive and still refuses — an unverified fence is not a passing one. See Kubernetes requirements.

Fail-closed admission

The create path refuses what it cannot enforce, with unsupported_capability naming the gap: secret bindings when proof-bound release is not configured, volume mounts today, plus the durable storage class on a deployment that has no storage class configured to back it. Activity capture has no create-time switch; the platform attaches its trusted capture process when that runtime path is available. This is the standing posture: an unavailable requested control is an explicit error, not a downgraded sandbox. Lifecycle transitions are held to their own contract rather than a capability gate. A stop is accepted from a sandbox that is ready, running or already stopped, and a start from one that is stopped or already running; anything else is refused by state rather than queued. A start that races an in-flight stop waits for the stop to finish, so a declared seal is never abandoned half-done.

Verify it yourself

From outside the workload, with an organization credential:
  • On a deployment without secret release, submit a create with --secret <name> and confirm it is refused with unsupported_capability before any sandbox exists.
  • Submit a --volume mount and confirm the same refusal shape.
  • Confirm no API route ever returns a stored secret value.
Self-managed operators can additionally inspect the workload namespace: the runsc admission policy, the baseline pod-security label, the deny-floor NetworkPolicy, the workload container’s absence of token mounts, and the capture sidecar’s dedicated projected proof are visible objects. See the threat model for what these controls do and do not cover.