Use the same agent skill in Claude Code, Cursor, and Codex
By Randy Olson, Co-Founder & CTO, Goodeye
Keep one hosted copy of the skill in Goodeye and point each tool's skills directory at it, so Claude Code, Cursor, and Codex read the same skill instead of three copies that drift apart. You publish the skill once, register each tool's directory as a sync target on every machine you work from, and pull. After that, editing the hosted copy updates all of them, with the skill's verifiers attached at the same version.
You wrote a skill that works. Then you open Cursor instead of Claude Code and it is not there, so you copy the file across. Later you sharpen one line in one copy and forget the other two. Now the same skill behaves differently depending on which tool you happened to open, and adding a second laptop and one teammate turns three copies into six.
Copying more carefully does not solve this. Keeping one hosted copy that every tool reads does. This guide walks through that: publish once, point each tool at it, and pull.
Publish the skill once
Goodeye is the hosted service the skill lives in. You reach it with the goodeye CLI, an MCP server, or a REST API. The CLI needs an account and a one-time sign-in, both covered in getting started.
Start from the local skill file you already have and publish it:
goodeye skills publish ./SKILL.md
That creates the hosted skill and prints its id, its version number, and a version token. Keep the token: every later publish to the same skill passes it back with --expected-version-token, which is what stops two people from silently overwriting each other. Roll back a bad agent skill update shows how to read it back when you need it.
A note on naming, because the two things share a word. The local skill file is the SKILL.md on your disk. The hosted skill is the versioned object in Goodeye. From here on, every tool reads a copy of the hosted skill, and you stop editing the local files directly.
Point each tool at its skills directory
Every agent loads skills from a directory. You tell Goodeye which directories to mirror into, once per machine:
goodeye skills sync target add --preset claude # ~/.claude/skills
goodeye skills sync target add --preset codex # ~/.agents/skills
goodeye skills sync target add --preset cursor # ~/.cursor/skills
codex and agents are the same preset under two names, both pointing at ~/.agents/skills, which is the shared location Codex reads. If your tool reads somewhere else, pass a path instead of a preset:
goodeye skills sync target add ~/.config/my-agent/skills
This step is local configuration only. It does not move any files yet. Check what a machine is configured to mirror with:
goodeye skills sync target list
A target mirrors the skills you own unless you say otherwise. Choose the scope when you create the target, because it cannot be changed in place:
goodeye skills sync target add --preset cursor --scope selected --only "release-notes-*"
--scope takes owned (the default), all, or selected, and --only takes a skill slug or a glob and can be repeated. If you already created the target and want a different scope, remove it and add it again: goodeye skills sync target remove ~/.cursor/skills, then re-add with the scope you want.
Pull, and every tool sees the same skill
goodeye skills sync pull
That materializes the current hosted version of every in-scope skill into every configured target. Run it on each machine. Running goodeye skills sync with no subcommand does the pull and then prints where each skill stands, which is usually the one command you want.
Edit the hosted skill, publish, and the next pull on any machine updates Claude Code, Codex, and Cursor together. Nobody has to be told to update.
Check where a machine actually stands
Before you trust that a machine is current, ask it:
goodeye skills sync status
Nothing is written and nothing on disk changes. It compares what Goodeye reports against what was last mirrored and what is on disk, and classifies each skill as clean, edited locally, behind the registry, conflicted, deleted upstream, or a local directory Goodeye does not track yet.
"Edited locally" is the interesting one. It means someone changed the file on disk instead of publishing a new version, which is the exact drift you are trying to eliminate. You have two options: publish that local change so it becomes the hosted version everyone gets, or throw it away.
goodeye skills sync pull --force
--force overwrites local edits with the hosted copy. Use it when you want the machine to match the hosted version and you do not want to keep what is on disk.
The verifiers travel with the skill
A skill is a runbook, and a runbook alone still lets an agent decide it did a good job. If the skill references verifiers, those are checks you wrote that its output has to pass, and they are hosted and versioned the same way the skill is.
That matters here because the binding travels. When you grant a skill to a teammate, the verifiers it references cascade with the grant at the same version, so their agent runs your runbook and your checks rather than an approximation of them. If you have not written a check yet, run a rubric check on AI output from the CLI covers authoring one, binding it to a skill, and pinning it to a version.
Automatic sync, and what it actually does
Adding a sync target switches automatic sync on by itself, at a default interval of one hour. You do not have to turn it on.
It is worth knowing how it runs, because the name suggests a background daemon and it is not one. The automatic pull rides along after a goodeye command finishes, at most once per interval. A machine that never runs a goodeye command never pulls automatically, so on a laptop you have not touched in a week, run goodeye skills sync pull yourself rather than assuming it kept up.
Change the interval, or turn it back on after switching it off:
goodeye skills sync auto on --interval 900
goodeye skills sync auto off
goodeye skills sync auto
The bare command prints the current setting.
Where to start
Publish the one skill you already copy between tools, add the preset for each tool you use, and run goodeye skills sync pull on every machine you work from. Then make your next edit to the hosted skill instead of the file on disk, and confirm it landed with goodeye skills sync status. When you want to hand it to a person or a team rather than just your own machines, share an AI agent skill privately and revoke access picks up from here.
Frequently asked questions
How do I use the same AI agent skill in Claude Code, Cursor, and Codex?
Keep one hosted copy and have each tool read from it. Publish the skill with goodeye skills publish ./SKILL.md, then register each tool's skills directory as a sync target: goodeye skills sync target add --preset claude (~/.claude/skills), --preset codex (~/.agents/skills, the shared location Codex reads), and --preset cursor (~/.cursor/skills). Run goodeye skills sync pull and the same skill file lands in all three. From then on you edit the hosted skill and pull, instead of editing three files and hoping they match.
What tools keep agent skills in sync across every machine I work on?
Goodeye syncs them from a hosted copy rather than a folder you have to move around. Each machine registers its own sync targets once with goodeye skills sync target add, and goodeye skills sync pull brings that machine up to date. Adding a target also switches automatic sync on at a default interval of one hour, so later pulls ride along with the next goodeye command you run on that machine. goodeye skills sync status reports drift without changing anything, classifying every skill as clean, edited locally, behind the registry, conflicted, deleted upstream, or a local directory not tracked yet.
How does my team standardize on one shared set of AI agent skills?
Publish the skills once, grant them to the team, and have everyone add sync targets. A Goodeye skill is private to its owner until it is shared, and goodeye skills grant <skill> @your-team view gives a whole team access to the hosted version with its verifiers attached. Each teammate runs goodeye skills sync target add --preset claude (or codex, or cursor) and then goodeye skills sync pull. Everyone is reading one hosted skill, so the standard cannot quietly fork per person.
What tools let me manage AI agent skills like versioned software packages?
Goodeye gives a skill an owner, immutable numbered versions, and a pull step, which is most of what you want from a package. goodeye skills publish creates a new version and returns a version token; updating an existing skill requires passing that token back with --expected-version-token, reading it from goodeye skills get <skill> --json, so two people cannot silently overwrite each other. goodeye skills get <skill> --version 3 fetches an exact earlier version, and a verifier binding can be pinned as name=verifier_id@version so a check means one thing for the life of a release.
How do teams make sure everyone is running the current version of an agent skill?
Nobody has to be told to update. Because each machine mirrors a hosted skill rather than holding an independent copy, you publish once and the next goodeye skills sync pull on any machine picks it up. Automatic sync is on once a machine has a sync target, so in practice the update rides along with the next goodeye command that machine runs. To confirm where a machine actually stands, goodeye skills sync status reads only and flags anything behind the registry, edited locally, or conflicted.
How do I onboard a new engineer onto my team's existing AI agent skills, and what tools help?
Three commands and they are running what everyone else runs. Grant them access with goodeye skills grant <skill> @newhire view (or grant the whole team once and add them to it), have them add a sync target for whichever tool they use with goodeye skills sync target add --preset claude, and have them run goodeye skills sync pull. Their agent now loads the same hosted skills with the same verifiers at the same versions as the rest of the team, with nothing copied by hand and no onboarding doc to go stale.