sync-agents-settings 0.4.1 â 0.4.3
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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +48 -15
- package/commands/sync-diff.md +2 -2
- package/commands/sync-doctor.md +3 -2
- package/commands/sync-instructions.md +1 -1
- package/commands/sync-reconcile.md +2 -0
- package/commands/sync-validate.md +1 -1
- package/commands/sync.md +8 -3
- package/dist/backup.d.ts +1 -1
- package/dist/backup.js +7 -3
- package/dist/backup.js.map +1 -1
- package/dist/cli.js +60 -10
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +1 -0
- package/dist/doctor.js +41 -29
- package/dist/doctor.js.map +1 -1
- package/dist/fix.d.ts +1 -0
- package/dist/fix.js +3 -0
- package/dist/fix.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.js +14 -0
- package/dist/instructions.js.map +1 -1
- package/dist/paths.d.ts +3 -0
- package/dist/paths.js +4 -0
- package/dist/paths.js.map +1 -1
- package/dist/reconcile.d.ts +2 -0
- package/dist/reconcile.js +15 -3
- package/dist/reconcile.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/writers/vibe.d.ts +7 -0
- package/dist/writers/vibe.js +87 -0
- package/dist/writers/vibe.js.map +1 -0
- package/package.json +4 -2
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
{
|
|
8
8
|
"name": "sync-agents-settings",
|
|
9
9
|
"source": "./",
|
|
10
|
-
"description": "Sync MCP server configs and instructions from Claude Code to other AI agents (Gemini, Codex, Cursor, Kiro, OpenCode, Kimi, Aider)",
|
|
11
|
-
"version": "0.4.
|
|
10
|
+
"description": "Sync MCP server configs and instructions from Claude Code to other AI agents (Gemini, Codex, Cursor, Kiro, OpenCode, Kimi, Vibe, Aider)",
|
|
11
|
+
"version": "0.4.3",
|
|
12
12
|
"author": {
|
|
13
13
|
"name": "Leoyang183"
|
|
14
14
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sync-agents-settings",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"description": "Sync MCP server configs and instructions from Claude Code to other AI agents (Gemini, Codex, Cursor, Kiro, OpenCode)",
|
|
3
|
+
"version": "0.4.3",
|
|
4
|
+
"description": "Sync MCP server configs and instructions from Claude Code to other AI agents (Gemini, Codex, Cursor, Kiro, OpenCode, Kimi, Vibe)",
|
|
5
5
|
"repository": "https://github.com/Leoyang183/sync-agents-settings",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Leoyang183"
|
package/README.md
CHANGED
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
[](https://prettier.io/)
|
|
12
12
|
[](https://github.com/Leoyang183/sync-agents-settings/actions/workflows/ci.yml)
|
|
13
13
|
|
|
14
|
-
Sync MCP server configurations and instruction files (CLAUDE.md) from **Claude Code** to **Gemini CLI**, **Codex CLI**, **OpenCode**, **Kiro CLI**, **Cursor**, **Kimi CLI**, and **Aider CLI**.
|
|
14
|
+
Sync MCP server configurations and instruction files (CLAUDE.md) from **Claude Code** to **Gemini CLI**, **Codex CLI**, **OpenCode**, **Kiro CLI**, **Cursor**, **Kimi CLI**, **Vibe CLI** (Mistral), and **Aider CLI**.
|
|
15
15
|
|
|
16
16
|
**README translations:** [đšđŧ įšéĢ䏿](docs/i18n/README.zh-tw.md) | [đ¨đŗ įŽäŊ䏿](docs/i18n/README.zh-cn.md) | [đ¯đĩ æĨæŦčĒ](docs/i18n/README.ja.md) | [đ°đˇ íęĩė´](docs/i18n/README.ko.md)
|
|
17
17
|
**Support matrix:** [CLI compatibility matrix](docs/compatibility-matrix.md)
|
|
18
18
|
|
|
19
19
|
## Why
|
|
20
20
|
|
|
21
|
-
If you use Claude Code as your primary AI coding agent but also switch between other agents (Gemini CLI, Codex CLI, OpenCode, Kiro, Cursor, Kimi CLI) to take advantage of their free tiers or different models, you know the pain â every tool has its own MCP config format, and setting them up one by one is tedious. Same goes for instruction files â CLAUDE.md, GEMINI.md, AGENTS.md all need the same content but in different formats.
|
|
21
|
+
If you use Claude Code as your primary AI coding agent but also switch between other agents (Gemini CLI, Codex CLI, OpenCode, Kiro, Cursor, Kimi CLI, Vibe CLI) to take advantage of their free tiers or different models, you know the pain â every tool has its own MCP config format, and setting them up one by one is tedious. Same goes for instruction files â CLAUDE.md, GEMINI.md, AGENTS.md all need the same content but in different formats.
|
|
22
22
|
|
|
23
23
|
This tool lets you configure MCP servers and write instructions once in Claude Code, then sync everywhere with a single command.
|
|
24
24
|
|
|
@@ -87,6 +87,7 @@ sync-agents sync --target opencode
|
|
|
87
87
|
sync-agents sync --target kiro
|
|
88
88
|
sync-agents sync --target cursor
|
|
89
89
|
sync-agents sync --target kimi
|
|
90
|
+
sync-agents sync --target vibe
|
|
90
91
|
|
|
91
92
|
# Sync to Codex project-level config
|
|
92
93
|
sync-agents sync --target codex --codex-home ./my-project/.codex
|
|
@@ -175,7 +176,7 @@ sync-agents sync-instructions --global
|
|
|
175
176
|
sync-agents sync-instructions --local
|
|
176
177
|
|
|
177
178
|
# Sync to specific targets
|
|
178
|
-
sync-agents sync-instructions --target gemini codex kimi aider
|
|
179
|
+
sync-agents sync-instructions --target gemini codex kimi vibe aider
|
|
179
180
|
|
|
180
181
|
# Auto-overwrite without prompts (for CI)
|
|
181
182
|
sync-agents sync-instructions --on-conflict overwrite
|
|
@@ -212,7 +213,8 @@ pnpm test # Run tests
|
|
|
212
213
|
~/.claude/plugins/ âââ â
|
|
213
214
|
âââ Kiro Writer ââ ~/.kiro/settings/mcp.json
|
|
214
215
|
âââ Cursor Writer ââ ~/.cursor/mcp.json
|
|
215
|
-
|
|
216
|
+
âââ Kimi Writer ââ ~/.kimi/mcp.json
|
|
217
|
+
âââ Vibe Writer ââ ~/.vibe/config.toml
|
|
216
218
|
```
|
|
217
219
|
|
|
218
220
|
| Stage | Description |
|
|
@@ -224,6 +226,7 @@ pnpm test # Run tests
|
|
|
224
226
|
| **Kiro Writer** | Same format as Claude, `${VAR:-default}` â expanded |
|
|
225
227
|
| **Cursor Writer** | Same format as Claude, `${VAR:-default}` â expanded |
|
|
226
228
|
| **Kimi Writer** | Same format as Claude, `${VAR:-default}` â expanded |
|
|
229
|
+
| **Vibe Writer** | JSON â TOML `[[mcp_servers]]` array-of-tables, explicit `transport` field, `${VAR:-default}` â expanded |
|
|
227
230
|
|
|
228
231
|
### Instruction Sync (`sync-instructions`)
|
|
229
232
|
|
|
@@ -234,11 +237,12 @@ Syncs CLAUDE.md instruction files to each target's native format:
|
|
|
234
237
|
âââ ~/.codex/AGENTS.md (plain copy)
|
|
235
238
|
~/.claude/CLAUDE.md (+ ~/.claude/rules/*.md) ââ expand @imports âââŧââ ~/.config/opencode/AGENTS.md (plain copy)
|
|
236
239
|
âââ ~/.kimi/AGENTS.md (plain copy)
|
|
240
|
+
âââ ~/.vibe/AGENTS.md (plain copy)
|
|
237
241
|
âââ ~/.kiro/steering/claude-instructions.md (+ inclusion: always)
|
|
238
242
|
âââ â Cursor global not supported (SQLite)
|
|
239
243
|
|
|
240
244
|
âââ ./GEMINI.md (plain copy)
|
|
241
|
-
âââ ./AGENTS.md (Codex + OpenCode + Kimi share)
|
|
245
|
+
âââ ./AGENTS.md (Codex + OpenCode + Kimi + Vibe share)
|
|
242
246
|
./.claude/CLAUDE.md (fallback: ./CLAUDE.md) + ./.claude/rules/*.md ââ expand @imports âââŧââ .kiro/steering/claude-instructions.md (+ inclusion: always)
|
|
243
247
|
âââ .cursor/rules/claude-instructions.mdc (+ alwaysApply: true)
|
|
244
248
|
```
|
|
@@ -248,7 +252,8 @@ Syncs CLAUDE.md instruction files to each target's native format:
|
|
|
248
252
|
| Gemini | `~/.gemini/GEMINI.md` | `./GEMINI.md` | Plain copy (expand standalone `@import` lines) |
|
|
249
253
|
| Codex | `~/.codex/AGENTS.md` | `./AGENTS.md` | Plain copy (expand standalone `@import` lines) |
|
|
250
254
|
| OpenCode | `~/.config/opencode/AGENTS.md` | `./AGENTS.md` (shared with Codex) | Plain copy (expand standalone `@import` lines) |
|
|
251
|
-
| Kimi | `~/.kimi/AGENTS.md` | `./AGENTS.md` (shared with Codex/OpenCode) | Plain copy (expand standalone `@import` lines) |
|
|
255
|
+
| Kimi | `~/.kimi/AGENTS.md` | `./AGENTS.md` (shared with Codex/OpenCode/Vibe) | Plain copy (expand standalone `@import` lines) |
|
|
256
|
+
| Vibe | `~/.vibe/AGENTS.md` | `./AGENTS.md` (shared with Codex/OpenCode/Kimi) | Plain copy (expand standalone `@import` lines) |
|
|
252
257
|
| Aider | `~/.aider/CONVENTIONS.md` | `.aider/CONVENTIONS.md` | Plain copy + upsert `read` entry in `.aider.conf.yml` |
|
|
253
258
|
| Kiro | `~/.kiro/steering/claude-instructions.md` | `.kiro/steering/claude-instructions.md` | Add `inclusion: always` frontmatter |
|
|
254
259
|
| Cursor | Not supported (SQLite) | `.cursor/rules/claude-instructions.mdc` | Add `alwaysApply: true` frontmatter |
|
|
@@ -394,15 +399,38 @@ Writes to **`~/.kimi/mcp.json`** by default. Use `--kimi-home <path>` to sync to
|
|
|
394
399
|
|
|
395
400
|
Same format as Claude Code. `${VAR:-default}` syntax in URLs is auto-expanded during sync.
|
|
396
401
|
|
|
402
|
+
### Target: Vibe CLI (Mistral)
|
|
403
|
+
|
|
404
|
+
Writes to **`~/.vibe/config.toml`** by default. Use `--vibe-home <path>` to sync to a custom base directory (for example, project-level `.vibe/`).
|
|
405
|
+
|
|
406
|
+
Key format differences:
|
|
407
|
+
- Uses TOML `[[mcp_servers]]` (array of tables) â each entry has a `name` and explicit `transport` field
|
|
408
|
+
- Claude `"http"` â Vibe `"streamable-http"`, Claude `"sse"` â Vibe `"http"`
|
|
409
|
+
- `command` is a string (not array), `env` is a TOML sub-table
|
|
410
|
+
- `${VAR:-default}` syntax in URLs is auto-expanded during sync
|
|
411
|
+
|
|
412
|
+
```toml
|
|
413
|
+
[[mcp_servers]]
|
|
414
|
+
name = "context7"
|
|
415
|
+
transport = "stdio"
|
|
416
|
+
command = "npx"
|
|
417
|
+
args = ["-y", "@upstash/context7-mcp"]
|
|
418
|
+
|
|
419
|
+
[[mcp_servers]]
|
|
420
|
+
name = "supabase"
|
|
421
|
+
transport = "streamable-http"
|
|
422
|
+
url = "https://mcp.supabase.com/mcp"
|
|
423
|
+
```
|
|
424
|
+
|
|
397
425
|
## Transport Type Mapping
|
|
398
426
|
|
|
399
|
-
| Claude Code | Gemini CLI | Codex CLI | OpenCode | Kiro CLI | Cursor | Kimi CLI |
|
|
400
|
-
|
|
401
|
-
| `command` + `args` (stdio) | `command` + `args` | `command` + `args` | `type: "local"`, `command: [cmd, ...args]` | same as Claude | same as Claude | same as Claude |
|
|
402
|
-
| `type: "http"` + `url` | `httpUrl` | `url` | `type: "remote"`, `url` | same as Claude | same as Claude | same as Claude |
|
|
403
|
-
| `type: "sse"` + `url` | `url` | `url` | `type: "remote"`, `url` | same as Claude | same as Claude | same as Claude |
|
|
404
|
-
| `env` | `env` | `env` | `environment` | `env` | `env` | `env` |
|
|
405
|
-
| `oauth` | skipped | skipped | skipped | skipped | skipped | skipped |
|
|
427
|
+
| Claude Code | Gemini CLI | Codex CLI | OpenCode | Kiro CLI | Cursor | Kimi CLI | Vibe CLI |
|
|
428
|
+
|------------|-----------|----------|----------|----------|--------|----------|----------|
|
|
429
|
+
| `command` + `args` (stdio) | `command` + `args` | `command` + `args` | `type: "local"`, `command: [cmd, ...args]` | same as Claude | same as Claude | same as Claude | `transport: "stdio"`, `command` + `args` + `name` |
|
|
430
|
+
| `type: "http"` + `url` | `httpUrl` | `url` | `type: "remote"`, `url` | same as Claude | same as Claude | same as Claude | `transport: "streamable-http"`, `url` + `name` |
|
|
431
|
+
| `type: "sse"` + `url` | `url` | `url` | `type: "remote"`, `url` | same as Claude | same as Claude | same as Claude | `transport: "http"`, `url` + `name` |
|
|
432
|
+
| `env` | `env` | `env` | `environment` | `env` | `env` | `env` | `env` |
|
|
433
|
+
| `oauth` | skipped | skipped | skipped | skipped | skipped | skipped | skipped |
|
|
406
434
|
|
|
407
435
|
## Backup
|
|
408
436
|
|
|
@@ -425,8 +453,10 @@ Every sync automatically backs up all affected config files to `~/.sync-agents-b
|
|
|
425
453
|
â âââ mcp.json # â ~/.kiro/settings/mcp.json
|
|
426
454
|
âââ .cursor/
|
|
427
455
|
â âââ mcp.json # â ~/.cursor/mcp.json
|
|
428
|
-
|
|
429
|
-
|
|
456
|
+
âââ .kimi/
|
|
457
|
+
â âââ mcp.json # â ~/.kimi/mcp.json
|
|
458
|
+
âââ .vibe/
|
|
459
|
+
âââ config.toml # â ~/.vibe/config.toml
|
|
430
460
|
```
|
|
431
461
|
|
|
432
462
|
Use `--no-backup` to skip. Target directories that don't exist (CLI not installed) will be skipped with a warning, not created.
|
|
@@ -451,6 +481,8 @@ Use `--no-backup` to skip. Target directories that don't exist (CLI not installe
|
|
|
451
481
|
| Cursor (project) | `.cursor/mcp.json` in project root | JSON |
|
|
452
482
|
| Kimi CLI (global) | `~/.kimi/mcp.json` | JSON |
|
|
453
483
|
| Kimi CLI (project) | `.kimi/mcp.json` (use `--kimi-home ./.kimi`) | JSON |
|
|
484
|
+
| Vibe CLI (global) | `~/.vibe/config.toml` | TOML |
|
|
485
|
+
| Vibe CLI (project) | `.vibe/config.toml` (use `--vibe-home ./.vibe`) | TOML |
|
|
454
486
|
|
|
455
487
|
### Instruction Files
|
|
456
488
|
|
|
@@ -461,6 +493,7 @@ Use `--no-backup` to skip. Target directories that don't exist (CLI not installe
|
|
|
461
493
|
| Codex CLI | `~/.codex/AGENTS.md` | `./AGENTS.md` | Markdown |
|
|
462
494
|
| OpenCode | `~/.config/opencode/AGENTS.md` | `./AGENTS.md` | Markdown |
|
|
463
495
|
| Kimi CLI | `~/.kimi/AGENTS.md` | `./AGENTS.md` | Markdown |
|
|
496
|
+
| Vibe CLI | `~/.vibe/AGENTS.md` | `./AGENTS.md` | Markdown |
|
|
464
497
|
| Kiro CLI | `~/.kiro/steering/claude-instructions.md` | `.kiro/steering/claude-instructions.md` | Markdown + frontmatter |
|
|
465
498
|
| Cursor | Not supported (SQLite) | `.cursor/rules/claude-instructions.mdc` | MDC (Markdown + frontmatter) |
|
|
466
499
|
|
package/commands/sync-diff.md
CHANGED
|
@@ -8,7 +8,7 @@ Compare which MCP servers exist in Claude Code vs other AI agents.
|
|
|
8
8
|
## Arguments
|
|
9
9
|
|
|
10
10
|
The user may pass target names: `/sync-diff gemini`
|
|
11
|
-
If no targets specified, compare all targets (gemini, codex, opencode, kiro, cursor, kimi).
|
|
11
|
+
If no targets specified, compare all targets (gemini, codex, opencode, kiro, cursor, kimi, vibe).
|
|
12
12
|
|
|
13
13
|
Optional flags:
|
|
14
14
|
- `--report json` â output machine-readable JSON summary (CI-friendly)
|
|
@@ -29,4 +29,4 @@ Optional flags:
|
|
|
29
29
|
## Error Handling
|
|
30
30
|
|
|
31
31
|
- If `npx` fails: suggest `npm install -g sync-agents-settings` as fallback.
|
|
32
|
-
- Note: Codex diff
|
|
32
|
+
- Note: Codex and Vibe diff show a note instead of actual comparison (TOML format limitation).
|
package/commands/sync-doctor.md
CHANGED
|
@@ -8,12 +8,13 @@ Check whether target MCP configs are in sync with Claude Code, without writing a
|
|
|
8
8
|
## Arguments
|
|
9
9
|
|
|
10
10
|
The user may pass target names: `/sync-doctor gemini codex`
|
|
11
|
-
If no targets specified, check all targets (gemini, codex, opencode, kiro, cursor, kimi).
|
|
11
|
+
If no targets specified, check all targets (gemini, codex, opencode, kiro, cursor, kimi, vibe).
|
|
12
12
|
|
|
13
13
|
Optional flags:
|
|
14
14
|
- `--skip-oauth` â ignore OAuth-only servers from Claude source
|
|
15
15
|
- `--codex-home <path>` â check project-level Codex config (e.g. `./.codex`)
|
|
16
16
|
- `--kimi-home <path>` â check project-level Kimi config (e.g. `./.kimi`)
|
|
17
|
+
- `--vibe-home <path>` â check project-level Vibe config (e.g. `./.vibe`)
|
|
17
18
|
- `--fix` â if drift exists, auto-run reconcile to add missing servers
|
|
18
19
|
- `--dry-run` â with `--fix`, preview only
|
|
19
20
|
- `--no-backup` â with `--fix`, skip backup before writing
|
|
@@ -24,7 +25,7 @@ Optional flags:
|
|
|
24
25
|
1. Parse targets and flags from user arguments.
|
|
25
26
|
2. Run:
|
|
26
27
|
`npx sync-agents-settings doctor --target <targets>`
|
|
27
|
-
Add `--skip-oauth` / `--codex-home` / `--kimi-home` when specified.
|
|
28
|
+
Add `--skip-oauth` / `--codex-home` / `--kimi-home` / `--vibe-home` when specified.
|
|
28
29
|
3. Present results per target:
|
|
29
30
|
- `No drift` when fully in sync
|
|
30
31
|
- `Missing in <target>` when Claude has servers not present in target
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sync-instructions
|
|
3
|
-
description: Sync CLAUDE.md instruction files to other AI agents (Gemini, Codex, OpenCode, Kiro, Cursor, Kimi)
|
|
3
|
+
description: Sync CLAUDE.md instruction files to other AI agents (Gemini, Codex, OpenCode, Kiro, Cursor, Kimi, Vibe)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
Sync CLAUDE.md instruction files from Claude Code format to other AI agent formats.
|
|
@@ -14,11 +14,13 @@ The user may pass target names: `/sync-reconcile gemini codex`
|
|
|
14
14
|
If no targets are specified, reconcile all targets.
|
|
15
15
|
|
|
16
16
|
Optional flags:
|
|
17
|
+
- `--server <names...>` or `-s <names...>` â reconcile only specified MCP servers by name
|
|
17
18
|
- `--dry-run` â preview only, no writes
|
|
18
19
|
- `--no-backup` â skip backup before write
|
|
19
20
|
- `--skip-oauth` â ignore OAuth-only servers
|
|
20
21
|
- `--codex-home <path>` â custom Codex config directory
|
|
21
22
|
- `--kimi-home <path>` â custom Kimi config directory
|
|
23
|
+
- `--vibe-home <path>` â custom Vibe config directory
|
|
22
24
|
- `--report json` â emit machine-readable JSON only (for CI)
|
|
23
25
|
|
|
24
26
|
## Execution Flow
|
|
@@ -8,7 +8,7 @@ Validate MCP server definitions from Claude Code against target agent capabiliti
|
|
|
8
8
|
## Arguments
|
|
9
9
|
|
|
10
10
|
The user may pass target names: `/sync-validate codex opencode`
|
|
11
|
-
If no targets are specified, validate all targets (gemini, codex, opencode, kiro, cursor, kimi).
|
|
11
|
+
If no targets are specified, validate all targets (gemini, codex, opencode, kiro, cursor, kimi, vibe).
|
|
12
12
|
|
|
13
13
|
Optional flags:
|
|
14
14
|
- `--skip-oauth` â ignore OAuth-only servers from validation
|
package/commands/sync.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sync
|
|
3
|
-
description: Sync MCP server configurations from Claude Code to other AI agents (Gemini, Codex, OpenCode, Kiro, Cursor, Kimi)
|
|
3
|
+
description: Sync MCP server configurations from Claude Code to other AI agents (Gemini, Codex, OpenCode, Kiro, Cursor, Kimi, Vibe)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
Sync MCP server settings from Claude Code to other AI coding agents.
|
|
@@ -8,19 +8,24 @@ Sync MCP server settings from Claude Code to other AI coding agents.
|
|
|
8
8
|
## Arguments
|
|
9
9
|
|
|
10
10
|
The user may pass target names after the command: `/sync gemini codex`
|
|
11
|
-
If no targets specified, sync to all targets (gemini, codex, opencode, kiro, cursor, kimi).
|
|
11
|
+
If no targets specified, sync to all targets (gemini, codex, opencode, kiro, cursor, kimi, vibe).
|
|
12
|
+
|
|
13
|
+
The user may also pass server names to sync only specific servers: `/sync --server context7 supabase`
|
|
12
14
|
|
|
13
15
|
The user may also pass flags:
|
|
16
|
+
- `--server <names...>` or `-s <names...>` â sync only specified MCP servers by name
|
|
14
17
|
- `--skip-oauth` â skip MCP servers that require OAuth authentication
|
|
15
18
|
- `--no-backup` â skip creating backup of target config files
|
|
16
19
|
- `--codex-home <path>` â custom Codex config directory
|
|
17
20
|
- `--kimi-home <path>` â custom Kimi config directory
|
|
21
|
+
- `--vibe-home <path>` â custom Vibe config directory
|
|
18
22
|
- `--report json` â output machine-readable JSON summary (CI-friendly)
|
|
19
23
|
|
|
20
24
|
## Execution Flow
|
|
21
25
|
|
|
22
|
-
1. Parse targets from user arguments. Build the command:
|
|
26
|
+
1. Parse targets and server names from user arguments. Build the command:
|
|
23
27
|
`npx sync-agents-settings sync --dry-run --target <targets>`
|
|
28
|
+
Add `--server <names>` if the user specified specific servers.
|
|
24
29
|
Add `--skip-oauth` or `--no-backup` if the user specified them.
|
|
25
30
|
|
|
26
31
|
2. Run the dry-run command using bash. This previews what will change without writing files.
|
package/dist/backup.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare function createBackup(filePaths: string[]): string;
|
|
2
|
-
export declare function getFilesToBackup(targets: string[], codexConfigPath?: string, kimiConfigPath?: string): string[];
|
|
2
|
+
export declare function getFilesToBackup(targets: string[], codexConfigPath?: string, kimiConfigPath?: string, vibeConfigPath?: string): string[];
|
package/dist/backup.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, copyFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, mkdirSync, copyFileSync, chmodSync } from "node:fs";
|
|
2
2
|
import { join, dirname } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { PATHS } from "./paths.js";
|
|
@@ -12,8 +12,9 @@ export function createBackup(filePaths) {
|
|
|
12
12
|
// Preserve original path structure relative to home
|
|
13
13
|
const relativePath = filePath.startsWith(home) ? filePath.slice(home.length + 1) : filePath;
|
|
14
14
|
const dest = join(backupDir, relativePath);
|
|
15
|
-
mkdirSync(dirname(dest), { recursive: true });
|
|
15
|
+
mkdirSync(dirname(dest), { recursive: true, mode: 0o700 });
|
|
16
16
|
copyFileSync(filePath, dest);
|
|
17
|
+
chmodSync(dest, 0o600);
|
|
17
18
|
backedUp++;
|
|
18
19
|
console.log(` Backed up: ${filePath}`);
|
|
19
20
|
}
|
|
@@ -23,7 +24,7 @@ export function createBackup(filePaths) {
|
|
|
23
24
|
}
|
|
24
25
|
return backupDir;
|
|
25
26
|
}
|
|
26
|
-
export function getFilesToBackup(targets, codexConfigPath, kimiConfigPath) {
|
|
27
|
+
export function getFilesToBackup(targets, codexConfigPath, kimiConfigPath, vibeConfigPath) {
|
|
27
28
|
const files = [PATHS.claudeJson, PATHS.claudeSettings];
|
|
28
29
|
if (targets.includes("gemini")) {
|
|
29
30
|
files.push(PATHS.geminiSettings);
|
|
@@ -43,6 +44,9 @@ export function getFilesToBackup(targets, codexConfigPath, kimiConfigPath) {
|
|
|
43
44
|
if (targets.includes("cursor")) {
|
|
44
45
|
files.push(PATHS.cursorMcpConfig);
|
|
45
46
|
}
|
|
47
|
+
if (targets.includes("vibe")) {
|
|
48
|
+
files.push(vibeConfigPath ?? PATHS.vibeConfig);
|
|
49
|
+
}
|
|
46
50
|
return files;
|
|
47
51
|
}
|
|
48
52
|
//# sourceMappingURL=backup.js.map
|
package/dist/backup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -9,6 +9,7 @@ import { writeToOpenCode } from "./writers/opencode.js";
|
|
|
9
9
|
import { writeToKiro } from "./writers/kiro.js";
|
|
10
10
|
import { writeToCursor } from "./writers/cursor.js";
|
|
11
11
|
import { writeToKimi, resolveKimiMcpConfigPath } from "./writers/kimi.js";
|
|
12
|
+
import { writeToVibe, resolveVibeConfigPath } from "./writers/vibe.js";
|
|
12
13
|
import { createBackup, getFilesToBackup } from "./backup.js";
|
|
13
14
|
import { PATHS } from "./paths.js";
|
|
14
15
|
import { runDoctor } from "./doctor.js";
|
|
@@ -24,17 +25,19 @@ import { syncInstructions, getGlobalSyncPairs, getLocalSyncPairs, getUnsupported
|
|
|
24
25
|
const program = new Command();
|
|
25
26
|
program
|
|
26
27
|
.name("sync-agents")
|
|
27
|
-
.description("Sync Claude Code MCP settings to Gemini CLI / Codex CLI / OpenCode / Kiro CLI")
|
|
28
|
-
.version("0.4.
|
|
28
|
+
.description("Sync Claude Code MCP settings to Gemini CLI / Codex CLI / OpenCode / Kiro CLI / Vibe CLI")
|
|
29
|
+
.version("0.4.3");
|
|
29
30
|
program
|
|
30
31
|
.command("sync")
|
|
31
32
|
.description("Sync MCP settings from Claude Code to other CLIs")
|
|
32
|
-
.option("-t, --target <targets...>", "sync targets (gemini, codex, opencode, kiro, cursor, kimi, aider)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi", "aider"])
|
|
33
|
+
.option("-t, --target <targets...>", "sync targets (gemini, codex, opencode, kiro, cursor, kimi, vibe, aider)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi", "vibe", "aider"])
|
|
33
34
|
.option("--dry-run", "preview mode, no files will be written", false)
|
|
34
35
|
.option("--no-backup", "skip backup")
|
|
35
36
|
.option("--skip-oauth", "skip MCP servers that require OAuth", false)
|
|
37
|
+
.option("-s, --server <names...>", "sync only specified MCP servers by name")
|
|
36
38
|
.option("--codex-home <path>", "Codex config directory (default: ~/.codex, or specify project-level .codex/)")
|
|
37
39
|
.option("--kimi-home <path>", "Kimi config directory (default: ~/.kimi, or specify project-level .kimi/)")
|
|
40
|
+
.option("--vibe-home <path>", "Vibe config directory (default: ~/.vibe, or specify project-level .vibe/)")
|
|
38
41
|
.option("--report <format>", "output format: text or json", "text")
|
|
39
42
|
.option("-v, --verbose", "show detailed output", false)
|
|
40
43
|
.action(async (opts) => {
|
|
@@ -43,8 +46,10 @@ program
|
|
|
43
46
|
const skipBackup = !opts.backup;
|
|
44
47
|
const verbose = opts.verbose;
|
|
45
48
|
const skipOAuth = opts.skipOauth;
|
|
49
|
+
const serverFilter = opts.server;
|
|
46
50
|
const codexHome = opts.codexHome;
|
|
47
51
|
const kimiHome = opts.kimiHome;
|
|
52
|
+
const vibeHome = opts.vibeHome;
|
|
48
53
|
const reportFormat = opts.report;
|
|
49
54
|
const jsonReport = reportFormat === "json";
|
|
50
55
|
if (reportFormat !== "text" && reportFormat !== "json") {
|
|
@@ -62,6 +67,10 @@ program
|
|
|
62
67
|
if (skipOAuth) {
|
|
63
68
|
servers = servers.filter((s) => !isOAuthOnlyServer(s));
|
|
64
69
|
}
|
|
70
|
+
if (serverFilter && serverFilter.length > 0) {
|
|
71
|
+
const filterSet = new Set(serverFilter);
|
|
72
|
+
servers = servers.filter((s) => filterSet.has(s.name));
|
|
73
|
+
}
|
|
65
74
|
if (!jsonReport) {
|
|
66
75
|
console.log(` Found ${servers.length} MCP server(s)\n`);
|
|
67
76
|
}
|
|
@@ -85,11 +94,12 @@ program
|
|
|
85
94
|
// 2. Backup
|
|
86
95
|
const codexConfigPath = resolveCodexConfigPath(codexHome);
|
|
87
96
|
const kimiConfigPath = resolveKimiMcpConfigPath(kimiHome);
|
|
97
|
+
const vibeConfigPath = resolveVibeConfigPath(vibeHome);
|
|
88
98
|
if (!skipBackup && !dryRun) {
|
|
89
99
|
if (!jsonReport) {
|
|
90
100
|
console.log("đž Backing up config files...");
|
|
91
101
|
}
|
|
92
|
-
const backupDir = createBackup(getFilesToBackup(targets, codexConfigPath, kimiConfigPath));
|
|
102
|
+
const backupDir = createBackup(getFilesToBackup(targets, codexConfigPath, kimiConfigPath, vibeConfigPath));
|
|
93
103
|
if (!jsonReport) {
|
|
94
104
|
console.log(` Backup directory: ${backupDir}\n`);
|
|
95
105
|
}
|
|
@@ -154,6 +164,19 @@ program
|
|
|
154
164
|
printResult(result.added, result.skipped);
|
|
155
165
|
}
|
|
156
166
|
}
|
|
167
|
+
else if (target === "vibe") {
|
|
168
|
+
const result = writeToVibe(servers, dryRun, vibeHome);
|
|
169
|
+
targetReports.push({
|
|
170
|
+
target,
|
|
171
|
+
added: result.added,
|
|
172
|
+
skipped: result.skipped,
|
|
173
|
+
configPath: result.configPath,
|
|
174
|
+
});
|
|
175
|
+
if (!jsonReport) {
|
|
176
|
+
console.log(` Target: ${result.configPath}`);
|
|
177
|
+
printResult(result.added, result.skipped);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
157
180
|
if (!jsonReport) {
|
|
158
181
|
console.log();
|
|
159
182
|
}
|
|
@@ -214,7 +237,7 @@ program
|
|
|
214
237
|
program
|
|
215
238
|
.command("diff")
|
|
216
239
|
.description("Compare MCP settings between Claude Code and other CLIs")
|
|
217
|
-
.option("-t, --target <targets...>", "comparison targets (gemini, codex, opencode, kiro, cursor, kimi)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi"])
|
|
240
|
+
.option("-t, --target <targets...>", "comparison targets (gemini, codex, opencode, kiro, cursor, kimi, vibe)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi", "vibe"])
|
|
218
241
|
.option("--kimi-home <path>", "Kimi config directory (default: ~/.kimi, or specify project-level .kimi/)")
|
|
219
242
|
.option("--report <format>", "output format: text or json", "text")
|
|
220
243
|
.action((opts) => {
|
|
@@ -254,6 +277,19 @@ program
|
|
|
254
277
|
note: codexNote,
|
|
255
278
|
});
|
|
256
279
|
}
|
|
280
|
+
else if (target === "vibe") {
|
|
281
|
+
const vibeNote = "use 'vibe' to view (TOML array format)";
|
|
282
|
+
if (!jsonReport) {
|
|
283
|
+
console.log(` Vibe: ${vibeNote}`);
|
|
284
|
+
}
|
|
285
|
+
targetReports.push({
|
|
286
|
+
target: "vibe",
|
|
287
|
+
shared: [],
|
|
288
|
+
onlyInSource: [],
|
|
289
|
+
onlyInTarget: [],
|
|
290
|
+
note: vibeNote,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
257
293
|
else if (Object.hasOwn(diffConfigs, target)) {
|
|
258
294
|
const { path, key } = diffConfigs[target];
|
|
259
295
|
const names = readExistingServerNames(path, key);
|
|
@@ -280,7 +316,7 @@ program
|
|
|
280
316
|
program
|
|
281
317
|
.command("doctor")
|
|
282
318
|
.description("Detect MCP config drift between Claude Code and target CLIs")
|
|
283
|
-
.option("-t, --target <targets...>", "doctor targets (gemini, codex, opencode, kiro, cursor, kimi)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi"])
|
|
319
|
+
.option("-t, --target <targets...>", "doctor targets (gemini, codex, opencode, kiro, cursor, kimi, vibe)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi", "vibe"])
|
|
284
320
|
.option("--skip-oauth", "ignore OAuth-only Claude servers", false)
|
|
285
321
|
.option("--fix", "auto-run reconcile when drift is detected", false)
|
|
286
322
|
.option("--dry-run", "when used with --fix, preview without writing", false)
|
|
@@ -288,6 +324,7 @@ program
|
|
|
288
324
|
.option("--report <format>", "output format: text or json", "text")
|
|
289
325
|
.option("--codex-home <path>", "Codex config directory (default: ~/.codex, or specify project-level .codex/)")
|
|
290
326
|
.option("--kimi-home <path>", "Kimi config directory (default: ~/.kimi, or specify project-level .kimi/)")
|
|
327
|
+
.option("--vibe-home <path>", "Vibe config directory (default: ~/.vibe, or specify project-level .vibe/)")
|
|
291
328
|
.action((opts) => {
|
|
292
329
|
const targets = opts.target;
|
|
293
330
|
const skipOAuth = opts.skipOauth;
|
|
@@ -297,6 +334,7 @@ program
|
|
|
297
334
|
const reportFormat = opts.report;
|
|
298
335
|
const codexHome = opts.codexHome;
|
|
299
336
|
const kimiHome = opts.kimiHome;
|
|
337
|
+
const vibeHome = opts.vibeHome;
|
|
300
338
|
const jsonReport = reportFormat === "json";
|
|
301
339
|
if (reportFormat !== "text" && reportFormat !== "json") {
|
|
302
340
|
console.error(`Invalid --report: ${reportFormat}. Use "text" or "json".`);
|
|
@@ -315,6 +353,7 @@ program
|
|
|
315
353
|
skipOAuth,
|
|
316
354
|
codexHome,
|
|
317
355
|
kimiHome,
|
|
356
|
+
vibeHome,
|
|
318
357
|
});
|
|
319
358
|
if (fixed.status === "failed") {
|
|
320
359
|
if (fixed.reason === "doctor_parse") {
|
|
@@ -335,7 +374,7 @@ program
|
|
|
335
374
|
console.log("â
Auto-fix completed via reconcile.");
|
|
336
375
|
return;
|
|
337
376
|
}
|
|
338
|
-
const report = runDoctor(targets, { skipOAuth, codexHome, kimiHome });
|
|
377
|
+
const report = runDoctor(targets, { skipOAuth, codexHome, kimiHome, vibeHome });
|
|
339
378
|
if (jsonReport) {
|
|
340
379
|
console.log(formatDoctorReport(report));
|
|
341
380
|
if (report.hasErrors)
|
|
@@ -381,7 +420,7 @@ program
|
|
|
381
420
|
program
|
|
382
421
|
.command("validate")
|
|
383
422
|
.description("Validate MCP schema and target capability compatibility")
|
|
384
|
-
.option("-t, --target <targets...>", "validation targets (gemini, codex, opencode, kiro, cursor, kimi)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi"])
|
|
423
|
+
.option("-t, --target <targets...>", "validation targets (gemini, codex, opencode, kiro, cursor, kimi, vibe)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi", "vibe"])
|
|
385
424
|
.option("--skip-oauth", "ignore OAuth-only Claude servers", false)
|
|
386
425
|
.option("--fix", "auto-run reconcile after validation passes", false)
|
|
387
426
|
.option("--dry-run", "when used with --fix, preview without writing", false)
|
|
@@ -389,6 +428,7 @@ program
|
|
|
389
428
|
.option("--report <format>", "output format: text or json", "text")
|
|
390
429
|
.option("--codex-home <path>", "Codex config directory (used by --fix for reconcile)")
|
|
391
430
|
.option("--kimi-home <path>", "Kimi config directory (used by --fix for reconcile)")
|
|
431
|
+
.option("--vibe-home <path>", "Vibe config directory (used by --fix for reconcile)")
|
|
392
432
|
.action((opts) => {
|
|
393
433
|
const targets = opts.target;
|
|
394
434
|
const skipOAuth = opts.skipOauth;
|
|
@@ -398,6 +438,7 @@ program
|
|
|
398
438
|
const reportFormat = opts.report;
|
|
399
439
|
const codexHome = opts.codexHome;
|
|
400
440
|
const kimiHome = opts.kimiHome;
|
|
441
|
+
const vibeHome = opts.vibeHome;
|
|
401
442
|
const jsonReport = reportFormat === "json";
|
|
402
443
|
if (reportFormat !== "text" && reportFormat !== "json") {
|
|
403
444
|
console.error(`Invalid --report: ${reportFormat}. Use "text" or "json".`);
|
|
@@ -453,6 +494,7 @@ program
|
|
|
453
494
|
skipOAuth,
|
|
454
495
|
codexHome,
|
|
455
496
|
kimiHome,
|
|
497
|
+
vibeHome,
|
|
456
498
|
});
|
|
457
499
|
if (fixed.status === "failed") {
|
|
458
500
|
if (fixed.reason === "doctor_parse") {
|
|
@@ -476,20 +518,24 @@ program
|
|
|
476
518
|
program
|
|
477
519
|
.command("reconcile")
|
|
478
520
|
.description("Validate + detect drift + sync only missing MCP servers")
|
|
479
|
-
.option("-t, --target <targets...>", "reconcile targets (gemini, codex, opencode, kiro, cursor, kimi)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi"])
|
|
521
|
+
.option("-t, --target <targets...>", "reconcile targets (gemini, codex, opencode, kiro, cursor, kimi, vibe)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi", "vibe"])
|
|
480
522
|
.option("--dry-run", "preview mode, no files will be written", false)
|
|
481
523
|
.option("--no-backup", "skip backup")
|
|
482
524
|
.option("--skip-oauth", "ignore OAuth-only Claude servers", false)
|
|
525
|
+
.option("-s, --server <names...>", "reconcile only specified MCP servers by name")
|
|
483
526
|
.option("--codex-home <path>", "Codex config directory (default: ~/.codex, or specify project-level .codex/)")
|
|
484
527
|
.option("--kimi-home <path>", "Kimi config directory (default: ~/.kimi, or specify project-level .kimi/)")
|
|
528
|
+
.option("--vibe-home <path>", "Vibe config directory (default: ~/.vibe, or specify project-level .vibe/)")
|
|
485
529
|
.option("--report <format>", "output format: text or json", "text")
|
|
486
530
|
.action((opts) => {
|
|
487
531
|
const targets = opts.target;
|
|
488
532
|
const dryRun = opts.dryRun;
|
|
489
533
|
const skipBackup = !opts.backup;
|
|
490
534
|
const skipOAuth = opts.skipOauth;
|
|
535
|
+
const serverFilter = opts.server;
|
|
491
536
|
const codexHome = opts.codexHome;
|
|
492
537
|
const kimiHome = opts.kimiHome;
|
|
538
|
+
const vibeHome = opts.vibeHome;
|
|
493
539
|
const reportFormat = opts.report;
|
|
494
540
|
const jsonReport = reportFormat === "json";
|
|
495
541
|
if (reportFormat !== "text" && reportFormat !== "json") {
|
|
@@ -503,8 +549,10 @@ program
|
|
|
503
549
|
dryRun,
|
|
504
550
|
skipBackup,
|
|
505
551
|
skipOAuth,
|
|
552
|
+
serverFilter,
|
|
506
553
|
codexHome,
|
|
507
554
|
kimiHome,
|
|
555
|
+
vibeHome,
|
|
508
556
|
});
|
|
509
557
|
if (jsonReport) {
|
|
510
558
|
console.log(formatReconcileReport(result));
|
|
@@ -560,7 +608,7 @@ program
|
|
|
560
608
|
program
|
|
561
609
|
.command("sync-instructions")
|
|
562
610
|
.description("Sync CLAUDE.md instruction files to other AI agent formats")
|
|
563
|
-
.option("-t, --target <targets...>", "sync targets (gemini, codex, opencode, kiro, cursor, kimi)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi"])
|
|
611
|
+
.option("-t, --target <targets...>", "sync targets (gemini, codex, opencode, kiro, cursor, kimi, vibe)", ["gemini", "codex", "opencode", "kiro", "cursor", "kimi", "vibe"])
|
|
564
612
|
.option("--global", "sync global config (~/.claude/CLAUDE.md)", false)
|
|
565
613
|
.option("--local", "sync project-level CLAUDE.md in current directory (prefers ./.claude/CLAUDE.md, falls back to ./CLAUDE.md)", false)
|
|
566
614
|
.option("--dry-run", "preview mode, no files will be written", false)
|
|
@@ -732,6 +780,8 @@ function getTargetLabel(target) {
|
|
|
732
780
|
return "OpenCode";
|
|
733
781
|
if (target === "kimi")
|
|
734
782
|
return "Kimi";
|
|
783
|
+
if (target === "vibe")
|
|
784
|
+
return "Vibe";
|
|
735
785
|
return target.toUpperCase();
|
|
736
786
|
}
|
|
737
787
|
program.parse();
|