configure-plugin/skills/configure-mise/SKILL.md
mise runtime/tool version manager - mise.toml, backends (pipx/aqua/npm/cargo/go), tasks, env, lockfile. Use when setting up, pinning runtimes/CLI tools, or migrating from asdf/nvm/pyenv/brew/Make.
npx skillsauth add laurigates/claude-plugins configure-miseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Set up and audit mise as the unified manager for language runtimes, CLI tools, environment variables, and project tasks. mise replaces asdf/nvm/pyenv (runtimes), cargo install/brew install (CLI binaries), and Make/just (tasks) behind one mise.toml.
| Use this skill when... | Use another approach when... |
|------------------------|------------------------------|
| Setting up mise.toml to pin a project's runtimes and CLI tools | Installing one tool ad-hoc — run mise use <tool>@<ver> directly |
| Picking the right backend for a tool (core / pipx: / aqua: / npm: / cargo: / go:) | The project only needs Python/JS libraries — use /configure:package-management (uv/bun) |
| Migrating from .tool-versions/asdf, .nvmrc, .python-version, Homebrew, or a Makefile | Defining build/test recipes only, no version management — use /configure:justfile or /configure:makefile |
| Adding [tasks], [env], secret loading, or a mise.lock for reproducible installs | Running a specific runtime version once — mise exec <tool>@<ver> -- <cmd> (see global rule mise-stale-tool-copies / dependency-management) |
| Auditing an existing mise setup for pinning, lockfile, trust, and backend correctness | Configuring CI runtime install — that consumes the mise.toml this skill produces (jdx/mise-action) |
pwdfind . -maxdepth 2 \( -name 'mise.toml' -o -name '.mise.toml' -o -path './.config/mise.toml' -o -name 'mise.local.toml' \)find . -maxdepth 1 -name 'mise.lock'find . -maxdepth 2 \( -name '.tool-versions' -o -name '.nvmrc' -o -name '.python-version' -o -name '.ruby-version' -o -name '.go-version' \)find . -maxdepth 1 \( -name 'Makefile' -o -name 'justfile' -o -name 'Brewfile' \)Parse from command arguments:
--check-only: Audit and report; make no changes (CI/review mode).--fix: Apply the recommended config without prompting for each step.--global: Target the global config (~/.config/mise/config.toml) instead of a project mise.toml.--migrate <source>: Convert an existing setup into mise.toml. Sources: asdf (.tool-versions), nvm (.nvmrc), pyenv (.python-version), brew (Brewfile CLI tools), makefile (targets → [tasks]).mise installs every tool through a backend. Picking the right one mirrors the user's tool-install priority (dependency-management rule): mise first, with the most secure/fastest backend.
| Tool kind | Backend | Syntax | Why |
|-----------|---------|--------|-----|
| Language runtime | core | python = ["3.12","3.13"], node = "lts", go = "1.23", rust = "latest" | Native version switching, the reason mise exists |
| Python CLI tool | pipx: | "pipx:ruff" = "latest" | Routed through uvx (fast); set pipx.uvx = true |
| Standalone CLI binary | aqua: | "aqua:BurntSushi/ripgrep" = "latest" | Checksums + SLSA provenance + Cosign — the secure default |
| Node global | npm: | "npm:typescript-language-server" = "latest" | When no aqua entry exists |
| Rust tool (no aqua) | cargo: | "cargo:tokei" = "latest" | Builds from source; prefer aqua if available |
| Go tool (no aqua) | go: | "go:golang.org/x/tools/gopls" = "latest" | Installs via go install |
| GitHub release (no aqua) | github: | "github:starship/starship" = "latest" | Direct release-asset fetch |
Rule of thumb: runtime → core; Python CLI → pipx:; everything else → aqua: first, falling back to npm:/cargo:/go:/github: only when the aqua registry lacks the tool. Verify aqua availability at https://github.com/aquaproj/aqua-registry.
From Context, classify the repo:
.tool-versions, .nvmrc, .python-version) → migration candidate.mise.toml → audit mode (Step 5).mise.toml.Detect which runtimes the project already implies: pyproject.toml/.python-version → Python; package.json/.nvmrc → Node; go.mod → Go; Cargo.toml → Rust.
| Target | File | Committed? |
|--------|------|-----------|
| Project (default) | mise.toml at repo root | yes — pins the team to the same versions |
| Project, local overrides | mise.local.toml | no — add to .gitignore |
| Global (--global) | ~/.config/mise/config.toml | n/a (dotfiles) |
Prefer the modern mise.toml name over legacy .mise.toml. Use mise.local.toml for machine-specific or secret-bearing overrides and ensure it is gitignored.
[tools] blockPin runtimes the project needs, then add CLI tools by backend (table above). Pin as loosely as safe: python = "3.13" (allow patch upgrades) for libraries; exact pins (opentofu = "1.11.2") for tools where reproducibility matters. Detect latest stable versions with WebSearch/mise ls-remote <tool> before writing.
Minimal example:
[tools]
python = "3.13"
node = "lts"
"pipx:ruff" = "latest"
"pipx:pre-commit" = "latest"
"aqua:jqlang/jq" = "latest"
"aqua:cli/cli" = "latest" # gh
[env], [tasks], [settings] as needed[env] — project env vars and PATH; load secrets from a gitignored file with _.file = ".env.local" (never inline secrets). See REFERENCE.md.[tasks] — migrate Makefile/just recipes here so mise run <task> replaces make <target>. Supports depends, alias, multi-line run. See REFERENCE.md for the full grammar.[settings] — set pipx.uvx = true whenever any pipx: tool is present (works around jdx/mise#7477); experimental = true for newer backends; legacy_version_file = true to keep honoring .tool-versions/.nvmrc during migration.--check-only)Report a compliance table:
mise Configuration Report
=========================
Config file mise.toml [PRESENT | MISSING]
Runtimes pinned python, node [PINNED | UNPINNED]
CLI backends aqua / pipx [SECURE | cargo-from-source | mixed]
pipx.uvx setting true [SET | MISSING (pipx tools present)]
Lockfile mise.lock [COMMITTED | MISSING]
Local overrides mise.local.toml [GITIGNORED | TRACKED ⚠ | n/a]
Trust trusted [TRUSTED | UNTRUSTED]
Legacy files remaining .tool-versions [MIGRATED | STILL PRESENT]
Overall: [N issues]
Checks: every runtime pinned; CLI tools prefer aqua: over cargo:/source builds; pipx.uvx = true present if any pipx: tool; mise.lock committed; mise.local.toml gitignored if present; config trusted (mise trust). If --check-only, stop here.
--fix or on confirmation)mise trust the config (required before mise will use a new/edited file).mise install to materialize tools.mise lock to generate/refresh mise.lock, then track it (git add mise.lock).mise.local.toml exists, ensure .gitignore covers it.mise doctor to verify the setup is healthy.--migrate <source>)| Source | Action |
|--------|--------|
| asdf | Read .tool-versions, map each line to a [tools] entry, keep legacy_version_file = true, then remove .tool-versions once verified. asdf plugin names usually match mise core/aqua names. |
| nvm | .nvmrc → node = "<ver>". |
| pyenv | .python-version → python = "<ver>" (a list if multiple). |
| brew | Move CLI tools (not casks/services/build-deps) from Brewfile to aqua:/core backends; leave GUI apps, fonts, daemons, and compilers in Homebrew. |
| makefile | Convert each target to a [tasks.<name>] with run; map prerequisites to depends. See REFERENCE.md task grammar. |
Always verify with mise install && mise doctor before deleting the source file. See REFERENCE.md for per-source mapping tables and worked examples.
A committed mise.toml + mise.lock is consumed in CI by jdx/mise-action (mise install then mise run <task>), giving local↔CI parity (the local-ci-parity rule). Point the user to /configure:ci-workflows rather than writing the workflow here.
| Context | Command |
|---------|---------|
| Audit only | /configure:mise --check-only |
| Auto-configure | /configure:mise --fix |
| List installed tools (JSON) | mise ls --json |
| Show active versions | mise current |
| Available versions of a tool | mise ls-remote <tool> |
| Show outdated | mise outdated |
| Diagnose | mise doctor |
| Generate lockfile | mise lock |
| Flag | Description |
|------|-------------|
| --check-only | Report status without modifying files |
| --fix | Apply the recommended config without per-step prompts |
| --global | Target ~/.config/mise/config.toml instead of project mise.toml |
| --migrate <source> | Convert asdf/nvm/pyenv/brew/makefile into mise.toml |
# Audit an existing setup
/configure:mise --check-only
# Set up mise.toml for the current project
/configure:mise
# Auto-configure, no prompts
/configure:mise --fix
# Migrate an asdf project
/configure:mise --migrate asdf
# Convert Makefile targets into mise tasks
/configure:mise --migrate makefile
curl https://mise.run | sh) or note it is itself a Homebrew bootstrap tool; do not block the audit.mise trust after writing.pipx: tool fails to resolve: ensure uv is a mise-managed tool and pipx.uvx = true is set (jdx/mise#7477).org/repo name must match an aqua-registry entry; fall back to github:/cargo:/go: or core.~/.default-npm-packages re-seeding — see the global mise-stale-tool-copies rule.libatomic.so.1; gate node to platforms that have it (chezmoi-style os guard) or pin an older line./configure:package-management — uv/bun for Python/JS libraries (mise installs the runtimes; uv/bun manage deps)/configure:justfile, /configure:makefile — task runners mise's [tasks] can replace/configure:ci-workflows — CI that consumes mise.toml via jdx/mise-actiondependency-management (tool-install priority, mise exec vs mise use), mise-stale-tool-copies (per-version cleanup)[tasks]/[env]/[settings] grammar, backend cheat-sheet, migration mapping tablesdevelopment
Debug HTTP APIs: trace requests, inspect headers. Use when a request fails: check status first.
documentation
Render architecture diagrams from text sources. Use when documenting system topology.
tools
Inspect JSON payloads and extract nested fields. Use when parsing API responses.
tools
--- name: no-description allowed-tools: Read --- # No Description This skill has no description and must be dropped with a warning.