From spindev-devenv
Debloat Ubuntu desktop and set it up for Claude Code + development. Purges games, office apps, Firefox, snapd; installs Chrome (amd64), Brave (amd64+arm64), Docker CE, mise-managed Python/Node/Go/JDK, Android Studio, VS Code from upstream repos; supports idempotent re-runs via `--verify`. Use for fresh Ubuntu dev-box setup, debloat requests, installing dev toolchains on Ubuntu, verifying an existing Ubuntu dev env, or checking for drift/updates.
How this skill is triggered — by the user, by Claude, or both
Slash command
/spindev-devenv:ubuntu-debloatThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Thin skill. Real work lives in `scripts/`. You (Claude) orchestrate — read
README.mdscripts/00-preflight.shscripts/05-sudoers-nopasswd.shscripts/10-update.shscripts/20-debloat.shscripts/30-remove-snap.shscripts/40-install-core.shscripts/50-install-chrome.shscripts/51-install-brave.shscripts/60-install-mise.shscripts/70-install-docker.shscripts/80-install-android.shscripts/90-install-vscode.shscripts/99-verify.shscripts/check-versions.shscripts/lib.shscripts/run-all.shThin skill. Real work lives in scripts/. You (Claude) orchestrate — read
the user's request, run the relevant script(s), report results, self-heal on
drift.
mise and uses it to manage Python, Node (LTS), Go, Java (LTS)unattended-upgrades for security patchesverify mode that checks health on re-runLatest public GA stable or LTS — NOT cutting edge. If a user asks for nightly/beta, push back — that's out of scope for this skill.
Scripts are idempotent — re-running is safe and cheap. They live in
scripts/ and are numerically ordered. The orchestrator is
scripts/run-all.sh. Pass --verify to check state without making changes.
# full run on a fresh machine
./scripts/run-all.sh
# re-check everything, make no changes (fast, read-only)
./scripts/run-all.sh --verify
# run one phase
./scripts/70-install-docker.sh
Each script:
set -euo pipefailscripts/lib.sh for shared logging + idempotency helpers[OK] / [SKIP] / [FAIL] per action00-preflight.sh (snapshots the package list first), then
run-all.sh.run-all.sh --verify. Report what passed,
what's out of date, what's missing. Offer to fix.99-verify.sh then check-versions.sh.On a machine that isn't a fresh install, confirm before destructive steps
and make sure 00-preflight.sh snapshotted the package list first.
This skill outlives any single release. Upstream drifts: package names get renamed, repo URLs change, LTS versions roll over, Ubuntu ships a new codename. When you (Claude) notice drift, update this skill and its scripts so the next run self-heals.
This skill is served from a read-only plugin cache (~/.claude/plugins/cache/spindev-devenv@spinlockdevelopment/<version>/). Edits to SKILL.md or scripts/ there do not persist and do not propagate. Edit the authoritative copy at plugins/spindev-devenv/skills/ubuntu-debloat/ in a clone of spinlockdevelopment/dev-setup, commit (bringup: straight to main; protected: feature branch + PR), and push. Consumers pick it up on their next /plugin marketplace update.
Triggers for self-update:
check-versions.sh reports a pinned version is stale (e.g., JDK LTS
moved from 21 → 25; Android Studio URL has a newer version).00-preflight.sh doesn't know about a new release.What to do when you detect drift:
# bumped JDK 21 → 25 on 2026-04-13 (new LTS).Also check periodically even without a failure: when the user invokes
this skill, spend a moment running scripts/check-versions.sh. If it finds
pinned versions that have been superseded by a newer LTS, update the scripts
before running them — don't wait for something to break.
What NOT to do:
ufw defaults| File | Purpose |
|---|---|
scripts/lib.sh | Shared helpers: logging, idempotent apt install/purge, OS gate |
scripts/00-preflight.sh | OS version check, snapshot of current package state |
scripts/05-sudoers-nopasswd.sh | Install ephemeral /etc/sudoers.d/ubuntu-debloat with narrow NOPASSWD rules so later phases don't prompt. Reverted by run-all.sh's EXIT trap (single-user dev box only) |
scripts/10-update.sh | apt update/upgrade, enable unattended-upgrades |
scripts/20-debloat.sh | Purge games, office apps, Firefox, misc GNOME bloat |
scripts/30-remove-snap.sh | Completely remove snapd |
scripts/40-install-core.sh | build-essential + common CLI tools |
scripts/50-install-chrome.sh | Google Chrome from Google's apt repo (amd64 only) |
scripts/51-install-brave.sh | Brave from Brave's apt repo (amd64 + arm64) |
scripts/60-install-mise.sh | mise + Python / Node (LTS) / Go / JDK (LTS) |
scripts/70-install-docker.sh | Docker CE from docker.com repo |
scripts/80-install-android.sh | Android Studio + platform tools |
scripts/90-install-vscode.sh | VS Code from Microsoft's apt repo |
scripts/99-verify.sh | Health check across everything above |
scripts/run-all.sh | Orchestrator; accepts --verify |
scripts/check-versions.sh | Upstream version drift check |
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub spinlockdevelopment/dev-setup --plugin spindev-devenv