Browser Qa logo

Browser Qa

Community
brucesongs
browser-qa

Automated browser-based security testing using Playwright and browser devtools. Interact with web applications as a user would — click, type, navigate — while monitoring network traffic, JavaScript execution, and DOM changes for security issues.

Overview

Publisherbrucesongs
Repositorykali-claw
Skill namebrowser-qa
Stars
70
Forks
18
Bundled files
14
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 14 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by brucesongs on GitHub. Read the source before you install it.

Installation

Install the Browser Qa AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/brucesongs/kali-claw.git /tmp/kali-claw
mkdir -p .claude/skills
cp -r /tmp/kali-claw/skills/browser-qa .claude/skills/browser-qa
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Browser Qa in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Browser Qa on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Browser Qa is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Browser QA

Summary

Interact with web applications as a user would — click, type, navigate — while monitoring network traffic, JavaScript execution, and DOM changes for security issues.

Domain: testing

Skill Identity

AttributeValue
DomainSecurity Testing
Skill IDbrowser-qa
Version1.0.0
Hacker LawsLaw 1 (Know Your Battlefield), Law 3 (Intelligence Over Force)
Related Skillsapi-security, web-xss, web-auth

Purpose

Automated browser-based security testing using Playwright and browser devtools. Interact with web applications as a user would — click, type, navigate — while monitoring network traffic, JavaScript execution, and DOM changes for security issues.

Core Capabilities

  1. Automated Navigation: Click links, fill forms, submit data
  2. Network Monitoring: Capture HTTP requests/responses, detect API calls
  3. JavaScript Execution: Run custom scripts in page context
  4. DOM Inspection: Query selectors, extract data, detect XSS sinks
  5. Screenshot/Video: Document findings visually

Use Cases

  • Auth Flow Testing: Test login, logout, session handling, password reset
  • CSRF Detection: Check for CSRF tokens in state-changing requests
  • XSS Testing: Submit payloads via forms and monitor DOM
  • Cookie Analysis: Check HttpOnly, Secure, SameSite flags
  • Client-Side Security: CSP headers, SRI, HTTPS enforcement

Tools

  • Playwright: Node.js/Python library for browser automation
  • Puppeteer: Chrome-only automation (legacy)
  • Browser DevTools Protocol: Direct CDP access for advanced use

Methodology

  1. Baseline capture — record clean network traffic and console logs before injecting payloads.
  2. Stateful navigation — drive multi-step flows (login → dashboard → settings) so client-side state mirrors real users.
  3. Differential observation — diff request/response pairs across attacker vs. victim contexts to surface authorization gaps.
  4. Evidence-first — capture screenshots, HAR files, and DOM snapshots before mutating state further.

Test Patterns

  • Headed vs. headless — run smoke tests headless for speed, but switch to headed mode for tricky DOM races and anti-bot heuristics.
  • Storage isolation — use Playwright's browserContext per test to avoid cookie/localStorage cross-contamination.
  • Request interceptionpage.route() to mock responses, inject delays, or replay captured payloads deterministically.
  • CDP escape hatch — drop to client.send('Network.setExtraHTTPHeaders', ...) for headers Playwright's API doesn't expose.

Anti-Detection Considerations

  • Default Playwright fingerprints (navigator.webdriver, missing Chrome runtime fields) are trivially detected; use stealth patches for realistic testing.
  • Mouse-movement simulation matters for CAPTCHA-protected flows — synthesize trajectories, not just instant clicks.
  • TLS fingerprinting (JA3) leaks Playwright's Chromium signature; route through a customized proxy if testing anti-bot defenses.
  • Respect target's anti-bot policy in authorized engagements — log every detection event for the report.

Common Pitfalls

  • Flaky selectors — relying on auto-generated class names breaks across deployments; prefer data-testid or role-based selectors.
  • Timing assumptionswaitForTimeout masks real race conditions; use waitForResponse/waitForLoadState instead.
  • Cookie leakage — failing to clear storage between tests causes authenticated/unauthenticated flow confusion.
  • Silent JS errors — without page.on('pageerror') listeners, CSP violations and client-side crashes go unnoticed.

Authentication Testing

  • Drive full login/logout/password-reset cycles with page.fill() + page.click() — avoid shortcuts that skip client-side validation.
  • After authentication, verify session cookies carry correct flags (HttpOnly, Secure, SameSite=Strict/Lax).
  • Test account lockout by iterating wrong credentials and checking for rate-limiting responses (HTTP 429 or progressive delays).
  • Validate "remember me" tokens — long-lived cookies should be rotated on server-side, not static across sessions.

Session and State Management

  • Enumerate all client-side storage: localStorage, sessionStorage, IndexedDB, and cookies — each is a potential auth-data leak vector.
  • Verify CSRF tokens are present in every state-changing request and are rotated per-request (not per-session).
  • Test session fixation by injecting a known session ID before login and confirming the server issues a new one.
  • Check logout invalidation: after logout, the old session cookie must not grant access (server-side revocation).

Network Traffic Analysis

  • Capture full HAR files during testing: page.context().storageState() for cookies, page.route() for request/response logging.
  • Identify all XHR/fetch calls the application makes — hidden API endpoints often lack the same authz checks as page routes.
  • Monitor for credential leakage in URLs (tokens in query strings) and referrer headers (sensitive paths leaked to third-party origins).
  • Check for mixed content: HTTP subresources on HTTPS pages downgrade security guarantees.

Detection Methods

Browser Automation Detection

  • WebDriver flags: navigator.webdriver === true; legacy Selenium/Puppeteer signature.
  • Headless indicators: --headless flag in Chrome process args; missing chrome.runtime API.
  • Canvas fingerprint anomalies: WebGL renderer Mesa/SwiftShader; headless browser giveaway.
  • Plugin enumeration: Missing expected plugins (Chrome PDF, native messaging).
  • Mouse movement patterns: Linear mouse paths (no jitter) typical of automation.

SIEM Detection Rules

  • Splunk SPL: index=web http.user_agent="*HeadlessChrome*" OR http.user_agent="*PhantomJS*"
  • Sigma rule: sigma/rules/web/automated_browser_detection.yml
  • Cloudflare Bot Management: ML-based bot detection catches most automation frameworks.
  • Akamai Bot Manager: Behavioral fingerprinting.

Defense Evasion Techniques

Stealth Automation

  • puppeteer-extra-plugin-stealth: Removes WebDriver signature; patches navigator APIs.
  • undetected-chromedriver: Patches ChromeDriver to remove detection signatures.
  • Playwright with stealth: Use playwright-extra with stealth plugin.
  • Camoufox: Firefox fork with built-in fingerprint randomization.
  • Real browser binaries: Use real Chrome/Firefox binaries (not headless); slower but stealthier.

Fingerprint Mimicry

  • Use real user fingerprints: Capture legitimate user fingerprint (Canvas, WebGL, fonts); replay it.
  • TLS fingerprint matching: curl-impersonate matches browser JA3/JA4 hashes.
  • Realistic viewport: Match common viewport sizes (1920x1080, 1366x768); avoid 800x600.
  • Realistic timing: Add jitter to mouse movements; random delays between actions.

Proxy / Network Stealth

  • Residential proxies: Bright Data, Smartproxy; mimics real user IPs.
  • IP rotation: Rotate per session; avoid single-IP burst patterns.
  • Mobile carrier proxies: 4G/5G IPs; harder to block (legitimate user pattern).

Reporting and Evidence

  • Use page.screenshot({ fullPage: true }) for every finding — full-page captures preserve context that viewport-only shots miss.
  • Record video traces for complex multi-step exploits: browser.newContext({ recordVideo: { dir: 'evidence/' } }).
  • Export console messages filtered by severity: page.on('console', msg => { if (msg.type() === 'error') log(msg) }).
  • Generate HAR exports with page.context().tracing.start() and tracing.stop({ path }) for complete request-level evidence.

Advanced Techniques

  • Combine Playwright with Burp Suite upstream proxy for passive traffic analysis while browser tests execute.
  • Use page.addScriptTag() to inject custom monitoring hooks that log DOM mutations (MutationObserver) and network requests (PerformanceObserver).
  • Parallelize independent test flows across multiple browser contexts for faster regression suites.

Integration

  • Use with web-xss skill for payload delivery
  • Use with api-security skill to analyze intercepted API calls
  • Use with knowledge-ops to store findings

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Browser Qa AI skill do?

Automated browser-based security testing using Playwright and browser devtools. Interact with web applications as a user would — click, type, navigate — while monitoring network traffic, JavaScript execution, and DOM changes for security issues.

Why use Browser Qa on TypingMind?

Because you install it once and use it with any model. Browser Qa is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Browser Qa in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/brucesongs/kali-claw/tree/main/skills/browser-qa. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Browser Qa?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Browser Qa?

As many as you like. As long as a model supports skills, you can use Browser Qa with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Browser Qa AI skill free?

Yes. It is published on GitHub by brucesongs under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇