nixos: add playwright-cli

This commit is contained in:
2026-02-13 13:18:25 -08:00
committed by Kat Huang
parent 27c6b2af3c
commit c509071ff9
4 changed files with 81 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
---
name: playwright-cli
description: Automate browser interactions from the shell using Playwright via the `playwright-cli` command (open/goto/snapshot/click/type/screenshot, tabs/storage/network). Use when you need deterministic browser automation for web testing, form filling, screenshots/PDFs, or data extraction.
---
# Browser Automation With playwright-cli
This system provides `playwright-cli` via Nix (see `nixos/overlay.nix` and `nixos/code.nix`), so its available on `PATH` without any `npm -g` installs.
## Quick Start
```bash
# First run (downloads browser bits used by Playwright)
playwright-cli install-browser
# Open a new browser session (optionally with a URL)
playwright-cli open
playwright-cli open https://example.com/
# Navigate, inspect, and interact
playwright-cli goto https://playwright.dev
playwright-cli snapshot
playwright-cli click e15
playwright-cli type "search query"
playwright-cli press Enter
# Save artifacts
playwright-cli screenshot --filename=page.png
playwright-cli pdf --filename=page.pdf
# Close the browser
playwright-cli close
```
## Practical Workflow
1. `playwright-cli open` (or `open <url>`)
2. `playwright-cli snapshot`
3. Use element refs (`e1`, `e2`, ...) from the snapshot with `click`, `fill`, `hover`, `check`, etc.
4. Take `screenshot`/`pdf` as needed
5. `playwright-cli close`
## Tips
- Use `playwright-cli state-save auth.json` / `state-load auth.json` to persist login state across runs.
- Use named sessions with `-s=mysession` when you need multiple concurrent browsers.
- Set `PLAYWRIGHT_CLI_PACKAGE` to pin the npm package (default is `@playwright/cli@latest`).

View File

@@ -0,0 +1,5 @@
interface:
display_name: "Playwright CLI"
short_description: "Automate browser interactions"
default_prompt: "Use playwright-cli to automate browser actions (open/goto/snapshot/click/type/screenshot) and save useful artifacts (screenshots, PDFs, auth state)."

View File

@@ -18,6 +18,7 @@ makeEnable config "myModules.code" true {
github-mcp-server github-mcp-server
gitea-mcp-server gitea-mcp-server
playwright-mcp playwright-mcp
playwright-cli
# C # C
clang clang

View File

@@ -264,6 +264,34 @@ in
in in
final.python3.withPackages my-python-packages; final.python3.withPackages my-python-packages;
playwright-cli = final.buildNpmPackage rec {
pname = "playwright-cli";
version = "0.1.0";
src = final.fetchFromGitHub {
owner = "microsoft";
repo = "playwright-cli";
rev = "v${version}";
hash = "sha256-9LuLQ2klYz91rEkxNDwcx0lYgE6GPoTJkwgxI/4EHgg=";
};
# Hash of dependencies produced from package-lock.json (lockfileVersion = 3).
# To recompute:
# nix build nixpkgs#prefetch-npm-deps -o /tmp/prefetch-npm-deps
# /tmp/prefetch-npm-deps/bin/prefetch-npm-deps package-lock.json
npmDepsHash = "sha256-DvorQ40CCNQJNQdTPFyMBErFNicSWkNT/e6S8cfZlRA=";
# No build step; the published CLI is just a Node entrypoint + deps.
dontNpmBuild = true;
meta = with final.lib; {
description = "Playwright CLI (playwright-cli) for browser automation and Playwright MCP terminal commands";
homepage = "https://github.com/microsoft/playwright-cli";
license = licenses.asl20;
mainProgram = "playwright-cli";
};
};
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [ pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
( (
python-final: python-prev: { python-final: python-prev: {