Skip to content

Route agent Bash, Python, tmux, and background jobs through the common sandbox core #6116

Description

@RaresKeY

Prerequisites

  • I searched open issues and pull requests first. #6091 is the process-sandbox tracker and #5815 is the broader authority tracker; no separate open item owns this common process-routing contract.
  • I searched discussions and did not find this concrete process-routing proposal already being debated.
  • This is a concrete, actionable child slice of the existing sandbox work.

Area

Auth / Security

Problem or Motivation

Foreground commands, interactive tmux sessions, and detached/background jobs can drift into different execution paths unless they share one server-owned process-sandbox construction path. The cumulative #5818 proposal contains the routing, confinement, cleanup, and capability behavior needed here, but those semantics should be reviewed separately from the low-level security substrate and host deployment work.

Proposed Solution

Scope

  • Route foreground Bash and Python, tmux sessions, and detached/background process jobs through one common process-sandbox core.
  • Construct the sandbox from positive filesystem mounts, a cleared environment, private temporary and home directories, bounded process resources, no ambient capabilities, and an explicit network profile.
  • Allow writes only within the selected workspace while protecting repository metadata, Odysseus data stores, configured databases, credentials, host configuration, system roots, and home-like roots.
  • Preserve the server-owned internal capability/profile contract needed by subprocesses and detached jobs, while keeping user-facing authority selection in its own follow-up.
  • Rotate or invalidate long-lived tmux/background execution state when the effective policy changes and clean up artifacts after failed launches.
  • Fail closed when the sandbox cannot be established, the platform is unsupported for Sandbox mode, or the workspace cannot be safely constrained.
  • Update the threat-model documentation to match the implemented process boundary and its residual limits.

Non-goals

  • This issue does not implement the seccomp launcher or generated policy substrate; that is a separate child of #6091.
  • This issue does not implement the HTTP(S) egress broker or bridge; that is a separate child of #6091.
  • This issue does not own Docker/Compose/AppArmor/boot integration; that is the deployment child.
  • This issue does not add thread authority modes or exact one-use approvals; see #6092.
  • Scheduled action execution remains outside this slice and is tracked separately in #6021.
  • Workspace selection and persistence remain the separate #6099 follow-up.

Validation contract

  • Test foreground Bash and Python routing, tmux session rotation, detached/background launch and cleanup, and failure handling.
  • Test positive execution inside the selected workspace and negative access to protected paths, repository metadata, databases, credentials, host configuration, and home-like roots.
  • Test environment clearing, resource bounds, network-profile propagation, SQLite protection, canonical path handling, and unsupported-platform fail-closed behavior.
  • Run positive and negative Bubblewrap-backed runtime checks where supported, and identify unrun host-level checks owned by the deployment child.

Alternatives Considered

Maintaining separate wrappers for Bash, Python, tmux, and background jobs invites policy drift. Prompt-level restrictions do not constrain a process after it starts. Disabling all process tools would avoid the routing problem but would remove the safe sandbox capability this tracker is intended to provide.

Prior Art / Related Issues

Parent tracker: #6091

Broader tracker: #5815

Workspace follow-up: #6099

Scheduled-actions follow-up: #6021

Source coordination proposal: #5818

Candidate implementation and dependencies

The candidate implementation is PR #6120, which consumes the independently reviewable seccomp substrate PR #6119 and egress substrate PR #6118. It requires PR #6121 for shipped Docker/runtime integration; the standalone image/Trivy check remains blocked against dev until #6119 lands, and real Ubuntu Docker/Compose/AppArmor host validation remains required.

Are you willing to implement this?

Yes — I can open a PR

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestready for reviewDescription complete — ready for maintainer review

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions