Detect language runtimes, virtual environments, and toolchains (Python, Node, Rust, Go). Used internally by /project-setup.
From project-setupnpx claudepluginhub anthropics/claude-plugins-community --plugin project-setupThis skill uses the workspace's default tool permissions.
Guides browser automation with Playwright, Puppeteer, Selenium for e2e testing and scraping. Teaches reliable selectors, auto-waits, isolation to fix flaky tests.
Provides checklists to review code for functionality, quality, security, performance, tests, and maintainability. Use for PRs, audits, team standards, and developer training.
Enforces A/B test setup with gates for hypothesis locking, metrics definition, sample size calculation, assumptions checks, and execution readiness before implementation.
Detect language runtimes and virtual environments in the project.
Check in order (stop at first confirmed venv):
.venv/, venv/, env/ — confirm by checking bin/python existspoetry.lock exists → poetry env info -p 2>/dev/nullPipfile exists → pipenv --venv 2>/dev/nullpdm.lock exists → pdm venv --path in-project 2>/dev/nulluv.lock exists → default .venv/[tool.poetry], [tool.pdm], [build-system] to identify package manager even without lock filesValidate the found venv:
<venv_path>/bin/python --version
Record: absolute venv path, Python version string, package manager name.
Settings mapping:
CRITICAL: NEVER set PATH in the env object. env values are NOT expanded — ${PATH} or $PATH would be passed as literal strings, completely replacing PATH and breaking all shell commands. Only set VIRTUAL_ENV in env. Use a SessionStart hook to prepend the venv bin to PATH.
{
"env": {
"VIRTUAL_ENV": "/absolute/path/to/.venv"
}
}
Additionally, add a SessionStart hook to activate the venv in the shell:
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "export PATH=\"/absolute/path/to/.venv/bin:$PATH\""
}
]
}
]
}
}
CLAUDE.md section:
## Environment
- Python <version> via <venv_dir>/ (managed by <package_manager>)
- Activate: `source <venv_dir>/bin/activate`
package.json existspnpm-lock.yaml → pnpmyarn.lock → yarnbun.lockb → bunpackage-lock.json or none → npm.nvmrc or .node-version for version pinningnode --version 2>/dev/null to get current versionRecord: package manager, node version, version constraint file.
CLAUDE.md section:
## Environment
- Node <version> (managed by <manager>)
- Install dependencies: `<manager> install`
Cargo.toml exists → read [package] for editionrust-toolchain.toml or rust-toolchain for toolchain specrustc --version 2>/dev/nullRecord: Rust version, toolchain, edition.
CLAUDE.md section:
## Environment
- Rust <version> (edition <edition>, toolchain <toolchain>)
- Build: `cargo build`
go.mod exists → extract module path and go version directivego version 2>/dev/nullRecord: Go version, module path.
CLAUDE.md section:
## Environment
- Go <version> (module <module_path>)
- Build: `go build ./...`