DeepSeek Harness Seatbelt Sandbox For Mac Developers
A current DeepSeek Harness sandbox policy defines three execution modes: read-only, workspace-write, and danger-full-access. The official documentation also states that network access and process visibility sit outside that mode vocabulary. The practical conclusion is clear: Seatbelt can provide macOS process constraints, but it is not complete Agent isolation. Test it in a low-risk repository before expanding permissions or moving sensitive work onto the host. (DeepSeek Harness sandbox subsystem)
This article is for:
- Developers preparing to let DeepSeek Harness run commands on a Mac.
- Security engineers evaluating Agent and process isolation boundaries.
- Technical leaders defining the scope of a remote Mac trial or purchase.
Last updated August 18, 2026. Facts were checked against the current DeepSeek Harness repository, its sandbox package documentation, and Apple platform security documentation.
The official status is narrower than the headline
DeepSeek Harness describes its sandbox package as a process-confinement capability. The package structure lists local backends for Linux, macOS, and Windows. The macOS path uses Seatbelt. The local provider documentation also says that unsupported or unusable runners should fail closed instead of silently running the command without confinement. (Sandbox package overview) (Local sandbox provider)
That is meaningful. It shows that DeepSeek Harness has a system-level implementation point for macOS. It does not prove that every release, preset, package, or deployment enables Seatbelt automatically.
The current repository is also marked as a developer preview with compatibility-breaking changes expected. A security decision based on one checkout can become stale after an update.
The correct verification question is not:
“Does DeepSeek Harness support Seatbelt?”
It is:
“Which active profile selected which backend for this exact command on this exact Mac?”
Check the following before allowing access to a real repository:
- The installed Harness version or commit.
- The active profile and bundle composition.
- The effective sandbox mode.
- The resolved workspace root.
- The runner probe result.
- The command evidence showing allowed and denied behavior.
DeepSeek Harness provides a configuration dump command for inspecting the tree that a machine actually boots:
dsh --profile web --dump-config
Use that output as evidence. Do not infer behavior from a package name alone.
Workspace selection and process confinement are different controls
The first risk appears when an Agent reads or edits code.
A workspace setting answers:
- Which directory should the Agent treat as its project?
- Which files should be visible to its file tools?
- Where should edits and generated artifacts normally go?
A Seatbelt policy answers a different question:
- What file effects may a spawned process perform on the operating system?
Those controls can support each other. They are not interchangeable.
The official sandbox documentation says the workspace-write policy carries an absolute workspaceRoot. It also says that the root is resolved from the session’s immutable working directory for normal tool calls. The policy is resolved per capability call, rather than being a permanent global setting. (Sandbox policy and workspace root details)
For a Mac developer, the validation target should contain three separate tests:
- Allowed path: create or modify a harmless file inside the selected workspace.
- Denied path: attempt to write to a sibling project or a deliberately protected test directory.
- Evidence path: capture the exit status, stderr, command line, and resulting file state.
Seatbelt profiles can be sensitive to path resolution. The local provider documentation notes that paths are canonicalized because Seatbelt matches resolved paths. It also documents additional writable areas for workspace-write, including the workspace root and temporary locations. (Seatbelt provider behavior)
That creates several hidden costs:
- A symlink can make the apparent path differ from the resolved path.
- Build tools may need temporary directories outside the repository.
- Package managers may write caches that are not inside the project.
- Generated files can appear in a permitted temporary area even when the repository stays clean.
- A workspace boundary does not automatically protect unrelated data if another tool has its own access path.
Apple describes macOS sandboxing as an operating-system access-control mechanism that restricts access to files, network connections, and other resources. It is designed to reduce damage when an app or linked component is compromised. It does not promise that every application action is safe. (Apple App Sandbox documentation)
What the Seatbelt boundary can and cannot prove
Use this decision tool before approving a wider trial.
| Decision area | What Seatbelt may constrain | What it does not prove | Required evidence |
|---|---|---|---|
| Repository writes | Writes allowed by the active file policy | That the Agent selected the correct repository | Workspace path, allowed write, denied write |
| Child processes | File effects of a confined subprocess | That every child uses the same policy | Process tree and child command logs |
| Network calls | No automatic network guarantee from the file sandbox mode | That external services are blocked or trusted | Harmless allow and deny network tests |
| MCP and plugins | Only the process effects covered by the backend | That plugin logic is safe | Plugin inventory and separate permissions |
| API credentials | No automatic protection from exposure | That environment variables, files, or logs are safe | Redacted environment and log review |
| Remote Mac access | A separate host can reduce workspace mixing | That SSH, VNC, accounts, and cleanup are secure | Access review and post-test reset |
The key distinction is simple:
Seatbelt is an enforcement mechanism for a process policy. It is not an intent classifier, plugin review system, credential manager, or remote access gateway.
The official process-sandbox documentation states that the sandbox modes govern filesystem effects only. It explicitly places network access and process visibility outside that vocabulary. It also identifies danger-full-access as a bypass path that does not call the sandbox provider. (DeepSeek Harness process sandbox reference)
Important: A successful command does not prove that it was safe. It only proves that the selected policy permitted the effects needed for that command.
Child processes make the operation surface wider
DeepSeek Harness can run shell commands and tool processes. A shell can start another shell. A build script can start a compiler, package manager, test runner, linker, or custom helper. Each child process may read environment variables, inspect the current directory, create temporary files, and invoke network-capable tools.
This is why process isolation must be tested through the complete process tree.
A simple command test is not enough. Test a script that:
- Starts a child process.
- Passes a harmless environment variable.
- Reads an allowed fixture.
- Attempts a denied write.
- Creates a temporary artifact.
- Exits with a clear status.
The purpose is not to prove that every command is malicious. The purpose is to observe whether the same policy is applied to the process that performs the actual file effect.
The sandbox documentation describes a wrapped argument vector. DeepSeek Harness returns a confined command invocation rather than asking the consumer to guess how the runner works. It also distinguishes a sandbox runner failure from an ordinary command failure. A denied operation should not be confused with a broken Seatbelt runner.
This distinction matters in incident review:
- Policy denial: the sandbox started and blocked the requested effect.
- Runner failure: the sandbox could not start or validate correctly.
- Command failure: the sandbox worked, but the build or script failed for another reason.
Keep the three cases separate in logs. Otherwise a failed build can trigger an unsafe fallback to unrestricted execution.
Command approvals remain necessary because the sandbox cannot understand business impact. A command may be permitted inside the workspace and still:
- Remove a large set of generated files.
- Publish an artifact.
- Rewrite Git history.
- Upload source code through a tool.
- Modify a deployment configuration.
- Consume a production credential.
- Trigger an expensive external operation.
The safer policy is to combine Seatbelt with approval gates. Use automatic execution for low-impact reads and deterministic local tests. Require approval for destructive file operations, release commands, external uploads, credential-bearing commands, and unrestricted mode.
Network access and external tools need their own test
A frequent mistake is to treat macOS sandboxing as an automatic network firewall.
That is not supported by the current DeepSeek Harness sandbox vocabulary. The official documentation says the modes cover filesystem effects. Network access is outside that vocabulary. Apple’s App Sandbox documentation separately lists network client and server entitlements, which illustrates the same principle: network permissions are distinct from file permissions. (Apple network entitlement reference)
Do not claim that Seatbelt blocks all outbound connections by default.
Instead, test network behavior with targets that contain no sensitive data:
- A local test server with a known response.
- A public endpoint that accepts no credentials.
- A deliberately invalid hostname.
- A controlled test port.
- A plugin endpoint with a disposable token, if a token is strictly required.
Record:
- Whether the connection was attempted.
- Which process attempted it.
- Whether DNS resolution occurred.
- Whether the request succeeded.
- Whether the result appeared in the session log.
- Whether the plugin used its own network path.
MCP servers and plugins deserve separate review. A plugin can introduce another process, another configuration file, another credential reference, or another network client. The fact that the parent Agent is confined does not automatically make the plugin’s design safe.
The official architecture documentation emphasizes that the model adapter, tool registry, session log, and Agent loop are all plugins. That architecture increases composability, but it also means the active profile matters to the security boundary. (DeepSeek Harness architecture)
Credentials remain an independent boundary
DeepSeek Harness separates credential references from credential providers. The official credentials package documentation says configuration carries references rather than secret values, while consumers resolve those references at the operation boundary. That separation is useful, but it does not eliminate exposure risk. (DeepSeek Harness credentials package)
A credential can still leak through:
- An environment variable inherited by a child process.
- A local configuration file inside the workspace.
- A shell history file.
- A debug trace.
- A compiler or test failure.
- A plugin request.
- A generated artifact.
- A prompt or tool result copied into the session log.
Use disposable or narrowly scoped credentials during the first test. Never place a real production key in a sample command, screenshot, log, or public issue.
A useful credential test has four parts:
- Start with a fake value that is clearly non-production.
- Confirm that the intended tool can resolve the reference.
- Trigger a controlled failure and inspect stderr and logs.
- Remove the test credential and confirm that later commands cannot resolve it.
Credential scope should match the operation. A build that only reads public dependencies should not inherit a deployment token. A plugin that needs one API should not receive a broad environment containing unrelated secrets.
Rotation is also separate from sandboxing. If a test exposes a real key, revoke it. Do not assume that deleting the visible log removes every copy from session storage, shell history, or plugin state.
Remote Macs reduce mixing risk, not security responsibility
A dedicated remote Mac can be a sensible trial environment for DeepSeek Harness. It separates Agent activity from a personal laptop, private documents, browser sessions, and unrelated development work. That is a risk reduction.
It is not automatic isolation.
A remote Mac still needs independent acceptance for:
- Remote access entry points.
- System accounts and administrator rights.
- SSH keys and session expiration.
- VNC or remote desktop exposure.
- Workspace ownership and cleanup.
- Installed plugins and MCP servers.
- API credential storage.
- Process and file policies.
- Logs, shell history, and temporary files.
- Reuse between different projects or customers.
Use a shared environment only for low-sensitivity experiments with disposable repositories. Use an independent environment when the repository contains private source, proprietary build material, non-public packages, or credentials. Pause the trial when the project requires physical interfaces, privileged system extensions, production deployment access, or unrestricted filesystem access.
For teams evaluating a temporary Mac environment, separate the hardware decision from the security decision. A remote Mac may improve operational separation, but the control plane still needs review. The SFTPMAC Mac rental overview can be used as a starting point for environment planning. The rental choice does not replace the isolation tests described here.
Teams that need a concrete handoff should also use a neutral internal delivery checklist covering account ownership, access removal, workspace cleanup, and evidence retention. Keep that handoff review separate from the Seatbelt test. General Mac environment planning resources are also available through the SFTPMAC service index, but the security decision should remain based on observed evidence rather than a service description.
First-release validation should follow a fixed sequence
Use this sequence before connecting DeepSeek Harness to a sensitive repository.
1. Freeze the test scope
Create a disposable repository with:
- A harmless source file.
- A sibling directory that must remain untouched.
- A fake credential marker.
- A build script.
- A child-process script.
- A controlled network test.
Do not begin with a personal home directory or a production checkout.
2. Record the software state
Capture:
- macOS version.
- DeepSeek Harness version or commit.
- Node.js and package-manager versions.
- Active profile.
- Installed sandbox packages.
- Plugin and MCP inventory.
- Current configuration dump.
The exact software state matters because DeepSeek Harness is still changing rapidly.
3. Confirm the selected backend
Inspect the active configuration. Confirm that the local provider is present and that the Mac path selects Seatbelt.
Do not treat the presence of a Seatbelt package as proof of active enforcement. The provider documentation describes probing and caching. The runner must be usable on the current host.
4. Test file effects
Run the same operation against:
- A file inside the workspace.
- A file outside the workspace.
- A temporary directory.
- A symlinked path.
- A sibling project.
Record the command, result, stderr, and final filesystem state.
The expected result must be defined before the test. Otherwise a surprising write can be rationalized after the fact.
5. Test child processes and scripts
Use a script that launches a child process. Confirm whether the child inherits the expected working directory, environment, and file restrictions.
Test both a direct executable and a shell wrapper. These are different execution paths and may produce different diagnostics.
6. Test network and plugins separately
Start with no credentials. Use harmless endpoints. Then inspect each MCP or plugin process independently.
A network request that succeeds is not automatically a failure. It becomes a decision issue when the request was outside the approved design.
7. Test credential exposure
Use only fake values. Search:
- Session logs.
- Terminal output.
- Shell history.
- Temporary files.
- Build artifacts.
- Plugin directories.
- Error reports.
Remove the test value before ending the session.
8. Define the fallback action
If Seatbelt is unavailable, incomplete, or difficult to verify, do not silently continue with unrestricted execution.
Choose one explicit action:
- Disable high-risk shell or external tools.
- Return to a read-only workflow.
- Move the test to an independent Mac.
- Rebuild the environment from a clean image.
- Stop the trial pending a security review.
The current sandbox contract says confined execution should fail closed when no usable backend exists. That is the behavior a deployment should preserve rather than bypass.
Operational rule: If the team cannot show one allowed-path record and one denied-path record for the actual release, the sandbox should be treated as unverified.
FAQ: What Mac teams should verify first
The FAQ below addresses the practical questions that usually appear during a first deployment. It complements the test sequence rather than replacing it.
A complete review should also cover plugin permissions, workspace isolation, and remote access controls. Keep those reviews separate from the Seatbelt test so that a passing process test does not conceal a failing credential or access-control review.
A safer conclusion for Mac developers
The Seatbelt backend changes the conversation in a useful way. DeepSeek Harness is not relying only on a workspace label or a prompt instruction. Its current architecture defines a macOS process-confinement path, a per-call policy, a workspace root, backend probing, and fail-closed behavior when no usable runner exists.
The boundary is still incomplete.
Seatbelt does not replace command approval. It does not automatically control network access. It does not make MCP behavior trustworthy. It does not prevent credentials from entering logs or child-process environments. It does not secure remote access to a cloud Mac.
Compared with running DeepSeek Harness directly on a personal Mac, an independent Mac environment can reduce accidental mixing with personal files, browser sessions, SSH keys, and unrelated projects. The trade-offs are remote access configuration, cleanup responsibility, account management, and possible workflow friction. Compared with an unmanaged shared environment, a dedicated Mac gives the team a clearer evidence boundary, but only after the file, process, network, credential, and access checks pass.
That makes SFTPMAC relevant as a temporary validation path rather than as a substitute for security design. If the goal is a short trial, a disposable repository, or a separate Mac for first-release testing, continue with the site’s DeepSeek Harness security acceptance and remote Mac delivery guidance. Document every boundary before expanding permissions.