@ryanreh99/skills-sync 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/assets/contracts/build/bundle.schema.json +76 -0
  4. package/dist/assets/contracts/inputs/config.schema.json +13 -0
  5. package/dist/assets/contracts/inputs/mcp-servers.schema.json +56 -0
  6. package/dist/assets/contracts/inputs/pack-manifest.schema.json +33 -0
  7. package/dist/assets/contracts/inputs/pack-sources.schema.json +47 -0
  8. package/dist/assets/contracts/inputs/profile.schema.json +21 -0
  9. package/dist/assets/contracts/inputs/upstreams.schema.json +45 -0
  10. package/dist/assets/contracts/runtime/targets.schema.json +120 -0
  11. package/dist/assets/contracts/state/upstreams-lock.schema.json +38 -0
  12. package/dist/assets/manifests/targets.linux.json +27 -0
  13. package/dist/assets/manifests/targets.macos.json +27 -0
  14. package/dist/assets/manifests/targets.windows.json +27 -0
  15. package/dist/assets/seed/config.json +3 -0
  16. package/dist/assets/seed/packs/personal/mcp/servers.json +20 -0
  17. package/dist/assets/seed/packs/personal/pack.json +7 -0
  18. package/dist/assets/seed/packs/personal/sources.json +31 -0
  19. package/dist/assets/seed/profiles/personal.json +4 -0
  20. package/dist/assets/seed/upstreams.json +23 -0
  21. package/dist/cli.js +532 -0
  22. package/dist/index.js +27 -0
  23. package/dist/lib/adapters/claude.js +49 -0
  24. package/dist/lib/adapters/codex.js +239 -0
  25. package/dist/lib/adapters/common.js +114 -0
  26. package/dist/lib/adapters/copilot.js +53 -0
  27. package/dist/lib/adapters/cursor.js +53 -0
  28. package/dist/lib/adapters/gemini.js +52 -0
  29. package/dist/lib/agents.js +888 -0
  30. package/dist/lib/bindings.js +510 -0
  31. package/dist/lib/build.js +190 -0
  32. package/dist/lib/bundle.js +165 -0
  33. package/dist/lib/config.js +324 -0
  34. package/dist/lib/core.js +447 -0
  35. package/dist/lib/detect.js +56 -0
  36. package/dist/lib/doctor.js +504 -0
  37. package/dist/lib/init.js +292 -0
  38. package/dist/lib/inventory.js +235 -0
  39. package/dist/lib/manage.js +463 -0
  40. package/dist/lib/mcp-config.js +264 -0
  41. package/dist/lib/profile-transfer.js +221 -0
  42. package/dist/lib/upstreams.js +782 -0
  43. package/docs/agent-storage-map.md +153 -0
  44. package/docs/architecture.md +117 -0
  45. package/docs/changelog.md +12 -0
  46. package/docs/commands.md +94 -0
  47. package/docs/contracts.md +112 -0
  48. package/docs/homebrew.md +46 -0
  49. package/docs/quickstart.md +14 -0
  50. package/docs/roadmap.md +5 -0
  51. package/docs/security.md +32 -0
  52. package/docs/user-guide.md +257 -0
  53. package/package.json +61 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ryan Rehman
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # skills-sync
2
+
3
+ skills-sync keeps AI agent skills and MCP servers synchronized across various AI coding agents.
4
+
5
+ ---
6
+
7
+ AI coding tools store skills and MCP definitions in different directories and configuration formats. Maintaining the same setup across multiple agents usually requires duplicating configuration, copying skill folders, and updating MCP server lists separately for each tool.
8
+
9
+ skills-sync provides a CLI for managing these definitions in one place and applying them to each supported agent. Skills can be sourced from local directories, public repositories, or private repositories.
10
+
11
+ If you create a skill or install an MCP server for one agent, skills-sync can synchronize it across your other agents so the same capabilities are available everywhere.
12
+
13
+ `skills-sync` works across any environment where these agents run, including both **IDEs and terminal-based workflows**.
14
+ ## Supported Agents
15
+
16
+
17
+ ![Codex](https://img.shields.io/badge/Codex-supported-412991?logo=openaigym&logoColor=white)
18
+ ![Cursor](https://img.shields.io/badge/Cursor-supported-000000?logo=cursor)![Gemini](https://img.shields.io/badge/Gemini-supported-4285F4?logo=google)
19
+ ![Copilot](https://img.shields.io/badge/Copilot-supported-2F80ED?logo=githubcopilot)
20
+ ![Claude Code](https://img.shields.io/badge/Claude%20Code-experimental-orange?logo=anthropic&logoColor=white)
21
+
22
+ ## Installation
23
+
24
+ npm:
25
+
26
+ ```bash
27
+ npm i -g @ryanreh99/skills-sync
28
+ npx @ryanreh99/skills-sync
29
+ ```
30
+
31
+ Homebrew:
32
+
33
+ ```bash
34
+ brew tap ryanreh99/skills-sync
35
+ brew install ryanreh99/skills-sync/skills-sync
36
+ ```
37
+
38
+ ## Quick Start
39
+
40
+ ```bash
41
+ # Initialize local workspace from bundled seed content
42
+ skills-sync init --seed
43
+
44
+ # Build canonical artifacts from your profile inputs
45
+ skills-sync build
46
+
47
+ # Apply generated skills and MCP config to detected agent targets
48
+ skills-sync apply
49
+ ```
50
+
51
+ These commands initialize your local workspace, build canonical artifacts, and apply them to supported agent targets.
52
+
53
+ Paste your existing agent's `mcp.json` settings and ask an AI agent to generate the corresponding `skills-sync` commands.
54
+
55
+ ## Verify In Agent Chats
56
+
57
+ After `apply`, run these in your agent chat to confirm skills and MCP servers are available:
58
+
59
+ ```text
60
+ /skills list or /skills show
61
+ /mcp list
62
+ ```
63
+
64
+ ## Documentation
65
+
66
+ Full documentation lives in the docs directory:
67
+
68
+ - [docs/quickstart.md](docs/quickstart.md)
69
+ - [docs/user-guide.md](docs/user-guide.md)
70
+ - [docs/commands.md](docs/commands.md)
71
+
72
+ ## License
73
+
74
+ [MIT](LICENSE)
@@ -0,0 +1,76 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Build Bundle Metadata",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "schemaVersion",
8
+ "profile",
9
+ "generatedAt",
10
+ "sources"
11
+ ],
12
+ "properties": {
13
+ "schemaVersion": {
14
+ "type": "integer",
15
+ "const": 1
16
+ },
17
+ "profile": {
18
+ "type": "string",
19
+ "minLength": 1
20
+ },
21
+ "generatedAt": {
22
+ "type": "string",
23
+ "minLength": 1
24
+ },
25
+ "sources": {
26
+ "type": "object",
27
+ "additionalProperties": false,
28
+ "required": [
29
+ "packPath",
30
+ "imports"
31
+ ],
32
+ "properties": {
33
+ "packPath": {
34
+ "type": "string",
35
+ "minLength": 1
36
+ },
37
+ "imports": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "object",
41
+ "additionalProperties": false,
42
+ "required": [
43
+ "upstream",
44
+ "ref",
45
+ "commit",
46
+ "path",
47
+ "destPrefix"
48
+ ],
49
+ "properties": {
50
+ "upstream": {
51
+ "type": "string",
52
+ "minLength": 1
53
+ },
54
+ "ref": {
55
+ "type": "string",
56
+ "minLength": 1
57
+ },
58
+ "commit": {
59
+ "type": "string",
60
+ "minLength": 7
61
+ },
62
+ "path": {
63
+ "type": "string",
64
+ "minLength": 1
65
+ },
66
+ "destPrefix": {
67
+ "type": "string",
68
+ "minLength": 1
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "User Config",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "properties": {
7
+ "defaultProfile": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "description": "Profile name used when --profile is not passed on the CLI."
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "MCP Servers Manifest",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "servers"
8
+ ],
9
+ "properties": {
10
+ "servers": {
11
+ "type": "object",
12
+ "additionalProperties": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "anyOf": [
16
+ {
17
+ "required": [
18
+ "command"
19
+ ]
20
+ },
21
+ {
22
+ "required": [
23
+ "url"
24
+ ]
25
+ }
26
+ ],
27
+ "properties": {
28
+ "command": {
29
+ "type": "string",
30
+ "minLength": 1
31
+ },
32
+ "url": {
33
+ "type": "string",
34
+ "minLength": 1
35
+ },
36
+ "args": {
37
+ "type": "array",
38
+ "items": {
39
+ "type": "string"
40
+ }
41
+ },
42
+ "env": {
43
+ "type": "object",
44
+ "propertyNames": {
45
+ "type": "string",
46
+ "minLength": 1
47
+ },
48
+ "additionalProperties": {
49
+ "type": "string"
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Pack Manifest",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "name",
8
+ "version"
9
+ ],
10
+ "properties": {
11
+ "name": {
12
+ "type": "string",
13
+ "minLength": 1
14
+ },
15
+ "version": {
16
+ "type": "string",
17
+ "minLength": 1
18
+ },
19
+ "description": {
20
+ "type": "string"
21
+ },
22
+ "maintainer": {
23
+ "type": "string"
24
+ },
25
+ "tags": {
26
+ "type": "array",
27
+ "items": {
28
+ "type": "string"
29
+ }
30
+ }
31
+ }
32
+ }
33
+
@@ -0,0 +1,47 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Pack Sources Selectors",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "imports"
8
+ ],
9
+ "properties": {
10
+ "imports": {
11
+ "type": "array",
12
+ "items": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": [
16
+ "upstream",
17
+ "paths"
18
+ ],
19
+ "properties": {
20
+ "upstream": {
21
+ "type": "string",
22
+ "minLength": 1
23
+ },
24
+ "ref": {
25
+ "type": "string",
26
+ "minLength": 1
27
+ },
28
+ "paths": {
29
+ "type": "array",
30
+ "minItems": 1,
31
+ "items": {
32
+ "type": "string",
33
+ "minLength": 1
34
+ }
35
+ },
36
+ "destPrefix": {
37
+ "type": "string",
38
+ "minLength": 1
39
+ },
40
+ "allowWholeSkillsTree": {
41
+ "type": "boolean"
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Profile",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "name",
8
+ "packPath"
9
+ ],
10
+ "properties": {
11
+ "name": {
12
+ "type": "string",
13
+ "minLength": 1
14
+ },
15
+ "packPath": {
16
+ "type": "string",
17
+ "minLength": 1
18
+ }
19
+ }
20
+ }
21
+
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Upstreams Config",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "upstreams"
8
+ ],
9
+ "properties": {
10
+ "upstreams": {
11
+ "type": "array",
12
+ "items": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": [
16
+ "id",
17
+ "type",
18
+ "repo",
19
+ "defaultRef"
20
+ ],
21
+ "properties": {
22
+ "id": {
23
+ "type": "string",
24
+ "minLength": 1
25
+ },
26
+ "type": {
27
+ "type": "string",
28
+ "enum": [
29
+ "git"
30
+ ]
31
+ },
32
+ "repo": {
33
+ "type": "string",
34
+ "minLength": 1
35
+ },
36
+ "defaultRef": {
37
+ "type": "string",
38
+ "minLength": 1
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+
@@ -0,0 +1,120 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Tool Targets",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "codex",
8
+ "claude",
9
+ "cursor",
10
+ "copilot",
11
+ "gemini"
12
+ ],
13
+ "properties": {
14
+ "codex": {
15
+ "type": "object",
16
+ "additionalProperties": false,
17
+ "required": [
18
+ "skillsDir",
19
+ "mcpConfig"
20
+ ],
21
+ "properties": {
22
+ "skillsDir": {
23
+ "type": "string",
24
+ "minLength": 1
25
+ },
26
+ "mcpConfig": {
27
+ "type": "string",
28
+ "minLength": 1
29
+ },
30
+ "canOverride": {
31
+ "type": "boolean"
32
+ }
33
+ }
34
+ },
35
+ "claude": {
36
+ "type": "object",
37
+ "additionalProperties": false,
38
+ "required": [
39
+ "skillsDir",
40
+ "mcpConfig"
41
+ ],
42
+ "properties": {
43
+ "skillsDir": {
44
+ "type": "string",
45
+ "minLength": 1
46
+ },
47
+ "mcpConfig": {
48
+ "type": "string",
49
+ "minLength": 1
50
+ },
51
+ "canOverride": {
52
+ "type": "boolean"
53
+ }
54
+ }
55
+ },
56
+ "cursor": {
57
+ "type": "object",
58
+ "additionalProperties": false,
59
+ "required": [
60
+ "skillsDir",
61
+ "mcpConfig"
62
+ ],
63
+ "properties": {
64
+ "skillsDir": {
65
+ "type": "string",
66
+ "minLength": 1
67
+ },
68
+ "mcpConfig": {
69
+ "type": "string",
70
+ "minLength": 1
71
+ },
72
+ "canOverride": {
73
+ "type": "boolean"
74
+ }
75
+ }
76
+ },
77
+ "copilot": {
78
+ "type": "object",
79
+ "additionalProperties": false,
80
+ "required": [
81
+ "skillsDir",
82
+ "mcpConfig"
83
+ ],
84
+ "properties": {
85
+ "skillsDir": {
86
+ "type": "string",
87
+ "minLength": 1
88
+ },
89
+ "mcpConfig": {
90
+ "type": "string",
91
+ "minLength": 1
92
+ },
93
+ "canOverride": {
94
+ "type": "boolean"
95
+ }
96
+ }
97
+ },
98
+ "gemini": {
99
+ "type": "object",
100
+ "additionalProperties": false,
101
+ "required": [
102
+ "skillsDir",
103
+ "mcpConfig"
104
+ ],
105
+ "properties": {
106
+ "skillsDir": {
107
+ "type": "string",
108
+ "minLength": 1
109
+ },
110
+ "mcpConfig": {
111
+ "type": "string",
112
+ "minLength": 1
113
+ },
114
+ "canOverride": {
115
+ "type": "boolean"
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Upstreams Lockfile",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "pins"
8
+ ],
9
+ "properties": {
10
+ "pins": {
11
+ "type": "array",
12
+ "items": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": [
16
+ "upstream",
17
+ "ref",
18
+ "commit"
19
+ ],
20
+ "properties": {
21
+ "upstream": {
22
+ "type": "string",
23
+ "minLength": 1
24
+ },
25
+ "ref": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "commit": {
30
+ "type": "string",
31
+ "pattern": "^[a-fA-F0-9]{7,40}$"
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
38
+
@@ -0,0 +1,27 @@
1
+ {
2
+ "codex": {
3
+ "skillsDir": "$HOME/.codex/skills/vendor_imports",
4
+ "mcpConfig": "$HOME/.codex/config.toml",
5
+ "canOverride": false
6
+ },
7
+ "claude": {
8
+ "skillsDir": "$HOME/.claude/skills",
9
+ "mcpConfig": "$HOME/.claude/mcp_servers.json",
10
+ "canOverride": true
11
+ },
12
+ "cursor": {
13
+ "skillsDir": "$HOME/.cursor/skills",
14
+ "mcpConfig": "$HOME/.cursor/mcp.json",
15
+ "canOverride": true
16
+ },
17
+ "copilot": {
18
+ "skillsDir": "$HOME/.copilot/skills",
19
+ "mcpConfig": "$HOME/.copilot/mcp-config.json",
20
+ "canOverride": true
21
+ },
22
+ "gemini": {
23
+ "skillsDir": "$HOME/.gemini/skills",
24
+ "mcpConfig": "$HOME/.gemini/settings.json",
25
+ "canOverride": false
26
+ }
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "codex": {
3
+ "skillsDir": "$HOME/.codex/skills/vendor_imports",
4
+ "mcpConfig": "$HOME/.codex/config.toml",
5
+ "canOverride": false
6
+ },
7
+ "claude": {
8
+ "skillsDir": "$HOME/.claude/skills",
9
+ "mcpConfig": "$HOME/mcp_servers.json",
10
+ "canOverride": true
11
+ },
12
+ "cursor": {
13
+ "skillsDir": "$HOME/.cursor/skills",
14
+ "mcpConfig": "$HOME/.cursor/mcp.json",
15
+ "canOverride": true
16
+ },
17
+ "copilot": {
18
+ "skillsDir": "$HOME/.copilot/skills",
19
+ "mcpConfig": "$HOME/.copilot/mcp-config.json",
20
+ "canOverride": true
21
+ },
22
+ "gemini": {
23
+ "skillsDir": "$HOME/.gemini/skills",
24
+ "mcpConfig": "$HOME/.gemini/settings.json",
25
+ "canOverride": false
26
+ }
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "codex": {
3
+ "skillsDir": "%USERPROFILE%\\\\.codex\\\\skills\\\\vendor_imports",
4
+ "mcpConfig": "%USERPROFILE%\\\\.codex\\\\config.toml",
5
+ "canOverride": false
6
+ },
7
+ "claude": {
8
+ "skillsDir": "%USERPROFILE%\\\\.claude\\\\skills",
9
+ "mcpConfig": "%USERPROFILE%\\\\.claude\\\\mcp_servers.json",
10
+ "canOverride": true
11
+ },
12
+ "cursor": {
13
+ "skillsDir": "%USERPROFILE%\\\\.cursor\\\\skills",
14
+ "mcpConfig": "%USERPROFILE%\\\\.cursor\\\\mcp.json",
15
+ "canOverride": true
16
+ },
17
+ "copilot": {
18
+ "skillsDir": "%USERPROFILE%\\\\.copilot\\\\skills",
19
+ "mcpConfig": "%USERPROFILE%\\\\.copilot\\\\mcp-config.json",
20
+ "canOverride": true
21
+ },
22
+ "gemini": {
23
+ "skillsDir": "%USERPROFILE%\\\\.gemini\\\\skills",
24
+ "mcpConfig": "%USERPROFILE%\\\\.gemini\\\\settings.json",
25
+ "canOverride": false
26
+ }
27
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "defaultProfile": "personal"
3
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "servers": {
3
+ "filesystem": {
4
+ "command": "npx",
5
+ "args": [
6
+ "-y",
7
+ "@modelcontextprotocol/server-filesystem",
8
+ "$HOME"
9
+ ]
10
+ },
11
+ "memory": {
12
+ "command": "npx",
13
+ "args": [
14
+ "-y",
15
+ "@modelcontextprotocol/server-memory"
16
+ ]
17
+ }
18
+ }
19
+ }
20
+
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "personal",
3
+ "version": "1.0.0",
4
+ "description": "Personal profile example using upstream imports.",
5
+ "maintainer": "skills-sync example",
6
+ "tags": []
7
+ }