Dev Machine Setup logo

Dev Machine Setup

Community
luongnv89
dev-machine-setup

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.

Overview

Publisherluongnv89
Repositoryskills
Skill namedev-machine-setup
Stars
124
Forks
18
Bundled files
15
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 15 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by luongnv89 on GitHub. Read the source before you install it.

Installation

Install the Dev Machine Setup AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/luongnv89/skills.git /tmp/skills
mkdir -p .claude/skills
cp -r /tmp/skills/skills/dev-machine-setup .claude/skills/dev-machine-setup
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Dev Machine Setup in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Dev Machine Setup on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Dev Machine Setup is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Dev Machine Setup

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.

Modes

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.

ModeSelected byRuns
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).

Approvals

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:

  • Additive — installs something absent. Nothing working can break. Batch-approvable per phase.
  • Mutating — changes something that already works: upgrades, removals, 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.
  • Five-step loop, every phase: Present → Approve → Execute → Verify → Record. Read-only probes (detect_env.py, version checks, winget list) skip the approve step; nothing that changes state does.
  • Run-blocks: every proposed command ships as a copy-whole fenced block — never inside a table cell, never with a <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.

When to Use

  • "set up this new laptop / fresh install"
  • "install my dev environment" (Node, Python, agents)
  • "optimize / clean up my dev setup", "my machine is a mess"
  • "I installed X but the command isn't found"
  • Windows OEM bloat, trial antivirus, preinstalled games

Don't use for: Dockerfiles, CI runners, or installing a single named package.

Prerequisites

  • Network.
  • Admin/sudo (or winget) for system packages. Without it, only user-level installs are possible — say which requests that blocks rather than failing them silently.

Reference files (load only what you need)

FileWhen
scripts/detect_env.pyPhase 1 — prints the gap report JSON (inventory + missing + findings)
references/approvals.mdBefore phase 2 — additive/mutating, the five-step loop, run-blocks, pause/resume
references/procedure.mdEvery phase — what each phase actually does, step by step
references/detect.mdHow to run the probe without python3 and how to read every JSON key
references/windows.mdWindows: inventory, conservative debloat, winget stack
references/macos.mdmacOS: Homebrew, Node, Python+uv, zsh, starship
references/linux.mdLinux: apt/dnf/pacman, NodeSource LTS, python3-pip, zsh, starship
references/agent-clis.mdPhase 4 — Claude Code, Codex, Pi, OpenCode install + verify
references/optimize.mdPhase 5 — one section per finding id, each tagged additive/mutating
references/session.mdPhase 0 and every Record step — session-file schema, write command, reconcile rules
references/report-template.mdPhase 6 — the FINAL REPORT block and what each line must carry
references/edge-cases.mdNo python3, Windows ARM64, WSL, containers, re-runs, unsupported distros
assets/zshrc-configPhases 3 and 5 — the ~/.zshrc deployed by oh-my-zsh-missing; owns the theme, plugin list, and starship init
assets/starship.tomlPhases 3 and 5 — the prompt config deployed by starship-config-*; cp it from the skill dir, never inline its contents

Procedure

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.

#PhaseDone when
0Resume checkResuming from a reconciled session file, or starting clean with any discarded session deleted
1Detect and build the gap reportGap report JSON captured, three lists shown, mode fixed, OS reference loaded, session file written
2Debloat (fresh Windows only, opt-in)Skipped with a reason logged, or inventory shown and every removal individually confirmed and verified
3Baseline gaps (skipped in tune)Every item in missing.baseline verifies green, or is logged as deferred
4Agent CLI gaps (skipped in tune)Every requested agent CLI verifies green, or is explicitly declined
5OptimizeVerification re-run shows every approved fix gone from findings; each remaining one recorded as declined or deferred
6Final reportReport 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:

  • Blocking findings go first, in phase 3no-package-manager, no-sudo, brew-bin-not-on-path, npm-global-bin-not-on-path make installs fail or land invisibly.
  • Phases 3 and 4 act only on missing.*. Never reinstall or upgrade something already present; an upgrade is mutating and belongs to phase 5.
  • Phase 5 verifies by re-running 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: one source of truth

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.

Safety

Beyond the additive/mutating rule:

  • Never run a third-party "debloat everything" script unattended. OEM audio/chipset tools can be load-bearing.
  • Never commit secrets, and never write an API key into a shell rc file. Auth for every agent CLI is its own interactive login after install.
  • Windows ARM64 (Snapdragon / Copilot+): prefer arm64 winget packages; say so when a tool is x64-only.
  • A failed step is reported, not worked around. Silently switching to sudo, --force, or --break-system-packages to make a command succeed is out of scope for this skill.

Verification report

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:

  • READY — no unresolved high findings, and in setup no baseline gap left unfilled. Declined agent CLIs and deferred low/medium findings are still READY.
  • PARTIAL — a step failed non-fatally, or a high finding was declined.
  • BLOCKED — a required phase could not run: no package manager, no sudo for a needed system install, or approval withheld for a step everything else depends on.

Acceptance Criteria

  • detect_env.py printed valid JSON with os, arch, tools, missing, findings, and the phase-1 gap report was shown before anything was installed.
  • Mode was fixed before phase 3; in tune, phases 3 and 4 installed nothing.
  • Blocking findings were fixed at the top of phase 3, not deferred.
  • Phases 3 and 4 acted only on missing.* — nothing already present was reinstalled or upgraded.
  • Every command reached the user as a run-block: none in a table cell, none with an unresolved <placeholder> or an assumed cwd, each tagged you run this / I can run this.
  • The session file existed from phase 1 on, was rewritten at every Record step, and is complete by phase 6.
  • Every mutating step has its own recorded yes; every rc file edited has a backup path in the session file.
  • Phase 5 verified by re-running detect_env.py; the report's counts come from that re-run.
  • The FINAL REPORT printed with a 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).

Edge Cases

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.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Dev Machine Setup AI skill do?

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.

Why use Dev Machine Setup on TypingMind?

Because you install it once and use it with any model. Dev Machine Setup is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Dev Machine Setup in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/luongnv89/skills/tree/main/skills/dev-machine-setup. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Dev Machine Setup?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Dev Machine Setup?

As many as you like. As long as a model supports skills, you can use Dev Machine Setup with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Dev Machine Setup AI skill free?

Yes. It is published on GitHub by luongnv89 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇