mise-tool-management

$npx mdskill add TheBushidoCollective/han/mise-tool-management

Install, pin, and replace development tools using Mise.

  • Manages versioned tool installation across projects.
  • Integrates with Bash, Grep, Glob, and Read/Write capabilities.
  • Executes commands based on version specifications in files.
  • Outputs shell commands and configuration file edits.

SKILL.md

.github/skills/mise-tool-managementView on GitHub ↗
---
name: mise-tool-management
user-invocable: false
description: Use when managing development tool versions with Mise. Covers installing tools, version pinning, and replacing language-specific version managers.
allowed-tools:
  - Read
  - Write
  - Edit
  - Bash
  - Grep
  - Glob
---

# Mise - Tool Management

Managing development tool versions across projects with Mise as a unified version manager.

## Basic Tool Installation

### Installing Tools

```bash
# Install specific version
mise install node@20.10.0
mise install python@3.12.0
mise install rust@1.75.0

# Install latest version
mise install node@latest
mise install python@latest

# Install from .tool-versions or mise.toml
mise install
```

### Setting Tool Versions

```bash
# Set global version
mise use --global node@20

# Set project version
mise use node@20.10.0
mise use python@3.12 rust@1.75

# Use latest
mise use node@latest
```

## Tool Configuration in mise.toml

### Basic Tool Definitions

```toml
# mise.toml
[tools]
node = "20.10.0"
python = "3.12.0"
rust = "1.75.0"
terraform = "1.6.0"
```

### Version Prefixes

```toml
[tools]
# Latest patch version
node = "20.10"

# Latest minor version
node = "20"

# Latest version
node = "latest"

# Prefix notation
terraform = "1.6"  # Latest 1.6.x
```

### Multiple Versions

```toml
[tools]
# Use multiple versions
node = ["20.10.0", "18.19.0"]
python = ["3.12", "3.11", "3.10"]
```

```bash
# Switch between versions
mise shell node@18.19.0
```

## Tool-Specific Configuration

### Node.js Configuration

```toml
[tools]
node = { version = "20.10.0", postinstall = "corepack enable" }
```

### Python with Virtual Environments

```toml
[tools]
python = "3.12"

[env]
_.python.venv = { path = ".venv", create = true }
```

### Custom Tool Sources

```toml
[tools]
# From specific registry
"cargo:eza" = "latest"
"npm:typescript" = "5.3"

# From git repository
my-tool = "git:https://github.com/org/tool.git"
```

## Supported Languages & Tools

### Core Tools

```toml
[tools]
# Languages
bun = "1.0"
deno = "1.38"
elixir = "1.15"
erlang = "26.1"
go = "1.21"
java = "21"
node = "20.10"
python = "3.12"
ruby = "3.3"
rust = "1.75"
zig = "0.11"

# Infrastructure
terraform = "1.6"
kubectl = "1.28"
awscli = "2.13"
```

### Package Managers

```toml
[tools]
"npm:pnpm" = "8.10"
"npm:yarn" = "4.0"
"cargo:cargo-binstall" = "latest"
"go:github.com/golangci/golangci-lint/cmd/golangci-lint" = "latest"
```

## Tool Version Strategies

### Lock to Specific Versions

```toml
# Production: Pin exact versions
[tools]
node = "20.10.0"
terraform = "1.6.4"
```

### Use Ranges for Flexibility

```toml
# Development: Use minor version ranges
[tools]
node = "20"      # Any 20.x
python = "3.12"  # Any 3.12.x
```

### Latest for Experimentation

```toml
# Experimental projects
[tools]
rust = "latest"
bun = "latest"
```

## Managing Tool Aliases

### Creating Aliases

```bash
# Set alias for current directory
mise alias set node lts 20.10.0

# Set global alias
mise alias set --global python3 python@3.12
```

### Using Aliases in Configuration

```toml
[tools]
node = "lts"
python = "3.12"
```

## Tool Verification

### Check Installed Tools

```bash
# List installed tools
mise list

# Check current versions
mise current

# Verify tool installation
mise doctor
```

### Tool Information

```bash
# Show tool details
mise ls-remote node

# List available versions
mise ls-remote python

# Check latest version
mise latest node
```

## Migration from Other Version Managers

### From asdf

```bash
# Mise reads .tool-versions files
cat .tool-versions
# nodejs 20.10.0
# python 3.12.0

# Migrate to mise.toml
mise use node@20.10.0 python@3.12.0
```

### From nvm

```bash
# Read from .nvmrc
cat .nvmrc
# 20.10.0

mise use node@$(cat .nvmrc)
```

### From pyenv

```bash
# Read from .python-version
mise use python@$(cat .python-version)
```

## Best Practices

### Pin Production Dependencies

```toml
# Good: Explicit production versions
[tools]
node = "20.10.0"
terraform = "1.6.4"
postgres = "16.1"
```

### Document Required Tools

```toml
# mise.toml - All project dependencies in one place
[tools]
node = "20.10.0"
python = "3.12.0"
terraform = "1.6.4"
kubectl = "1.28.0"

[env]
PROJECT_NAME = "my-app"
```

### Use Tool-Specific Settings

```toml
[tools]
# Enable corepack for package managers
node = { version = "20.10.0", postinstall = "corepack enable" }

# Create Python virtual environment
python = { version = "3.12", venv = ".venv" }
```

### Verify Tool Installation

```bash
# In CI/CD pipelines
mise install --check
mise doctor

# Verify specific tools
mise current node
mise current python
```

## Common Patterns

### Monorepo Tool Management

```toml
# Root mise.toml - shared tools
[tools]
node = "20.10.0"
terraform = "1.6.4"

# packages/api/mise.toml - additional tools
[tools]
"npm:typescript" = "5.3"
"npm:prisma" = "5.7"

# packages/web/mise.toml
[tools]
"npm:next" = "14.0"
```

### Development vs Production

```toml
# mise.toml - production tools
[tools]
node = "20.10.0"
postgres = "16.1"

# mise.local.toml - development tools (gitignored)
[tools]
"npm:nodemon" = "latest"
"cargo:cargo-watch" = "latest"
```

### Tool Updates Strategy

```bash
# Check for updates
mise outdated

# Update to latest patch version
mise upgrade node

# Update all tools
mise upgrade

# Update with constraints
mise use node@20  # Updates to latest 20.x
```

## Anti-Patterns

### Don't Mix Version Managers

```bash
# Bad: Using multiple version managers
nvm use 20
mise use node@20  # Conflicts

# Good: Use only Mise
mise use node@20
```

### Don't Hardcode Tool Paths

```bash
# Bad: Hardcoded paths
/Users/me/.local/share/mise/installs/node/20.10.0/bin/node

# Good: Use mise shims or mise exec
mise exec -- node
mise x -- node
```

### Don't Skip Version Constraints

```toml
# Bad: No version specified
[tools]
node = "latest"  # Can break on updates

# Good: Specify constraints
[tools]
node = "20.10.0"  # Explicit
# OR
node = "20"  # Controlled range
```

### Don't Ignore Tool Dependencies

```toml
# Bad: Missing required tools
[tools]
terraform = "1.6"
# Missing: kubectl, helm for deployment

# Good: Include all dependencies
[tools]
terraform = "1.6.4"
kubectl = "1.28.0"
helm = "3.13.0"
```

## Advanced Patterns

### Conditional Tool Installation

```toml
[tools]
# Install based on platform
node = "20.10.0"
python = "3.12"

# Platform-specific tools
[tools."cargo:watchexec-cli"]
platforms = ["linux", "darwin"]
version = "latest"
```

### Tool Installation Hooks

```toml
[tools]
node = {
  version = "20.10.0",
  postinstall = '''
    corepack enable
    npm install -g npm@latest
  '''
}
```

### Backend Selection

```toml
# Use specific backend for tools
[tools]
# Use core backend (faster)
node = "core:20.10.0"

# Use asdf plugin
ruby = "asdf:3.3.0"
```

## Related Skills

- **task-configuration**: Defining tasks that use managed tools
- **environment-management**: Managing environment variables with tools

More from TheBushidoCollective/han

SkillDescription
absinthe-resolversUse when implementing GraphQL resolvers with Absinthe. Covers resolver patterns, dataloader integration, batching, and error handling.
absinthe-schemaUse when designing GraphQL schemas with Absinthe. Covers type definitions, interfaces, unions, enums, and schema organization patterns.
absinthe-subscriptionsUse when implementing real-time GraphQL subscriptions with Absinthe. Covers Phoenix channels, PubSub, and subscription patterns.
act-docker-setupUse when configuring Docker environments for act, selecting runner images, managing container resources, or troubleshooting Docker-related issues with local GitHub Actions testing.
act-local-testingUse when testing GitHub Actions workflows locally with act. Covers act CLI usage, Docker configuration, debugging workflows, and troubleshooting common issues when running workflows on your local machine.
act-workflow-syntaxUse when creating or modifying GitHub Actions workflow files. Provides guidance on workflow syntax, triggers, jobs, steps, and expressions for creating valid GitHub Actions workflows that can be tested locally with act.
ameba-configurationUse when configuring Ameba rules and settings for Crystal projects including .ameba.yml setup, rule management, severity levels, and code quality enforcement.
ameba-custom-rulesUse when creating custom Ameba rules for Crystal code analysis including rule development, AST traversal, issue reporting, and rule testing.
ameba-integrationUse when integrating Ameba into development workflows including CI/CD pipelines, pre-commit hooks, GitHub Actions, and automated code review processes.
analyze-performanceAnalyze performance metrics and identify slow transactions in Sentry