Enabling abicheck skills in your repository¶
Agent Skills describes what the abicheck skills do. This page is for maintainers of a C/C++ library who want every contributor's coding agent (Claude Code, GitHub Copilot, OpenAI Codex, Cursor, Gemini CLI) to pick those skills up automatically when someone working in their repository asks "will this break our users?" — without each contributor discovering and installing them by hand.
The short version:
- Install the skills into the repository and commit them.
- Make sure the
abicheckCLI is available wherever agents run. - Add a few lines to your
AGENTS.md/CLAUDE.mdpointing agents at them. - Optionally, let the CI skill wire a real compatibility gate into GitHub Actions.
Which skills to enable¶
| Skill | Enable it when… |
|---|---|
check-abi-compatibility |
Your repository ships a shared library whose consumers you don't rebuild. This is the one most library repositories want: reviewers and agents get a verdict backed by a real comparison instead of a reading of the diff. |
explain-abi-change |
Your repository consumes shared libraries (an application, a plugin host, a distribution recipe) and developers hit undefined symbol, version ... not found, or post-upgrade crashes. |
set-up-abi-compatibility-ci |
You don't have an ABI gate in CI yet, or have one that never fails. Usually run once; keeping it installed lets a later contributor repair the workflow. |
All three are preview — see the evaluation status on
Agent Skills. They are safe to enable: each one refuses to
state a compatibility verdict without a comparison it actually ran, and never
changes your environment or widens a suppression on its own (the rules ship
inside every skill as references/shared/safety-invariants.md).
Step 1 — install the skills into the repository¶
From the repository root:
npx skills add abicheck/abicheck --copy # all three skills
npx skills add abicheck/abicheck --copy -s check-abi-compatibility # just one
npx skills add abicheck/abicheck -l # list what is offered
Without -g the skills CLI
installs into the project, into the directory each agent reads (for
example .claude/skills/ for Claude Code, .agents/skills/ for Codex and
other agents that follow the portable layout). Use --copy so each agent
directory gets real files: in its default symlink mode the CLI links agent
directories to a canonical .agents/skills/ copy, and committing only the
links would hand contributors broken links. (If you do keep symlinks, commit
.agents/skills/ together with them.)
Commit the installed directories. That is what turns a per-developer setup into a repository setting:
- every contributor, and every cloud or CI agent that clones the repository, gets the same skills with zero setup;
- the exact skill text is pinned by your own git history, so an upstream update never changes agent behavior in your repository silently;
- updates arrive as an ordinary diff you can review (see Keeping them current).
Skills are executable instructions. Read what you commit, the same as any other third-party code you vendor.
If you'd rather not commit them, document the one-line install in your
CONTRIBUTING.md instead — but then each developer's copy can differ, and
cloud agents won't have the skills unless their setup script installs them.
Step 2 — make the abicheck CLI available¶
The skills drive the abicheck CLI through the shell; they do not bundle it.
Each skill checks abicheck --version against its declared range (currently
>=0.6.0,<0.7.0) and declines to run rather than failing halfway.
- Developers: add
abicheckto your dev requirements, or documentpipx install abicheckinCONTRIBUTING.md. Pin a version inside the skills' range. - pixi / conda environments: add
abicheckto the dev feature sopixi installprovides it. - Cloud agents (Claude Code on the web, Copilot coding agent, Codex
cloud): install it in the environment's setup script or session-start
hook, e.g.
pip install "abicheck>=0.6,<0.7". An agent that has the skill but not the CLI will correctly refuse to give a verdict — which is safe, but not useful. - Header-level analysis uses
castxmlby default; installing clang alone does not switch backends. To use clang instead, setABICHECK_AST_FRONTEND=clang(or pass--ast-frontend clang). Either way it needs your library's build configuration; see evidence and build-context flags. Without them the skill still works on binaries alone, and says the conclusion is narrower.
Step 3 — point agents at the skills¶
Skills trigger from their own description, so this step is optional, but a
short note in your repository's agent instructions makes the behavior
predictable and tells the agent project-specific facts it would otherwise
have to rediscover. Add something like this to AGENTS.md (and reference it
from CLAUDE.md / .github/copilot-instructions.md if you keep those):
## ABI/API compatibility
This repository ships `libfoo.so`, consumed by applications we do not rebuild.
Any change to `include/foo/` or to exported symbols must keep binary
compatibility within a major version.
- To review a change for compatibility, use the `check-abi-compatibility`
skill. Do not claim a change is ABI-safe from reading the diff alone.
- Public headers: `include/foo/`. Build: `cmake -B build && cmake --build build`.
The library is `build/libfoo.so`.
- Baseline: the latest release's snapshot, `abi/libfoo-<version>.abi.json`
(or: the merge base with `main`, built the same way).
- Intentional breaks are recorded in `.abicheck.yml`; never add a suppression
to make a check pass — raise it with a maintainer.
The facts worth stating are exactly the ones a skill otherwise has to infer: which headers are public, how to build the library, and what the baseline is. Getting those right is most of the difference between a precise verdict and a noisy one.
Step 4 — add a CI gate (optional)¶
A skill helps whoever is talking to an agent; a CI gate checks every pull
request. They complement each other. Ask an agent with the
set-up-abi-compatibility-ci skill to "set up ABI compatibility checks for
this library in GitHub Actions". It inspects the build, public headers, and
release process, picks a baseline strategy, and writes a pinned,
least-privilege workflow with a staged (report-only first) rollout and a
setup report explaining each choice. Review the generated workflow like any
other PR. To do the same by hand, see GitHub Action and
CI gating.
Keeping them current¶
npx skills update # refresh installed skills from their source
git diff # review what changed in the skill text
Commit the update as its own PR (for example chore: update abicheck agent
skills), and bump your pinned abicheck version in the same PR when a
skill's declared abicheck-version-range changes — the two move together.
Checklist¶
- [ ] Skills installed in the project (not only globally) and committed.
- [ ]
abicheckin dev requirements / environment, inside the skills' version range. - [ ] Cloud-agent setup script installs
abicheck. - [ ]
AGENTS.mdnames the public headers, build command, and baseline. - [ ] (Optional) CI gate in place, via the CI skill or by hand.
- [ ] Skill updates reviewed as ordinary PRs.