Repository avatar
AI Tools
v0.2.0
active

cookieguard

io.github.aiscihub/cookieguard

Audit HTTP cookie security against your local policy. Returns findings without cookie values.

Documentation

CookieGuard AI

Cookie security checks for AI browser agents, MCP clients, tests, and CI.

A successful agent login is not a secure session cookie.

PyPI PyPI downloads Python versions npm cookieguard-ci npm downloads MCP server on npm Node.js 24+ Browser Use 0.13 CI MIT license Girls Who Code Challenge 2026 winner

Browser Use integration · MCP server · CI guide · Website

Quick start · How it works · Your policy · What it checks · MCP · Coding agents · More tools · FAQ · Documentation

pip install cookieguard

[!NOTE] CookieGuard for Browser Use is a community integration, not an official Browser Use package. Audit only applications you are authorized to test.


A Browser Use agent driven by Claude logs in to two local apps. Both logins succeed. CookieGuard fails the first with CG001 Missing HttpOnly (exit 1) and passes the second (exit 0).

Real run: Claude (claude-opus-5-5) drives a Browser Use agent through the same login twice. The insecure app gets FAIL — CG001 (exit 1); the secure app gets PASS (exit 0). Recording and test evidence




Your AI agent can log in to an app successfully while the session cookie it receives is still unsafe, for example readable by JavaScript because it lacks HttpOnly. CookieGuard watches the browser the agent drives, checks the authentication cookies against your policy, and returns PASS / FAIL / INCOMPLETE with rule IDs, explanations, and fixes.

The decision comes from the local CookieGuard engine and is enforced by your code, never by the model. Cookie values stay on your machine: they never reach the model, logs, or reports.

Quick start

Install

Needs Python 3.11+, Node.js 24+, and Chrome or Chromium. Install version 0.3.0:

pip install cookieguard

Code that uses cookieguard-browser-use or import cookieguard_browser_use keeps working: that package now installs cookieguard and re-exports it.

Try the demo

Runs a real Browser Use agent against a local login app, with no API key needed:

python -m cookieguard.browser_use.demo   # insecure: FAIL CG001 (exit 1) · secure: PASS (exit 0)

Add it to your agent

from browser_use import Agent, BrowserProfile, BrowserSession, Tools
from cookieguard import CookieGuardAudit

audit = CookieGuardAudit(
    allowed_origins=['http://127.0.0.1:3000'],  # exact origins you are authorized to test
    auth_cookies=['session_id'],                # the real session cookie name(s)
    fail_on='high',
)
session = BrowserSession(browser_profile=BrowserProfile(
    keep_alive=True,                            # required: Agent.run() otherwise closes the browser
    enable_default_extensions=False,            # avoid the bundled cookie-consent extension
    allowed_domains=audit.browser_allowed_domains(),
))
tools = Tools()
audit.register_tools(tools)                     # optional agent-visible check

await session.start()
await audit.start(session)                      # before the login
agent = Agent(task=..., llm=..., browser_session=session, tools=tools,
              sensitive_data={'http://127.0.0.1': {'login_password': '...'}})
await agent.run()
result = await audit.finish()                   # decided by the CookieGuard engine
await session.kill()

print(result.summary)
result.assert_policy()                          # raises CookiePolicyError on FAIL or INCOMPLETE

assert_policy() raises on FAIL or INCOMPLETE even if the agent never called the audit tool, or reported success. Install guide · Real-model example

How it works

Your test starts CookieGuard and the Browser Use agent. The agent, guided by any AI model, logs in through Chromium. The app responds with Set-Cookie. A separate CookieGuard observer reads the same browser over its own CDP connection. It sends the evidence to a local CookieGuard engine, which returns PASS, FAIL, or INCOMPLETE to your test. The agent's optional cookieguard_audit tool is read-only, and cookie values never reach the model.

CookieGuard reads the agent's browser over its own connection. It sees both what the server declared (Set-Cookie) and what the browser stored. The published CookieGuard engine then evaluates that evidence locally. Details

Your policy decides what fails

CookieGuardAudit options decide which findings fail. High-severity rules CG001 Missing HttpOnly, CG002 Missing Secure, CG006 invalid prefix, and CG007 regression fail by default. With fail_on set to medium, CG003 SameSite and CG005 lifetime fail too. CG004 Domain sharing fails only with require_host_only. CG008 and CG009 are review only. The result is FAIL (exit 1), INCOMPLETE (exit 2, which overrides FAIL), or PASS (exit 0).

fail_on sets the line: a confirmed finding at or above it fails the run; anything below is reported. Only cookies you name in auth_cookies can be confirmed. All policy options

What it checks

RuleChecksSeverityPolicy option
CG001Authentication cookie missing HttpOnlyhighalways on
CG002Authentication cookie missing Securehighalways on
CG003Declared SameSite outside the policymediumallowed_same_site, require_explicit_same_site
CG004Domain= shares the cookie with subdomainsmediumreview unless require_host_only
CG005Remaining lifetime above the limitmediummax_lifetime_days
CG006Invalid __Host- / __Secure- prefixhighalways on
CG007A protection regressed since a baselinehighfinish(baseline=…)
CG008Authentication role not confirmedreviewname it in auth_cookies
CG009Evidence needs reviewreview—
CG010Session id not rotated at loginhighopt-in session_probe_url
CG011Session still valid after logouthighopt-in session_probe_url
CG012Token in localStorage or sessionStoragehighreview; confirmed with auth_storage_keys

CG001–CG009 check cookie configuration. CG010 and CG011 replay the observed session against one protected URL you name, and CG012 reads Web Storage in the audited browser (Python 0.3.0 and Playwright 0.3.0). PASS means the configured checks passed, not that the application is secure. Full rule table · Limits & privacy

More ways to use CookieGuard

The same published policy engine powers every tool:

ToolUse it forGet started
Browser UseAI agents that log in and run browser workflowsQuick start
MCP serverLetting an AI client scan your app's Set-Cookie headersUse it from an MCP client
Agent SkillTeaching coding agents when and how to add these checksUse it from a coding agent
PlaywrightCookies created during login in your existing testsPlaywright quickstart
Playwright gateFailing CI unless the login check ran and passed, even if a test was skippedGate example
CLISet-Cookie headers from a running test appCLI quickstart
GitHub ActionHeader checks, a build summary, and a sanitized reportAction quickstart
Browser extensionInspecting cookies interactively in ChromeSee below

With Node.js 24+, scan a local endpoint that sets your authentication cookie:

npx cookieguard-ci@0.3.0 scan http://localhost:3000 --auth-cookie session_id

The CLI, Action, and MCP server do not log in or execute JavaScript. Use Browser Use or Playwright for authenticated workflows. Every tool reports 0 for a pass, 1 for a confirmed policy failure, and 2 for an incomplete audit. The MCP server reports it as the exitCode result field.

Use it from an MCP client

The CookieGuard MCP server lets an AI client, such as a coding agent, check the cookies your app sets. It runs locally over stdio. Your configuration file fixes the allowed origins and policy; the client can only choose which URL or evidence file to audit.

[!NOTE] @aiscihub/cookieguard-mcp is on npm (0.3.0) and in the official MCP Registry as io.github.aiscihub/cookieguard. It needs Node.js 24+.

CookieGuard MCP server CookieGuard AI MCP server – quality and maintenance score on Glama

Try it from a clone of this repository, with no API key or browser. The demo connects a real MCP client to the server:

npm ci && npm run demo:mcp
MCP tools: cookieguard_audit, cookieguard_capabilities, cookieguard_explain, cookieguard_policy, cookieguard_scan
Capabilities: 9 checks; allowed origins: 1; evidence files: enabled
secure: PASSED (exitCode 0)
missing-httponly: FAILED (exitCode 1) — CG001 Missing HttpOnly
preference: INCOMPLETE (exitCode 2) — expected-auth-cookie-not-observed
Explain CG001: Set HttpOnly on the authentication cookie at the server.
Evidence login-report.json: FAILED (exitCode 1); observed by server: no

To connect your own client, write a config file (like this example) with your app's origin and session cookie names. Then add the server to your client's MCP settings:

{
  "mcpServers": {
    "cookieguard": {
      "command": "npx",
      "args": ["--yes", "@aiscihub/cookieguard-mcp@0.3.0",
               "--config", "/absolute/path/cookieguard.json"]
    }
  }
}
ToolWhat it doesAvailable in
cookieguard_policyShows the allowed origins and the policy in force0.1.0
cookieguard_scanScans one allowed URL's Set-Cookie headers and returns status, findings, and fixes0.1.0
cookieguard_capabilitiesDescribes the checks, this server's configuration, result meanings, and limits0.2.0
cookieguard_auditAudits one allowed URL, or one sanitized report your own Browser Use, Playwright, or CLI run wrote to the configured evidenceDir0.2.0
cookieguard_explainExplains a rule ID, incomplete reason, or error code0.2.0

Results never contain cookie values. The agent decides whether to call the tool, so enforce results in your tests or CI when you need a gate. MCP guide

Use it from a coding agent

The CookieGuard Agent Skill tells coding agents when a task calls for these checks (Browser Use or Playwright logins, CI gates, MCP clients), which integration to pick, and how to read the result without exposing cookie values. In Claude Code:

/plugin install cookieguard --marketplace aiscihub/cookieguard-ai

For Codex, copy skills/cookieguard-browser-auth-security to .agents/skills/ in your repository or to ~/.agents/skills/. Other agents that read SKILL.md can use the same folder, and npm run package:skill builds a ZIP of it for skill marketplaces.

Automated tools can read cookieguard.capabilities.json: a versioned, machine-readable description of every check, input, output schema, exit code, privacy property, and limitation. Output schemas are in schemas/. npx cookieguard-ci@0.3.0 capabilities --json and npx cookieguard-ci@0.3.0 explain CG001 print the same information. Agent discovery details

Browser extension

Install the original CookieGuard AI Chrome extension

Its classifier and explanations run in your browser, with no backend required.

  1. Download or clone this repository.
  2. Open chrome://extensions/ and enable Developer mode.
  3. Select Load unpacked, then choose the extension-standalone/ folder.
  4. Open a site you are authorized to inspect, click CookieGuard AI, and select Scan Cookies.

The popup shows AI Engine Ready or Rule-Based Mode.

CookieGuard AI browser extension

Extension JSON exports can include cookie values; review them before sharing. Extension and research background · Privacy

FAQ

Does the AI model decide whether my app passes?

No. Your code calls audit.finish() and assert_policy(); the local CookieGuard engine decides. The agent's optional cookieguard_audit tool is read-only and provisional. In testing, an agent that falsely claimed success without logging in still got INCOMPLETE.

Do cookie values reach the model, logs, or reports?

No. Values go only to the local engine over a pipe, and every result is value-free. The tests check this with synthetic tokens. Your model provider still receives the task and page content. Pass credentials through Browser Use sensitive_data, and set ANONYMIZED_TELEMETRY=false to turn off Browser Use telemetry. Limits & privacy

Browser Use or MCP: which should I use?

Use Browser Use when an agent logs in and you need the browser's evidence: it sees the cookies created during the real workflow, and your code enforces the result. Use the MCP server to let an AI client check the Set-Cookie headers an endpoint returns, without a browser or login. Its result is information for the agent, not an enforced gate.

Which models work?

Any model Browser Use supports. Verified with claude-opus-5-5, using Anthropic's server-side fallback for intermittent safety-classifier refusals. The OpenAI and Browser Use Cloud paths in the example have not been run yet. The demo needs no model at all.

Can I audit a staging site?

Only one you are authorized to test. Loopback origins are allowed by default. Others need their exact origin plus allow_nonlocal_origins=True. CookieGuard never navigates; use allowed_domains to keep the agent on the app.

Why does Chrome exit at launch on Ubuntu 24.04 or GitHub Actions?

Ubuntu 23.10+ blocks the user namespaces Chromium's sandbox needs. Run sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0, or use Google Chrome with BrowserProfile(channel='chrome'). Avoid --no-sandbox. Install guide

Which environments are tested?

Version 0.1.0 is tested with Browser Use 0.13.14 and Chromium-family browsers:

  • Linux (GitHub ubuntu-latest): Python 3.11, 3.12, and 3.13, Node.js 24, Chromium 156.
  • macOS (Apple silicon): Python 3.12, Node.js 24 and 26, Chrome 156.

Windows, Browser Use cloud browsers, and other Browser Use versions are not tested yet. Tested environments and dependencies

Documentation

AreaGuides
Browser UseOverview · Install · Policy · How it works · Results · Limits & privacy · Demo & tests · Validation
MCP serverGuide · Validation · Release checklist · Example config
CI toolsCI guide · Playwright demo · Validation · Architecture
Extension & researchOriginal README · Project summary · Historical report
ProjectRelease notes · Contributing · Troubleshooting · Security · Privacy

Project

The original CookieGuard AI extension won the Girls Who Code Challenge 2026: award announcement · original demo. CookieGuard is released under the MIT license.

NPM
@aiscihub/cookieguard-mcp
Install Command
npm install @aiscihub/cookieguard-mcp