skills/dev-machine-setup/SKILL.md
Set up or tune any dev machine, fresh or drifted, on macOS, Linux, or Windows: report what's missing, install only that, then fix PATH, duplicate runtimes, and shell config. Don't use for Dockerfiles, CI images, or single package installs.
npx skillsauth add luongnv89/skills dev-machine-setupInstall 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.
Bring any machine to a clean, ready-to-develop state — a factory laptop, a half-configured work box, or a daily driver that has drifted. Never a fresh-install-only script: phase 1 builds a gap report of what is missing and misconfigured, and every later phase acts only on that report.
Gap-driven is the whole design. Each phase self-skips when its slice of the report is empty, so a re-run on an already-good machine installs nothing and still verifies — idempotent by construction.
Self-contained: no external scripts repo is cloned. The shell config the skill deploys ships in assets/.
This is an orchestrator. Per-OS command tables and per-phase detail live in references/, so only the current
platform loads and the token budget stays on the machine in front of you.
Mode comes from the user's intent, not from machine state — a machine with gaps is not permission to fill them when the user only asked for a tune-up.
| Mode | Selected by | Runs |
|------|-------------|------|
| setup (default) | "set up this machine", "install my dev environment", "get this laptop ready" | Phases 0 → 6 |
| tune | "just optimize what's there", "don't install anything, fix my setup", "why is claude not found" | Phases 0, 1, 5, 6 only |
Tie-break: setup wins whenever the request mentions missing pieces at all — "verify what's missing
and optimize it" is setup. Choose tune only when the ask is limited to what is already installed; still
unsure once the gap report is on screen, ask once, before phase 3.
tune skips phases 3 and 4 entirely — never bulk-install what the user did not ask for. Phase 5 may still
install a package when that is the approved fix for a finding (e.g. uv for python-externally-managed).
Read references/approvals.md before phase 2 — it holds the rules every phase runs under, in full. The
four that must be in your head from the start:
chsh, rc-file edits,
curl | sh, PATH rewrites. Needs an explicit per-item yes, with the risk named, and any rc file backed
up first. A prior yes never carries forward to another mutating item.detect_env.py, version checks, winget list) skip the approve step; nothing that changes state does.<placeholder> or an assumed cwd, always tagged you run this / I can run this.The session file (~/.dev-machine-setup/session.json) is the running log. Write it at every Record step;
build the final report from it, never from memory. Pause and resume protocol: references/approvals.md.
Don't use for: Dockerfiles, CI runners, or installing a single named package.
| File | When |
|------|------|
| scripts/detect_env.py | Phase 1 — prints the gap report JSON (inventory + missing + findings) |
| references/approvals.md | Before phase 2 — additive/mutating, the five-step loop, run-blocks, pause/resume |
| references/procedure.md | Every phase — what each phase actually does, step by step |
| references/detect.md | How to run the probe without python3 and how to read every JSON key |
| references/windows.md | Windows: inventory, conservative debloat, winget stack |
| references/macos.md | macOS: Homebrew, Node, Python+uv, zsh, starship |
| references/linux.md | Linux: apt/dnf/pacman, NodeSource LTS, python3-pip, zsh, starship |
| references/agent-clis.md | Phase 4 — Claude Code, Codex, Pi, OpenCode install + verify |
| references/optimize.md | Phase 5 — one section per finding id, each tagged additive/mutating |
| references/session.md | Phase 0 and every Record step — session-file schema, write command, reconcile rules |
| references/report-template.md | Phase 6 — the FINAL REPORT block and what each line must carry |
| references/edge-cases.md | No python3, Windows ARM64, WSL, containers, re-runs, unsupported distros |
| assets/zshrc-config | Phases 3 and 5 — the ~/.zshrc deployed by oh-my-zsh-missing; owns the theme, plugin list, and starship init |
| assets/starship.toml | Phases 3 and 5 — the prompt config deployed by starship-config-*; cp it from the skill dir, never inline its contents |
Full step-by-step detail for every phase is in references/procedure.md — read it at phase 0 and keep it
open. This table is the spine: the order, and the condition that lets you advance. Do not advance until the
current phase verifies green, self-skips on an empty gap set, or is explicitly deferred by the user.
| # | Phase | Done when |
|---|-------|-----------|
| 0 | Resume check | Resuming from a reconciled session file, or starting clean with any discarded session deleted |
| 1 | Detect and build the gap report | Gap report JSON captured, three lists shown, mode fixed, OS reference loaded, session file written |
| 2 | Debloat (fresh Windows only, opt-in) | Skipped with a reason logged, or inventory shown and every removal individually confirmed and verified |
| 3 | Baseline gaps (skipped in tune) | Every item in missing.baseline verifies green, or is logged as deferred |
| 4 | Agent CLI gaps (skipped in tune) | Every requested agent CLI verifies green, or is explicitly declined |
| 5 | Optimize | Verification re-run shows every approved fix gone from findings; each remaining one recorded as declined or deferred |
| 6 | Final report | Report printed with a Result line, every gap and finding accounted for, session file marked complete |
Three things bite often enough to belong here rather than only in the detail file:
no-package-manager, no-sudo, brew-bin-not-on-path,
npm-global-bin-not-on-path make installs fail or land invisibly.missing.*. Never reinstall or upgrade something already present; an upgrade
is mutating and belongs to phase 5.detect_env.py, never from memory. PATH and rc-file fixes keep reporting
until a new shell reads them — re-run in a fresh login shell, or log the finding as fixed — needs new shell.ZSH_THEME="wedisagree", the four-plugin list, and the starship init zsh line all live in
assets/zshrc-config, which this skill ships and deploys by cp. Never hand-write those lines into
~/.zshrc instead — edit the asset. It is a vendored fork of luongnv89/inbash's config: upstream fixes
do not flow in, which is the price of having no dependency.
Deploying it is not always additive. cp assets/zshrc-config ~/.zshrc overwrites an existing ~/.zshrc,
so it is additive only when none is present and mutating — backup plus its own yes — when one is. A
blanket "do everything" approval never covers the mutating case. Full split in
optimize.md#oh-my-zsh-missing.
Beyond the additive/mutating rule:
sudo, --force, or
--break-system-packages to make a command succeed is out of scope for this skill.Phase 6 prints the FINAL REPORT block from references/report-template.md — one line per phase, sourced from
the session file. Result is one of:
high findings, and in setup no baseline gap left unfilled. Declined agent CLIs
and deferred low/medium findings are still READY.high finding was declined.detect_env.py printed valid JSON with os, arch, tools, missing, findings, and the phase-1 gap
report was shown before anything was installed.tune, phases 3 and 4 installed nothing.missing.* — nothing already present was reinstalled or upgraded.<placeholder> or an assumed cwd, each tagged you run this / I can run this.complete by phase 6.detect_env.py; the report's counts come from that re-run.Result of READY / PARTIAL / BLOCKED and every gap and finding accounted
for as fixed, declined, or deferred.quick_validate.py exits 0 on the shipped SKILL.md.Expected output: the FINAL REPORT block (references/report-template.md).
No python3, Windows ARM64, WSL, containers and remote-SSH hosts, interrupted runs, and distros outside the
shipped apt/dnf/pacman tables live in references/edge-cases.md. Machine states the probe reports as findings
are in references/optimize.md, keyed by finding id.
development
Scan a live site with isitagentready.com, then approve each step: triage the 0-5 agent-readiness score, write agent-ready-plan.md, file issues via /plan-to-issues. Don't use for applying llms.txt/SEO fixes (seo-ai-optimizer) or app-store ASO.
development
Review a product codebase and landing page against 32 viral principles and produce a Virality Score plus ranked fixes. Use to audit virality or prioritize growth. Don't use for SEO, ASO, copywriting, or code review.
development
Generate a Technical Architecture Document (TAD) from a PRD. Use when asked to design system architecture or define how a product is built. Updates tad.md and reports GitHub links. Don't use for PRD authoring, sprint tasks, or code implementation.
development
Check product and brand names for conflicts across trademarks, domains, social handles, and package registries. Returns a risk level and Proceed/Modify/Abandon recommendation. Skip for name brainstorming, logo design, or trademark filings.