Skip to main content
Daytona sandboxes are isolated environments for running agent or automation code.

What you’re integrating

Anchor SDK in Daytona’s base image → Anchor Cloud. The sandbox stays vanilla and lightweight. Chromium runs as a managed Anchor cloud session; the sandbox just holds the SDK and talks to it over HTTPS + CDP.
  • Daytona stays the code runtime — install packages, run a script, call a model.
  • Anchor stays the remote browser — stealth, proxies, live view, and session lifecycle.
  • Do not use Daytona’s local browser.

Preinstall the SDK

Install into the image app directory — not globally. npm install -g is not importable from user projects.
playwright / playwright-core are only needed for direct CDP control, not for agent.task / agentTask. Alias the env var the raw SDK actually reads, so code that does not call setConfig / api_key= still works:
Put that on a Dockerfile ENV line or in the sandbox entrypoint. Without this alias, session and task calls fail auth (401) even when ANCHOR_API_KEY is set.

API key (BYOK)

Each Daytona customer brings their own Anchor API key as a sandbox secret: ANCHOR_API_KEY=sk-.... List it in Daytona’s secrets UI as a known integration. Anchor bills the customer directly on usage — Daytona does not meter or bill browser usage.
Keyless trial (optional): agents without a key can self-provision a small trial key via Agent Access — guide → puzzle challenge (120s TTL) → submit the answer for an api_key, sent as header anchor-api-key. Trial keys are capped (1 credit, 60-minute session cap). Fine for exploration, not a BYOK replacement. Do not market this as unlimited browser access.

Expose a browser tool

Wrap the SDK so agents call it declaratively. agent.task (Python) / agentTask (Node) return an object; the result string is result.data.result.

Optional: full Playwright control

Connect over CDP to the created cloud session (session.data.cdp_url). You can create the session outside the sandbox and pass the URL in (for example as ANCHOR_CDP_URL), or create it from inside the sandbox.
That URL carries the API key in the query string — never log it. Surface session.data.live_view_url to humans instead (https://live.anchorbrowser.io/inspector.html?sessionId=...). Closing Playwright only disconnects — it does not end the cloud session.

Session hygiene

  • Reuse one session per agent run — do not create a session per page.
  • Set timeout.max_duration / timeout.idle_timeout (minutes) so abandoned sandboxes do not hold browsers open. See Session Timeout.
  • Delete the session on sandbox teardown (delete_session / deleteSession).
  • Show live_view_url in the sandbox UI so users can watch the browser run. That stream is the remote Anchor session, not Daytona’s sandbox desktop view.

Egress

If Daytona sandboxes restrict egress, allowlist:
  • https://api.anchorbrowser.io
  • wss://connect.anchorbrowser.io
  • https://live.anchorbrowser.io
See the Sandboxes overview and Create a Session.