skills/skills-manager/SKILL.md
Manage AI agent skills backup and sync via the skills-manager CLI. Use when the user asks to push skills to GitHub, pull skills from GitHub, link or symlink skills to agents, sync skills across machines, set up project-level skills, or manage the ~/.agents/ directory. Also triggers on "sm push", "sm pull", "sm link", "backup my skills", "restore skills on new machine", "link --project", "project skills setup", "sync agents skills", or any question about the skills-manager or sm CLI.
npx skillsauth add tc9011/my-skills skills-managerInstall 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.
CLI companion to vercel-labs/skills — backup, restore, and symlink AI agent skills via GitHub.
Scope boundary: This tool backs up and syncs skills you already have. It does NOT install new skills from the registry — that's
npx skills add. If the user wants to install a new skill, point them tonpx skills add <repo>instead.
| Goal | Command |
|------|---------|
| Backup skills to GitHub | sm push |
| Restore skills on new machine | sm pull --repo owner/name |
| Re-link skills to agents | sm link |
| Link skills to a project | sm link --project |
# If globally installed
sm push # short alias
skills-manager push # full name
# Without installing — use the bundled wrapper script
export SM="$HOME/.agents/skills/skills-manager/scripts/sm.sh"
"$SM" push
Requires Node.js >= 20. GitHub CLI (gh) recommended for auth.
If neither sm nor skills-manager is found, install first:
npm install -g @tc9011/skills-manager
| Path | Purpose |
|------|---------|
| ~/.agents/ | Git repo root (push/pull target) |
| ~/.agents/skills/ | Canonical skills directory |
| ~/.agents/.skill-lock.json | Lock file (READ ONLY — owned by vercel-labs/skills) |
Auth is optional. If git already has credentials configured (SSH keys, macOS Keychain, credential manager, etc.), push/pull work without any extra setup.
When git cannot authenticate on its own, the CLI looks for a token in this order:
gh auth token — GitHub CLI (recommended)$GITHUB_TOKEN — environment variable$GH_TOKEN — environment variableIf none are found, git attempts the operation without a token — this works for public repos but fails for private ones.
The link command never requires authentication.
If push/pull fails with a permission or authentication error:
gh is installed: run gh --versiongh exists: run gh auth login to authenticate, then retrygh missing: set a token: export GITHUB_TOKEN=ghp_your_token_here, then retry~/.ssh/ has a valid key added to GitHub and origin uses the [email protected]: URL formatTokens are used transiently in-memory — they are never persisted to .git/config.
Commit and push ~/.agents/ to GitHub.
sm push # auto-generated commit message
sm push -m "add new skill" # custom message
First-time behavior:
~/.agents/ is not a git repo, auto-runs git initorigin remote exists, prompts for owner/namegh CLI is installed, offers to create the repo on GitHub automaticallygh is not installed, shows a note telling the user to create the repo manually at https://github.com/newPossible outcomes:
Skills pushed successfully! — new commit created and pushedUnpushed commits pushed successfully! — working tree clean, but local was aheadNo changes to push — already up to date. — nothing newPush rejected — see Troubleshooting belowPull from GitHub. Auto-runs link afterward unless --skip-link is passed.
sm pull --repo owner/name # first time — specify repo
sm pull # subsequent runs — uses existing remote
sm pull --skip-link # pull only, don't re-link
First-time behavior:
--repo and no existing origin remote, prompts for owner/name~/.agents/ doesn't exist yet, clones into itPossible outcomes:
Skills cloned successfully! — fresh clone on new machine, auto-runs linkSkills updated from remote. — pulled new changes, auto-runs linkAlready up to date. — no new changes, skips linkRebase conflict — see Troubleshooting belowRead .skill-lock.json, create relative symlinks from each agent's global skills directory to ~/.agents/skills/.
sm link # interactive prompt
sm link --agents cursor opencode # non-interactive, skip prompt
Interactive behavior:
The agent selector has two sections:
~/.agents/skills/ as their path.Pre-selection priority: saved config > .skill-lock.json > agents already existing on disk.
When --agents is provided, the interactive prompt is skipped entirely. Use this for scripting and AI agent automation:
sm link --agents cursor opencode claude-code
Link or copy skills to the current working directory.
sm link --project # interactive
sm link --project --agents cursor claude-code --skills my-skill # non-interactive (copy is default)
sm link --project --agents cursor claude-code --skills my-skill --mode symlink # explicit symlink
Interactive flow (3 steps):
--skills to skip) — choose which skills to include--mode defaults to copy in the CLI. Only appears if linkCommand is called programmatically without defaults--agents to skip) — same searchable multiselect with locked universal sectionCopy vs symlink:
copy (default, recommended) — creates independent files in project. Overwrites existing skill dirssymlink — creates absolute symlinks pointing to ~/.agents/skills/. Existing non-symlink dirs are skippedAgents that share the same projectPath (e.g., trae and trae-cn both use .trae/skills) are deduplicated — one operation per unique path.
For AI agents: the fully non-interactive version is almost always what you want:
sm link --project --agents cursor opencode claude-code --skills my-skill --mode copy
npm install -g @tc9011/skills-manager
sm pull --repo owner/my-skills # clone + auto-link
sm pull # fetch latest + re-link
sm push # backup local changes
cd /path/to/project
sm link --project --skills my-skill --agents cursor opencode claude-code
npx skills add some-repo # install via vercel-labs/skills
sm link # re-link to all agents
sm push # backup the new skill
Error: Push rejected — remote contains commits that you do not have locally.
Fix:
sm pull # pulls and rebases
sm push # retry
Or manually:
cd ~/.agents
git pull --rebase origin main
sm push
Error: Rebase conflict detected. Your local skills have diverged from the remote.
The CLI auto-aborts the failed rebase. To resolve:
cd ~/.agents
git fetch origin
git rebase origin/main # resolve conflicts manually
# OR if you want to discard local changes:
git reset --hard origin/main
Error: No skills found in ~/.agents/skills.
This means ~/.agents/skills/ is empty or doesn't exist. Either:
sm pull --repo owner/name to restore from backupnpx skills add <repo>Error: Unknown agent ID(s): foo. Run with no --agents to see available IDs.
The --agents flag only accepts valid agent IDs from the 46-agent registry. Run sm link without --agents to see the interactive list.
Symptom: Git errors like Authentication failed, Permission denied, or Repository not found.
This means git has no credentials and no token was found. See the "Fixing Auth Failures" section above.
On first push or pull, the CLI auto-initializes git. If this somehow fails:
cd ~/.agents
git init
git remote add origin https://github.com/owner/my-skills.git
sm push
.skill-lock.json is READ ONLY — never create, modify, or delete it~/.agents/ is the git repo root (not ~/.agents/skills/).git/confignpx skills add for thattools
Three.js interaction - raycasting, controls, mouse/touch input, object selection. Use when handling user input, implementing click detection, adding camera controls, or creating interactive 3D experiences.
development
Three.js geometry creation - built-in shapes, BufferGeometry, custom geometry, instancing. Use when creating 3D shapes, working with vertices, building custom meshes, or optimizing with instanced rendering.
tools
Three.js scene setup, cameras, renderer, Object3D hierarchy, coordinate systems. Use when setting up 3D scenes, creating cameras, configuring renderers, managing object hierarchies, or working with transforms.
tools
Three.js animation - keyframe animation, skeletal animation, morph targets, animation mixing. Use when animating objects, playing GLTF animations, creating procedural motion, or blending animations.