CLI for managing agent skills across IDE integrations
Project description
OASR
Open Agent Skill Registry — Manage reusable AI agent skills across IDEs without drift.
The Problem
You've built useful skills for your AI coding assistant. They work great in Cursor. Now you want them in Windsurf. And Claude. And Copilot.
Each tool expects skills in different locations with different formats:
- Cursor:
.cursor/skills/ - Windsurf:
.windsurf/skills/ - Claude:
.claude/commands/ - Copilot:
.github/.md
So you copy your skills everywhere. Then you improve one. Now the copies are stale. You forget which version is current. Some break silently. This is skill drift.
The Solution
ASR keeps your skills in one place and generates thin adapters for each IDE.
┌─────────────────────────────────────────────────────────┐
│ Your Skills (canonical source) │
│ ~/skills/git-commit/SKILL.md │
│ ~/skills/code-review/SKILL.md │
└───────────────────────┬─────────────────────────────────┘
│
▼
oasr adapter
│
┌───────────────┼──────────────┐...───────────────┐
▼ ▼ ▼ ▼
.cursor/ .windsurf/ .claude/ <vendor>/
commands/ workflows/ commands/ skills/
No copying. No drift. One source of truth.
Quick Example
List all registered skills with metadata
# Register local skills
oasr add ~/skills/git-commit
oasr add ~/skills/code-review
# Register remote skills from GitHub/GitLab
oasr add https://github.com/user/skills-repo/tree/main/my-skill
oasr add https://gitlab.com/org/project/tree/main/cool-skill
# Generate adapters for a project
oasr adapter --output-dir ~/projects/my-app
# Result:
# ~/projects/my-app/.cursor/commands/git-commit.md
# ~/projects/my-app/.windsurf/workflows/git-commit.md
# ~/projects/my-app/.claude/commands/git-commit.md
Remote Skills
Register skills directly from GitHub or GitLab
ASR supports registering skills directly from GitHub and GitLab repositories:
# Add a skill from GitHub
oasr add https://github.com/user/repo/tree/main/skills/my-skill
# Add a skill from GitLab
oasr add https://gitlab.com/org/project/tree/dev/cool-skill
# Sync remote skills (check for updates)
oasr sync
# Use remote skills
oasr use my-skill -d ./output
Authentication (optional, for private repos and higher rate limits):
export GITHUB_TOKEN=ghp_your_token_here
export GITLAB_TOKEN=glpat_your_token_here
Remote skills are fetched on-demand during adapter and use operations. The registry stores the URL, and sync checks if the remote source has changed.
Documentation
- Quickstart — Installation and first steps
- Commands — Full command reference
- Validation — Validation rules and error codes
Supported asr adapter IDEs
| IDE | Adapter | Output |
|---|---|---|
| Cursor | cursor |
.cursor/commands/*.md |
| Windsurf | windsurf |
.windsurf/workflows/*.md |
| Codex | codex |
.codex/skills/*.md |
| GitHub Copilot | copilot |
.github/prompts/*.prompt.md |
| Claude Code | claude |
.claude/commands/*.md |
License
See LICENSE.
Screenshots
Command Examples
| Command | Screenshot |
|---|---|
| oasr list | |
| oasr add (local) | |
| oasr add (remote) | |
| oasr sync | |
| oasr status | |
| oasr find | |
| oasr adapter |
See docs/.images/ for all screenshots.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oasr-0.4.0.tar.gz.
File metadata
- Download URL: oasr-0.4.0.tar.gz
- Upload date:
- Size: 553.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22565bd054271a7ea391e379aa4f371cc597bd1d7f55834e65efa45afa57ff80
|
|
| MD5 |
7918a396292722943d381edf09e9541f
|
|
| BLAKE2b-256 |
9a6a5ad91d37a388574aec6437936d8c61444e9592363f139dac35e96134eb06
|
Provenance
The following attestation bundles were made for oasr-0.4.0.tar.gz:
Publisher:
publish.yml on JordanGunn/oasr
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oasr-0.4.0.tar.gz -
Subject digest:
22565bd054271a7ea391e379aa4f371cc597bd1d7f55834e65efa45afa57ff80 - Sigstore transparency entry: 890999214
- Sigstore integration time:
-
Permalink:
JordanGunn/oasr@34acca7f1679880167267c17a63112cbee13b801 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/JordanGunn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@34acca7f1679880167267c17a63112cbee13b801 -
Trigger Event:
push
-
Statement type:
File details
Details for the file oasr-0.4.0-py3-none-any.whl.
File metadata
- Download URL: oasr-0.4.0-py3-none-any.whl
- Upload date:
- Size: 77.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8027383a5d8bda62c900912e1f48afefa3d98d3e92be40dde59f1036687f7b02
|
|
| MD5 |
297009357a4e35c58c366ea558e99e14
|
|
| BLAKE2b-256 |
7a885d44707f898c8a9d8ca4d69964eb671579776d80ddae4cef614c5a71e6c0
|
Provenance
The following attestation bundles were made for oasr-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on JordanGunn/oasr
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oasr-0.4.0-py3-none-any.whl -
Subject digest:
8027383a5d8bda62c900912e1f48afefa3d98d3e92be40dde59f1036687f7b02 - Sigstore transparency entry: 890999287
- Sigstore integration time:
-
Permalink:
JordanGunn/oasr@34acca7f1679880167267c17a63112cbee13b801 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/JordanGunn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@34acca7f1679880167267c17a63112cbee13b801 -
Trigger Event:
push
-
Statement type: