Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{
"permissions": {
"allow": ["Bash(agent-browser:*)"]
},
"hooks": {
"PostToolUse": [
{
Expand Down
52 changes: 52 additions & 0 deletions .claude/skills/agent-browser/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
name: agent-browser
description: Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
allowed-tools: Bash(agent-browser:*), Bash(npx agent-browser:*)
hidden: true
---

# agent-browser

Fast browser automation CLI for AI agents. Chrome/Chromium via CDP with accessibility-tree snapshots and compact `@eN` element refs.

Install: `npm i -g agent-browser && agent-browser install`

## Start here

This file is a discovery stub, not the usage guide. Before running any `agent-browser` command, load the actual workflow content from the CLI:

```bash
agent-browser skills get core # start here — workflows, common patterns, troubleshooting
agent-browser skills get core --full # include full command reference and templates
```

The CLI serves skill content that always matches the installed version, so instructions never go stale. The content in this stub cannot change between releases, which is why it just points at `skills get core`.

## Specialized skills

Load a specialized skill when the task falls outside browser web pages:

```bash
agent-browser skills get electron # Electron desktop apps (VS Code, Slack, Discord, Figma, ...)
agent-browser skills get slack # Slack workspace automation
agent-browser skills get dogfood # Exploratory testing / QA / bug hunts
agent-browser skills get derive-client # Record a HAR, derive a standalone API client for a site
agent-browser skills get vercel-sandbox # agent-browser inside Vercel Sandbox microVMs
agent-browser skills get protected-vercel-deployments # Access protected Vercel deployments
agent-browser skills get agentcore # AWS Bedrock AgentCore cloud browsers
```

Run `agent-browser skills list` to see everything available on the installed version.

## Why agent-browser

- Fast native Rust CLI, not a Node.js wrapper
- Works with any AI agent (Cursor, Claude Code, Codex, Continue, Windsurf, etc.)
- Chrome/Chromium via CDP with no Playwright or Puppeteer dependency
- Accessibility-tree snapshots with element refs for reliable interaction
- Sessions, authentication vault, state persistence, video recording
- Specialized skills for Electron apps, Slack, exploratory testing, cloud providers

## Observability Dashboard

The dashboard runs independently of browser sessions on port 4848 and can also be opened through a proxied or forwarded URL such as `https://dashboard.agent-browser.localhost`. Agents should stay on the dashboard origin: session tabs, status, and stream traffic are proxied internally, so session ports do not need to be exposed.
1 change: 0 additions & 1 deletion .claude/skills/shadcn-astro/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ component still usable with JavaScript disabled.
pocket depth (§4). Delete those classes rather than translating them.
- **Minimum touch target 44px** for anything tappable (§9), which is why `Button`'s `md` is
`h-11` and not shadcn's `h-10`.
- New dependency of any kind ⇒ an ADR in `docs/adr/` first.

## Worked example: Accordion

Expand Down
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,10 @@ pnpm-debug.log*

# local env files
.env*.local
.dev.vars

# typescript
*.tsbuildinfo

# local Chrome for the devtools MCP (mise run chrome:install)
.browser/

# lighthouse ci
.lighthouseci/
13 changes: 0 additions & 13 deletions .mcp.json

This file was deleted.

2 changes: 0 additions & 2 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
legacy/
dist/
.astro/
.browser/
.lighthouseci/
pnpm-lock.yaml
.claude/settings.local.json
1 change: 0 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
},
"tailwindCSS.classFunctions": ["cn", "cva"],
"search.exclude": {
"legacy/**": true,
"dist/**": true,
"pnpm-lock.yaml": true
},
Expand Down
12 changes: 7 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ TypeScript 6 throughout: `astro check` covers `src/` and the config files, `tsc`
The Claude Code hook in `.claude/hooks/format-lint.sh` formats and lints every file you edit and
feeds lint failures back to you.

Browser verification goes through `agent-browser` (the `agent-browser` skill; setup in
`docs/tooling.md`), against `pnpm preview`, not the dev server.

Repo-specific checks and asset pipelines are TypeScript scripts under `tools/`, run directly by
Node (`node tools/checks/verify-meta.ts`); every one has a `package.json` script.

Expand All @@ -40,23 +43,22 @@ Node (`node tools/checks/verify-meta.ts`); every one has a `package.json` script
- `src/data/site.ts` — org facts, external URLs, calendar and analytics IDs. No hardcoded constants.
- `functions/` — Cloudflare Pages Functions (form submit, calendar proxy). Own tsconfig.
- `tools/` — repo checks, asset pipelines, and CI helpers. Own tsconfig.
- `legacy/` — the old Next.js site. **Reference only; never import from it.**

## Rules

- `cn` comes from `@/lib/cn` only — a `cnfast` merge configured with the DESIGN.md §3 type scale
(see the docstring). `clsx`, `classnames`, `tailwind-merge` are banned imports.
- `cn` comes from `@/lib/cn` only — a [`cn`](https://github.com/shadcn-ui/cn) merge configured
with the DESIGN.md §3 type scale (see the docstring). `clsx`, `classnames`, `tailwind-merge`
are banned imports.
- The `font-size` group in `src/lib/cn.ts` mirrors the `--text-*` tokens in `src/styles/global.css`
by hand. Adding, renaming, or removing a size token means the same edit in both files, in the
same commit; nothing checks them, and a missing entry shows up only as a wrong size in the
browser.
- No new dependencies without an ADR in `docs/adr/`.
- No client-side frameworks, no framework islands.
- Content changes go in `src/content/` — see `docs/content.md`. **Never inline a content array
in a page** where a collection exists (the legacy site's habit): query the collection. New
repeating content earns a collection, not a `const` in frontmatter.
- Collection schemas stay flat (strings, enums, booleans, dates, numbers, images) so a git-backed
CMS stays a later addition. A schema change needs an ADR.
CMS stays a later addition.
- Visual decisions come from `DESIGN.md`. When code and the doc disagree, the doc wins; when
the doc is silent, add to it before building (its §11 change process).
- Implementation plan and phase acceptance criteria live in `plan/`.
Expand Down
Loading
Loading