---
title: Give your software factory a browser
description: Add a KERNEL cloud browser to the eve software factory template so Foreman can reproduce flow bugs, sign in through managed auth, and verify fixes on preview deployments in attended sessions.
url: /kb/guide/software-factory-browser
canonical_url: "https://vercel.com/kb/guide/software-factory-browser"
published: 2026-09-03
last_updated: 2026-09-03
authors: Ben Sabic, Anshuman Bhardwaj
related:
  - /docs/agent-resources/vercel-plugin
  - /kb/guide/eve-software-factory
  - /docs/cli
  - /docs/deployments/environments
  - /kb/guide/build-a-browser-agent
  - /docs/connect
install_vercel_plugin: npx plugins add vercel/vercel-plugin
---
<!-- docsgraph:related -->
## Related pages

> **For AI agents:** Follow these links to understand how this page connects to the rest of the Vercel ecosystem. For the full cross-link map (inbound, outbound, prerequisites, and semantic neighbors), see the .graph.md link below.

- [Ship It](https://eve.dev/docs/tutorial/ship-it?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Part 9 of the Build an Agent tutorial. Put a web dashboard on the agent with useEveAgent, replace placeholderAuth, and d
- [Concepts](https://vercel.com/docs/eve/concepts?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Learn how eve agents, sessions, channels, tools, skills, connections, and sandboxes fit together.
- [eve](https://vercel.com/docs/eve?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Learn how to deploy and run durable backend AI agents built with the open-source eve framework on Vercel.
- [Deploy to Vercel](https://eve.dev/docs/guides/deployment/vercel?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Deploy an eve agent with Vercel Workflow, Sandbox, Cron, and project credentials.
- [Next.js](https://eve.dev/docs/guides/frontend/nextjs?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Run an eve agent and a Next.js app as one project with withEve.
- [Get started with eve: durable AI agents in TypeScript](https://eve.dev/docs/getting-started?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Create an eve project, configure a model, understand its filesystem layout, and run your first agent.
- [How to build a GitHub agent with eve and GitHub Tools](https://vercel.com/kb/guide/github-agent-eve?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Build a GitHub agent with eve, GitHub Tools, and Vercel Connect. Register AI-callable GitHub tools, gate writes behind d
- [Draft content in your voice from Slack with eve](https://vercel.com/kb/guide/eve-content-agent?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Deploy the eve content agent template, a Slack bot that drafts blog posts, LinkedIn posts, release notes, and newsletter
- [How to add tools to your eve agent](https://vercel.com/kb/guide/how-to-add-eve-tools?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Add tools to an eve agent by creating a TypeScript file under agent/tools/ with defineTool, and gate sensitive ones on h
- [Build your first Slack agent with eve](https://vercel.com/kb/guide/eve-slack-agent-starter?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Deploy the eve Slack agent template: a starter Slack bot built on the eve framework with an example tool and skill.
- [Give your eve agent secure access to your private AWS RDS database](https://vercel.com/kb/guide/give-eve-agent-secure-access-to-aws-rds-database?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=related) — Connect an eve agent to a private AWS RDS database using Vercel Secure Compute and VPC peering, with a read-only query t

Full cross-link map for this page: [/kb/guide/software-factory-browser.graph.md](/kb/guide/software-factory-browser.graph.md?from=related&source_path=%2Fkb%2Fguide%2Fsoftware-factory-browser&source_site=vercel-kb&relationship=graph)
<!-- /docsgraph:related -->


The [eve software factory template](https://vercel.com/templates/eve/eve-software-factory) turns GitHub and Linear work items into reviewed draft pull requests, working entirely from text: the issue body, a repository checkout, the diff, and your CI output. But many issues describe page behavior that the code alone won't show, like a checkout that fails on the third step, or a dashboard that renders incorrectly for one account type.

This guide adds [KERNEL](https://www.kernel.sh/docs/integrations/vercel/eve-extension)'s eve extension to the factory's orchestrator, brokering user access via [Vercel Connect](https://vercel.com/connect). API keys stay out of your app, environment, and the model, and credentials are never handled by the agent.

You'll then put the browser to work on three workflows: reproducing a bug on request from an @mention, verifying a shipped fix on the preview deployment Vercel builds for every factory branch, and recording what the browser learned in the factory brain so every future run starts from it.

Deploy the template now, or read on if you have already done so.

## Quick start with an AI coding agent

If you're working with an AI coding agent like Claude Code or Cursor, use this prompt to have it make the changes for you:

### Agent prompt

```txt
Add a KERNEL cloud browser to my eve software factory (based on the eve-software-factory-template). Run `eve add extension/kernel` rather than hand-writing the mount, configure it with Vercel Connect as kernel({ connect: "kernel/kernel-mcp" }), and leave KERNEL_API_KEY unset everywhere. Convert the mount into a directory so agent/extensions/kernel/connections/browser.ts shadows the built-in browser connection with approval once() and an allowlist of exactly the seven default tools (manage_browsers, execute_playwright_code, computer_action, manage_auth_connections, manage_profiles, manage_proxies, manage_replays). Do not add browser_curl, manage_credentials, exec_command, or manage_browser_pools, and do not mount the extension under agent/subagents/. Tell me the vercel connect commands to run myself. Follow the KERNEL eve extension docs for more information:
https://www.kernel.sh/docs/integrations/vercel/eve-extension and read the step-by-step guide on the Vercel knowledge base: https://vercel.com/kb/guide/software-factory-browser.
```

### Vercel Plugin

The [Vercel Plugin](https://vercel.com/docs/agent-resources/vercel-plugin) turns your AI coding agent (e.g., OpenAI Codex, Claude Code, or Cursor) into a Vercel expert. It adds skills, slash commands, and current knowledge of the tools this guide uses, including eve and Vercel Connect. The plugin is optional; it isn't required to follow this guide.

```bash
npx plugins add vercel/vercel-plugin
```

## Overview

In this guide, you'll learn how to:

- Install KERNEL's eve extension and add it to the software factory.
  
- Broker browser access per user through Vercel Connect, so each teammate authorizes once, and no shared credentials exist anywhere.
  
- Add an approval gate and pin the extension’s tool allowlist.
  
- Sign Foreman (eve software factory) into a site via KERNEL-managed auth, with a saved profile so subsequent sessions start signed in.
  
- Reproduce a flow bug from an @mention and verify a fix on a preview deployment, watching either through a live-view URL.
  
- Record browser findings in the factory brain, where the unattended pipeline reads them on every run.
  

## Prerequisites

Before you begin, make sure you have:

- A [Vercel account](https://vercel.com/signup) and a [KERNEL account](https://dashboard.onkernel.com/).
  
- The [eve software factory](https://vercel.com/kb/guide/eve-software-factory) deployed and cloned locally.
  

For local development, you also need Node.js 24+, pnpm, and the [Vercel CLI](https://vercel.com/docs/cli).

## How it works

KERNEL's eve extension packages one connection to its hosted MCP server. Once mounted, the tools surface under the `kernel__browser__` namespace and eve discovers them at runtime, so Foreman ships no browser code of its own.

The extension also includes a `browse` skill that guides the model through a browsing task end-to-end.

The connection carries seven browser tools:

| Tool                      | What Foreman uses it for                                          |
| ------------------------- | ----------------------------------------------------------------- |
| `manage_browsers`         | Start and stop browser sessions, each with a live-view URL        |
| `execute_playwright_code` | Drive the live page with Playwright                               |
| `computer_action`         | Click, type, scroll, and screenshot when code is the wrong tool   |
| `manage_auth_connections` | Sign in through KERNEL-managed auth instead of typing credentials |
| `manage_profiles`         | Keep cookies and logins so the next browser starts signed in      |
| `manage_proxies`          | Route the browser through a chosen proxy type or geography        |
| `manage_replays`          | Record a session as an MP4, on paid KERNEL plans                  |

The extension attaches to the orchestrator, so the browser is available wherever a person is driving the software factory:

- @mentions on issues and pull requests
  
- Linear Agent Sessions
  
- [The dev TUI](https://eve.dev/docs/guides/dev-tui)
  

Each teammate authorizes KERNEL once via Vercel Connect, and the grant is cached thereafter. Every browser session runs with that person present, and they can watch or take over through its live URL.

Unattended runs have no person present, so they don't drive the browser. Labeled issues and the red-CI fix loop instead read browser findings from the factory brain, the shared memory every run loads at the start of a task. The split follows the template's trust model, where logged-in sessions run with a person present, and what they learn carries over to unattended runs as reviewed notes.

## Steps

### 1\. Add the extension from the registry

KERNEL has an entry in the eve registry, so one command installs `@onkernel/eve-extension` and creates the mount under `agent/extensions/`:

```bash
eve add extension/kernel
```

The extension defaults to `KERNEL_API_KEY` authentication. The next two steps swap that for Vercel Connect, so no key ever touches the project.

### 2\. Create and attach the connector

Link your directory to the Vercel project, then create the KERNEL connector:

```bash
vercel link
vercel connect create kernel --name kernel-mcp --connection-method mcp
vercel connect attach kernel/kernel-mcp
```

Confirm the UID with `vercel connect list` and leave `KERNEL_API_KEY` unset.

### 3\. Configure the mount with Vercel Connect

The mount itself is one line, pointed at the connector UID:

```typescript
import kernel from "@onkernel/eve-extension";

export default kernel({ connect: "kernel/kernel-mcp" });
```

### 4\. Add an approval gate with a shadow connection

Adding an approval gate is recommended, and you can set it up by shadowing the extension's built-in `browser` connection.

Create a connection file with the same name, which takes precedence over the built-in version, then restate its defaults alongside the gate:

```plaintext
agent/extensions/kernel/
  extension.ts             # the mount from step 3
  connections/browser.ts   # shadows the extension's built-in "browser" connection
```
```typescript
import { connect } from "@vercel/connect/eve";
import { defineMcpClientConnection } from "eve/connections";
import { once } from "eve/tools/approval";

export default defineMcpClientConnection({
  url: "https://mcp.onkernel.com/mcp",
  description: "KERNEL: cloud browsers, managed auth, profiles, and replays.",
  auth: connect("kernel/kernel-mcp"),
  approval: once(),
  tools: {
    allow: [
      "manage_browsers",
      "execute_playwright_code",
      "computer_action",
      "manage_auth_connections",
      "manage_profiles",
      "manage_proxies",
      "manage_replays",
    ],
  },
});
```

With this configuration:

- `allow` names the seven tools the extension enables by default. Any tool the server adds later stays undiscovered until you specify it here.
  
- `browser_curl`, `manage_credentials`, `exec_command`, and `manage_browser_pools` are disabled by default and stay out. Without `manage_credentials`, a sign-in only happens when a person completes it.
  
- `once()` pauses the first browser action of a session on an approval card, then lets the session run. To pause a specific tool on every call, such as `execute_playwright_code`, use the predicate pattern in `agent/lib/github/approval.ts`.
  

### 5\. Verify

Run the following commands to verify your setup:

```bash
pnpm validate
eve info
```

`pnpm validate` should finish with zero errors and zero warnings, and `eve info` should list the `browser` connection with exactly the seven allowed tools.

Then run `pnpm dev` and ask Foreman to open a page. The first browser action triggers a one-time Vercel Connect prompt to authorize KERNEL, then an approval card in the TUI. Approve both, and the session starts with a live URL you can watch.

### 6\. Sign in with KERNEL-managed auth

Foreman never types your password. When a task needs a sign-in, it uses `manage_auth_connections` to attach the domain to a browser profile, and KERNEL returns a hosted login page where you complete the sign-in yourself.

The hosted page supports Google, GitHub, and Microsoft SSO, and it handles TOTP, SMS, and email one-time codes.

Try it from the TUI:

```plaintext
log me into staging.example.com
```

After login succeeds, KERNEL saves the authenticated session to the profile specified in the connection. Any browser launched with that profile starts signed in to every domain the profile carries, so you sign in once, and all later sessions reuse it. Profile state is encrypted, and nothing typed on the hosted page reaches the API or the model. Sessions do expire eventually, and a fresh hosted link renews them.

Use the least-privileged account that still reproduces the bug, and prefer staging accounts. Everything the browser renders is untrusted input read from inside that account's session, so the less it can do, the less a steered session can reach.

## Three workflows to try

### Reproduce a bug behind a login

@mention the bot on a GitHub issue that describes a flow:

```plaintext
@foreman using the staging profile, walk the checkout flow and find where it breaks
```

Foreman walks the flow in a real browser until it breaks, then reports the failing step. What it observes goes into the analyst's brief, so the plan and the acceptance criteria are built from a reproduced bug rather than a described one.

### Verify a fix on the preview deployment

Every branch the factory pushes gets a [Vercel preview deployment](https://vercel.com/docs/deployments/environments) before any PR opens. So, by the time a draft PR is opened, a running build of the fix already exists.

Ask Foreman to verify whether your fix works:

```plaintext
@foreman open the preview deployment for this branch and confirm the checkout flow completes at a 390px viewport
```

The factory already reviewed the branch against the diff and your repo's own checks. This pass confirms what those can't: that the fix works in a running application on the exact viewport you named before you mark the PR ready.

### Teach the factory what the browser saw

Some of what a browser session learns is durable: the staging environment runs Stripe in test mode, or the account picker only appears for multi-org users.

Ask Foreman to remember it:

```plaintext
@foreman record in the factory brain that checkout step three is a client-side redirect to /pay, so server logs won't show it
```

The factory brain is the shared memory every run reads at the start of a task, so a fact the browser established once now grounds every future run, including the unattended ones triggered by labeled issues and red CI. Browse once in an attended session, and the whole pipeline plans with what you found.

## How the guardrails extend

The template treats work-item text as untrusted input, and a web page is more untrusted text, rendered inside a session that may be signed in to your accounts.

The browser follows the same rules:

- Page content is input, not instruction. The `browse` skill hands sign-ins, ambiguous choices, and sensitive actions back to the person driving the session, who can watch or take over through the live URL.
  
- Only the orchestrator drives the browser. Never add the extension under `agent/subagents/`. Stations run in task mode, which can't pause for a consent prompt, an approval card, or a sign-in hand-off, and the station that writes code should never hold web content in its context. The orchestrator browses and passes the stations a summary.
  
- People complete every sign-in. Vercel Connect authorization, the `once()` approval card, and the hosted login page all require one, and leaving `manage_credentials` out of the allowlist keeps it that way.
  

The template ships safety evals, and the browser needs one too. Add a case under `evals/safety/` with a page that tries to instruct the agent, asserting Foreman reports an injection attempt rather than acting on it.

## Troubleshooting

| Symptom                                                                  | Likely cause                                                                                                               | Fix                                                                                                                                                       |
| ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Browser tools don't appear under `kernel__browser__*`                    | The extension files aren't discovered, or the project is on an eve older than v0.25, which ignores extensions              | Run `npx eve info`, check `.eve/discovery/diagnostics.json` for skipped files, and upgrade eve if needed                                                  |
| `exec_command` or `manage_credentials` appears in the tool list          | The shadow connection isn't being picked up, so the connection is running without the allowlist                            | Confirm the file is `agent/extensions/kernel/connections/browser.ts`, exactly shadowing the built-in `browser` connection, then re-run `npx eve info`     |
| The Vercel Connect consent prompt never appears, or the first call fails | The connector isn't created or attached, or the project isn't linked                                                       | Run `vercel link`, then `vercel connect create kernel --name kernel-mcp --connection-method mcp` and `vercel connect attach kernel/kernel-mcp`, and retry |
| `vercel connect create` rejects `--connection-method`                    | The CLI predates v58.8.0, where the flag landed                                                                            | Upgrade the Vercel CLI and re-run the command                                                                                                             |
| A labeled-issue run doesn't open a browser                               | The unattended pipeline runs with no person present to hold the Vercel Connect consent, so it works from recorded findings | Browse from a mention, a Linear session, or the TUI, and record durable findings in the factory brain, which every run reads                              |
| The managed auth connection never reads `AUTHENTICATED`                  | The hosted login wasn't completed, or MFA or SSO wasn't cleared                                                            | Reopen the hosted login URL, finish signing in, including any MFA or SSO step, then reply so Foreman re-checks the connection                             |
| A previously signed-in session starts as signed out                      | The saved session expired, and renewing it takes a person, since `manage_credentials` stays off the allowlist              | Sign in again through a fresh hosted link; the profile then covers all the sessions that follow                                                           |
| Session replays fail                                                     | `manage_replays` requires a paid KERNEL plan                                                                               | Upgrade the KERNEL plan, or drop `manage_replays` from the allowlist and rely on the live-view URL                                                        |

## Next steps

- [Build a software factory with eve](https://vercel.com/kb/guide/eve-software-factory): the template this guide builds on
  
- [How to build a browser agent that works behind a login](https://vercel.com/kb/guide/build-a-browser-agent): the same KERNEL and Vercel Connect pairing in a user-facing agent
  
- [KERNEL eve extension docs](https://www.kernel.sh/docs/integrations/vercel/eve-extension): the canonical reference for the mount, the full tool list, and connection overrides
  
- [KERNEL managed auth docs](https://www.kernel.sh/docs/auth/overview): profiles, connections, and hosted login
  
- [Vercel Connect](https://vercel.com/docs/connect): the access broker that mints per-user tokens