Appearance
Use dev-skills in a repo
How to consume @chriscalo/dev-skills from another repository: run its tools, read its skills from local disk, and keep both up to date. The preferred method is the package, because it is the only one that delivers the runnable tools and pins a version per repo. A lighter content-only option is noted at the end.
The package is private. It is published to GitHub Packages, not the public npm registry, and installed with npm. Everything below assumes you can read the chriscalo/dev-skills repo and its GitHub Packages.
What you get
- The tools, behind one umbrella CLI:
dev-skills <command>(lint, the issue dashboard, PR-comment fetch, spec and eval, and more). See Run the tools. - The skills on disk, symlinked into your agent dirs so they auto-load by context, with an
AGENTS.mdpointer as a universal fallback. See Reference skills locally. - Versioned updates, propagated by Dependabot as small bump PRs you adopt on your schedule. See Keep it up to date.
1. Authenticate to GitHub Packages
GitHub Packages is a private registry, so npm needs a token to read it. Commit a token-free .npmrc that scopes the @chriscalo namespace to the registry and reads the token from an env var:
ini
# .npmrc (committed; no token in the file)
@chriscalo:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}Then supply NODE_AUTH_TOKEN per environment:
Local dev: put a
read:packagespersonal access token in your user~/.npmrc(never the repo), or exportNODE_AUTH_TOKENin your shell.ini# ~/.npmrc (personal, not committed) //npm.pkg.github.com/:_authToken=<your read:packages PAT>CI: the built-in
GITHUB_TOKENworks once the package grants the repo read access (see Keep it up to date). Give the jobpackages: readand pass the token tosetup-node:yamlpermissions: contents: read packages: read steps: - uses: actions/setup-node@v4 with: node-version: "20" registry-url: "https://npm.pkg.github.com" scope: "@chriscalo" - run: npm ci env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2. Install the package
sh
npm install --save-dev @chriscalo/dev-skillsKeep it on a caret range ("@chriscalo/dev-skills": "^1.0.0") so patches and minors flow in automatically and majors arrive as their own PR.
3. Activate the skills
Installing runs a postinstall hook that symlinks the skills into your repo's agent dirs automatically, so adding the dependency is usually enough. It writes .agents/skills/ always, and .claude/skills/ when a .claude/ dir exists, and gitignores those targets. It is idempotent.
Run it explicitly when the hook was skipped or you want to wire the auto-update config at the same time:
sh
npx dev-skills install # symlink skills + scaffold auto-update wiringWhen to run it by hand:
--ignore-scriptsenvironments. Some CI and orgs disable lifecycle scripts, so npm skipspostinstall. Runnpx dev-skills install(or add it to your ownpreparescript) to activate skills there.- After a major or a skill add/remove. Re-run it so symlinks reflect added or removed skills. Edits to existing skills need no re-run; the symlink already points at the updated file.
Flags: --all writes every known agent dir regardless of markers; --force overwrites a conflicting file or link.
4. Run the tools
Everything is under the umbrella CLI:
sh
npx dev-skills --help # discover commands
npx dev-skills code-style lint . # run a leaf tool
npx dev-skills github issues # nested: dev-skills -> github -> issuesShortcut the commands you use often. Two supported ways, both stable across versions (command names are a versioned contract):
npm script (travels with the repo, so every contributor and agent gets it):
json{ "scripts": { "lint": "dev-skills code-style lint ." } }Shell alias for interactive use:
alias lint='dev-skills code-style lint'.
5. Point your AGENTS.md at the skills
Add a pointer so any agent, even one with no symlink support, can find the skills on local disk. Paste this into the consuming repo's AGENTS.md (or CLAUDE.md):
md
## Skills
This repo uses `@chriscalo/dev-skills`. Read skills from local disk; do not
fetch the website. Find a skill's path with `npx dev-skills path <skill>`, e.g.
`npx dev-skills path git`. The skills are also symlinked under `.agents/skills/`
(and `.claude/skills/` when present).6. Reference skills locally
The skills land on disk, so an agent reads them without the website or a network:
sh
npx dev-skills list # list available skills
cat "$(npx dev-skills path git)/git.md" # read a topic from diskThe symlinks under .agents/skills/ and .claude/skills/ are what make skills auto-load by context. The AGENTS.md pointer covers agents whose project-local skill dir is not yet supported.
One level per agent. If you pin dev-skills at the project level (
.claude/skills/) while also having it globally in~/.claude/skills/, the personal copy wins on a name clash and defeats per-repo version pinning. Pick one level per agent.
Keep it up to date
Updates propagate as Dependabot bump PRs. Two one-time pieces:
Grant the repo read access (done on the package, once per repo). In the
@chriscalo/dev-skillspackage settings, under Manage Actions access, add this repo (or the whole account) with the Read role. Dependabot then authenticates to GitHub Packages with its ownGITHUB_TOKEN; there is no PAT, no Dependabot secret, and noregistries:block to add.Scaffold the bump config (done by the install step).
dev-skills install(ordev-skills scaffold) writes three committed files, skipping any that already exist:.github/dependabot.yaml: tells Dependabot to watch npm deps weekly..github/workflows/dev-skills-adopt-major.yaml: on a major bump, asks your coding agent to apply the shipped migration to the PR branch (see below)..github/workflows/dev-skills-automerge.yaml: opt-in, default off, auto-merges patch and minor bumps once CI is green.
Commit them.
With those in place and the dependency on a ^ range, Dependabot files a bump PR whenever a new version publishes; your CI runs and merging adopts the update.
Auto-merging patch and minor bumps (opt-in)
Patch and minor bumps are non-breaking by construction (see packages-versioning), so you can let them merge themselves once you trust the pipeline. It is off by default. To turn it on, set the repo variable DEV_SKILLS_AUTOMERGE to true (Settings > Secrets and variables > Actions > Variables). It requires auto-merge enabled in repo settings and branch protection that requires your CI checks, so a check that quietly got stricter goes red and blocks the merge. Leave it off for a repo with thin or no CI, where green would mean nothing. Majors never auto-merge.
Adopting a major (hands-off, then you review)
A major bump arrives as its own PR. The scaffolded dev-skills-adopt-major.yaml workflow asks the Copilot coding agent to read the release's migration (node_modules/@chriscalo/dev-skills/migrations/<version>.md) and apply it to the PR branch. The PR then runs your CI and waits for your review; nothing merges automatically. You approve the result. This needs the Copilot coding agent enabled in the repo; if you use a different agent, swap the request step in that workflow.
Renovate (upgrade path)
Dependabot is the default and needs no third-party infrastructure. If you later want fleet-wide shared config or native auto-merge everywhere, Renovate is the documented upgrade path: install the Mend app on your account, extend one shared preset from every repo, and use Renovate's automerge option. Switching bots changes nothing else here.
Lighter option: content only, no package
If a repo only wants to read the skills and does not need the tools or version pinning, the global skills installer also targets a single repo:
sh
npx skills add chriscalo/dev-skillsThis symlinks the skills content straight from GitHub with no .npmrc and no dependency entry. It does not deliver the runnable tools and has no lockfile or SemVer pin, so it is not the preferred method; use the package for anything beyond reading skills.
See also
- Publish to GitHub Packages: the publish side of this pipeline.
- Versioning a skills package: how the version number is decided, for maintainers.
- Installing Dev Skills: the machine-global installer this builds on.