{
  "markdown": "# mise Plugin for Claude Code\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Installation](#installation)\n- [Use Cases](#use-cases)\n  - [Task Definition with Arguments](#1-task-definition-with-arguments)\n  - [File-Based Tasks for Migrations](#2-file-based-tasks-for-migrations)\n  - [Build Pipeline with Caching](#3-build-pipeline-with-caching)\n  - [Dev Tool Setup](#4-dev-tool-setup)\n  - [Environment Configuration](#5-environment-configuration)\n  - [Hooks and Watchers](#6-hooks-and-watchers)\n  - [New Developer Machine Setup](#7-new-developer-machine-setup)\n  - [Sandboxing Untrusted Tasks](#8-sandboxing-untrusted-tasks)\n  - [Task Output Caching](#9-task-output-caching)\n  - [Monorepo Affected-Task Selection](#10-monorepo-affected-task-selection)\n- [Advanced Examples](#advanced-examples)\n  - [Multi-Environment Terraform Deployment](#1-multi-environment-terraform-deployment-with-dynamic-completions)\n  - [Dockerized Microservice Pipeline](#2-dockerized-microservice-build-pipeline-with-caching)\n  - [Release Automation](#3-full-release-automation-with-changelog-generation)\n  - [Database Management Suite](#4-database-management-suite-with-migration-tracking)\n  - [Kubernetes Deployment Orchestration](#5-kubernetes-deployment-orchestration-with-namespace-management)\n- [What's Covered](#whats-covered)\n- [Requirements](#requirements)\n- [How It Works](#how-it-works)\n- [Updating the Skill](#updating-the-skill)\n- [License](#license)\n\n---\n\n## Overview\n\nA Claude Code plugin that teaches Claude how to work with [mise](https://mise.jdx.dev/) — the all-in-one developer environment tool. This covers the complete mise ecosystem: task definition, dev tool management, environment configuration, hooks, and the full usage spec for argument handling.\n\nWhen installed, Claude will:\n- Use the `usage` field for all task arguments (never shell-native `$1`/`$@` patterns)\n- Generate correct TOML-based and file-based tasks with proper configuration\n- Configure dev tools across 19 backends (aqua, github, npm, cargo, pipx, pkgx, etc.)\n- Set up environment variables, configuration environments, dotenv loading, and secrets\n- Create hooks and file watchers\n- Cache task outputs and replay logs instead of rebuilding (local and remote)\n- Wire up monorepos — workspace project graphs and `mise run --affected` in CI\n- Sandbox risky tasks and read untrusted configs safely (`MISE_SAFE=1`)\n- Provision whole machines with `mise bootstrap`, locally or over SSH (system packages, users, files, services, firewall, Docker Compose, git repos, dotfiles, macOS defaults)\n- Follow mise best practices throughout — including avoiding the usage-spec attributes that are feature-gated out of mise and fail at runtime\n\nThis plugin is a pure skill — no commands, hooks, or MCP servers. It activates automatically whenever you work with mise.\n\n## Features\n\n### Tasks\n- **Strict `usage` field enforcement** — all arguments use mise's cross-platform usage spec\n- **TOML and file-based tasks** — inline tasks and executable scripts with `#MISE`/`#USAGE` headers\n- **Complete usage spec v6** — positional args, flags, choices, custom completions, variadic args, defaults, env binding, plus `group`/`flagset`/`output` nodes and relationship attributes (`required_if`, `conflicts`, `requires`, `exclusive`)\n- **Task dependencies** — `depends`, `depends_post`, `wait_for` with parallel execution and `optional` globs\n- **Freshness** — `sources`/`outputs` with `!` exclusions and brace globs, including `auto` mode\n- **Output caching** — `cache = { enabled = true }` restores artifacts and replays logs; `outputs = []` result-only caching; local and remote stores; experimental Rust compiler action cache (`rust_cache`)\n- **Task templates** — `[task_templates]` + `extends` with documented override/deep-merge rules\n- **Per-task output control** — `output` style field, `timeout`, structured `run`/`depends` with args/env\n\n### Dev Tools\n- **19 backends** — core, aqua, github, gitlab, forgejo, http, s3, pipx, npm, go, cargo, gem, dotnet, conda, spm, pkgx, vfox, asdf, ubi (deprecated)\n- **Per-tool options** — version, OS restriction, postinstall commands, install env, `additional_asset_patterns`, table-form `rename_exe`\n- **Lockfiles** — `mise.lock` (`lockfile_version = 1`), config-root-scoped `[tool_config] locked`, `mise lock --bump`/`--upgrade`, opt-in `minimum_release_age`\n- **Shims and aliases** — shell integration, tool aliasing, version aliasing\n\n### Environments\n- **Environment variables** — basic, required, redacted (and `redact = false` opt-outs), lazy evaluation\n- **Special directives** — `_.path`, `_.file` (with `expand`), `_.source`, `_.python.venv`\n- **Configuration environments** — `MISE_ENV`, `.miserc.toml`, platform auto-envs\n- **Templates** — Tera v2 templating with functions, filters, tests, and a v1 → v2 migration table\n\n### Configuration\n- **Hooks** — cd, enter, leave, preinstall, postinstall triggers\n- **File watchers** — watch patterns with automatic re-execution\n- **Settings** — all 287 configuration options with types, defaults, and env var overrides\n- **Hierarchical config** — file precedence, merge behavior, configuration environments\n- **Monorepos** — workspace project graphs (Cargo/uv/Go/Node), `[monorepo.task_defaults]`, `^task` upstream deps, `mise run --affected`\n- **Deprecation calendar** — every dated removal and default flip in one table\n\n### Security\n- **Sandboxing** — `[settings.sandbox]` plus per-task `deny_*`/`allow_*` fields and matching CLI flags\n- **Safe mode** — `MISE_SAFE=1` turns mise into an inert config reader for untrusted repos and fork PRs\n- **Trust** — auto-trust rules, safe-config auto-load, git-worktree trust inheritance\n- **Supply chain** — cosign/SLSA/attestation/minisign verification, `minimum_release_age`\n\n### Machine Setup\n- **`mise bootstrap`** — declarative end-to-end machine/developer setup across 17 ordered steps: Linux users/groups, vfox plugins, system packages (apt/dnf/pacman/apk/brew/brew-cask/flatpak/flatpak-user/mas), privileged files, system services, firewall rules, Docker Compose projects, git repos, shell activation, macOS defaults, launchd/systemd services and timers, login shell, tools, and a `bootstrap` task\n- **Plan/apply workflow** — `mise bootstrap plan` with `--json` and `--detailed-exitcode`, plus per-resource `apply`/`status` subcommands that converge only on real drift\n- **Remote provisioning** — `mise bootstrap remote` applies the same project over SSH to a `[bootstrap.remote.hosts]` inventory or ad-hoc targets, detecting each host's OS/arch/libc and fetching a minisign-verified binary\n- **Declarative dotfiles** — `mise bootstrap dotfiles` with symlink/symlink-each/copy/template modes, inline `content`, glob wildcards, `exclude` patterns, block/line edits, and `unapply`\n- **OCI images** — `mise oci build/push/run` with a built-in registry client and `[[oci.copy]]` layers\n\n## Installation\n\nAdd the marketplace and install the plugin (run these inside Claude Code):\n\n```\n/plugin marketplace add brentmitchell25/mise-plugin\n/plugin install mise@brentmitchell25\n```\n\nOr from the CLI:\n\n```bash\nclaude plugin install mise@brentmitchell25\n```\n\n## Use Cases\n\n### 1. Task definition with arguments\n\nAsk Claude: *\"Create a mise task that deploys to dev/staging/prod with a force flag\"*\n\n```toml\n[tasks.deploy]\ndescription = \"Deploy application to environment\"\ndepends = [\"build\", \"test\"]\nusage = '''\narg \"<env>\" choices \"dev\" \"staging\" \"prod\" help=\"Target environment\"\nflag \"-f --force\" help=\"Skip confirmation\"\n'''\nconfirm = \"Deploy to {{usage.env}}?\"\nrun = './scripts/deploy.sh ${usage_env?} ${usage_force:+--force}'\n```\n\n### 2. File-based tasks for migrations\n\nAsk Claude: *\"Set up file-based mise tasks for database migrations\"*\n\n```bash\n#!/usr/bin/env bash\n#MISE description=\"Run database migrations\"\n#MISE depends=[\"db:check\"]\n#USAGE arg \"<direction>\" choices \"up\" \"down\" help=\"Migration direction\"\n#USAGE flag \"-n --count <n>\" default=\"1\" help=\"Number of migrations\"\n#USAGE flag \"--dry-run\" help=\"Preview SQL only\"\n\nset -euo pipefail\ndirection=\"${usage_direction?}\"\ncount=\"${usage_count:-1}\"\n\nif [ -n \"${usage_dry_run:-}\" ]; then\n  echo \"Would run $count migration(s) $direction\"\n  exit 0\nfi\n\nmigrate \"$direction\" -n \"$count\"\n```\n\n### 3. Build pipeline with caching\n\nAsk Claude: *\"Configure a build pipeline with lint, test, build using caching\"*\n\n```toml\n[tasks.lint]\ndescription = \"Run linter\"\nsources = [\"src/**/*.ts\", \".eslintrc.*\"]\nrun = \"eslint src/\"\n\n[tasks.test]\ndescription = \"Run tests\"\ndepends = [\"lint\"]\nsources = [\"src/**/*.ts\", \"tests/**/*.ts\"]\nrun = \"vitest run\"\n\n[tasks.build]\ndescription = \"Build for production\"\ndepends = [\"test\"]\nsources = [\"src/**/*.ts\", \"tsconfig.json\"]\noutputs = [\"dist/**/*\"]\nrun = \"tsc --build\"\n```\n\n### 4. Dev tool setup\n\nAsk Claude: *\"Set up mise.toml with node, python, and some CLI tools\"*\n\n```toml\n[tools]\nnode = \"22\"\npython = { version = \"3.12\", postinstall = \"pip install -r requirements.txt\" }\n\"aqua:BurntSushi/ripgrep\" = \"latest\"\n\"npm:prettier\" = \"latest\"\n\"pipx:psf/black\" = \"latest\"\n```\n\n### 5. Environment configuration\n\nAsk Claude: *\"Configure mise environments with profiles for dev and staging\"*\n\n```toml\n# mise.toml (base)\n[env]\nAPP_NAME = \"myapp\"\nDATABASE_URL = { required = \"Set postgres connection string\" }\nAPI_KEY = { value = \"{{env.API_KEY}}\", redact = true }\n_.path = [\"./node_modules/.bin\", \"{{config_root}}/scripts\"]\n_.file = [\".env\", \".env.local\"]\n```\n\n```toml\n# mise.staging.toml (loaded when MISE_ENV=staging)\n[env]\nDATABASE_URL = \"postgres://staging-host:5432/myapp\"\nLOG_LEVEL = \"info\"\n```\n\n### 6. Hooks and watchers\n\nAsk Claude: *\"Set up mise hooks for project enter and file watchers for auto-formatting\"*\n\n```toml\n[hooks]\nenter = \"echo 'Welcome to the project — running setup...'\"\npostinstall = \"echo 'Tools installed successfully'\"\n\n[[watch_files]]\npatterns = [\"src/**/*.rs\"]\nrun = \"cargo fmt\"\n```\n\n### 7. New developer machine setup\n\nAsk Claude: *\"Set up mise bootstrap so a new developer can provision everything with one command\"*\n\n```toml\n[bootstrap.packages]\n\"apt:build-essential\" = \"latest\"\n\"brew-cask:visual-studio-code\" = \"latest\"\n\n[bootstrap.repos]\n\"~/src/dotfiles\" = { url = \"git@github.com:myorg/dotfiles.git\", ref = \"main\" }\n\n[bootstrap.mise_shell_activate]\nzprofile = \"shims\"\nzshrc = \"activate\"\n\n[dotfiles]\n\"~/.gitconfig\" = \"dotfiles/gitconfig\"\n\"~/.zshrc/activate\" = { block = 'eval \"$(mise activate zsh)\"' }\n\n[tools]\nnode = \"lts\"\npython = \"3.12\"\n\n[tasks.bootstrap]\nrun = \"gh auth status || gh auth login\"\n```\n\nThen run `mise bootstrap` (add `--dry-run` to preview, `--yes` to skip prompts, `--only`/`--skip` to run a subset). Stable since mise 2026.7.4 — no longer needs `MISE_EXPERIMENTAL`.\n\n### 8. Sandboxing untrusted tasks\n\nAsk Claude: *\"Lock down this dependency-install task so it can only reach the npm registry\"*\n\n```toml\n[tasks.fetch-deps]\ndescription = \"Install dependencies with no ambient access\"\ndeny_all = true\nallow_net = [\"registry.npmjs.org\"]\nallow_read = [\"{{config_root}}\"]\nallow_write = [\"{{config_root}}/node_modules\"]\nrun = \"npm ci\"\n```\n\nOr set a deny-by-default policy for the whole project and open access per task:\n\n```toml\n[settings.sandbox]\ndeny_net = true\ndeny_write = true\n```\n\nFor configs you don't control (fork PRs, third-party repos), `MISE_SAFE=1` makes mise refuse to run hooks, tasks, `_.source`, and template `exec()` entirely — so it can read tool versions without executing anything.\n\n### 9. Task output caching\n\nAsk Claude: *\"Make my build and lint tasks reuse cached results instead of re-running when nothing changed\"*\n\n```toml\n[settings]\nexperimental = true\n\n[task_config]\nglobal_inputs = [\"mise.toml\", \"@group:lockfiles\"]\n\n[task_config.input_groups]\nlockfiles = [\"package-lock.json\", \"pnpm-lock.yaml\"]\n\n[tasks.build]\nrun = \"tsc --build\"\nsources = [\"src/**/*.ts\", \"!src/**/*.test.ts\", \"tsconfig.json\"]\noutputs = [\"dist/**\"]\ncache = { enabled = true, command_inputs = [\"tsc --version\"] }\n\n[tasks.lint]\nrun = \"eslint src/\"\nsources = [\"src/**/*.ts\", \".eslintrc.*\"]\noutputs = []                      # result-only: caches success + replayable logs, no archive\ncache = { enabled = true, env = [\"CI\"] }\npass_through_env = [\"GITHUB_TOKEN\"]   # available to the command, not part of the cache key\n```\n\nUnlike `sources`/`outputs` freshness — which only *skips* a task — the cache restores declared outputs and replays stdout/stderr from a content-addressed archive. Inspect and control it:\n\n```bash\nmise run --task-cache-explain build   # what went into the key (never prints secret-derived hashes)\nmise run --task-cache off build       # read-write | read-only | write-only | off | local-only\nmise cache task build --json          # stored size, restorable bytes, time saved\nmise cache clear --task build         # leaves working-tree outputs alone\n```\n\n### 10. Monorepo affected-task selection\n\nAsk Claude: *\"Only run tests for packages my branch actually touched\"*\n\n```toml\n# Root mise.toml\nmonorepo_root = true\n\n[settings]\nexperimental = true\ntask.auto_infer = [\"node\"]        # package.json scripts become tasks, no per-package mise.toml\n\n[monorepo]\nconfig_roots = [\"packages/*\", \"services/*\"]\n\n[monorepo.task_defaults.build]\nsources = [\"src/**\", \"package.json\"]\noutputs = [\"dist/**\"]\ncache = { enabled = true }\ndepends = [\"^build\"]              # build every upstream package first, transitively\n\n[monorepo.task_defaults.test]\nenv = { NODE_ENV = \"test\" }\n```\n\n```bash\nmise run --affected test                              # only projects touched by the diff\nmise run --affected --affected-base origin/main test  # plus their reverse dependencies\nmise run --affected --affected-explain --dry-run test # why each task was selected\nmise tasks graph --explain                            # inferred projects, edges, and provenance\n```\n\nmise infers the project graph from Cargo, uv, Go, and Node workspaces **without the toolchain installed**, and auto-detects base/head revisions on GitHub Actions and GitLab.\n\n## Advanced Examples\n\nThese examples demonstrate what Claude generates with the plugin installed — showcasing dynamic completions, safety confirmations, dependency chains, caching, file-based tasks, and real-world tooling integration.\n\n### 1. Multi-environment Terraform deployment with dynamic completions\n\n*\"Set up mise tasks for deploying infrastructure with Terraform. I have services in `infrastructure/<service>/application/` and environment tfvars in `infrastructure/<service>/application/env/`. I need plan, apply, and destroy tasks with dynamic service/environment tab completion.\"*\n\n```toml\n[tasks.\"infra:plan\"]\ndescription = \"Terraform plan for a service environment\"\nusage = '''\narg \"<service>\" help=\"Service to deploy\"\ncomplete \"service\" run=\"ls -d infrastructure/*/application 2>/dev/null | sed 's|infrastructure/||;s|/application||'\"\narg \"<environment>\" help=\"Target environment\"\ncomplete \"environment\" run=\"ls infrastructure/${usage_service}/application/env/ 2>/dev/null | sed 's/.tfvars//'\"\nflag \"--destroy\" help=\"Plan a destroy operation\"\nflag \"-l --lock\" default=\"true\" negate=\"--no-lock\" help=\"Lock state during plan\"\n'''\nenv = { TF_IN_AUTOMATION = \"1\" }\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\nsvc_dir=\"infrastructure/${usage_service?}/application\"\ncd \"$svc_dir\"\nterraform init -backend-config=\"env/${usage_environment?}.backend.hcl\" -reconfigure\nterraform plan \\\n  -var-file=\"env/${usage_environment?}.tfvars\" \\\n  ${usage_destroy:+-destroy} \\\n  ${usage_lock:+-lock=true} \\\n  -out=\"${usage_environment}.tfplan\"\n'''\n\n[tasks.\"infra:apply\"]\ndescription = \"Apply a Terraform plan\"\nusage = '''\narg \"<service>\" help=\"Service to deploy\"\ncomplete \"service\" run=\"ls -d infrastructure/*/application 2>/dev/null | sed 's|infrastructure/||;s|/application||'\"\narg \"<environment>\" help=\"Target environment\"\ncomplete \"environment\" run=\"ls infrastructure/${usage_service}/application/env/ 2>/dev/null | sed 's/.tfvars//'\"\n'''\nconfirm = \"Apply Terraform plan for {{usage.service}} in {{usage.environment}}?\"\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\ncd \"infrastructure/${usage_service?}/application\"\nterraform apply \"${usage_environment?}.tfplan\"\n'''\n\n[tasks.\"infra:destroy\"]\ndescription = \"Destroy infrastructure for a service environment\"\ndepends = [\"infra:plan {{usage.service}} {{usage.environment}} --destroy\"]\nusage = '''\narg \"<service>\" help=\"Service to destroy\"\ncomplete \"service\" run=\"ls -d infrastructure/*/application 2>/dev/null | sed 's|infrastructure/||;s|/application||'\"\narg \"<environment>\" help=\"Target environment\"\ncomplete \"environment\" run=\"ls infrastructure/${usage_service}/application/env/ 2>/dev/null | sed 's/.tfvars//'\"\n'''\nconfirm = \"DESTROY all infrastructure for {{usage.service}} in {{usage.environment}}? This cannot be undone.\"\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\ncd \"infrastructure/${usage_service?}/application\"\nterraform apply \"${usage_environment?}.tfplan\"\n'''\n```\n\n### 2. Dockerized microservice build pipeline with caching\n\n*\"I have a monorepo with services in `services/`. Each has a Dockerfile. Set up build, test, and publish tasks with image tagging, caching, and a full CI pipeline task that runs everything.\"*\n\n```toml\n[vars]\nregistry = \"ghcr.io/myorg\"\ngit_sha = \"{{exec(command='git rev-parse --short HEAD')}}\"\n\n[tasks.\"docker:build\"]\ndescription = \"Build a service Docker image\"\nusage = '''\narg \"<service>\" help=\"Service to build\"\ncomplete \"service\" run=\"ls services/\"\nflag \"--no-cache\" help=\"Build without Docker cache\"\nflag \"-t --tag <tag>\" default=\"latest\" help=\"Image tag\"\n'''\nsources = [\"services/{{usage.service}}/**/*\"]\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\nimage=\"{{vars.registry}}/${usage_service?}:${usage_tag:-latest}\"\ndocker build \\\n  ${usage_no_cache:+--no-cache} \\\n  --label \"git.sha={{vars.git_sha}}\" \\\n  -t \"$image\" \\\n  -f \"services/${usage_service?}/Dockerfile\" \\\n  \"services/${usage_service?}\"\necho \"Built $image\"\n'''\n\n[tasks.\"docker:test\"]\ndescription = \"Run tests for a service inside its container\"\nusage = '''\narg \"<service>\" help=\"Service to test\"\ncomplete \"service\" run=\"ls services/\"\nflag \"-v --verbose\" help=\"Verbose test output\"\n'''\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\nimage=\"{{vars.registry}}/${usage_service?}:latest\"\ndocker run --rm \\\n  -e CI=true \\\n  ${usage_verbose:+-e VERBOSE=1} \\\n  \"$image\" npm test\n'''\n\n[tasks.\"docker:publish\"]\ndescription = \"Push service image to registry\"\nusage = '''\narg \"<service>\" help=\"Service to publish\"\ncomplete \"service\" run=\"ls services/\"\nflag \"-t --tag <tag>\" default=\"latest\" help=\"Image tag\"\n'''\nconfirm = \"Push {{vars.registry}}/{{usage.service}}:{{usage.tag}} to registry?\"\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\nimage=\"{{vars.registry}}/${usage_service?}:${usage_tag:-latest}\"\ndocker push \"$image\"\ndocker tag \"$image\" \"{{vars.registry}}/${usage_service?}:{{vars.git_sha}}\"\ndocker push \"{{vars.registry}}/${usage_service?}:{{vars.git_sha}}\"\n'''\n\n[tasks.\"ci:pipeline\"]\ndescription = \"Full CI pipeline: lint, build all, test all, publish\"\ndepends = [\"lint\"]\nusage = '''\nflag \"--publish\" help=\"Also publish images after tests pass\"\nflag \"--services <list>\" var=#true default=\"api gateway worker\" help=\"Services to build\"\n'''\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\nfor svc in $usage_services; do\n  echo \"=== Building $svc ===\"\n  mise run docker:build \"$svc\"\n  mise run docker:test \"$svc\"\n  if [ -n \"${usage_publish:-}\" ]; then\n    mise run docker:publish \"$svc\"\n  fi\ndone\necho \"Pipeline complete.\"\n'''\n```\n\n### 3. Full release automation with changelog generation\n\n*\"Create a release task that bumps semver, generates a changelog from conventional commits, tags the release, and optionally publishes to npm.\"*\n\n```bash\n#!/usr/bin/env bash\n#MISE description=\"Create a new release with changelog generation\"\n#MISE alias=\"rel\"\n#MISE depends=[\"test\", \"build\"]\n#MISE tools={node=\"22\", git=\"latest\"}\n#USAGE arg \"<bump>\" choices \"major\" \"minor\" \"patch\" help=\"Semver bump type\"\n#USAGE flag \"--dry-run\" help=\"Preview release without making changes\"\n#USAGE flag \"--publish\" help=\"Publish to npm after release\"\n#USAGE flag \"--pre <label>\" help=\"Pre-release label (e.g., beta, rc)\"\n\nset -euo pipefail\n\nbump=\"${usage_bump?}\"\ndry=\"${usage_dry_run:-}\"\npre=\"${usage_pre:-}\"\n\nif [ -n \"$(git status --porcelain)\" ]; then\n  echo \"Error: Working tree is not clean.\"\n  exit 1\nfi\n\ncurrent=$(jq -r .version package.json)\nIFS='.' read -r major minor patch <<< \"${current%%-*}\"\ncase \"$bump\" in\n  major) major=$((major + 1)); minor=0; patch=0 ;;\n  minor) minor=$((minor + 1)); patch=0 ;;\n  patch) patch=$((patch + 1)) ;;\nesac\nnew_version=\"${major}.${minor}.${patch}\"\n[ -n \"$pre\" ] && new_version=\"${new_version}-${pre}.0\"\n\necho \"Release: ${current} → ${new_version}\"\n\nlast_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo \"\")\nif [ -n \"$last_tag\" ]; then\n  changelog=$(git log \"${last_tag}..HEAD\" --pretty=format:\"- %s (%h)\" --no-merges)\nelse\n  changelog=$(git log --pretty=format:\"- %s (%h)\" --no-merges)\nfi\n\nif [ -n \"$dry\" ]; then\n  echo \"[dry-run] Would bump to ${new_version}, tag, and push.\"\n  exit 0\nfi\n\njq --arg v \"$new_version\" '.version = $v' package.json > package.json.tmp\nmv package.json.tmp package.json\n\ngit add package.json\ngit commit -m \"chore(release): ${new_version}\"\ngit tag -a \"v${new_version}\" -m \"Release ${new_version}\"\ngit push && git push --tags\n\nif [ -n \"${usage_publish:-}\" ]; then\n  npm publish ${pre:+--tag \"$pre\"}\nfi\n\necho \"Released v${new_version}\"\n```\n\n### 4. Database management suite with migration tracking\n\n*\"Set up a complete database management task suite with PostgreSQL.\"*\n\n```toml\n[env]\nDATABASE_URL = { required = \"Set PostgreSQL connection string\" }\n\n[tasks.\"db:migrate\"]\ndescription = \"Run database migrations\"\nusage = '''\narg \"[direction]\" default=\"up\" choices \"up\" \"down\" help=\"Migration direction\"\nflag \"-n --steps <n>\" default=\"0\" help=\"Number of steps (0 = all)\"\nflag \"--dry-run\" help=\"Show SQL without executing\"\n'''\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\ndir=\"${usage_direction:-up}\"\nsteps=\"${usage_steps:-0}\"\nif [ -n \"${usage_dry_run:-}\" ]; then\n  migrate -database \"$DATABASE_URL\" -path db/migrations \"$dir\" -v $steps 2>&1 | head -50\n  echo \"[dry-run] No changes applied.\"\n  exit 0\nfi\nif [ \"$steps\" = \"0\" ]; then\n  migrate -database \"$DATABASE_URL\" -path db/migrations \"$dir\"\nelse\n  migrate -database \"$DATABASE_URL\" -path db/migrations \"$dir\" \"$steps\"\nfi\n'''\n\n[tasks.\"db:reset\"]\ndescription = \"Drop all tables and re-run migrations + seeds\"\ndepends_post = [\"db:migrate\", \"db:seed\"]\nconfirm = \"This will DROP ALL TABLES and re-run migrations. Continue?\"\nrun = 'psql \"$DATABASE_URL\" -c \"DROP SCHEMA public CASCADE; CREATE SCHEMA public;\"'\n\n[tasks.\"db:dump\"]\ndescription = \"Dump database to SQL file\"\nusage = 'flag \"-o --output <file>\" default=\"db/dump.sql\" help=\"Output file\"'\nrun = 'pg_dump \"$DATABASE_URL\" > \"${usage_output:-db/dump.sql}\" && echo \"Dumped to ${usage_output:-db/dump.sql}\"'\n```\n\n### 5. Kubernetes deployment orchestration with namespace management\n\n*\"Create mise tasks for K8s deployments with context, deploy, rollback, and port-forward.\"*\n\n```toml\n[tasks.\"k8s:ctx\"]\ndescription = \"Switch Kubernetes context and namespace\"\nusage = '''\narg \"<cluster>\" help=\"Cluster context\"\ncomplete \"cluster\" run=\"kubectl config get-contexts -o name\"\nflag \"-n --namespace <ns>\" default=\"default\" help=\"Namespace\"\n'''\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\nkubectl config use-context \"${usage_cluster?}\"\nkubectl config set-context --current --namespace=\"${usage_namespace:-default}\"\necho \"Context: ${usage_cluster?} | Namespace: ${usage_namespace:-default}\"\n'''\n\n[tasks.\"k8s:deploy\"]\ndescription = \"Deploy a service to Kubernetes\"\nusage = '''\narg \"<service>\" help=\"Service to deploy\"\ncomplete \"service\" run=\"ls -d k8s/services/*/ 2>/dev/null | xargs -I{} basename {}\"\narg \"[tag]\" default=\"latest\" help=\"Image tag\"\nflag \"-n --namespace <ns>\" help=\"Override namespace\"\nflag \"--dry-run\" help=\"Render without applying\"\n'''\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\nsvc=\"${usage_service?}\"\ntag=\"${usage_tag:-latest}\"\nns=\"${usage_namespace:-$(kubectl config view --minify -o jsonpath='{..namespace}')}\"\nkustomize build \"k8s/services/${svc}\" | \\\n  sed \"s|:latest|:${tag}|g\" | \\\n  kubectl apply ${usage_dry_run:+--dry-run=client} -n \"${ns:-default}\" -f -\n'''\n\n[tasks.\"k8s:rollback\"]\ndescription = \"Rollback a deployment\"\nusage = '''\narg \"<service>\" help=\"Service to rollback\"\ncomplete \"service\" run=\"kubectl get deployments -o jsonpath='{range .items[*]}{.metadata.name}{\\\"\\\\n\\\"}{end}'\"\nflag \"-n --namespace <ns>\" help=\"Override namespace\"\n'''\nconfirm = \"Rollback {{usage.service}} to previous revision?\"\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\nns=\"${usage_namespace:-$(kubectl config view --minify -o jsonpath='{..namespace}')}\"\nkubectl rollout undo deployment/\"${usage_service?}\" -n \"${ns:-default}\"\n'''\n\n[tasks.\"k8s:forward\"]\ndescription = \"Port-forward a service\"\nusage = '''\narg \"<service>\" help=\"Service to forward\"\ncomplete \"service\" run=\"kubectl get svc -o jsonpath='{range .items[*]}{.metadata.name}{\\\"\\\\n\\\"}{end}'\"\nflag \"-p --port <port>\" default=\"8080\" help=\"Local port\"\nflag \"--remote <port>\" default=\"80\" help=\"Remote port\"\n'''\nraw = true\nrun = '''\n#!/usr/bin/env bash\nset -euo pipefail\necho \"Forwarding localhost:${usage_port:-8080} → ${usage_service?}:${usage_remote:-80}\"\nkubectl port-forward \"svc/${usage_service?}\" \"${usage_port:-8080}:${usage_remote:-80}\"\n'''\n```\n\n## What's Covered\n\nThe skill provides Claude with comprehensive knowledge of:\n\n| Area | Details |\n|------|---------|\n| **Tasks** | All fields (run, depends, sources, outputs, cache, usage, extends, timeout, output, pass_through_env, sandbox, etc.), structured run/depends, `[task_templates]`, file tasks, remote tasks |\n| **Usage Spec** | Full arg/flag/cmd/complete reference with all attributes, `effect=`, env var access patterns, bash expansion — plus the attributes that are documented upstream but hard-error |\n| **Task Caching** | `cache = {}`, result-only `outputs = []`, `input_groups`/`@group:` refs, `global_inputs`, `command_inputs`, `--task-cache` modes, `mise cache task`, remote cache settings |\n| **Dev Tools** | 19 backends, per-tool options, `version_order`, version formats, backend-specific config (github, http, s3, cargo, pipx, npm, pkgx, etc.), lockfiles, provenance |\n| **Environments** | env vars, `_.path`/`_.file`/`_.source`/`_.python.venv` directives, configuration environments, `.miserc.toml`, required/redacted vars, secrets (fnox/sops/age), Tera v2 templates |\n| **Hooks** | cd/enter/leave/preinstall/postinstall hooks, file watchers |\n| **Security** | `[settings.sandbox]`, per-task deny/allow fields, `MISE_SAFE=1`, paranoid mode, trust rules, supply-chain verification |\n| **Machine Bootstrap** | `mise bootstrap` (17 steps: accounts, plugins, packages, files, services, firewall, compose, repos, shell activation, macOS defaults, services/timers, login shell), `mise bootstrap dotfiles`, OCI images |\n| **Dependencies** | `[deps]` providers (npm, uv, poetry, go, bundler, …) and `mise deps` |\n| **Monorepos** | `monorepo_root`, `[monorepo].config_roots`, `//path:task` syntax, workspace project graph (Cargo/uv/Go/Node), `[monorepo.task_defaults]`, `^task` upstream deps, `mise run --affected`, root lockfiles |\n| **Configuration** | File hierarchy, all 287 settings, `conf.d` fragments, merge behavior, minimum version, deprecation calendar |\n| **Best Practices** | DO/DON'T patterns, complete examples, common gotchas |\n\n## Requirements\n\n- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI\n- [mise](https://mise.jdx.dev/) installed in your development environment\n\n## How It Works\n\nThis plugin provides a single skill file (`SKILL.md`) that Claude reads when it detects mise-related context in your conversation. The skill contains comprehensive reference material covering the entire mise ecosystem — tasks, dev tools, environments, hooks, and configuration.\n\nThe skill activates automatically when you mention mise, edit `mise.toml` files, or work with `mise-tasks/` directories.\n\n## Updating the Skill\n\nThis repo includes a Claude Code slash command for updating the skill as mise docs evolve:\n\n```\n/update-skill    # Re-crawl mise docs and update SKILL.md\n```\n\nThe command launches 6 parallel research agents — 5 documentation crawlers plus a release-notes auditor that diffs `jdx/mise` and `jdx/usage` releases since the last update — then consolidates findings into `skills/mise/SKILL.md`. Release notes take precedence over the doc pages for experimental/stable status, renamed keys, and changed defaults, since the docs lag behind releases. Additional mise tasks handle versioning and validation:\n\n```bash\nmise run lint              # Validate skill file structure\nmise run update:version    # Bump plugin version\n```\n\n## License\n\n[MIT](LICENSE)\n",
  "bytes": 28796,
  "sha": "a2693af52426778192cdc9230f948fd788993cf9f5558e3fae0a734958cdc6a1",
  "repo_slug": "brentmitchell25/mise-plugin",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_brentmitchell25_mise_plugin_mise_c7fb6e28/readme"
}