Trust by default

Isolation and encryption,
built into every run.

Agents that read your files and execute shell commands cannot run inside your app process. Every Actana agent runs in a sandbox, with one-time tokens instead of long-lived secrets, and provider keys encrypted at rest. No detail is left to chance.

Sandbox isolation

Two sandboxes. One default: locked down.

Every workflow run gets its own sandbox. Process-level and filesystem isolation, symlinks stripped at extract, deterministic timeouts, and force-removed on completion.

Pi sandbox · default

Docker container, full isolation

~2-3s startup. Asset round-trip supported. MCP server bridging via mcporter. The production default — every customer run lands here.

  • → Process-level + filesystem isolation
  • → File round-trip into $WORKSPACE_DIR/assets/
  • → Symlinks stripped at extract
  • → Container force-removed on completion
SDK sandbox · dev

Native Node, fast startup

~200ms startup. Process-level isolation. 23 built-in tools. For dev / fast inner loop where assets aren't needed.

  • → Native runtime, in-memory skill activation
  • → Per-task pluggable
  • → No long-lived state between runs
  • → Same audit log shape as production
Key encryption

No long-lived secrets reach the agent.

Provider keys, integration credentials, and webhook secrets are encrypted at rest. Each provision generates three single-use OTP tokens — setup, run, upload — and the sandbox never sees the underlying credential.

OTP-only

Three single-use tokens per run

OTP_SETUP, OTP_RUN, and OTP_UPLOAD are generated per provision and validated on every container call. No re-use, no rotation surface for an attacker.

Encrypted at rest

Provider keys never travel in plaintext

API keys for Anthropic, OpenAI, Gemini, and custom providers are stored encrypted and only decrypted into a scoped, single-run config payload — fetched once, discarded with the container.

NDJSON audit

Every run is replayable

Sandboxes emit stream.jsonl, result.json, and steps.json. Same shape live as in Logs — watch now or replay later.

Asset limits

20 files · 25 MB · 50 MB total

Whitelisted extensions. Filenames sanitized to [a-zA-Z0-9._-]. Duplicates suffixed automatically.

Per-run isolation

Outputs pinned to the run that produced them

Every workflow execution gets its own files folder. Nothing leaks between runs, workspaces, or tenants.

30s timeout

Deterministic execution limits

Default 30s execution timeout, configurable via MAX_EXECUTION_TIME_SEC. Containers force-removed on completion.

Compliance

Built for teams with auditors.

SOC 2 Type II. GDPR-aligned data handling. Self-host on your own infrastructure when regulation requires it.

SOC 2 Type II

Independently audited controls across security, availability, and confidentiality.

GDPR

Data residency options, DPA available on request, and explicit consent flows for end users.

Self-host

Run the entire workspace on your own VPC, with first-class Helm and Docker Compose deployments for enterprise customers.

If you can't audit it, you can't ship it.