Skip to content

Overview & Philosophy

Agent Safehouse sandboxes LLM coding agents on macOS so they can only access paths they need.

It uses macOS sandbox-exec with composable policy profiles. The default posture is strict: start from deny-all, then allow specific system/runtime/toolchain paths plus explicitly granted project paths.

Why

LLM coding agents run shell commands with your user privileges. A prompt injection, confused deputy flow, or a bad command can otherwise touch SSH keys, cloud credentials, unrelated repos, and personal files.

Safehouse reduces that blast radius without requiring major workflow changes.

Guiding Philosophy

Agent productivity is prioritized over paranoid lockdown. The goal is practical damage reduction and stronger defaults, not perfect isolation against a determined attacker.

Each policy rule should answer one question:

Does the agent need this to do its job?

What Safehouse Allows

  • Filesystem reads for core macOS/system/toolchain paths needed for shells, compilers, and package managers.
  • Curated Apple Command Line Tools paths for common shimmed developer tools such as git, make, and clang.
  • Process execution/forking so normal dev subprocess trees work.
  • Host process enumeration/signalling only when --enable=process-control or --enable=lldb is selected.
  • LLDB/debugger toolchain access only when --enable=lldb is selected.
  • Xcode developer roots and per-user build/simulator state only when --enable=xcode is selected.
  • Agent/app-specific config grants scoped to the wrapped command.
  • Keychain/security integration when --enable=keychain is selected or selected profiles declare keychain dependency metadata.
  • Core SCM integration profiles and related defaults for tools such as git, gh, and glab.
  • Sanitized runtime environment by default, with explicit opt-in controls for env pass-through and SDKROOT preserved when set.
  • Network access by default for registries, APIs, remotes, and MCP servers.
  • Temporary directories and runtime IPC services required by common CLI workflows.

What Is Denied By Default

  • SSH private keys under ~/.ssh.
  • Shell startup files unless --enable=shell-init is used.
  • Sensitive browser profile data such as cookies, login data, history, and bookmarks.
  • Clipboard access unless --enable=clipboard is used.
  • Host process enumeration/control unless --enable=process-control or --enable=lldb is used.
  • LLDB/debugger toolchain and task-port access unless --enable=lldb is used.
  • Full Xcode developer roots, DerivedData, and CoreSimulator state unless --enable=xcode is used.
  • Broad raw device access under /dev.

--enable=browser-native-messaging opens native-messaging manifest registration paths and extension-manifest reads. It does not grant browsing data.

Important Limitations

Safehouse does not fully protect against:

  • Data exfiltration over network from files the sandbox is allowed to read.
  • Sandbox escapes (it is not a VM/hypervisor boundary).
  • Abuse through already-allowed IPC/credential channels.
  • Leakage of data from explicitly allowed paths.

For practical hardening guidance, continue with Getting Started and Usage.

Isolation Model Comparison

Safehouse is a host-level macOS policy wrapper, not a VM boundary. It is optimized for day-to-day local agent workflows where low overhead and native compatibility matter.

For a detailed comparison with VMs and containers, see Isolation Models.

Default Assumptions

Safehouse defaults prioritize usability plus constrained blast radius:

  • keep common coding workflows working
  • require explicit opt-in for sensitive integrations
  • keep final user overrides possible

For the full allow/disable matrix, see Default Assumptions.

Open source under the Apache 2.0 License.