Manage and sync AI agent skills across Claude Code, Cursor, Windsurf, and Codex
Project description
one-skills-manager
___ ___ _ _ _ _ __ __
/ _ \ _ _ ___ ___/ __| |_(_) | |______| \/ |__ _ _ _ __ _ __ _ ___ _ _
| (_) | ' \/ -_)___\__ \ / / | | (_-<___| |\/| / _` | ' \/ _` / _` / -_) '_|
\___/|_||_\___| |___/_\_\_|_|_/__/ |_| |_\__,_|_||_\__,_\__, \___|_|
|___/
Manage and sync AI agent skills, rules, and MCP servers across Claude Code, Cursor, Windsurf, Codex, and shared .agents targets from a single central store.
Features:
- 🧭 Interactive Mode - Guided menu-driven UI for all common workflows
- 📊 Status Dashboard - See exactly what's in sync at a glance
- 📦 Skills - Install once, symlink everywhere
- 📝 Rules - Manage custom rules/memories across agents
- 🔌 MCP Servers - Configure Model Context Protocol servers with guided wizard
- 👤 Profiles - Different configurations for work, personal, etc.
- 📥 Import - Import existing configs from any agent
- 🔄 Sync Tracking - Know when each agent was last synced
Installation
pip install one-skills-manager
Or with uv:
uv tool install one-skills-manager
Quick Start
The easiest way to get started is the interactive mode — just run the command with no arguments:
one-skills
This launches a guided menu for every common workflow. Or use the direct commands:
# Check what's installed and in sync
one-skills status
# Import your existing Cursor configuration
one-skills import cursor --dry-run # inspect what would be imported
one-skills import cursor
# Create a profile and add agents
one-skills profile create work
one-skills profile add-agent cursor --profile work
one-skills profile add-agent windsurf --profile work
one-skills profile activate work
# Sync everything to your active profile's agents
one-skills sync
Core Concepts
Profiles
Profiles let you maintain different configurations for different contexts (work, personal, etc.). Each profile can:
- Enable specific agents
- Configure which MCP servers are available
- Override MCP server transports per agent
- Exclude specific MCP servers per agent
Central Storage
Everything is stored once in ~/.one-skills/:
- Skills:
~/.one-skills/skills/<skill-name>/ - Rules:
~/.one-skills/rules/<rule-name> - MCP Servers:
~/.one-skills/mcp.json - Profiles:
~/.one-skills/profiles.json
When you sync, symlinks are created from each agent's directory to the central store.
Usage
Interactive Mode
Run one-skills with no arguments (or one-skills ui) to launch the interactive guided menu:
one-skills # launch interactive mode
one-skills ui # explicit alias
The menu provides guided flows for:
- Status — dashboard of everything installed and synced
- Add skill — install from URL or local path, then choose agents interactively
- Add rule — install a rule file, then choose agents interactively
- Add MCP server — step-by-step wizard (transport type, package, env vars, profile assignment)
- Manage profile — add/remove agents and MCP servers from a profile
- Sync — choose scope (all/skills/rules/MCP) and agents, with optional dry-run
Status
See the full state of your installation at a glance:
one-skills status
Output includes:
- Active profile, enabled agents, and last synced time
- Each skill with per-agent symlink status (
✓synced,○not linked,✗broken) - Each rule with per-agent status (including
☁for cloud-based Cursor rules) - MCP servers with profile assignment and available transports
Exits with code 1 if anything is out of sync — useful as a chezmoi post-apply hook.
Import Existing Configuration
Import from an existing agent installation:
# Preview what would be imported
one-skills import cursor --dry-run
# Import skills, rules, and MCP servers
one-skills import cursor
one-skills import windsurf
one-skills import codex
one-skills import claude-code
Profile Management
# Create a new profile
one-skills profile create personal
# List all profiles
one-skills profile list
# Show profile details
one-skills profile show personal
# Activate a profile
one-skills profile activate personal
# Add an agent to a profile
one-skills profile add-agent cursor --profile personal
# Remove an agent from a profile
one-skills profile remove-agent cursor --profile personal
# Delete a profile
one-skills profile delete personal
Skills
# Install from GitHub — prompts to choose agents interactively when run in a terminal
one-skills skill install https://github.com/owner/repo/tree/main/skill-name
# Install from local path
one-skills skill install ~/my-skills/skill-name
# Install and assign to specific agents (non-interactive / scripting)
one-skills skill install https://github.com/owner/repo/tree/main/skill-name --agents cursor,windsurf
# Install without assigning (skip the prompt)
one-skills skill install ~/my-skills/skill-name --no-assign
# List all skills
one-skills list
# Assign to agents
one-skills skill assign skill-name cursor,windsurf
# Unassign from agents
one-skills skill unassign skill-name cursor
# Remove a skill
one-skills skill remove skill-name
Rules
# Install a rule — prompts to choose agents interactively when run in a terminal
one-skills rule install ~/rules/my-rule.md
# Install and assign to specific agents (non-interactive / scripting)
one-skills rule install ~/rules/my-rule.md --agents claude-code,codex
# Install without assigning (skip the prompt)
one-skills rule install ~/rules/my-rule.md --no-assign
# List all rules
one-skills rule list
# Assign to agents
one-skills rule assign my-rule.md cursor
# Unassign from agents
one-skills rule unassign my-rule.md cursor
# Remove a rule
one-skills rule remove my-rule.md
MCP Servers
The easiest way to add a server is the guided wizard, which walks through transport type, package/URL, env vars, and profile assignment in one flow:
# Interactive wizard (prompts for all details)
one-skills mcp add-server my-server
# Non-interactive shortcuts for scripting
one-skills mcp add-server my-server --npx @modelcontextprotocol/server-github
one-skills mcp add-server my-server --uvx mcp-server-git --description "Git MCP"
one-skills mcp add-server my-server --sse https://example.com/sse
one-skills mcp add-server my-server --http https://example.com/mcp
# Optionally assign to a profile in the same command
one-skills mcp add-server my-server --npx my-pkg --profile personal
Other MCP commands:
# List all MCP servers
one-skills mcp list
# Show details for a server
one-skills mcp show my-server
# Add server to a profile (after creation)
one-skills profile add-server my-server default --profile personal
# Override transport for a specific agent
one-skills profile set-override cursor my-server docker --profile personal
# Exclude a server from an agent
one-skills profile exclude-server cursor my-server --profile personal
# Remove a server
one-skills mcp remove my-server
Low-level commands:
one-skills mcp addandone-skills mcp add-transportare still available for scripted/advanced use.
Sync
Sync skills, rules, and MCP servers to agents in your active profile:
# Sync everything
one-skills sync
# Dry-run to preview changes
one-skills sync --dry-run
# Sync only to a specific agent
one-skills sync --agent cursor
# Sync only skills
one-skills sync --skills-only
# Sync only rules
one-skills sync --rules-only
# Sync only MCP servers
one-skills sync --mcp-only
Other Commands
# Show sync status dashboard
one-skills status
# Launch interactive guided mode
one-skills ui
# List supported agents
one-skills agents
# List all installed resources
one-skills list
# Show version
one-skills --version
Supported Agents
| ID | Name | Skills | Rules | MCP Config |
|---|---|---|---|---|
claude-code |
Claude Code | ~/.claude/skills |
~/.claude/rules |
~/.claude.json |
cursor |
Cursor | ~/.cursor/skills |
Cloud-based | ~/.cursor/mcp.json |
windsurf |
Windsurf | ~/.codeium/windsurf/skills |
~/.codeium/windsurf/memories |
~/.codeium/windsurf/mcp_config.json |
codex |
Codex | ~/.agents/skills |
~/.codex/rules |
~/.codex/config.toml |
shared |
Shared .agents | ~/.agents/skills |
~/.agents/rules |
Not synced |
shared is a sync target for shared skills/rules only. MCP sync is intentionally skipped for this agent.
MCP Server Transports
MCP servers can use different transport mechanisms:
- stdio: Local process (command + args + env)
- sse: Server-Sent Events (url + headers)
- http: HTTP (url + headers)
You can define multiple transports for the same server and override which transport each agent uses via profiles.
Example Workflow
# 1. Import your existing Cursor setup
one-skills import cursor
# 2. Create work and personal profiles
one-skills profile create work
one-skills profile create personal
# 3. Configure work profile
one-skills profile activate work
one-skills profile add-agent cursor --profile work
one-skills profile add-agent windsurf --profile work
# Add work-specific MCP servers to profile
one-skills profile add-server github-mcp-server default --profile work
one-skills profile add-server jira-server default --profile work
# 4. Configure personal profile
one-skills profile activate personal
one-skills profile add-agent claude-code --profile personal
one-skills profile add-agent codex --profile personal
# Exclude work servers from personal profile
one-skills profile exclude-server claude-code jira-server --profile personal
# 5. Sync to active profile
one-skills sync
# 6. Switch contexts
one-skills profile activate work
one-skills sync
How It Works
- Central Storage: Skills, rules, and MCP configs are stored once in
~/.one-skills/ - Profiles: Define which agents and MCP servers are active for different contexts
- Symlinks: Skills and rules are symlinked from central storage to each agent's directory
- MCP Rendering: MCP configs are rendered per-agent based on profile settings
- Sync Tracking: Each agent tracks when it was last synced (visible in
profile showandstatus) - Interactive Mode:
one-skills(no args) launches a guided menu for all common workflows - Status Dashboard:
one-skills statusshows symlink health and profile assignments; exits 1 if out of sync (useful forchezmoihooks)
Configuration Files
All configuration is stored in ~/.one-skills/:
config.json- Skills and rules registrymcp.json- MCP servers and transportsprofiles.json- Profile configurationsskills/- Skill directoriesrules/- Rule files
Paths are stored using ~/ for portability across machines.
License
MIT
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 one_skills_manager-1.10.0.tar.gz.
File metadata
- Download URL: one_skills_manager-1.10.0.tar.gz
- Upload date:
- Size: 92.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1e502d1680b420d780762cccbcf3be80590ffc08542cb6e7acdc1f2e590c01c
|
|
| MD5 |
0354e49b56db139daf88715f569c6b16
|
|
| BLAKE2b-256 |
627485c532d307ecd4009243b2f94903d44b5e9525f37433bfe9da563f738300
|
Provenance
The following attestation bundles were made for one_skills_manager-1.10.0.tar.gz:
Publisher:
publish.yaml on timmyb824/one-skills-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
one_skills_manager-1.10.0.tar.gz -
Subject digest:
f1e502d1680b420d780762cccbcf3be80590ffc08542cb6e7acdc1f2e590c01c - Sigstore transparency entry: 1661681593
- Sigstore integration time:
-
Permalink:
timmyb824/one-skills-manager@96d2022b61a714785314f6798733f6077ddfc3d8 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/timmyb824
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@96d2022b61a714785314f6798733f6077ddfc3d8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file one_skills_manager-1.10.0-py3-none-any.whl.
File metadata
- Download URL: one_skills_manager-1.10.0-py3-none-any.whl
- Upload date:
- Size: 50.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57c31d778ddeab84dcf5821b2a76d1c1d75aee2fc121783ab6a3b67026369864
|
|
| MD5 |
a25bb1641ecf2e9bdfb86f981cd2bcdc
|
|
| BLAKE2b-256 |
c0afbf95a90163104e670fe4f5d119258fbb0b2f932e35c746188834dea165c9
|
Provenance
The following attestation bundles were made for one_skills_manager-1.10.0-py3-none-any.whl:
Publisher:
publish.yaml on timmyb824/one-skills-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
one_skills_manager-1.10.0-py3-none-any.whl -
Subject digest:
57c31d778ddeab84dcf5821b2a76d1c1d75aee2fc121783ab6a3b67026369864 - Sigstore transparency entry: 1661681894
- Sigstore integration time:
-
Permalink:
timmyb824/one-skills-manager@96d2022b61a714785314f6798733f6077ddfc3d8 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/timmyb824
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@96d2022b61a714785314f6798733f6077ddfc3d8 -
Trigger Event:
push
-
Statement type: