I build test automation, developer tooling, and AI agent skills β and I like fixing the tools everyone else relies on. You'll find my merged PRs in Playwright, Selenium, WebdriverIO, Vitest, axe-core, OpenAI's Codex tooling and other major projects, plus my own packages on npm and skills for AI coding agents. Lately I've been building tools that make flaky and slow test suites debuggable β leak bisection, semantic test selection, flaky-test ranking.
Merged pull requests in some of the biggest testing & tooling projects:
Currently in review: base-driver: return 500 for timeout errors and dropping Selenium Grid 3 nodeconfig support in appium/appium.
Skills and tools I've built for AI coding agents (Claude, MCP-compatible assistants):
| Project | What it does |
|---|---|
| flaky-test-scorer-ai-skill | AI agent skill that scores and ranks flaky tests from CI pass/fail history, using version-aware entropy and flip-rate models (inspired by Apple's ICSE-SEIP 2020 flaky-test ranking paper) |
| worked-example-teaching | Claude skill that teaches one technical concept end-to-end by grounding the explanation in your actual artifact (command, file, error, or config) and walking through a single complete worked example |
| ai-reachability-snapshot | Augments Playwright accessibility snapshots with reachability metadata so AI/MCP agents know which elements are actually interactable (reachableSnapshot()) β filters off-screen, covered, and hidden nodes |
| mcp-accessibility-scanner | MCP server that lets AI assistants run WCAG accessibility audits on any page with Playwright + axe-core |
| agent-maintenance-skills | Six reusable agent skills for maintenance work: doc auditing, skill grading, upstream monitoring, prior-art search, sharded security review, and verified dependency updates |
| skills_setup | Versioned export of my installed agent skills, split by tool (Claude & Codex) |
Plus a merged Appium troubleshooting skill in appium/skills.
| Package | Downloads | About |
|---|---|---|
| mcp-accessibility-scanner | MCP server for automated accessibility scans with Playwright + axe-core | |
| appium-session-recorder | Interactive Appium session recorder with a modern UI | |
| playwright-leak-finder | Bisects a Playwright suite to find the test that leaks state into a later failure | |
| jm-playwright-args | Pass custom CLI arguments into Playwright config and tests | |
| jm-wdio-failed-rerun-runner | WebdriverIO runner that reruns only the tests that failed in the initial run | |
| jm-wdio-mocha-split-runner | Experimental intra-spec parallel launcher for WebdriverIO | |
| i18n-string-check | Fast CI checker for hardcoded i18n strings (written in Go) | |
| npx-vet | Inspect an npm package's trust evidence before npm exec/npx runs it |
|
| @justasmonkev/pkg-rust | Rust port of pkg β bundle a Node.js project into a single executable |
|
| jm-playwright-chrome-ui | Chrome extension UI helpers for Playwright |
- mcp-accessibility-scanner β β MCP server that lets AI assistants run WCAG accessibility audits on any webpage using Playwright and axe-core. My most popular package on npm.
- playwright-leak-finder (npm) π β Your test passes alone but fails in the suite. This bisects the tests that ran before it (Γ la
git bisect) until only the state-leaking culprit is left. - semantic-test-matcher β
rbtCLI that ranks which test files are worth running for a changed source file, blending semantic and structural signals via local GGUF embeddings β no cloud service, no daemon. - npx-vet (npm) β Vets an npm package's trust signals (provenance, signatures, maintainer & version history, download stats) before
npm exec/npxruns it, and blocks high-risk packages unless explicitly overridden. - @justasmonkev/pkg-rust (npm) β A Rust port of
pkgthat compiles a Node.js project into a single self-contained executable, shipped with prebuilt macOS x64/arm64 native binaries. - appium-session-recorder β Record and replay Appium mobile testing sessions interactively.
- i18n-string-check β Go-powered CI tool that catches hardcoded strings in TypeScript/JavaScript codebases.




