Open-source AI browser agent — type plain-language commands and Bah operates the web for you. Works with free AI, cloud providers, or local Ollama models.
# Add to your Claude Code skills
git clone https://github.com/alexvilelabah/bah-browserLast scanned: 7/4/2026
{
"issues": [
{
"type": "npm-audit",
"message": "@babel/core: @babel/core: Arbitrary File Read via sourceMappingURL Comment",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@electron/rebuild: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "app-builder-lib: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "brace-expansion: brace-expansion: Large numeric range defeats documented `max` DoS protection",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "cacache: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "concurrently: Vulnerability found",
"severity": "critical"
},
{
"type": "npm-audit",
"message": "dmg-builder: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "electron-builder: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "electron-builder-squirrel-windows: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "form-data: form-data: CRLF injection in form-data via unescaped multipart field names and filenames",
"severity": "high"
},
{
"type": "npm-audit",
"message": "js-yaml: JS-YAML: Quadratic-complexity DoS in merge key handling via repeated aliases",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "make-fetch-happen: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "node-gyp: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "shell-quote: shell-quote quote() does not escape newlines in object .op values",
"severity": "critical"
},
{
"type": "npm-audit",
"message": "tar: node-tar Vulnerable to Arbitrary File Creation/Overwrite via Hardlink Path Traversal",
"severity": "high"
},
{
"type": "npm-audit",
"message": "tmp: tmp has Path Traversal via unsanitized prefix/postfix that enables directory escape",
"severity": "high"
}
],
"status": "FAILED",
"scannedAt": "2026-07-04T06:48:46.999Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}bah-browser is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by alexvilelabah. Open-source AI browser agent — type plain-language commands and Bah operates the web for you. Works with free AI, cloud providers, or local Ollama models. It has 83 GitHub stars.
bah-browser failed SkillsLLM's automated security scan, which flagged one or more high-severity issues. Review the Security Report section carefully before using it.
Clone the repository with "git clone https://github.com/alexvilelabah/bah-browser" and add it to your Claude Code skills directory (see the Installation section above).
bah-browser is primarily written in TypeScript. It is open-source under alexvilelabah on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh bah-browser against similar tools.
No comments yet. Be the first to share your thoughts!
Requires a passing catalog security scan. Resolve the flagged issues and resubmit to enable featuring.
You give natural-language commands ("open gmail and delete the spam") and the AI operates the browser in your place — reading the screen, clicking with a real mouse, typing, and going until it's done.
💸 Free out of the box — no key, no GPU. Chat and image generation work the moment you open it, with no API key. For the full autonomous agent (or more speed), add a cheap key — DeepSeek (recommended), Mistral or NVIDIA NIM. Prefer 100% local + offline? Run a model with Ollama.

▶️ Download the full video — the agent searching and operating the web on its own. (the GIF above is a preview; GitHub doesn't play embedded video in the README.)
🧑 I just want to use it (Windows): grab the installer here → the Bah-Setup-*.exe file, double-click and install.
🏠 Want it 100% local & free? No terminal needed. Set up the AI right inside the browser: open the AI panel → 🏠 Local AI → type a model name → Download, and Bah pulls the Ollama model for you. (Prefer the cloud? A cheap DeepSeek key works too — and needs no GPU.)
🔄 Auto-updates: after installing, Bah checks for new versions, downloads them in the background and offers "Restart now" to apply — no reinstalling.
⚠️ Windows shows a blue "protected your PC" screen (the app isn't code-signed with a paid certificate yet). Click More info → Run anyway — normal for new open-source apps. (Later updates install without that warning.)
👨💻 I want to hack on the code: clone and run it — see Running it below.
sendInputEvent (not synthetic events — goes through React, Vue, Angular without being ignored)navigator.webdriver) so sites don't wrongly block the browser| Layer | Tech |
|---|---|
| Browser shell | Electron 42 + Chromium |
| UI | React 19 + TypeScript + Vite |
| AI (cloud) | DeepSeek (recommended) · Mistral · NVIDIA NIM · free no-key fallback (Pollinations) |
| AI (local) | Ollama |
| Adblock | @ghostery/adblocker-electron |
| Webview | <webview> tag with persistent partition |
USER → "open gmail and delete the spam"
│
▼
┌───────────────────────────────────────────────┐
│ for step in 1..25: │
│ 1. observePage(webview) │
│ → { url, title, interactive_elements } │
│ 2. captureScreenshot() │
│ 3. AI decides ONE action: │
│ { action: { type, ...params } } │
│ 4. execute action via REAL OS input │
│ 5. wait, re-observe, self-evaluate │
│ 6. if action == 'done' → return │
└───────────────────────────────────────────────┘
| Action | What it does |
|---|---|
click_ref(N) |
Clicks the element with id N from the observed list |
fill_ref(N, value) |
Fills input id N with value (and verifies it took) |
click_text(text) |
Finds by visible text and clicks |
click_at(x, y) |
Click at exact coordinates (visual fallback) |
type(text) / press(key) |
Type into the focused field / send a key |
navigate(url) / scroll(dir) |
Go to a URL / scroll |
new_tab / switch_tab / close_tab |
Tab management |
done(reason, success) |
End the loop |
Clicks happen through webContents.sendInputEvent in the main process — a real Chromium mouse event, not a synthetic one, so React/Vue/anti-bot sites respond normally. The AI prefers the DOM-first path (click_ref), falling back to text and then coordinates.
git clone https://github.com/alexvilelabah/bah-browser.git
cd bah-browser
npm install
npm run build
npm start # or: npx electron .
Windows shortcut: double-click Abrir-Bah.bat.
127.0.0.1:11434). Then download a model from inside Bah (☁️/🏠 → 🏠 Local AI → type a name → Download) or in a terminal (e.g. ollama pull qwen3:14b). Local works offline, but the cloud (DeepSeek) is more reliable.The agent runs with full browser privileges, so it's worth being clear about what it does and doesn't do:
⚖️ You're in control — and responsible. Bah acts in your real session, on your account. Use it within each site's terms and the law. Sensitive actions (paying, buying, deleting, entering card data) always ask for your confirmation first.
🔍 Audit it yourself. The full threat model, a verify-it-yourself checklist (each protection → the exact file), what leaves your machine, and an honest list of accepted tradeoffs all live in SECURITY.md. A map of the codebase — every file, the live agent loop, the build — is in ARCHITECTURE.md. The whole of
src/is ~30 files.
🔓 It's your real session. The browser uses a persistent partition (persist:browser), so cookies and logins are saved. If you're logged into Gmail in Bah, so is the agent. The AI can access anything you could access manually. Don't log into accounts you wouldn't trust an assistant with.
🛡️ Safety brake on sensitive actions. Before paying, buying, deleting, or entering card data, the agent pauses and asks for your confirmation — and this works on every path (model clicks, coordinate clicks, Enter on a checkout page, learned shortcuts, and repeated automations). It never does those silently.
🛑 Stop means stop. The ■ Stop button cancels immediately, even mid model-call or mid-loop; a late response won't "resurrect" a cancelled task.
🎯 No fake success. After a fill/type the agent checks the field actually holds the value; if an action had no re