Use the trackcn CLI to sync files, directories, commits, pull requests, and agent skills from GitHub into a codebase while preserving local edits. Read this before running trackcn commands or modifying trackcn-managed files.
npx skills add https://github.com/vercel-labs/trackcn --skill trackcn
trackcn syncs files from GitHub into a codebase and records their upstream
versions in trackcn.json. It protects local edits with a three-hash merge
workflow so an agent can reconcile upstream changes deliberately.
trackcn status --json
trackcn pull --dry-run --json
trackcn pull --json
Read trackcn.json before modifying a tracked file. A file listed under a
source's files map is managed by trackcn. If you need a local override, prefer
adding a separate file outside the managed path instead of hand-editing the
tracked file.
# Raw file
trackcn add https://example.com/config.txt
# GitHub file or directory
trackcn add https://github.com/owner/repo/tree/main/path/to/directory
trackcn add https://github.com/owner/repo/blob/main/path/to/file.ts
trackcn add owner/repo/path/to/directory
trackcn add owner/repo/tree/main/path/to/directory
# Gist, commit, commit range, or pull request
trackcn add https://gist.github.com/user/abc123
trackcn add https://github.com/owner/repo/commit/abc1234
trackcn add https://github.com/owner/repo/compare/v1.0...v2.0
trackcn add https://github.com/owner/repo/pull/42
Add a local destination as the last argument when the upstream path should not
be written at the repository root:
trackcn add owner/repo/path/to/skill ./.cursor/skills/my-skill
For multiple sources, use a destination ending in /. trackcn derives one
subdirectory per source:
trackcn add \
owner/repo/skills/frontend-design \
owner/repo/skills/testing \
./.cursor/skills/
Use --dry-run to preview writes, --force to overwrite local files
deliberately, and --json when another tool will consume the result.
If a repository defines a root shadcn registry.json, inspect its install
options and curated bundles with:
trackcn add owner/repo
Install and subscribe to a curated bundle with:
trackcn add owner/repo/item
trackcn add owner/repo/item#v1.0.0
Use trackcn add owner/repo . when the complete repository should be installed.
For an unambiguous repository path, use owner/repo/tree/ref/path or
owner/repo/blob/ref/path. A short owner/repo/path resolves a curated
registry item first and falls back to the repository's actual default branch.
trackcn consumes shadcn's GitHub registry format instead of defining a competing
catalog schema. Curated bundles are recorded in trackcn.json, so use
trackcn status and trackcn pull to keep them current.
trackcn pull --dry-run --json
trackcn pull --json
When upstream changed and the local file still matches the stored hash, trackcn
updates it directly. When both upstream and the local file changed, trackcn
prepends a <<<<<<< trackcn marker block and reports the file in merged.
After a merge:
merged.blocks as the local version. Successive upstream changes stack as separate
blocks, newest first — apply them oldest-to-newest.
(old upstream → new upstream), so applying it never removes local edits.
<<<<<<< trackcn and>>>>>>> trackcn lines.
trackcn status --json and confirm there are no unresolved merges.Do not run trackcn pull --force unless discarding local edits is intentional.
trackcn status
trackcn status --json
status exits 0 when all sources are current and managed files match their
stored hashes. It exits 1 when an upstream moved, a managed file changed
locally, or a merge marker is unresolved. In CI:
- run: npx trackcn status
# Stop tracking the source but leave its files on disk
trackcn remove owner/repo/path
# Stop tracking the source and delete its tracked files
trackcn remove owner/repo/path --hard
Use a partial URL when it uniquely identifies one source. Inspect
trackcn.json first when using --hard.
Agent skills are ordinary GitHub directories. Track project-specific skills
inside the repository:
trackcn add https://github.com/owner/skills/tree/main/skills ./.cursor/skills
git add trackcn.json .cursor/skills
Run trackcn from $HOME instead when you want a user-level manifest and
user-level skill directory:
cd ~
trackcn add https://github.com/owner/skills/tree/main/skills ./.cursor/skills
Do not hand-edit trackcn-managed skill files. Track a fork or place a local
override outside the managed directory when different behavior is required.
Attach a shell command that should run after a source changes:
trackcn add owner/repo/icons ./icons --post-pull "npm run build:icons"
Hooks execute shell commands from trackcn.json. Inspect unfamiliar manifests
before pulling.
Set TRACKCN_GITHUB_TOKEN, GITHUB_TOKEN, or GH_TOKEN when GitHub API
requests need authentication or a higher rate limit:
TRACKCN_GITHUB_TOKEN=... trackcn pull
For interactive use, trackcn can store a browser login outside the manifest:
trackcn auth login
trackcn auth status
trackcn auth logout
A stored login lives in ~/.trackcn/auth.json, never in trackcn.json. In CI
or headless environments, use a token env var instead — the browser flow only
auto-starts at an interactive terminal.
trackcn skills get trackcn
trackcn skills path trackcn
Take vercel-labs/trackcn from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npx.
Without those the skill loads but fails at the first command.