playwright-python
AGENTS.md15k starsChanged 12 days agoApache-2.0View on GitHub
Guidance for coding agents working in this repository. Python bindings for Playwright. The Python client talks JSON over a pipe to the Node-based driver bundled in playwright/driver/. The pipe protocol is defined upstream in packages/protocol/spec/*.yml.
- Installs packages
- Commits and pushes
We split this AGENTS.md into the rules it gives an agent
11 rules. About 0 are common, 2 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
9
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
- Very specific: line 41
If the system lacks python3-venv, uv venv env is an acceptable substitute (then uv pip install --python env/bin/python --upgrade pip).
- Very specific: line 48
Run tests: pytest --browser chromium [-k name] (v1), PW_IMPL=v2 pytest tests/async --browser chromium (v2), or ./test.sh [browser] for both.
- Very specific: line 63
Do not write a new test when an upstream test exists.
- Distinctive: line 81
Never post comments, replies, or reviews on GitHub PRs/issues under my account without my explicit approval.
- Distinctive: line 85
Don't hand-edit generated files.
- Very specific: line 86
Don't add # type: ignore or modify _generated.py to silence pyright.
- Very specific: line 88
Keep scripts/codegen/python_rules.js minimal — every entry needs a one-line rationale comment above it.
- Very specific: line 94
Before committing, run mypy playwright and fix errors.
- Very specific: line 122
Never add Co-Authored-By agents in commit message.
- Very specific: line 123
Never add "Generated with" in commit message.
- Very specific: line 124
Never add test plan to PR description.
≈ “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.
Files
AGENTS.md
Guidance for coding agents working in this repository.
What this is
Python bindings for Playwright. The Python client talks JSON over a pipe to the Node-based driver bundled in playwright/driver/. The pipe protocol is defined upstream in packages/protocol/spec/*.yml.
Layout
playwright/_impl/— hand-written client implementation (one module per object:_browser.py,_page.py,_locator.py,_network.py, etc.). Edit these to add or change behavior. Internal types are in_internal_structures.py.playwright/_impl_v2/— the second implementation, a line-by-line port of upstream's JS client (packages/playwright-core/src/client/*.ts), one module per client file in snake_case (browserContext.tsisbrowser_context.py), members in the JS order. It has only the async API;PW_IMPL=v2switches the async API to it (playwright/_impl/_api_classes.py). Each difference from the JS code has a# Python:comment; see its__init__.pyfor the rules.isomorphic/,protocol/andutils/hold its own ports of the parts ofpackages/isomorphic,packages/protocolandpackages/utilsthat it uses; fromplaywright/_implit uses only the public error classes,FormData, the generated API types, the driver location and the protocol check.protocol_channels.py,protocol_types.pyandprotocol/validator.pyare generated byscripts/codegen/generate_protocol.py.playwright/async_api/_generated.py,playwright/sync_api/_generated.py, and the public TypedDicts inplaywright/_impl/_api_structures.py— auto-generated from the upstream API docs. Never edit by hand; rerun./scripts/update_api.shafter a roll or after changingscripts/codegen/.scripts/codegen/generate_api.js— the generator. A Node.js script that loads the upstream doc parser (utils/doclint/api_parser.js) from$PW_SRC_DIR, filters the docs for Python, and writes the whole public API: signatures, types, docstrings, event overloads, the calls into_impl/, and the TypedDicts. It does not read_impl/.scripts/codegen/python_rules.js— the Python facts that the docs do not contain (positional options, structtotal=, hidden members and options). Policy: the shipped Python API wins; each entry is a candidate for an upstream docs fix, and the generator fails on entries that no longer match anything. Every entry needs a one-line rationale comment above it.playwright/_impl/_protocol.py,_protocol_types.pyand_protocol_channels.py— auto-generated byscripts/codegen/generate_protocol.py(run by./scripts/update_api.sh) from the upstream protocol spec._protocol_channels.pyhas a typed channel class for each interface (PageChannel,FrameChannel, …), like upstream'schannels.d.ts. Each command is an async method with the protocol name and parameters (await self._channel.goto(url=..., waitUntil=..., referer=..., timeout=...)); each event hason<Event>/off<Event>methods. A result or event payload has every top-level field; a field that the driver left out isNone._protocol_types.pyhas the TypedDicts for initializers, results, events and nested types, named as upstream'sutils/generate_channels.jsnames them (PageInitializer,FrameGotoResult,PageRouteEvent, …)._protocol.pyhas the parameters of every command. WithPW_CHECK_PROTOCOL=1,playwright/_impl/_protocol_check.pychecks each message that the client sends against it. The test suite sets this, and fails a test that sends an unknown command, an unknown or missing parameter, or a value of the wrong type.
scripts/codegen/compare_api.py— compares two generated files (signatures, annotations, call bodies, docstrings) and lists every difference. Use it to check that a generator change does not change the API.tests/async/,tests/sync/— pytest suites, ported test for test from the upstream tests, whichtests/upstream_registry.mdlists by identifier. See Tests.playwright/_impl(v1, the default) runs the older tests intests/{async,sync}/legacy/and the other tests outside oftests/asyncandtests/sync;PW_IMPL=v2runsplaywright/_impl_v2on all oftests/async(tests/conftest.py). CI runs v2 on Ubuntu 22.04 with Chromium, Firefox and WebKit. An older test that checks a behavior where v2 follows upstream and v1 does not is marked@only_v1("<tests of v2>")(tests/utils.py), naming the upstream port that covers v2, or the Python-only test of v2 intests/async/python/, which v1 does not run.DRIVER_VERSION— the single source of truth for which Playwright build the driver is assembled from. Two lines:npm=<version>, theplaywright-corenpm version (e.g.npm=1.61.0, novprefix), andrev=<sha>, themicrosoft/playwrightcommit that the package is built from (npm view playwright-core@<version> gitHead). Read bysetup.py,scripts/build_driver.py,scripts/update_api.sh, and CI (throughsetup.py). The wheel build downloadsplaywright-coreat this version from npm plus the matching Node.js binary and assembles the per-platform bundles — no source build. The version is baked into the staged bundle filenames (driver/playwright-<version>-<suffix>.zip), so it doubles as the build cache key.NODE_VERSION— the Node.js version bundled with the driver (one line, e.g.24.16.0). Maintained at roll time byscripts/update_node_version.py(latest LTS, mirroring upstream'sutils/build/update-playwright-node.mjs).scripts/build_driver.py— assembles the per-platform driver bundles intodriver/by downloading theplaywright-corenpm package (DRIVER_VERSION) and the official Node.js binaries (NODE_VERSION). Fetchesplaywright-corewithnpm pack(needs Node.js/npm on PATH; honours a root.npmrc) and the Node.js binaries over plain HTTP; invoked fromsetup.py'sbdist_wheelwith the target platform's suffix (no arg builds all six).- The API docs are not shipped in the bundle.
scripts/update_api.shreads them from a separatemicrosoft/playwrightcheckout ($PW_SRC_DIR) at the exact commit inDRIVER_VERSION(rev=), and refuses to run on any other commit or on local changes. Needed only when regenerating the API, never at runtime. ROLLING.md,CONTRIBUTING.md— human-facing setup and roll docs.
Setup
CONTRIBUTING.md has the full sequence. The short version (needs Node.js and npm for the driver build):
python3 -m venv env && source env/bin/activate
pip install --upgrade pip
pip install -r local-requirements.txt
pip install -e .
python -m build --wheel # downloads playwright-core @ DRIVER_VERSION + Node.js and assembles the driver
pre-commit installIf the system lacks python3-venv, uv venv env is an acceptable substitute (then uv pip install --python env/bin/python --upgrade pip).
Common commands
- Regenerate
_generated.py:./scripts/update_api.sh(runs codegen + pre-commit on the generated files). - Lint everything:
pre-commit run --all-files. - Type-check:
mypy playwright. - Run tests:
pytest --browser chromium [-k name](v1),PW_IMPL=v2 pytest tests/async --browser chromium(v2), or./test.sh [browser]for both. Browsers are installed viaplaywright install chromium(do not use--with-deps, which requires sudo).
The public API comes from the upstream docs. After ./scripts/update_api.sh, run mypy playwright: the generated classes type their _impl_obj, so every new member or option that _impl/ does not implement yet is a mypy error in _generated.py. Fix it in _impl/, or record a justified difference in scripts/codegen/python_rules.js — not by hand-editing _generated.py.
Tests
The tests are a port of the upstream tests in microsoft/playwright (tests/page/, tests/library/), test for test. Upstream gives each test an identifier, the first token of its title: it('CH-001 should check the box', ...). tests/upstream_registry.md is a copy of upstream's tests/registry.md, which lists every identifier with its file and title.
First rule: every upstream test is ported, or listed as not ported.
- Port each upstream test twice, to
tests/async/and totests/sync/, in the file that matches the upstream file:tests/page/page-check.spec.tsbecomestests/async/page/test_page_check.pyandtests/sync/page/test_page_check.py;tests/library/chromium/oopif.spec.tsbecomestests/async/library/chromium/test_oopif.py. - Name the test
test_<ID>_<title>: the identifier with_, then thedescribetitles and the title in snake_case.test('EX-181 toHaveCount pass')intest.describe('toHaveCount')becomestest_EX_181_to_have_count_to_have_count_pass. A test that a loop declares several times is one function with@pytest.mark.parametrize. - Port faithfully: the same steps, assertions and skip conditions. A test that fails because of a bug in the Python client stays, marked
@pytest.mark.xfail(reason="python: ...", strict=True). - A test that can not exist in Python (a JavaScript-only API, Node.js client internals, tools that run in the driver,
@playwright/testfeatures) goes intests/upstream_not_ported.txt, with the reason. python scripts/check_test_registry.pychecks all of this.--missing <code or file glob>prints the expected names of the tests still to port;--reportprints the coverage per subsystem.- Do not write a new test when an upstream test exists.
tests/async/legacy/andtests/sync/legacy/hold older ports named after old upstream titles; do not add tests there.
Second rule: keep the number of tests small. This applies to every test, and most of all to Python-only behavior that has no upstream test (the sync API, asyncio, the driver).
- Extend before you add: before you write a new test, look for an existing test that covers the same feature or code path. If one exists, add the new edge case or assertion to it. Create a new test only when no existing test is a good fit, or when the new scenario needs a different setup.
- New features: cover the mainstream scenario and the important edge cases only. Do not create matrices of tests for every scenario, option, or aspect.
- Regressions: generalize the provided regression cases into meaningful tests, and stop there. Do not add more tests around them.
Rolling Playwright to a new version
This is the recurring high-stakes task. Use the dedicated skill:
→ .claude/skills/playwright-roll/SKILL.md
It documents the full process: the upstream commit-range diff over docs/src/api/, how to classify each commit (PORT / MISMATCH / N/A), how to handle the langs: filter, the recurring failure modes, and the tests/sync-mirroring conventions.
Working on PRs
- Never post comments, replies, or reviews on GitHub PRs/issues under my account without my explicit approval. Draft the proposed text and wait for me to approve before sending.
House style
- Don't hand-edit generated files.
- Don't add
# type: ignoreor modify_generated.pyto silence pyright; fix the source of the mismatch. - New public methods on impl classes need a sync test mirror under
tests/sync/. - Keep
scripts/codegen/python_rules.jsminimal — every entry needs a one-line rationale comment above it. Prefer fixing the upstream docs. - Implementation methods take the Python (snake_case) names that the generated API passes. Their options have no default: an option that can be absent is
Optional[X]without= None. So mypy reports each caller that does not pass a new option. - Send messages through the generated channel methods, never by name:
await self._channel.click(selector=selector, ..., clickCount=click_count, timeout=self._timeout(timeout)). Pass every parameter, with the protocol (camelCase) name; an absent option isNone, and the connection drops it. Declare the channel type on each ChannelOwner subclass (_channel: "PageChannel"). Listen to events withself._channel.on<Event>(handler).
Commit Convention
Before committing, run mypy playwright and fix errors.
Semantic commit messages: label(scope): description
Labels: fix, feat, chore, docs, test, devops
git checkout -b fix-12345
# ... make changes ...
git add <changed-files>
git commit -m "$(cat <<'EOF'
fix(asyncio): do not deadlock in atexit handler
Fixes: https://github.com/microsoft/playwright-python/issues/12345
EOF
)"
git push origin fix-12345
gh pr create --repo microsoft/playwright-python --head username:fix-12345 \
--title "fix(asyncio): do not deadlock in atexit handler" \
--body "$(cat <<'EOF'
## Summary
- <describe the change very! briefly>
Fixes https://github.com/microsoft/playwright-python/issues/12345
EOF
)"Never add Co-Authored-By agents in commit message.
Never add "Generated with" in commit message.
Never add test plan to PR description. Keep PR description short — a few bullet points at most.
Branch naming for issue fixes: fix-<issue-number>
Never git push without an explicit instruction to push. Applies even when a PR is already open for the branch — additional commits are immediately visible to reviewers. Commit locally, report what was committed, and wait. Only push when the user's message contains "push", "upload", "create PR", "ship it", or equivalent.
Trending
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Who's talking about microsoft/playwright-python
- Playwright“Playwright at PYCon US with Andrew Knight”YouTube · May 12, 2023 · 6.1k views
- Bee Solutions“Monitoramento de Serviços com Downdetector Atualizado com Zabbix e Grafana - (BEE 2026)”YouTube · Jan 7, 2026 · 2.9k views
- QA Mania“Playwright python - how to run browsers concurrently”YouTube · Dec 11, 2020 · 2.5k views
- 開発ライブラリ紹介“取得したら中身が空っぽ?|playwrightでJSサイトも丸ごと取得 #shorts”YouTube · Sep 5, 2026 · 1.1k views
- coursegurukul“What is Playwright? | The Future of Web Testing | Playwright Tutorial for Beginners | Course Gurukul”YouTube · Apr 26, 2025 · 258 views
The biggest 5 of 72 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 72
Talked about on GitHub, Stack Overflow, YouTube, the web and Hacker News (72 times).
On GitHub · 50
- Feb 9, 2022[Feature] Directly set Proxy-Authorization in Chrome without configuring any other proxy settings — microsoft/playwright65 reactions · 12 comments
- Jan 12, 2021[Feature] Support for Raspberry PI — microsoft/playwright34 reactions · 8 comments
- Sep 13, 2020[Feature] Driver - allow to install only selected browsers — microsoft/playwright14 reactions · 3 comments
- Nov 10, 2023[BUG] Opening page with large number of IFrames crashes/hangs playwright — microsoft/playwright9 reactions · 7 comments
- Nov 9, 2023[BUG] Unable to access iframe in firefox (works with chromium and webkit) — microsoft/playwright9 reactions · 3 comments
45 more on GitHub
- Jan 30, 2026python3Packages.playwright: 1.57.0 -> 1.58.0 — NixOS/nixpkgs5 reactions · 1 comment
- Sep 17, 2023[Feature] Open Telemetry Tracing — microsoft/playwright5 reactions · 2 comments
- Jun 9, 2026Bump the uv-all group across 1 directory with 3 updates — Ven0m0/dot-termux3 reactions · 1 comment
- May 20, 2026Bump the pip-all group across 1 directory with 3 updates — Ven0m0/dot-termux3 reactions · 1 comment
- May 3, 2024[Feature]: Proper support for scrolling to the bottom of a page — microsoft/playwright3 reactions · 7 comments
- Dec 30, 2022Update playwright driver to 1.29.1 — YusukeIwaki/playwright-ruby-client3 reactions · 3 comments
- Jan 22, 2021[Feature](playwright-cli) Option to install system dependencies — microsoft/playwright3 reactions · 4 comments
- Jul 7, 2026Bump the uv-all group across 1 directory with 2 updates — Ven0m0/dot-termux2 reactions · 2 comments
- Jul 7, 2026Bump the pip-all group across 1 directory with 2 updates — Ven0m0/dot-termux2 reactions · 2 comments
- Jun 30, 2026Bump playwright from 1.60.0 to 1.61.0 in the uv-all group — Ven0m0/dot-termux2 reactions · 2 comments
- Jun 30, 2026Bump playwright from 1.60.0 to 1.61.0 in the pip-all group — Ven0m0/dot-termux2 reactions · 2 comments
- May 20, 2026chore(deps): update playwright requirement from >=1.40.0 to >=1.60.0 — EvezArt/evez-claw-extensions2 reactions · 2 comments
- May 12, 2026chore(deps): update playwright requirement from >=1.40.0 to >=1.59.0 — EvezArt/evez-claw2 reactions · 2 comments
- Mar 26, 2026new rule - suggest changing function parameter type to readonly alternative if parameter is not mutated inside the function — astral-sh/ruff2 reactions · 1 comment
- Jul 31, 2024Please update Playwright-python to 1.40 for Python 3.12 compatibility — daijro/hrequests2 reactions · 4 comments
- Aug 13, 2022Flaky test: CypressError: `cy.request()` timed out waiting `30000ms` for a response from your server — cypress-io/cypress2 reactions · 7 comments
- Feb 3, 2022Installation fails using PDM — pytorch/vision2 reactions · 3 comments
- Oct 25, 2021[Regression] Page.screenshot does not work inside Docker with BrowserServer — microsoft/playwright2 reactions · 6 comments
- Oct 16, 2020setting asyncclick to use asyncio.WindowsProactorEventLoopPolicy — python-trio/asyncclick2 reactions · 2 comments
- Oct 29, 2026build(deps-dev): bump playwright from 1.63.0 to 1.64.1 — paulkakell/timeboardapp1 reaction · 1 comment
- Oct 26, 2026chore(deps-pip): bump the pip-jade-sprint-minor-patch group in /mission-control/jade_temple/sprint with 2 updates — GBOGEB/pipeline-automation-hub1 reaction · 2 comments
- Oct 26, 2026chore(deps-dev): bump playwright from 1.64.0 to 1.64.1 — MoonLadderStudios/MoonMind1 reaction · 1 comment
- Oct 26, 2026deps(deps): bump the pip-minor-patch group with 5 updates — cyxc1124/cyxcbot1 reaction · 1 comment
- Oct 26, 2026[Docs]: python - release notes haven't been updated since 1.63 — microsoft/playwright1 reaction
- Oct 26, 2026Update playwright requirement from >=1.62.0 to >=1.64.1 — WhiteDevil-93/Hermes-pro1 reaction · 2 comments
- Oct 25, 2026chore(deps): bump the uv-minor-patch group across 1 directory with 6 updates — mzworthington/RoMini1 reaction · 1 comment
- Oct 23, 2026chore(deps): update playwright requirement from >=1.40 to >=1.64.0 — escoffier-labs/brigade1 reaction · 3 comments
- Oct 21, 2026Build(deps): update playwright requirement from >=1.63.0 to >=1.64.0 in /tests/e2e — leynos/axinite1 reaction · 3 comments
- Oct 20, 2026fix(deps-dev): bump playwright from 1.50.0 to 1.63.0 — openai/openai-agents-python1 reaction · 4 comments
- Oct 18, 2026deps(deps): bump the pip-minor-patch group across 1 directory with 7 updates — cyxc1124/cyxcbot1 reaction · 1 comment
- Oct 17, 2026build(deps-dev): bump playwright from 1.63.0 to 1.64.0 — paulkakell/timeboardapp1 reaction · 2 comments
- Oct 17, 2026deps: bump playwright from 1.63.0 to 1.64.0 — scope-impact/rdm1 reaction · 1 comment
- Oct 17, 2026chore(deps-dev): bump playwright from 1.63.0 to 1.64.0 — MoonLadderStudios/MoonMind1 reaction · 1 comment
- Oct 8, 2026build(deps): bump playwright from 1.57.0 to 1.63.0 — Kotodama-Project/Kotodama-project1 reaction · 3 comments
- Sep 23, 2026Build(deps): update playwright requirement from >=1.61.0 to >=1.63.0 in /tests/e2e — leynos/axinite1 reaction · 1 comment
- Sep 22, 2026Bump playwright from 1.62.0 to 1.63.0 — gvatsal60/resume-studio1 reaction · 2 comments
- Sep 21, 2026chore(deps): Bump the python-deps group across 1 directory with 3 updates — julianocosta89/sig-meeting-notes1 reaction · 1 comment
- Sep 21, 2026Bump playwright from 1.62.0 to 1.63.0 — MoonLadderStudios/MoonMind1 reaction
- Aug 18, 2026chore(deps): bump the python-deps group across 1 directory with 2 updates — jimc1682000/film-brain1 reaction · 2 comments
- Aug 10, 2026Build(deps): update playwright requirement from >=1.61.0 to >=1.62.0 in /tests/e2e — leynos/axinite1 reaction · 1 comment
- Aug 10, 2026Chore(deps-dev): bump playwright from 1.61.0 to 1.62.0 — MoonLadderStudios/MoonMind1 reaction
- Aug 4, 2026chore(deps): update playwright requirement from >=1.61.0 to >=1.62.0 in the python-deps group across 1 directory — jimc1682000/film-brain1 reaction · 5 comments
- Aug 4, 2026Bump playwright from 1.61.0 to 1.62.0 — gvatsal60/resume-studio1 reaction · 1 comment
- Jul 26, 2026deps: update playwright requirement from <2,>=1.45 to >=1.61.0,<2 — Jnapier2/image-downloader1 reaction · 2 comments
- Jul 16, 2026Build(deps): update playwright requirement from >=1.40 to >=1.61.0 in /tests/e2e — leynos/axinite1 reaction
On Stack Overflow · 11
- Aug 25, 2018python - webdriver and asyncio25 votes
- Apr 1, 2022How to use the Playwright library in a Jupyter notebook instead of using a regular .py script (on Windows)14 votes
- Oct 30, 2022Installing playwright in Docker image fails3 votes
- Jun 1, 2022Can I test Electron application using Playwright Python library?3 votes
- Jun 21, 2024How to save django db data in the middle of a playwright test?2 votes
6 more on Stack Overflow
- May 17, 2023Right mouse click and selecting the appropriate item using Playwright2 votes
- Feb 26, 2024PyInstaller with Playwright and Firefox0 votes
- Dec 27, 2022Playwright and PM2 Issue - hang while creating PlaywrightContextManager0 votes · 1 answer
- Nov 5, 2022Install playwright from a local directory0 votes
- Oct 16, 2024Encountering NotImplementedError in Asynchronous Code with Playwright: Understanding the Cause and Seeking Solutions-1 votes
- Feb 24, 2022Making sure my headless browser is in the right place in my Playwright + Python + Aws lambda setup-1 votes
On YouTube · 5
- May 12, 2023Playwright at PYCon US with Andrew Knight — Playwright6.1k views · 7 comments
- Jan 7, 2026Monitoramento de Serviços com Downdetector Atualizado com Zabbix e Grafana - (BEE 2026) — Bee Solutions2.9k views · 17 comments
- Dec 11, 2020Playwright python - how to run browsers concurrently — QA Mania2.5k views · 8 comments
- Sep 5, 2026取得したら中身が空っぽ?|playwrightでJSサイトも丸ごと取得 #shorts — 開発ライブラリ紹介1.1k views
- Apr 26, 2025What is Playwright? | The Future of Web Testing | Playwright Tutorial for Beginners | Course Gurukul — coursegurukulsays it tested it258 views
On the web · 4
- Mar 19, 2024Python Playwright doesn't work in my computer · Issue #2364 — google.com
- Aug 23, 2022Python Playwright docker issue #1529 — google.com
- Oct 17, 2021Microsoft has released a Playwright-Python — google.com
- May 12, 2021[FEATURE] Playwright on PyPy · Issue #687 — google.com
On Hacker News · 2
- Sep 30, 2020Python version of the Playwright testing and automation librarysays it tested it2 points
- Oct 5, 2020Playwright: Microsoft's end-to-end testing framework for Pythonsays it tested it1 point · 1 comment
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 repository2 other files it gives its agents.
- playwright-releaseSkill
- playwright-rollSkill
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
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.

