provision-environmentlisted
Install: claude install-skill franzos/claude-plugins
# Provisioning a toolchain or runtime
Before you run a build, test, lint, or format command, make sure the tool is actually available, and get there without changing the user's machine. Work through these steps in order and stop at the first that succeeds.
## 1. Follow declared presets
If the user has declared environment facts (typically an `## Environment` block in their `~/.claude/CLAUDE.md`, which you receive automatically), follow them: the container runtime to use, the package manager, how toolchains are provided, whether to format in a container, and so on. These win over anything you would infer.
## 2. Detect what is already there
Probe, do not assume. Check without side effects:
- **Binaries:** `command -v <tool>` (never run a tool just to see if it errors).
- **Container runtime:** a present binary is not enough, confirm the daemon: `docker info >/dev/null 2>&1`, else `podman info >/dev/null 2>&1`. `podman` is a drop-in for `docker`.
- **Language package manager:** resolve from the lockfile, not from what is installed (`pnpm-lock.yaml` -> pnpm, `package-lock.json` -> npm, `yarn.lock` -> yarn, `bun.lockb` -> bun).
- **Declared project environment:** prefer whatever the project ships: `manifest.scm`, `flake.nix`, a devcontainer, `.tool-versions`/`.mise.toml`, `.nvmrc`, `rust-toolchain.toml`.
- **OS:** `uname -s` (Linux/Darwin). Assume a POSIX shell; if it is something else, say so and ask.
If the tool the task needs is already on `PATH`, use it and move on.
##