> ## Documentation Index
> Fetch the complete documentation index at: https://tbd-6fc993ce-hypeship-scraperly-link.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# batteries included

export const CopyPromptButton = () => {
  const [copied, setCopied] = useState(false);
  const prompt = `# Setup Kernel

## Prerequisites
- Read the kernel-cli skill at https://github.com/kernel/skills/blob/main/plugins/kernel-cli/skills/kernel-cli/SKILL.md for reference on commands and capabilities.

## Steps

1. **Check if Kernel CLI is installed:**
   - Run \`kernel --version\`.
   - If not found, install via \`brew install kernel/tap/kernel\`.
   - If found, run \`brew upgrade kernel/tap/kernel\` to ensure latest version.
   - Verify with \`kernel --version\` and confirm >= v0.16.0.

2. **Check authentication:**
   - Run \`kernel auth\`.
   - If authenticated, done.
   - If not, run \`kernel login\` and tell the user to complete the browser flow.
     Poll \`kernel auth\` every 5 seconds, up to 5 minutes.
     If it times out, stop and ask the user for help.

3. **Create a browser and open Live View:**
   - Run a Kernel CLI command that creates a browser session and goes to \`https://www.kernel.sh/docs/browsers/live-view\`
   - Capture the returned \`browser_live_view_url\`.
   - Open that URL in the user's browser.
   - Tell the user they can use the live view immediately.
   - If browser creation fails, stop and ask the user for help.`;
  const handleCopy = useCallback(async () => {
    try {
      await navigator.clipboard.writeText(prompt);
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    } catch {
      const textarea = document.createElement('textarea');
      textarea.value = prompt;
      textarea.style.position = 'fixed';
      textarea.style.opacity = '0';
      document.body.appendChild(textarea);
      textarea.select();
      document.execCommand('copy');
      document.body.removeChild(textarea);
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    }
  }, []);
  return <button onClick={handleCopy} style={{
    display: 'inline-flex',
    alignItems: 'center',
    justifyContent: 'center',
    gap: '0.5rem',
    width: '100%',
    maxWidth: '352px',
    height: '56px',
    padding: '0 32px',
    fontSize: '0.9375rem',
    fontWeight: 500,
    letterSpacing: '0.01em',
    color: '#fff',
    backgroundColor: '#111',
    border: '1px solid rgba(255, 255, 255, 0.08)',
    cursor: 'pointer',
    textDecoration: 'none',
    transition: 'text-decoration 0.15s ease',
    fontFamily: 'inherit'
  }} onMouseEnter={e => {
    e.currentTarget.style.textDecoration = 'underline';
  }} onMouseLeave={e => {
    e.currentTarget.style.textDecoration = 'none';
  }}>
      {copied ? <>
          <svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
            <polyline points="3.5 8.5 6.5 11.5 12.5 4.5" />
          </svg>
          copied!
        </> : <>
          <svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
            <rect x="5.5" y="5.5" width="8" height="8" rx="1.5" />
            <path d="M10.5 5.5V3.5C10.5 2.67 9.83 2 9 2H3.5C2.67 2 2 2.67 2 3.5V9C2 9.83 2.67 10.5 3.5 10.5H5.5" />
          </svg>
          copy prompt
        </>}
    </button>;
};

We build crazy fast, open source infra for AI agents to access the internet. Trusted by Cash App, Framer, and 3,000+ teams.

<Columns className="responsive-columns" cols={4}>
  <Card title="Sandboxed Chromium" img="https://mintcdn.com/tbd-6fc993ce-hypeship-scraperly-link/sxiyxQEdrq5ywrE2/images/chromium.svg?fit=max&auto=format&n=sxiyxQEdrq5ywrE2&q=85&s=b7613f4bef4da528701775e6a8aa3614" href="/browsers/create-a-browser" width="512" height="452" data-path="images/chromium.svg">
    We spin up cloud browsers in \<30ms with GPU acceleration when needed.
  </Card>

  <Card title="Auth" img="https://mintcdn.com/tbd-6fc993ce-hypeship-scraperly-link/sxiyxQEdrq5ywrE2/images/auth.svg?fit=max&auto=format&n=sxiyxQEdrq5ywrE2&q=85&s=9de4fce664c9f9a22b1d41c6b473fc3d" href="/auth/overview" width="512" height="452" data-path="images/auth.svg">
    We manage auth for your agents so you don't have to.
  </Card>

  <Card title="Stealth Mode" img="https://mintcdn.com/tbd-6fc993ce-hypeship-scraperly-link/sxiyxQEdrq5ywrE2/images/stealth.svg?fit=max&auto=format&n=sxiyxQEdrq5ywrE2&q=85&s=3d636de44c0c6c478491007708571800" href="/browsers/bot-detection/overview" width="512" height="452" data-path="images/stealth.svg">
    We solve CAPTCHAs and manage residential proxies to help you see fewer of them.
  </Card>

  <Card title="o11y" img="https://mintcdn.com/tbd-6fc993ce-hypeship-scraperly-link/sxiyxQEdrq5ywrE2/images/o11y.svg?fit=max&auto=format&n=sxiyxQEdrq5ywrE2&q=85&s=0b911d445f7bba85a2dd711938ae273d" href="/browsers/replays" width="512" height="452" data-path="images/o11y.svg">
    You can view sessions live and record them as MP4s for debugging.
  </Card>
</Columns>

<div className="tinker-box">
  <h3 style={{ margin: 0, fontSize: '1.5rem', fontWeight: 600 }}>fast setup</h3>

  <div className="tinker-box-row">
    <div style={{ flexShrink: 0 }}>
      <img src="https://mintcdn.com/tbd-6fc993ce-hypeship-scraperly-link/sxiyxQEdrq5ywrE2/images/tinker-bot.svg?fit=max&auto=format&n=sxiyxQEdrq5ywrE2&q=85&s=9e409a6bd5ae9d226923560bc6fe04a2" alt="" style={{ width: '146px', height: 'auto' }} width="146" height="280" data-path="images/tinker-bot.svg" />
    </div>

    <div className="tinker-box-content">
      <p style={{ margin: 0, fontSize: '0.9375rem', lineHeight: 1.6, opacity: 0.8 }}>
        copy and paste this into your AI coding agent (Cursor, Claude, Windsurf, etc.). it installs the Kernel CLI and skills, authenticates you, and opens a live browser session that you or your agent can interact with.
      </p>

      <div>
        <CopyPromptButton />
      </div>
    </div>
  </div>
</div>

## prod setup

Our [app platform](/apps/develop) is a serverless compute service for running agent loops triggered on demand or by scheduled events without having to provision or manage sandboxes. Your agent runs co-located with its browser to minimize network latency.

Scaffold a project from a template:

```bash theme={null}
kernel create --template computer-use
```

Deploy and invoke it on demand:

```bash theme={null}
kernel deploy agent.ts
kernel invoke my-agent my-task --payload '{"url": "https://example.com"}'
```

### scaling

once you're ready to scale, check out how to create a [pool of reserved browsers](/browsers/pools/overview).
