Skip to content
Fresh 🌱

Overview ​

Maintain authenticated browser sessions for agents

Managed Auth creates and maintains authenticated browser sessions for your AI agents. Store credentials once, and Kernel re-authenticates automatically when needed. When you launch Kernel browsers with Managed Auth connections, your agent starts already logged in and ready to go.

How It Works ​

Create a Connection ​

A **Managed Auth Connection** attaches an authenticated domain to a browser [profile](/auth/profiles) so you can automatically be logged in when you launch future browsers. A single profile can have multiple auth connections , one per domain you want to keep authenticated.

```typescript
  const auth = await kernel.auth.connections.create({
    domain: 'netflix.com',
    profile_name: 'netflix-user-123',
  });
  ```

  ```python
  auth = await kernel.auth.connections.create(
      domain="netflix.com",
      profile_name="netflix-user-123",
  )
  ```

Start a Login Session ​

A **Managed Auth Session** is the corresponding login flow for the specified connection. Users provide credentials via a Kernel-hosted page or your own UI.

Specify a [Credential](/auth/credentials) to enable re-authentication without user input.

```typescript
  const login = await kernel.auth.connections.login(auth.id);

  // Send user to login page
  console.log('Login URL:', login.hosted_url);

  // Poll until complete
  let state = await kernel.auth.connections.retrieve(auth.id);
  while (state.flow_status === 'IN_PROGRESS') {
    await new Promise(r => setTimeout(r, 2000));
    state = await kernel.auth.connections.retrieve(auth.id);
  }

  if (state.status === 'AUTHENTICATED') {
    console.log('Authenticated!');
  }
  ```

  ```python
  login = await kernel.auth.connections.login(auth.id)

  # Send user to login page
  print(f"Login URL: {login.hosted_url}")

  # Poll until complete
  state = await kernel.auth.connections.retrieve(auth.id)
  while state.flow_status == "IN_PROGRESS":
      await asyncio.sleep(2)
      state = await kernel.auth.connections.retrieve(auth.id)

  if state.status == "AUTHENTICATED":
      print("Authenticated!")
  ```

Use the Profile ​

Once the auth connection completes, the authenticated session is saved to the browser [profile](/auth/profiles) specified in step 1. You can attach additional auth connections to the same profile for other domains. When you create a browser with the profile, all of its auth connections are available , the browser session will already be logged in to every connected domain.

```typescript
  const browser = await kernel.browsers.create({
    profile: { name: 'netflix-user-123' },
    stealth: true,
  });

  // Navigate to the site, you're already logged in
  await page.goto('https://netflix.com');
  ```

  ```python
  browser = await kernel.browsers.create(
      profile={"name": "netflix-user-123"},
      stealth=True,
  )

  # Navigate to the site, you're already logged in
  await page.goto("https://netflix.com")
  ```

The steps above are the integration loop , what you wire up once per connection. After the initial login, the connection enters its runtime loop of periodic health checks and automatic re-authentication; see Connection Lifecycle for how that works and how to tune it.

Choose Your Integration ​

Hosted UI

**Start here** - Simplest integration

Redirect users to Kernel's hosted page. Add features incrementally: save credentials for auto-reauth, custom login URLs, SSO support.

React Component

**Embed in your app** - Drop-in component

Mount `` on a route in your own app. Same flow as Hosted UI, rendered on your origin and trivial to restyle to match your brand.

Programmatic

**Full control** - Custom UI or headless

Build your own credential collection. Handle login fields, SSO buttons, MFA selection, and external actions (push notifications, security keys).

Why Managed Auth? ​

Managed Auth automates login flows , navigating login pages, filling credentials, handling SSO redirects, and completing MFA challenges. It keeps your profiles logged in across sessions.

The most valuable workflows live behind logins. Managed Auth provides:

  • Works on any website - Login pages are discovered and handled automatically
  • SSO/OAuth support - "Sign in with Google/GitHub/Microsoft" buttons work out-of-the-box, with common SSO provider domains automatically allowed
  • 2FA/OTP handling - TOTP codes automated with automatic retry on expiry, SMS/email/push OTP are supported
  • Post-login URL - Get the URL where login landed (post_login_url) so you can start automations from the right page
  • Session monitoring - Periodic health checks and automatic re-authentication when sessions expire with stored credentials
  • Secure by default - Credentials encrypted at rest, never exposed in API responses, or passed to LLMs

Security ​

FeatureDescription
Encrypted credentialsValues encrypted with per-organization keys
No credential exposureNever returned in API responses or passed to LLMs
Encrypted profilesBrowser session state encrypted end-to-end
Isolated executionEach login runs in an isolated browser environment