Part of #777. Follow-on execution hardening. This records the stronger runtime options and the conditions under which an operator needs them.
The decision
3.0 establishes application tenant/owner isolation and separately managed execution workloads (#774/#778/#745). A mandatory sandbox runtime is not part of that default. This issue adds stronger containment where the executed code and reachable privileges require it.
The baseline is more than "different pods": approved workload templates, storage/credential ownership, restricted placement permissions and network boundaries already belong to #745. A pod boundary does not automatically make shared mounts, credentials or network access private.
How this relates to the foundation
#778 defines a tenant as an organisation and supports a multi-organisation data model. A one-organisation reference deployment is a starting profile, not a security guarantee and not a new definition of tenancy.
Application isolation is the coordinated work in #774/#778/#779, including both tenant and private-owner access, direct addressing, discovery, files and execution context. It is not a one-query fix: a tenant-only discovery filter would still permit access between private owners within that tenant. This issue must build on the complete application boundary rather than substitute sandboxing for it.
What would make this required
A requirement to contain code beyond the baseline workload boundary. Mutually untrusting customers are an important case, but not the only one. Third-party repositories, dependencies and manipulated agent actions can introduce untrusted execution inside a single organisation too (#785). Assess code provenance, data sensitivity, accessible credentials and host/network privileges; colleague status and tenant count are not substitutes for that assessment.
Kubernetes multi-tenancy guidance describes a spectrum of isolation and recommends additional containment for untrusted workloads. GKE Sandbox explains its userspace-kernel boundary and its limits. Select an appropriate runtime or separately isolated deployment before accepting workloads whose required containment exceeds the default; do not promise that all single-organisation deployments are safe without it.
What this would involve
Scheduling is not sufficient by itself
Scheduling selectors alone are not a secure admission boundary if tenants can choose or spoof the labels/tolerations that select protected nodes. GKE's guidance explains that limitation. Controlled node separation can still reduce resource contention and some exposure; it must be combined with admission/access controls and is not complete hostile-code containment.
Acceptance criteria
(For when this is picked up — not for 3.0.)
Evidence
| Claim |
Where |
| Discovery is filtered by session + group prefix, not identity |
clients/database.py:1598 (list_siblings_by_group_prefix); prefix filter at :1664 |
cross_session=true lifts the session filter |
mcp_server/server.py:1117-1135 |
| Group is not a security boundary |
mcp_server/server.py:1156 |
| Workload trust and isolation form a spectrum |
Kubernetes multi-tenancy guidance |
| gVisor re-implements and services syscalls on behalf of the host kernel; sandbox does not cover dependencies |
GKE Sandbox documentation |
Sandboxed runtimes via RuntimeClass; VM boundary option |
Kubernetes multi-tenancy documentation |
| Labels/tolerations alone cannot enforce policy against callers able to spoof them |
GKE multi-tenancy guidance |
Part of #777. Follow-on execution hardening. This records the stronger runtime options and the conditions under which an operator needs them.
The decision
3.0 establishes application tenant/owner isolation and separately managed execution workloads (#774/#778/#745). A mandatory sandbox runtime is not part of that default. This issue adds stronger containment where the executed code and reachable privileges require it.
The baseline is more than "different pods": approved workload templates, storage/credential ownership, restricted placement permissions and network boundaries already belong to #745. A pod boundary does not automatically make shared mounts, credentials or network access private.
How this relates to the foundation
#778 defines a tenant as an organisation and supports a multi-organisation data model. A one-organisation reference deployment is a starting profile, not a security guarantee and not a new definition of tenancy.
Application isolation is the coordinated work in #774/#778/#779, including both tenant and private-owner access, direct addressing, discovery, files and execution context. It is not a one-query fix: a tenant-only discovery filter would still permit access between private owners within that tenant. This issue must build on the complete application boundary rather than substitute sandboxing for it.
What would make this required
A requirement to contain code beyond the baseline workload boundary. Mutually untrusting customers are an important case, but not the only one. Third-party repositories, dependencies and manipulated agent actions can introduce untrusted execution inside a single organisation too (#785). Assess code provenance, data sensitivity, accessible credentials and host/network privileges; colleague status and tenant count are not substitutes for that assessment.
Kubernetes multi-tenancy guidance describes a spectrum of isolation and recommends additional containment for untrusted workloads. GKE Sandbox explains its userspace-kernel boundary and its limits. Select an appropriate runtime or separately isolated deployment before accepting workloads whose required containment exceeds the default; do not promise that all single-organisation deployments are safe without it.
What this would involve
RuntimeClassselects an installed Kubernetes runtime handler; naming Firecracker is not itself a working handler or deployment integration.Restrictedfor agent workloads. Baseline workload resource bounds belong to [Feat] Centralize cao-server in one Kubernetes Deployment and Service #745; aggregate tenant quota policy belongs to [Feat] Usage metering, spending limits and per-tenant cost attribution #781 and must account for the actual namespace topology.Scheduling is not sufficient by itself
Scheduling selectors alone are not a secure admission boundary if tenants can choose or spoof the labels/tolerations that select protected nodes. GKE's guidance explains that limitation. Controlled node separation can still reduce resource contention and some exposure; it must be combined with admission/access controls and is not complete hostile-code containment.
Acceptance criteria
(For when this is picked up — not for 3.0.)
Restrictedis enforced for the covered agent workloads.Evidence
clients/database.py:1598(list_siblings_by_group_prefix); prefix filter at:1664cross_session=truelifts the session filtermcp_server/server.py:1117-1135mcp_server/server.py:1156RuntimeClass; VM boundary option