agentleFS
clearcotelabsclearcotelabs/clearcote-browser/AGENTS.md

clearcote-browser

AGENTS.md236 starsChanged yesterdayBSD-3-ClauseView on GitHub

Agents open this repository for one of two reasons: Clearcote is a Chromium build with its fingerprint controls in the engine. It is driven by Playwright, Puppeteer or any Chrome DevTools Protocol (CDP) client. Install the SDK; it downloads the browser on first use and checks its SHA-256, so playwright install is not needed. - Keep the existing Playwright code. Replace only the chromium.launch(...) call with launch(...). - Tools that take a CDP URL (browser-use, Crawl4AI, Playwright MCP, Puppeteer): start…

  • Reads credentials
  • Installs packages

We split this AGENTS.md into the rules it gives an agent

8 rules. About 1 is common, 6 are distinctive, and 1 is very specific to this project.

  • ≈1

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Common:

    No secrets, no blobs: Never commit credentials, tokens, or opaque binaries.

    line 91
  2. Distinctive:

    Privacy-relevant patches are mandatory: Do not drop a privacy/identity patch to make a build pass.

    line 92
  3. Very specific:

    Add it to patches/series in the right order.

    line 114
  4. Distinctive:

    Document the intent in the patch header and your PR.

    line 116
  5. Distinctive:

    Prefer small, reviewable PRs with a clear description of intent and verification steps.

    line 120
  6. Distinctive:

    Never introduce network calls that phone home or fetch unverified code at runtime.

    line 121
  7. Distinctive:

    If a change affects what the browser exposes to websites, say so explicitly and explain the privacy reasoning.

    line 122
  8. Distinctive:

    When in doubt, open an issue to discuss before large changes.

    line 123

≈ “Common” is an estimate: at least 1 in 5 of the 36,368 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
AGENTS.md

AGENTS.md — guide for automated tools and contributors

Agents open this repository for one of two reasons:

  • To use Clearcote in a project (scraping, testing, an AI agent that needs a browser): read Using Clearcote in a project.
  • To work on Clearcote itself (patches, build, SDK code): skip to What this project is.

Using Clearcote in a project

Clearcote is a Chromium build with its fingerprint controls in the engine. It is driven by Playwright, Puppeteer or any Chrome DevTools Protocol (CDP) client. Install the SDK; it downloads the browser on first use and checks its SHA-256, so playwright install is not needed.

pip install clearcote          # Python
npm install clearcote          # Node.js / TypeScript
dotnet add package Clearcote   # .NET
from clearcote import launch          # asyncio: from clearcote.async_api import launch

browser = launch(fingerprint="user-7423", platform="windows")   # returns a standard Playwright Browser
page = browser.new_page()
page.goto("https://example.com")
browser.close()
  • Keep the existing Playwright code. Replace only the chromium.launch(...) call with launch(...).
  • Tools that take a CDP URL (browser-use, Crawl4AI, Playwright MCP, Puppeteer): start an endpoint with serve() or clearcote-serve --port 9222, then connect to http://127.0.0.1:9222.
  • One seed per identity. The same fingerprint string returns the same machine on every launch; a new string gives a new, unlinked one.
  • Do not add stealth plugins (puppeteer-extra-plugin-stealth, playwright-stealth). They patch values from JavaScript and conflict with the persona set in the engine.
  • Selenium and WebDriver are not supported. Clearcote is driven over CDP.
  • Hosted browsers: launch(cloud=True, country="us") with CLEARCOTE_API_KEY set runs the browser on Clearcote's servers and returns the same Playwright Browser.

To give an assistant (Claude, Cursor, Cline) a browser over MCP:

{ "mcpServers": { "clearcote": { "command": "npx", "args": ["-y", "clearcote-mcp"] } } }

References: llms.txt · SDKs: Python, Node, .NET · MCP server: mcp/ · Docker: docker/ · docs: https://www.clearcotelabs.com/docs


What this project is

Clearcote Browser: an open-source, reproducible Chromium build with engine-level privacy/identity controls. Base is ungoogled-chromium; changes are delivered as readable source patches. Builds target Windows x64 and Linux x64 and are produced on a Linux host (native for Linux, cross-compiled for Windows).

Repository layout

clearcote-browser/
├── README.md            # what/why, quickstart, credits
├── llms.txt             # summary for AI tools
├── ROADMAP.md           # phased plan
├── AGENTS.md            # this file
├── CONTRIBUTING.md      # contribution workflow
├── CREDITS.md           # upstream attributions + licenses
├── DISCLAIMER.md        # responsible use + legal
├── SECURITY.md          # reporting vulnerabilities
├── UPSTREAM_REVISION    # pinned Chromium revision the patches target
├── build.sh             # one-shot Linux cross-build orchestrator
├── Dockerfile           # reproducible build environment
├── scripts/             # numbered build stages (00-05) + release and CI checks
├── patches/             # Clearcote's source patches (unified diffs) + series
├── config/              # args.gn and build configuration
├── sdk/                 # SDKs: python/, node/, dotnet/ (published as `clearcote` / `Clearcote`)
├── mcp/                 # MCP server (`clearcote-mcp`)
├── docker/              # the CDP-endpoint Docker image
├── tools/               # fingerprint collector, canvas bridge server
└── docs/
    ├── BUILDING.md          # build from source
    ├── VERIFY.md            # verify a release
    ├── RELEASING.md         # maintainer release runbook (canonical)
    ├── PATCHES.md           # patch-set overview
    ├── RESEARCH.md          # design research
    └── RESEARCH-DOSSIER.md  # deep build/stealth dossier

Conventions

  • Patches over forks. Changes to Chromium are unified diffs under patches/, listed in patches/series, applied with the ungoogled patches.py tooling. Keep one logical change per patch with a descriptive name and a header comment explaining why.
  • Pin everything. Patches target the revision in UPSTREAM_REVISION. If you bump it, re-test the whole series and update both together.
  • Engine-level, not JS injection. Identity/privacy behavior belongs in compiled code, not in injected scripts.
  • No secrets, no blobs. Never commit credentials, tokens, or opaque binaries. The tree is source + text patches only.
  • Privacy-relevant patches are mandatory. Do not drop a privacy/identity patch to make a build pass; fix the patch.

Common commands

# Apply the full patch set onto a prepared Chromium source tree
python3 <ungoogled>/utils/patches.py apply build/src ./patches

# Configure + build
cp config/args.gn build/src/out/Default/args.gn
( cd build/src && gn gen out/Default && ninja -C out/Default chrome )

# Hash an artifact
sha256sum out/Default/<artifact>

See docs/BUILDING.md for the complete pipeline and docs/VERIFY.md for verification.

Adding or fixing a patch

  1. Make the source change in build/src.
  2. Generate a clean unified diff and place it under patches/ with a clear name.
  3. Add it to patches/series in the right order.
  4. Re-run a full apply on a clean tree to confirm it applies without rejects.
  5. Document the intent in the patch header and your PR.

Ground rules for automated contributors

  • Prefer small, reviewable PRs with a clear description of intent and verification steps.
  • Never introduce network calls that phone home or fetch unverified code at runtime.
  • If a change affects what the browser exposes to websites, say so explicitly and explain the privacy reasoning.
  • When in doubt, open an issue to discuss before large changes.

Download now (ZIP)

  • Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.

    Of the AGENTS.md files we read, the 28,693 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.

  • In this repositoryOne other file it gives its agents.

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.