plugins/dev-tools/skills/working-with-mise/SKILL.md
Use when adding, configuring, or troubleshooting mise-managed tools - ensures proper CLI usage, detects existing config files, and diagnoses PATH/activation issues when commands aren't found
npx skillsauth add technicalpickles/pickled-claude-plugins working-with-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.
mise is a polyglot tool version manager. Use this skill when:
mise use to add tools - never manually edit config filesmise exec as a permanent workaroundTools where different projects need different versions:
# Good mise candidates - version sensitivity
mise use node@20 # Projects may need different Node versions
mise use [email protected] # IaC often pins specific versions
mise use [email protected] # Gemfiles often require specific Ruby
Stable CLIs with consistent interfaces across versions:
# Better as Homebrew - version doesn't matter
brew install jq gh ripgrep
Ask yourself:
Before adding tools, detect what config format the project uses:
# Check for existing mise config
ls -la mise.toml .mise.toml .mise.local.toml .tool-versions 2>/dev/null
Config file precedence (mise uses the first it finds):
mise.toml or .mise.toml - standard mise config.mise.local.toml - local overrides (usually gitignored).tool-versions - legacy asdf formatIf a config file exists, use that format. Don't create a new one.
mise use to add toolsAlways use the CLI - it validates the tool exists and works:
# Add to project config (mise.toml or existing format)
mise use node@20
# Add to global config (~/.config/mise/config.toml)
mise use -g [email protected]
# Dry run to see what would happen
mise use --dry-run [email protected]
Never manually edit config files - mise use ensures:
# Check mise sees the tool
mise ls
# Check the tool is on PATH
which node
node --version
# Compare with mise's view
mise which node
When a tool should be available but isn't found:
# 1. Check mise installation health
mise doctor
# 2. Check what tools mise knows about
mise ls # All installed tools
mise ls --current # Tools for current directory
# 3. Compare which vs mise which
which node # What shell finds
mise which node # What mise thinks it should be
# 4. Check if tool would work via mise exec
mise exec -- node --version # If this works, it's an activation issue
Symptom: mise exec -- node works, but node doesn't
Diagnose:
mise doctor # Look for activation warnings
Fix - add to shell rc file:
# For zsh (~/.zshrc)
eval "$(mise activate zsh)"
# For bash (~/.bashrc)
eval "$(mise activate bash)"
# For fish (~/.config/fish/config.fish)
mise activate fish | source
Then restart your shell or source the rc file.
Symptom: mise shows trust warning, tools not activated
Fix:
mise trust
Symptom: mise ls shows tool globally but not in mise ls --current
Diagnose:
# Check what config file applies
mise config
# Check if there's a local config overriding global
cat mise.toml .mise.toml .tool-versions 2>/dev/null
Fix: Add the tool to the project config:
mise use node@20 # Adds to project config
Symptom: Tools work in terminal but not in IDE/scripts
See references/dev-tools/shims-html.md for detailed explanation.
Quick fix for non-interactive contexts:
# In ~/.zprofile or ~/.bash_profile (non-interactive)
eval "$(mise activate zsh --shims)"
# In ~/.zshrc or ~/.bashrc (interactive)
eval "$(mise activate zsh)"
mise exec (legitimately)mise exec is appropriate for:
mise exec node@18 -- npm testmise exec is NOT a fix for:
After configuration changes, verify everything works:
# Full health check
mise doctor
# Verify specific tool
mise which node && node --version
# Verify PATH includes mise tools
echo $PATH | tr ':' '\n' | grep mise
mise use documentationmise use insteadmise doctor to verifytools
--- name: writing-for-scannability description: Use when structuring prose so readers can skim it - drafting or restructuring READMEs, docs, PR or issue bodies, design docs, RFCs, or any long-form text where a wall of prose hides the structure. Also use when explicitly asked to make something scannable or skimmable, convert prose to a list, surface a buried list, fix a wall of text, or decide whether bullets or prose fit. Strong signal: text with parallel sentence shapes, contrast markers ("that
development
Ignore actually-lsp nudges for an ecosystem in this project. Use when the user wants to silence, dismiss, or ignore the LSP setup nudges for a specific ecosystem (Rust, TypeScript, Ruby), or invokes `/actually-lsp-ignore` directly. Writes `dismissed=true` to `.claude/actually-lsp.json`. Persistent across sessions for this project only.
tools
Diagnose and fix LSP setup for the current project's detected ecosystems (Rust, TypeScript, Ruby). Use when the SessionStart hook nudged about a missing LSP plugin, when the env isn't ready (no `bundle install`, no `cargo build`, missing server binary), when LSP calls are failing, or when the user invokes `/actually-lsp-doctor` directly. Walks the per-ecosystem state machine, reports what's missing, then runs the fix.
tools
--- name: investigating-runs description: Use whenever the user mentions a GitHub Actions / GHA run, even casually — invoke this skill before reaching for raw `gh` commands, because the bundled `gha-snapshot` helper distills `gh run view --log-failed` (a firehose) into a readable block with per-job status, failed-step log tails, and annotations. Specific triggers (any one is enough): a `github.com/.../actions/runs/...` URL; the phrase "GitHub Actions" or "GHA"; the `gh run` CLI; a failing workfl