One command that brings every machine on a team to the same Claude Code toolset. Runs on Windows, Linux and macOS.
Skills come from two sources:
| Source | Contents | Example command |
|---|---|---|
Leonxlnx/taste-skill |
Interface design that avoids templated output | /design-taste-frontend |
mattpocock/skills |
Engineering: TDD, review, diagnosis | /tdd, /code-review, /diagnosing-bugs |
Plus:
| Component | What it is | Invoked by |
|---|---|---|
| ponytail plugin | Pushes toward minimal code | /ponytail-review, /ponytail-audit |
| chrome-devtools MCP | Opens real Chrome for network, console and performance | used automatically when debugging the web |
| CLAUDE.md | Shared working agreements | applied every session |
| SessionStart hook | Reminds the model of the review skills, warns when the install is behind the repo, and re-syncs weekly in the background | applied every session |
| Review-usage log | Records which review skills the model ran, so the commit hook can note the ones it did not | at each skill run and commit |
| ponytail default | lite |
change with /ponytail ultra |
Node.js 22 or newer, Claude Code (the claude CLI), Google Chrome, git.
GitHub CLI (gh) is needed by the pr-convention skill to read labels and
open pull requests. setup.mjs installs it through brew on macOS or winget
on Windows. On Linux it prints instructions instead, to avoid touching sudo.
After installation, run
gh auth loginyourself. Signing in is interactive and personal, so the script never does it for you.
git clone <repository-url>
cd ai-devkit
node setup.mjsOn Windows, use PowerShell or Git Bash with the same command.
| Command | Meaning |
|---|---|
node setup.mjs |
Sync: back up old skills, reinstall both bundles, so every machine matches |
node setup.mjs --keep-extras |
Add only, keeping whatever skills the machine already has |
node setup.mjs --dry-run |
Print what would happen, change nothing |
node setup.mjs --desktop |
Also add the desktop control MCP. Off by default |
node setup.mjs --pull |
Fast-forward the clone first, then sync. Used by the background auto-refresh |
No. Sync moves the old skill directories rather than deleting them:
~/.claude/skillsbecomes~/.claude/skills.backup-<timestamp>~/.agents/skillsbecomes~/.agents/skills.backup-<timestamp>
Both bundles are then reinstalled from source at their latest version. Renaming a
.backup-* directory restores the previous state. Delete the backups once you
are satisfied.
Why reinstall rather than remove a fixed list? Skill repositories grow over time, so a hardcoded list goes stale. Reinstalling from source keeps every machine on the current version.
--desktop adds an MCP that gives Claude Code full mouse, keyboard and screen
control of the machine. It drives native apps that live outside the browser,
such as Postman desktop. Off by default, because the reach is the whole desktop.
| OS | Server | What setup does | Left to you |
|---|---|---|---|
| Windows | CursorTouch/Windows-MCP, by UI element name | installs uv (Astral installer), adds the MCP |
nothing |
| macOS | CursorTouch/MacOS-MCP | installs uv, adds the MCP |
grant Accessibility and Screen Recording to your terminal |
| Linux | agent-sh/computer-use-linux | installs the npm package, adds the MCP | sudo apt install ydotool at-spi2-core, then computer-use-linux setup |
The npm and uv installs are user level. Anything needing root stays with you, the
same way gh is on Linux. Keep the Claude Code permission prompt on so each
action is confirmed. Remove a server with claude mcp remove <name> -s user.
- Symlinks: skills install with
--copy, writing real files, because symlinks are unreliable on Windows. - Ponytail config path follows the platform, either
~/.config/ponytailor%APPDATA%\ponytail. - CLAUDE.md is always overwritten, because the shared file is the standard
and a rerun must bring the machine back to it. Any existing file is copied to
~/.claude/CLAUDE.md.backup-<timestamp>first, so personal notes are recoverable. Keep such notes in a separate file rather than inCLAUDE.md.
claude plugin list # ponytail@ponytail (enabled)
claude mcp list # chrome-devtools connected
# open a new session, then type /tdd and /design-taste-frontendsetup.mjs installs hooks/commit-msg into ~/.claude/git-hooks/ and points
git config --global core.hooksPath at it, covering every repository on the
machine.
It rejects a commit when the subject is not a valid Conventional Commit, uses an unknown type, omits the scope, contains uppercase, or exceeds 72 characters. Merge, revert, fixup and squash commits are skipped.
✗ Commit rejected: not a valid Conventional Commit.
Received : update stuff
Expected : <type>(<scope>): <description> (scope REQUIRED)
Notes:
- Repositories using Husky are unaffected. Husky sets
core.hooksPathlocally, and local configuration wins over global. - A plain
.git/hooks/commit-msgis bypassed. That is the trade-off of a globalcore.hooksPath. - If the machine already sets
core.hooksPath, setup leaves it alone and warns. - Skip once with
git commit --no-verify. Remove entirely withgit config --global --unset core.hooksPath.
The local hook can be skipped with --no-verify and does not run for commits
made through the web UI. .github/workflows/commit-lint.yml is the last line of
defence and runs three jobs:
| Job | Purpose |
|---|---|
self-test |
Runs hooks/test-commit-msg.sh, 17 cases, so a broken hook cannot land |
diction |
Rejects em dashes, clause-joining semicolons and other AI writing tells |
commits |
Validates every commit in a pull request using hooks/commit-msg itself |
Reusing the hook as the single source of truth means the local rules and the CI rules cannot drift apart.
To adopt this elsewhere, copy hooks/ and .github/workflows/commit-lint.yml,
then enable branch protection requiring these checks before merge.
A red banner reading Failed to install ... PromptScript: PromptScript does not support global skill installation is not an error. PromptScript is one agent
among many and does not support global installs. Claude Code still receives
everything, as the (copied) lines just above show. Current versions pass
--agent claude-code, so the banner no longer appears.
claude plugin uninstall ponytail@ponytail
claude mcp remove chrome-devtools -s user
npx -y skills remove --global --allApache-2.0. See LICENSE.