claude/stack
Setup guide · Linux · Windows · macOS · October 2026

My Claude Code stack

Everything I run inside the Claude Code CLI: plugins, skills, hooks and the tools Claude calls while it works. Every section has install commands and a prompt you can paste into Claude Code so it installs things for you.

Show install commands for:

Linux commands use apt (Ubuntu / Debian / Mint / Pop!_OS). On Fedora use dnf, on Arch use pacman; package names are mostly the same. If unsure, paste the one-shot prompt and Claude will figure out your distro.

Windows commands run in PowerShell (Windows 10/11). Apps come from winget, which is built in. Small command-line tools come from Scoop. Claude Code runs natively on Windows. Tools that are Unix-only (like tmux) need WSL.

This is the platform I actually run (Apple Silicon). Versions below are what's on my machine.

2.1.296
Claude Code version
12
plugins enabled
3
plugin marketplaces
40+
skills available

01Quick start

Do these in order. Tick each one off; the page remembers your progress in this browser.

Update packages & install the basics

Set up winget and Scoop

Install Homebrew

Refresh apt and get the build tools most other installs need.

winget ships with Windows 10/11 (update “App Installer” in the Microsoft Store if winget isn't found). Scoop handles the small Unix-style CLI tools. scoop.sh

The macOS package manager. Most of the tools below install through it. brew.sh

sudo apt update
sudo apt install -y git curl wget build-essential unzip
# PowerShell (not as admin)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Terminal, browser, editor and CLI basics

iTerm2 is my terminal. It can show Claude Code's status (working, waiting for you, done) on each tab. iterm2.com

Any terminal works (GNOME Terminal, Konsole, Kitty, WezTerm). This adds the CLI tools Claude uses constantly, plus Chrome and VS Code.

Windows Terminal is the closest match to iTerm2. Git for Windows is required: Claude Code uses its Git Bash to run commands.

brew install --cask iterm2 google-chrome visual-studio-code
brew install ripgrep jq tmux uv bash
sudo apt install -y ripgrep jq tmux
curl -LsSf https://astral.sh/uv/install.sh | sh
sudo snap install code --classic
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.deb
winget install -e --id Microsoft.WindowsTerminal
winget install -e --id Git.Git
winget install -e --id Google.Chrome
winget install -e --id Microsoft.VisualStudioCode
scoop install ripgrep jq uv

Install Node with a version manager

nvm lets you switch Node versions per project. I keep Node 24 as the default and Node 12 for older projects. nvm on GitHub

nvm itself is Unix-only. nvm-windows is the Windows equivalent and uses almost the same commands. nvm-windows on GitHub

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# open a new terminal tab, then:
nvm install 24 && nvm alias default 24
winget install -e --id CoreyButler.NVMforWindows
# open a NEW PowerShell window, then:
nvm install 24
nvm use 24

Install Claude Code and sign in

Use the native installer, then run claude and log in with your Claude account (a Pro or Max plan). Claude Code docs

curl -fsSL https://claude.ai/install.sh | bash
claude
# PowerShell
irm https://claude.ai/install.ps1 | iex
claude

If Claude Code can't find Git Bash, point it there: $env:CLAUDE_CODE_GIT_BASH_PATH="C:\Program Files\Git\bin\bash.exe"

Add the plugin marketplaces and plugins

Type these inside Claude Code, one at a time. They're the same on every OS. The plugins section explains what each one does.

/plugin marketplace add anthropics/claude-plugins-official
/plugin marketplace add testdouble/han
/plugin marketplace add rehan-remade/universal-modder

/plugin install han@han
/plugin install clangd-lsp@claude-plugins-official
/plugin install swift-lsp@claude-plugins-official
/plugin install universal-modder@universal-modder

Skip swift-lsp unless you install the Swift toolchain (see Toolchain).

Copy my settings

Merge the settings template into ~/.claude/settings.json%USERPROFILE%\.claude\settings.json, or paste the prompt below into Claude Code and let it do the merge.

Prompt for Claude Code
Open my Claude Code user settings.json and merge in these settings without removing anything I already have: theme "dark", effort "high" for Opus and "xhigh" for Sonnet, and enabledPlugins + extraKnownMarketplaces for han (testdouble/han), universal-modder (rehan-remade/universal-modder) and clangd-lsp (claude-plugins-official). Show me the diff before saving.

02Core setup

The CLI, the models and the terminal integration.

Claude Code 2.1.296

Anthropic's agentic coding CLI. Runs on macOS, Linux and Windows. I run it from my home folder and point it at project folders as needed. I usually work in auto mode, where Claude acts without asking at every step.

Models Opus 5.5

  • Opus 5.5: my default, effort high
  • Sonnet 5: effort xhigh when I switch to it
  • /model switches models; /fast turns on fast mode

Terminal status & notifications

Every Claude Code hook event runs iTerm2's cc-status helper, so each tab shows whether Claude is working or waiting for me.

On my Mac, hooks feed iTerm2 so each tab shows whether Claude is working or waiting. iTerm2 is Mac-only. The equivalent here is a hook that pops a desktop notification when Claude finishes or needs you.

Prompt for Claude Code
I use iTerm2. Check whether ~/.config/iterm2/cc-status exists. If it does, add a hook to ~/.claude/settings.json that runs it on every event (SessionStart, SessionEnd, UserPromptSubmit, PreToolUse, PostToolUse, PermissionRequest, Notification, Stop, StopFailure, SubagentStop), and set preferredNotifChannel to "iterm2".
Prompt for Claude Code
Add hooks to ~/.claude/settings.json so I get a desktop notification (notify-send, install libnotify-bin if missing) when you need my input (Notification and PermissionRequest events) and when you finish a task (Stop event). Test that a notification appears.
Prompt for Claude Code
Add hooks to my Claude Code settings.json so I get a Windows toast notification when you need my input (Notification and PermissionRequest events) and when you finish a task (Stop event). Use PowerShell with the BurntToast module (install it for my user if missing). Test that a toast appears.

Persistent memory

Claude Code saves what it learns about my projects and preferences to small notes in its .claude/projects/…/memory/ folder, with a MEMORY.md index that loads at the start of every session. It's built in on every OS. Tell Claude to “remember” things and it will.

Prompt for Claude Code
From now on, when you learn something non-obvious about how one of my projects builds, deploys or tests, save it to memory with the date. Keep one fact per memory file.

03Plugins & marketplaces

Plugins add skills, agents, hooks and MCP servers. Add a marketplace once, then install plugins from it with /plugin. These commands are identical on every OS.

Han han 5.5.0testdouble/han

Test Double's software-engineering plugin suite. Installing han@han pulls in all eight sub-plugins. It gives Claude specialist agents (security analyst, on-call engineer, data engineer, UX designer and more) and skills that turn vague requests into structured work.

Sub-pluginSkills I use
han-codingcode-review, investigate, refactor, tdd, architectural-analysis, code-overview, code-walkthrough, design-an-api, test planning
han-planningplan-a-feature, plan-a-change, plan-implementation, plan-a-phased-build, plan-work-items, iterative-plan-review
han-researchresearch, gap-analysis, issue-triage
han-documentationproject-documentation, architectural-decision-record, runbook
han-communicationedit-for-readability and the shared writing standard
han-corepairing, project-discovery and the specialist agents
han-githubpost reviews to PRs, update PR descriptions, turn work items into issues
han-reportinghtml-summary, stakeholder-summary
/plugin marketplace add testdouble/han
/plugin install han@han

Universal Modder rehan-remade

Skills and a um CLI for modding PC games, plus a sprite/asset pipeline (um sprite fit, um sprite sheet, um comfy run). I mostly use it for the asset tools with my local ComfyUI. Its fal MCP server needs your own fal.ai key (pay-as-you-go). Skip that part if you don't want it. It needs uv and ImageMagick (see Toolchain).

/plugin marketplace add rehan-remade/universal-modder
/plugin install universal-modder@universal-modder

Language servers official

From Anthropic's official marketplace. They give Claude real go-to-definition and diagnostics in code.

  • clangd-lsp: C/C++, needs clangd
  • swift-lsp: Swift, needs sourcekit-lsp from a Swift toolchain
xcode-select --install
sudo apt install -y clangd
# Swift (optional): see swift.org/install/linux
winget install -e --id LLVM.LLVM
# Swift (optional):
winget install -e --id Swift.Toolchain
/plugin install clangd-lsp@claude-plugins-official
/plugin install swift-lsp@claude-plugins-official

04Skills & connectors from my Claude account

These sync into Claude Code from claude.ai when you sign in, on any OS, so there's nothing to install from the terminal. Turn them on under claude.ai → Settings → Capabilities / Connectors.

Document skills

  • docx, pptx, xlsx, pdf: read and write Office files and PDFs
  • docs: Claude Docs, shareable docs people can comment on
  • google-workspace: edit Google Docs, Sheets and Slides

Research & prompting

  • deep-research: multi-source research reports
  • prompt-master: writes prompts for other AI tools
  • skill-creator: build and test your own skills
  • import-memory: bring memories over from ChatGPT etc.

Browser & computer control

  • chrome-browser: drives your real Chrome through the Claude in Chrome extension (works on all three OSes)
  • computer-use / built-in-browser: need the Claude desktop app (macOS and Windows only, so not available on Linux)

Artifacts

Claude Code can publish HTML pages, dashboards and decks to a private claude.ai link that you can choose to share. A page like this one could be published that way.

05Built-in commands I lean on

These ship with Claude Code on every OS. Type them at the prompt.

CommandWhat it does
/code-reviewReviews your current diff for bugs, at an effort level from low to max. --fix applies the fixes.
/simplifyCleans up changed code (reuse, simplification, efficiency) and applies the changes.
/security-reviewSecurity pass over pending changes.
/loopRe-runs a prompt on an interval, e.g. /loop 5m check the build.
/scheduleCloud agents that run on a cron schedule.
/fewer-permission-promptsScans your history and allowlists the read-only commands you always approve.
/initWrites a CLAUDE.md for a project so Claude knows how it builds.
/pluginBrowse, install and manage plugins and marketplaces.

06Toolchain Claude drives

The command-line tools Claude runs while working on my projects. Install only the groups you need.

Everyday CLI

  • git, ripgrep, jq
  • uv: fast Python package and venv manager
  • tmux: terminal multiplexer (WSL only on Windows)
brew install ripgrep jq tmux uv bash mawk
sudo apt install -y git ripgrep jq tmux
curl -LsSf https://astral.sh/uv/install.sh | sh
scoop install git ripgrep jq uv
# tmux: install WSL, then `sudo apt install tmux` inside it
wsl --install

Web / Drupal sites

  • Node 24 and Node 12 via nvmnvm-windows (old gulp builds need 12)
  • PHP 8 + Composer
  • Gulp + Sass theme builds; legacy Sass 3.2 / CoffeeScript 1.7 for Drupal 7 themes
  • Headless Chrome for screenshots and before/after checks
  • Database GUI: TablePlusTablePlusDBeaver (TablePlus's Linux build is limited)
  • SFTP: TransmitWinSCP (Transmit is Mac-only)FileZilla (Transmit is Mac-only)
nvm install 12 && nvm install 24
brew install php composer
brew install --cask tableplus transmit
nvm install 12 && nvm install 24
sudo apt install -y php-cli php-xml php-mbstring php-gd php-curl php-zip composer
sudo snap install dbeaver-ce
sudo apt install -y filezilla
nvm install 12
nvm install 24
scoop install php composer
winget install -e --id WinSCP.WinSCP
# TablePlus: download from tableplus.com

Apple / iOS

  • Xcode, Swift 6.4, xcodebuild, codesign
  • libimobiledevice (idevice_id, afcclient) to talk to an iPhone over USB

Building iOS/macOS apps needs Xcode, which only runs on a Mac. The Swift language itself runs here (see Language servers above). libimobiledevice works on Linux too. libimobiledevice has no good native Windows build, so skip it.

xcode-select --install
brew install libimobiledevice
sudo apt install -y libimobiledevice-utils usbmuxd

Game dev

  • Godot 4.7, with a godot command on the PATH so Claude can run headless tests
  • devkitPro (devkitARM, libctru, citro2d) for Nintendo 3DS homebrew
  • Azahar 3DS emulator for testing
brew install --cask godot
mkdir -p ~/.local/bin
ln -s /Applications/Godot.app/Contents/MacOS/Godot ~/.local/bin/godot
# Godot: download the Linux .zip from godotengine.org, then:
mkdir -p ~/.local/bin ~/apps
unzip Godot_v4*_linux.x86_64.zip -d ~/apps
ln -s ~/apps/Godot_v4*_linux.x86_64 ~/.local/bin/godot

# devkitPro (Debian/Ubuntu):
wget https://apt.devkitpro.org/install-devkitpro-pacman
chmod +x ./install-devkitpro-pacman
sudo ./install-devkitpro-pacman
sudo dkp-pacman -S 3ds-dev
winget install -e --id GodotEngine.GodotEngine
# devkitPro: run the graphical installer from
# github.com/devkitPro/installer/releases and tick "3DS Development"

For the headless godot command, put the Godot_*_console.exe from the godotengine.org .zip on your PATH as godot.exe.

Images & assets

  • ImageMagick: resize, crop, alpha checks
  • oxipng + pngquant: PNG compression
  • webp: WebP conversion
  • PhotoshopGIMP or Krita (Photoshop doesn't run on Linux) for manual touch-ups
brew install imagemagick oxipng pngquant webp
sudo apt install -y imagemagick pngquant webp
sudo apt install -y oxipng   # Ubuntu 24.04+ / Debian 12+; else see GitHub releases
sudo apt install -y gimp krita
scoop install imagemagick oxipng pngquant libwebp

Ubuntu's apt ImageMagick is often version 6, which uses convert instead of magick. Claude handles either.

Prompt: install a group for me

Prompt for Claude Code
Check which of these are already installed on my Mac and install only what's missing with Homebrew: ripgrep, jq, tmux, uv, imagemagick, oxipng, pngquant, webp, php, composer, libimobiledevice. Then show me a table of what was installed and the versions.
Prompt for Claude Code
Detect my Linux distro and package manager. Check which of these are already installed and install only what's missing: ripgrep, jq, tmux, uv, imagemagick, oxipng, pngquant, webp, php (cli + xml/mbstring/gd/curl/zip), composer. If a package isn't in my distro's repos, use the project's official install method. Show me each command before running anything with sudo, then give me a table of what was installed and the versions.
Prompt for Claude Code
I'm on Windows. Check which of these are already installed and install only what's missing, using winget for apps and Scoop for CLI tools (install Scoop first if needed): ripgrep, jq, uv, imagemagick, oxipng, pngquant, libwebp, php, composer. Then show me a table of what was installed and the versions.

07Local AI on a second machine

I run heavier AI models on a Mac Studio (M4 Max, 36 GB) on my home network. My laptop wakes it and connects over an SSH tunnel. It's optional, but it makes free local image generation possible.

On Linux/Windows the equivalent is a PC with an NVIDIA GPU (12 GB+ VRAM is comfortable). It's actually easier than on a Mac: CUDA runs fp8 models directly, so you don't need the GGUF workaround I use.

ComfyUI image gen

A node-based image generation server. It runs as a background service bound to localhost. Claude submits saved workflow JSON to it, so it can generate game sprites and site art without a paid API.

  • Z-Image Turbo: fast text-to-image (Apache 2.0)
  • Qwen-Image-Edit 2511: same character in new poses, views and recolours
  • BiRefNet: background removal for transparent sprites
  • ComfyUI-GGUF node: runs GGUF models on Apple Silicon (fp8 doesn't work on MPS)

Easiest route on Windows: the ComfyUI Desktop installer, or the portable NVIDIA .7z from the GitHub releases.

Ollama local LLM

Runs open-weight language models locally. Planned: qwen3.6:27b (Q4, about 17 GB) with context around 64K. Size the model to your RAM/VRAM. Claude Code can point at a compatible local endpoint through ANTHROPIC_BASE_URL.

brew install ollama
ollama pull qwen3.6:27b
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen3.6:27b
winget install -e --id Ollama.Ollama
ollama pull qwen3.6:27b

Prompt: set up ComfyUI like mine

Prompt for Claude Code (run on the Mac that will host it)
Set up ComfyUI on this Apple Silicon Mac: clone it to ~/ComfyUI, make a uv venv with Python 3.12 and PyTorch with MPS, and download Z-Image Turbo (bf16, with its qwen_3_4b text encoder and ae VAE) plus a BiRefNet background-removal node. Run it as a launchd agent bound to 127.0.0.1:8188 that starts at login and restarts if it crashes. Then export two API-format workflows to ~/ComfyWorkflows: plain text-to-image, and text-to-image followed by background removal that saves an RGBA PNG. Test both and show me the outputs.
Prompt for Claude Code (run on the Linux PC that will host it)
Set up ComfyUI on this Linux PC with an NVIDIA GPU. First check nvidia-smi works and tell me my VRAM. Clone ComfyUI to ~/ComfyUI, make a uv venv with Python 3.12 and the CUDA build of PyTorch, and download Z-Image Turbo (with its qwen_3_4b text encoder and ae VAE) plus a BiRefNet background-removal node. Run it as a systemd user service bound to 127.0.0.1:8188 that starts at login and restarts on failure. Then export two API-format workflows to ~/ComfyWorkflows: plain text-to-image, and text-to-image followed by background removal that saves an RGBA PNG. Test both and show me the outputs.
Prompt for Claude Code (run on the Windows PC that will host it)
Set up ComfyUI on this Windows PC with an NVIDIA GPU. First check nvidia-smi works and tell me my VRAM. Install ComfyUI (the portable NVIDIA build into %USERPROFILE%\ComfyUI, or ComfyUI Desktop if you think it's simpler), and download Z-Image Turbo (with its qwen_3_4b text encoder and ae VAE) plus a BiRefNet background-removal node. Make it start at login with Task Scheduler, listening on 127.0.0.1:8188. Then export two API-format workflows to %USERPROFILE%\ComfyWorkflows: plain text-to-image, and text-to-image followed by background removal that saves an RGBA PNG. Test both and show me the outputs.

08Custom tools Claude built for me

Small scripts Claude wrote that aren't published anywhere. Use the prompts to have Claude build your own version.

Live-site preview proxy

preview-proxy.mjs proxies a live website to localhost and swaps in my locally built CSS/JS, so I can see a change on the real site before deploying. It shuts down after 30 idle minutes. It's plain Node, so it runs on any OS. Only the “open Chrome” helper differs.

Prompt
Write ~/site-tools/preview-proxy.mjs (plain Node, no dependencies): usage `node preview-proxy.mjs https://site.com 8080 name=/local/file.css ...`. Proxy every request to the live site, serve the local file for any URL containing one of the names, rewrite links back to localhost, strip CSP and HSTS headers, and exit after 30 minutes with no requests. Also write a helper script for my OS that opens URLs in a separate Chrome profile at a width and height I pass in.

Remote ComfyUI helpers

A script that sends a Wake-on-LAN packet to the AI machine and opens an SSH tunnel to its ComfyUI, plus one that uploads a reference image and runs the pose/recolour edit workflow.

Prompt
I have ComfyUI on another machine at <IP> (user <name>). Write ~/ComfyWorkflows/studio-comfy.sh: send Wake-on-LAN to its MAC address (install wakeonlan if needed), wait for SSH, and open a background tunnel from local port 8188 to its 127.0.0.1:8188. `studio-comfy.sh stop` closes the tunnel. Set up key-based SSH first if it isn't already.
Prompt
I have ComfyUI on another machine at <IP> (user <name>). Write a PowerShell script %USERPROFILE%\ComfyWorkflows\studio-comfy.ps1: send a Wake-on-LAN magic packet to its MAC address, wait until SSH answers, and open a background tunnel (Windows' built-in OpenSSH) from local port 8188 to its 127.0.0.1:8188. `studio-comfy.ps1 stop` closes the tunnel. Set up key-based SSH first if it isn't already.

09Settings template

A cleaned-up copy of my settings. It lives at ~/.claude/settings.json%USERPROFILE%\.claude\settings.json. Merge it into yours; don't overwrite an existing file blindly.

settings.json
{
  "theme": "dark",
  "autoContinueAtUsageLimit": false,
  "modelSettings": {
    "claude-opus-5-5": { "effortLevel": "high" },
    "claude-sonnet-5": { "effortLevel": "xhigh" }
  },
  "enabledPlugins": {
    "han@han": true,
    "han-core@han": true,
    "han-coding@han": true,
    "han-planning@han": true,
    "han-research@han": true,
    "han-documentation@han": true,
    "han-communication@han": true,
    "han-github@han": true,
    "han-reporting@han": true,
    "clangd-lsp@claude-plugins-official": true,
    "universal-modder@universal-modder": true
  },
  "extraKnownMarketplaces": {
    "han": { "source": { "source": "github", "repo": "testdouble/han" } },
    "universal-modder": { "source": { "source": "github", "repo": "rehan-remade/universal-modder" } }
  }
}

Optional notification hooks. Add this "hooks" key inside the same object:

hooks · macOS / iTerm2
"preferredNotifChannel": "iterm2",
"hooks": {
  "Notification": [{ "hooks": [{ "type": "command", "command": "~/.config/iterm2/cc-status" }] }],
  "Stop":         [{ "hooks": [{ "type": "command", "command": "~/.config/iterm2/cc-status" }] }],
  "PreToolUse":   [{ "hooks": [{ "type": "command", "command": "~/.config/iterm2/cc-status" }] }],
  "PostToolUse":  [{ "hooks": [{ "type": "command", "command": "~/.config/iterm2/cc-status" }] }]
}
hooks · Linux (needs libnotify-bin)
"hooks": {
  "Notification": [{ "hooks": [{ "type": "command", "command": "notify-send 'Claude Code' 'Needs your input'" }] }],
  "Stop":         [{ "hooks": [{ "type": "command", "command": "notify-send 'Claude Code' 'Finished'" }] }]
}
hooks · Windows (needs: Install-Module BurntToast -Scope CurrentUser)
"hooks": {
  "Notification": [{ "hooks": [{ "type": "command", "command": "powershell -NoProfile -Command \"New-BurntToastNotification -Text 'Claude Code','Needs your input'\"" }] }],
  "Stop":         [{ "hooks": [{ "type": "command", "command": "powershell -NoProfile -Command \"New-BurntToastNotification -Text 'Claude Code','Finished'\"" }] }]
}

10One-shot setup prompt

After quick-start steps 1–4 (package manager, basics, Node, Claude Code), start claude in your home folder and paste this. Claude detects your OS, checks what you already have, and asks before anything that costs money or needs a key.

Prompt for Claude Code · any OS
Help me set up my computer to match a friend's Claude Code stack (they're on a Mac; I'm on Linux or Windows, so detect which, and on Linux detect the distro). Use the right package manager: apt/dnf/pacman on Linux; winget for apps and Scoop for CLI tools on Windows. Work step by step, check what's already installed first, and ask me before installing anything big (Godot, devkitPro, GPU drivers) or anything that needs an API key or payment. Show me any sudo/admin command before running it.

1. CLI tools: git, ripgrep, jq, uv, imagemagick, oxipng, pngquant, webp (libwebp on Windows), plus tmux on Linux. Ask whether I also want: php + composer (web dev), clangd (C/C++), Chrome, VS Code, a database GUI and an SFTP client.
2. Node: make sure a Node version manager is installed (nvm on Linux, nvm-windows on Windows) with Node 24 as the default. Ask whether I need Node 12 for old projects.
3. Plugin marketplaces: tell me the exact /plugin commands to add anthropics/claude-plugins-official, testdouble/han and rehan-remade/universal-modder, and to install han@han, clangd-lsp and universal-modder. I'll type them myself, since slash commands can't be run from a prompt.
4. Settings: merge into my Claude Code user settings.json (show me the diff first) theme "dark", effortLevel "high" for claude-opus-5-5 and "xhigh" for claude-sonnet-5, and the extraKnownMarketplaces entries for han and universal-modder. Offer to add desktop-notification hooks for Notification and Stop events that suit my OS.
5. Memory: confirm auto-memory is on and explain how I can ask you to remember things.
6. Finish with a table of everything installed and its version, plus anything you skipped and why.