Secure Browser Agents for Enterprise Teams

Run browser agents that clear enterprise security bars: secret custody, human approvals, and audit-ready evidence trails, with examples.

Enterprise security teams expect browser agents to prove four things quickly: secrets never leak, long-lived sessions stay isolated, risky actions require human approval, and every run leaves auditable evidence. Steel was built around those checkpoints: isolated sessions start in under a second on average, credentials inject through Steel's managed credential service (envelope-encrypted with an org-specific KMS key), and every session can stream live for review while writing the replay you will need later.

If you combine the Credentials API, Profiles, Files, and the live debugUrl, you can answer most questionnaires without inventing a new control plane. Credentials stay inside Steel's envelope encryption workflow, reviewers take control through WebRTC streams without resetting state, and Files export the replay artifacts before the 14 day Scale retention window closes. That keeps browser agents inside the same guardrails as any internal tool.

Short answer

ExpectationWhat to verifySteel control
Secrets never hit the LLM or a contractor's laptopCredentials stay scoped per origin, masked after fill, and rotated without redeploying agentsCredentials API encrypts each record with its own AES-256-GCM key, re-encrypts with an org-specific KMS key, injects within ~2 seconds, and supports namespaces, TOTP, and exactOrigin targeting
Reviews happen inside the same sessionHumans can watch or take control without restarting the runsession.debugUrl streams live via WebRTC at 25 fps (H.264); toggle interactive (true for hands-on approvals, false for read-only oversight); showControls remains available only for legacy headless sessions, and debugUrl is unauthenticated — gate it behind your own access controls
Evidence survives auditsReplays, DOM artifacts, and downloads persist past plan retentionHLS replays plus the Files API let you mirror archives to your storage when the plan's retention clock (14 days on Scale, custom on Enterprise) would otherwise purge them
State stays isolated between tenantsAuth context does not cross users or workflowsSessions run up to 24 hours on Enterprise plans (15 minutes on Launch, 1 hour on Scale), persistProfile captures 300 MB of state per identity, and per-namespace credentials mean each tenant gets its own sandbox

Why browser agents usually fail enterprise reviews

Most automated browser fleets still ship secrets in the clear to model prompts or embed them inside Playwright scripts. The review team sees an audit gap: no control over who read the password, no approval evidence when a human stepped in, and a hard limit on how long runs or artifacts stick around because the infra was improvised around a headless Chromium build. Teams also forget that live views are usually unauthenticated URLs; security questionnaires immediately flag that as uncontrolled access. Plan limits get ignored too, so one noisy workflow knocks the rest of the fleet offline and leaves you without a compliant fallback.

Lock down credential custody

  • Store credentials once per origin and namespace. Call client.credentials.create with a descriptive namespace like tenant:billing so each workflow has its own key. Injection happens when you pass credentials: {} to sessions.create, and Steel matches namespace plus origin before filling any field. Pass the same namespace to sessions.create (it defaults to default if you omit it).
  • Use built-in safety toggles. Defaults set autoSubmit, blurFields, and exactOrigin to true, which means inputs submit themselves, get blurred immediately, and only fill on the matching origin. Adjust them when you need a manual submit but keep the blur so vision models cannot scrape the secret afterward.
  • Handle MFA without exposing TOTP. Add totpSecret when creating credentials. Steel generates short-lived codes on your behalf, injects them directly, and never ships the secret back to your agent or reviewers.
  • Trust the transport path. Each credential is encrypted with its own AES-256-GCM key, then re-encrypted with an org-specific KMS key. The decrypted value only exists inside the running session and travels over Steel's private WireGuard backbone before it hits the target site, so nothing touches the public internet in the clear.
  • Know who holds the keys. KMS keys are managed by Steel; if your mandate requires customer-managed keys (BYOK/HYOK) or an external HSM, talk to Steel about Enterprise customization before designing around the built-in vault.

Keep sessions isolated but reviewable

  • Respect lifetime math. Sessions last up to 24 hours on Enterprise plans (15 minutes on Launch, 1 hour on Scale); the default 5-minute timeout is a hard session lifetime that bills even when idle, so raise timeout for long approvals and set inactivityTimeout separately if you want idle-based release. Send a heartbeat action during pauses. Always call sessions.release or releaseAll once the job ends so you do not leave authenticated browsers hanging around.
  • Persist state deliberately. Pass persistProfile: true to capture the user data directory, then reuse the returned profileId for the next run. Profiles store up to 300 MB of cookies, extensions, and settings and get deleted after 30 idle days, so schedule refresh runs for quarterly workflows.
  • Choose the right control plane. Steel Local caps out at one concurrent session and gives you total data locality, but it does not support the Credentials API or the Files API — only sessions and profiles. That means the enterprise pattern in this article (credentials, profiles, files, live embed) must run on Steel Cloud; use Steel Local only for single-session work that needs data residency but no credential injection or file export. Steel Cloud's Scale plan supports roughly 100 concurrent sessions with built-in anti-bot stealth plus metered CAPTCHA solving and proxy pools (the dedicated Stealth Browser product is Enterprise-only) for regulated workloads.
  • Stream reviews with your own auth. The live debugUrl is intentionally unauthenticated, which makes it flexible but dangerous if pasted in Slack. Wrap it in your own ACL before exposing it to reviewers. Use interactive=true for approvals and interactive=false when you only need oversight.

Capture evidence while the window is open

  • Replay everything. Every session ships with HLS playback endpoints so you can pull MP4s or embed the stream. Keep replay URLs tied to your approval log so you can prove what a reviewer saw.
  • Mirror files before retention expires. The Files API exposes both session-local files and a global workspace. Download archives or promote them into your own object store before your plan's data retention window lapses (7 days on Launch, 14 days on Scale, custom for Enterprise).
  • Bundle audit payloads. Pair approvals with { sessionId, approver, action, timestamp } in your own log. Include debugUrl parameters, profileId, and credential namespace so an auditor can replay the context quickly.

Plan-tier guardrails to publish internally

PlanConcurrent sessionsEvidence retentionMax session timeDefault use
Launch107 days15 minutesSmall pilots that still need encrypted credentials and replay links
Scale10014 days1 hourProduction fleets that need long-lived sessions, approvals, and enough time to mirror evidence
Enterprise1,000+CustomUp to 24 hoursRegulated workloads that demand private networking, longer retention, and contract-specific controls

Publish these numbers next to your internal control docs so every team knows when to upgrade plans or move artifacts off-platform.

Operating pattern that keeps trust intact

  1. Classify workflows. Tag each agent by data sensitivity and pick a credential namespace per tenant before any run starts.
  2. Wire credentials and profiles together. Start sessions with both credentials: {} and persistProfile: true, then reuse the profileId for continuity. Combine that with exactOrigin when you only trust logins on a specific domain.
  3. Wrap review embeds. Present the debugUrl inside your app with your own authentication, banner the session as live, and log who toggled interactivity.
  4. Export evidence on release. Call the Files API to download archives and fetch the HLS replay immediately after sessions.release. Store both under the same run ID inside your SIEM or storage bucket.
  5. Audit and recycle. Track profile size and last-used timestamps so you prune anything nearing the 300 MB or 30 day thresholds. Rotate credentials through the API instead of patching agent code.

What Steel gives you vs what you still own

Steel providesYou still own
Isolated sessions with sub-second startup (under one second on average, no cold-start penalty), up to 24 hour lifetimes on Enterprise plans (15 min Launch / 1 hr Scale), and release APIsEnforcing who can create or resume a session in your product
Encrypted credential vault with namespaces, TOTP, blur, and auto submit controlsMapping each namespace to a real identity provider record and rotating secrets on your schedule
Profiles, Files, replays, and live embeds for audit evidenceRetaining artifacts beyond the plan window and storing them in systems that meet your compliance rules
Built-in anti-bot stealth, metered CAPTCHA solving, and proxy pools inside Steel Cloud (dedicated Stealth Browser is Enterprise-only)Network-layer ACLs, SOC monitoring, and change management for the workflows you build on top

Limits and watch-outs

  • The Credentials API is still in beta. Treat it like production software, but plan for minor changes and watch the docs for updates.
  • Profiles over 300 MB fail to upload and enter a FAILED state. Clean large downloads before you persist and rehearse the recovery flow.
  • Sessions hit their hard timeout even when idle — the default is 5 minutes, so raise it for long approvals. Send heartbeats whenever manual approvals might take more than a few minutes.
  • Debug URLs remain unauthenticated by design. Never paste them raw into chat; wrap them instantly or disable them when not in use.
  • Plan retention limits are real. Mirror replays and files to your own storage within the retention window or you lose the proof.

Next step

Pilot a sensitive workflow with Credentials, Profiles, Files, and a wrapped live embed: docs.steel.dev/overview/credentials-api/overview, docs.steel.dev/overview/profiles-api/overview, and docs.steel.dev/overview/sessions-api/embed-sessions/live-sessions.

Humans use Chrome. Agents use Steel.