Linux VM bootstrap verification skill. MUST BE USED when setting up new VMs or verifying environment. Supports modes: check (warn-only), install (operator-confirmed), strict (CI-ready). Enforces Linux-only + mise as canonical; honors preference brew→npm (with apt fallback). Verifies required tools: mise, node, pnpm, python, poetry, gh, railway, op, bd, dcg, ru, tmux, rg. Handles optional tools as warnings: tailscale, playwright, agent-browser, docker, bv. Never prints/seeds secrets; never stores tokens in repo/YAML; Railway vars only for app runtime env. Safe on dirty repos (refuses and points to dirty-repo-bootstrap skill, or snapshots WIP branch). Keywords: vm, bootstrap, setup, mise, toolchain, linux, environment, provision, verify, new vm
Verify and optionally install required tools for a standardized Linux development VM.
This is a Linux adapter, not the universal fresh-device bootstrap surface. Use
scripts/dx-bootstrap-device.sh --role auto as the role-aware entrypoint, and
this skill/script when the detected host is a Linux VM that needs tool
verification or interactive installs.
| Mode | Behavior | Use Case |
|---|---|---|
check | Warn-only, never modifies | Local DX entrypoint, agents |
install | Prompt before each install | Interactive bootstrap |
strict | Exit non-zero on first missing required tool | CI jobs |
| Tool | Why | Source | Verify |
|---|---|---|---|
git |
| repo sync, PRs |
| apt |
git --version |
curl | installers, API calls | apt | curl --version |
jq | parse JSON (nice-to-have) | brew (apt fallback) | jq --version (optional on epyc6) |
rg (ripgrep) | fast search | apt or brew | rg --version |
tmux | multi-agent sessions | apt or brew | tmux -V |
mise | toolchain versions | mise installer | mise --version |
python | backend + scripts | mise (per repo) | mise exec -- python --version |
poetry | python deps | pipx or mise | poetry --version |
node | frontend + tooling | mise (per repo) | mise exec -- node --version |
pnpm | monorepo installs | mise / corepack | mise exec -- pnpm --version |
gh | PRs + auth | brew | gh --version && gh auth status |
railway | env/shell/deploy | mise (@railway/cli) | mise exec -- railway --version + railway status + version >= 3.0.0 |
op | secrets + service auth | brew | op --version |
bd | Beads local runtime/diagnostics | Beads installer | bd --version |
bdx | Beads agent coordination wrapper | agent-skills scripts | bdx --help + bdx dolt test --json |
dcg | destructive command guard | installer | dcg explain "rm -rf /" |
ru | repo sync | installer | ru --version |
| Tool | Why | Verify |
|---|---|---|
bv | Beads graph insights | bv --version |
playwright | UI/E2E | mise exec -- playwright --version |
agent-browser | primary manual browser verification for CLI agents | agent-browser --help |
tailscale | cross-VM networking | tailscale status |
docker | Railway railway dev / local deps | docker --version |
.env files, or repobdx, not direct remote SQL endpoint env tuning.Before running in install or strict mode:
git status --porcelaincheck mode: warn and continueinstall/strict mode: refuse and suggest:
/dirty-repo-bootstrap skill to snapshot to WIP branchRecommended: Set DX_AGENT_ID for consistent agent identification across repos and sessions.
# Add to ~/.bashrc, ~/.zshrc, or ~/.profile
export DX_AGENT_ID="$(hostname -s)-claude-code"
Format: <magicdns-host>-<platform>
Examples: epyc6-claude-code, macmini-codex-cli
Why: Provides stable identity for git trailers and multi-repo workflows.
Helper script:
~/.agent/skills/scripts/get_agent_identity.sh
Status: P2, warn-only. Missing DX_AGENT_ID triggers warnings but doesn't block operations.
See DX_AGENT_ID.md for full specification and migration path.
When this skill is relevant:
check mode: report status (✓/✗) for each toolinstall mode: prompt before each installstrict mode: exit 1 on first missing required tool# Check mode (default, safe for agents)
./vm-bootstrap/check.sh
# or
./vm-bootstrap/verify.sh check
# Install mode (interactive, operator-confirmed)
./vm-bootstrap/install.sh
# Strict mode (CI)
./vm-bootstrap/verify.sh strict
Note: check.sh is a wrapper for verify.sh check. install.sh provides interactive tool installation following the LINUX_VM_BOOTSTRAP_SPEC phases.
DX entrypoints that are Linux-only may call vm-bootstrap check as a first