Know when your Claude Code skills change.
Skills are folders of instructions your coding agent reads and follows. Axela watches the ones you installed from a publisher you chose: if those files stop matching what the publisher signed, it saves your copy, puts the published one back, and tells you. Skills you wrote yourself are never touched.
Start with the skills you already have
Before anything is installed or signed, look at what is already on your machine: every file that runs, every reach for the network, every credential path touched. Under a second, offline, no account.
brew install random1st/tap/skillctl skillctl lint ~/.claude/skills
Read what you have
skillctl lint — a second, offline, no account, your own skills.
See a change caught
skillctl demo — a minute, in a sandbox, nothing of yours touched.
What this catches, and what it does not
It catches
A skill you installed being edited afterwards — by anything on the machine, including the agent itself. That is the whole gap: nothing else looks at those files again after install.
Your edit is not lost
The changed copy is saved before the published one goes back, and
skillctl adopt keeps it if the change was yours.
It does not catch
A skill that was harmful when it was published. A signature tells you who wrote those bytes and that nobody changed them since — it does not tell you the instructions are sensible. A matching copy does not mean a skill is safe.
It cannot stop
Anything running as you — it could edit the checker too. A change is noticed and put back, not prevented.
See a change caught and restored
Try the demo on your computer
Install the checker on macOS, then run the demo:
brew install random1st/tap/skillctl skillctl demo
The demo changes a sample skill, catches the change and restores its approved copy inside a sandbox. No account needed. It does not check or change your own installed skills.
Axela's published command is currently skillctl.
If Homebrew is unavailable, use the release downloads.
Linux installation instructions.
Follow public skills with terminal commands
These optional setup commands use a POSIX shell and need Git, curl and the claude CLI on PATH.
1. Check the public source
These downloads are public keys. The publisher's key identifies whose skills you choose to follow; the notary's key checks the second signature.
curl -fL https://raw.githubusercontent.com/random1st/axela-skills/main/catalog.pub -o axela-publisher.pub && curl -fL https://notary.axela.app/notary.pub -o axela-notary.pub && skillctl subscribe https://github.com/random1st/axela-skills \ --catalog https://notary.axela.app/v1/catalogs/random1st/axela-skills \ --key axela-publisher.pub --notary-key axela-notary.pub && skillctl sync --report-only
A first check may say nothing is installed yet. That checks the catalog; it does not mean a skill on your computer has been verified.
If the check says catalog has expired, stop here and ask
the publisher to renew it. An unavailable source also needs to be fixed before installation.
You can try skillctl demo meanwhile: it demonstrates checking and restoring a skill
in an isolated sandbox. Creating an organisation will not repair this public catalog.
2. Install one skill and check it
Run this only after the source check succeeds. It checks again before installing, then checks what your client actually installed. Every command stops if the previous one fails. Use whichever client you work in — both are checked the same way.
skillctl sync --report-only && claude plugin marketplace add random1st/axela-skills && claude plugin install test-driven-development@axela-skills --scope user && skillctl sync --report-only
In Codex, the same four steps:
skillctl sync --report-only && codex plugin marketplace add random1st/axela-skills && codex plugin add test-driven-development@axela-skills && skillctl sync --report-only
Continue only when the last check reports at least 1 verified and 0 needing attention, with no unchecked marketplace. If it reports zero verified or an error, stop and resolve that finding first.
3. Turn on checks before each session
skillctl hook install --apply
After the hook is installed, restart Claude Code. The installed skill is now checked before sessions, and local changes can be restored from its signed source.
Ask your agent
One command, then ask in words.
# Claude Code claude mcp add --transport http axela https://axela.app/mcp # Codex codex mcp add axela --url https://axela.app/mcp
What happens next
Say “Set up this computer for Axela”. It signs you in through the browser. After that you ask for the rest the same way: publish this repository's skills, tell me what changed on that machine, close somebody's access.
Both clients are checked the same way, each with its own session hook. Codex reviews a hook before it runs it, so it asks you to trust this one the next time it starts; until you do, nothing is checked.
Set up your organisation or publish skills
Publishing is invite-only during beta.
Optional: connect to your organisation
Install the local checker, add it to your agent, and sign in when the browser opens. Your agent handles the setup and confirms that installed skills were checked and the report reached your organisation.
# Homebrew on macOS.
brew install random1st/tap/skillctl
skillctl setup
On Linux, follow the installation steps;
Windows binaries are in the release archive.
Then run skillctl setup.
Restart Claude Code or Codex and say "Connect this computer to Axela." Choose your organisation in the browser, then return to your agent to finish. If Codex asks to approve the session check, confirm it there.
To share your own skills, open their repository and say "Publish these skills to Axela for my organisation." You approve the setup in the browser and the publication changes in your agent. It confirms when the exact catalog is published.
Or type it yourself
skillctl connect skillctl status --refresh
Publishing from a repository: skillctl publish --org your-organisation.
The command remembers your setup and tells you the next step. Renew before expiry with
skillctl publish --renew, review the renewal, then submit it.
Which repositories can be signed
Whatever your repository already publishes, in the shape it already
publishes it. A Claude Code marketplace is read from
.claude-plugin/marketplace.json, a Codex plugin from
.codex-plugin/plugin.json, and a repository that has both is read as the
marketplace, because that is the broader statement of what it ships.
Codex has no marketplace format of its own — it clones a repository and reads the Claude one. Its plugin manifest lists skill directories rather than plugins, so each skill becomes an entry and carries the plugin's version, which is the only version Codex has.
Cursor has nothing here to sign: it installs nothing from a marketplace, and
its skills are plain directories with no publisher behind them. What it does have,
skillctl lint reads — the contents, without a signature to check them against.
How checks work and what they guarantee
The publisher signs a record of approved files. We download the repository, look at what the skills do, check the files against that record and add a second signature. Your machine checks both signatures before accepting it. The publisher's private key stays with them.
But does this mean a skill is safe? No. A signature identifies its publisher and lets you check for changes; it cannot guarantee that instructions are safe to run.
The session check runs inside Claude Code today. Connected machines refresh revocations at session start or sync. An offline computer remains stale until it reconnects.
Prefer to self-host? The source is available under Apache-2.0.