{"_id":"@abdur-codes/agent-sync","_rev":"3-f3101aa9db81f778a09c6443b1147b76","name":"@abdur-codes/agent-sync","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@abdur-codes/agent-sync","version":"0.0.1","keywords":["agent-skills","mcp","claude-code","codex","cursor","sync","cli"],"author":{"name":"Muhammad Abdur Rahman Saad"},"license":"MIT","_id":"@abdur-codes/agent-sync@0.0.1","maintainers":[{"name":"abdur-codes","email":"abdurrahmansaad2020@gmail.com"}],"homepage":"https://github.com/Alpha-30-creator/agent-sync#readme","bugs":{"url":"https://github.com/Alpha-30-creator/agent-sync/issues"},"bin":{"agent-sync":"dist/cli/index.js"},"dist":{"shasum":"48d9f6cc6e8ee469f32b401c4c4ecfd53dc49c29","tarball":"https://registry.npmjs.org/@abdur-codes/agent-sync/-/agent-sync-0.0.1.tgz","fileCount":138,"integrity":"sha512-kpR4e4gVNezJt5XKPKGC1TIq5f+G8ZEGtSWVB9FCVZghBYHpmWon7aJhCO6qvb6NaofuwbsTTQKoeyoZUjcjUw==","signatures":[{"sig":"MEYCIQCekS94B/8HuwtymvZMKwkbKnz5zUUz+HwvfIP/pr+AgAIhAILt3/S2VVKWnqfvUEwlly5+gFY0qPEjuPryTPg4lRXP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":531348},"type":"module","engines":{"node":">=20"},"gitHead":"f5d5b9ced5cb91bdc86857ac20cdce18960e953e","scripts":{"lint":"biome check .","test":"vitest run","build":"tsc -p tsconfig.build.json && node scripts/chmod-bin.mjs && node scripts/build-skillpack.mjs","verify":"pnpm typecheck && pnpm lint && pnpm check:deps && pnpm coverage","coverage":"vitest run --coverage","lint:fix":"biome check --write .","test:unit":"vitest run test/unit","typecheck":"tsc --noEmit","check:deps":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest"},"_npmUser":{"name":"abdur-codes","email":"abdurrahmansaad2020@gmail.com"},"deprecated":"Bootstrap release to enable trusted publishing; use 0.1.0 or later","repository":{"url":"git+https://github.com/Alpha-30-creator/agent-sync.git","type":"git"},"_npmVersion":"11.11.0","description":"Sync skills and MCP servers across Claude Code, Codex, and Cursor — and across your devices","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^4.4.3","yaml":"^2.9.0","commander":"^15.0.0","picocolors":"^1.1.1","jsonc-parser":"^3.3.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.23.0","devDependencies":{"vitest":"^3.2.4","smol-toml":"^1.8.0","fast-check":"^4.4.0","typescript":"^5.9.3","@types/node":"^22.10.0","@biomejs/biome":"^2.5.10","dependency-cruiser":"^17.0.0","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/agent-sync_0.0.1_1788864211126_0.47374220243122167","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@abdur-codes/agent-sync","version":"0.1.0","description":"Sync skills and MCP servers across Claude Code, Codex, and Cursor — and across your devices","keywords":["agent-skills","mcp","claude-code","codex","cursor","sync","cli"],"license":"MIT","author":{"name":"Muhammad Abdur Rahman Saad"},"repository":{"type":"git","url":"git+https://github.com/Alpha-30-creator/agent-sync.git"},"homepage":"https://github.com/Alpha-30-creator/agent-sync#readme","bugs":{"url":"https://github.com/Alpha-30-creator/agent-sync/issues"},"type":"module","packageManager":"pnpm@11.23.0","bin":{"agent-sync":"dist/cli/index.js"},"engines":{"node":">=20"},"scripts":{"build":"tsc -p tsconfig.build.json && node scripts/chmod-bin.mjs && node scripts/build-skillpack.mjs","typecheck":"tsc --noEmit","test":"vitest run","test:unit":"vitest run test/unit","test:watch":"vitest","coverage":"vitest run --coverage","lint":"biome check .","lint:fix":"biome check --write .","check:deps":"depcruise src --config .dependency-cruiser.cjs","verify":"pnpm typecheck && pnpm lint && pnpm check:deps && pnpm coverage"},"devDependencies":{"@biomejs/biome":"^2.5.10","@types/node":"^22.10.0","@vitest/coverage-v8":"^3.2.4","dependency-cruiser":"^17.0.0","fast-check":"^4.4.0","typescript":"^5.9.3","vitest":"^3.2.4"},"dependencies":{"commander":"^15.0.0","jsonc-parser":"^3.3.1","picocolors":"^1.1.1","smol-toml":"^1.8.0","yaml":"^2.9.0","zod":"^4.4.3"},"gitHead":"c2acbc6995d9ec8d21e40f33dcc24b680b1513c9","_id":"@abdur-codes/agent-sync@0.1.0","_nodeVersion":"24.20.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-oj/GsxmKbo+L/K+LNeSY0awqU/tZD3BUBdEkK6iKqhAaVq8Fu3Hh9FyfEZRU3YaVqIou0glcld5ttk4a9gc25w==","shasum":"785b4db890cde0638c89028c2c047a731c0ec144","tarball":"https://registry.npmjs.org/@abdur-codes/agent-sync/-/agent-sync-0.1.0.tgz","fileCount":138,"unpackedSize":531345,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abdur-codes%2fagent-sync@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCSPac/19xw/xEQ6/v8auCxykA64iWftWsg+e2fxn0OkAIgJ2dHN33R/YHl7eCr12XvIQkWC2d/NtQLK9XeLHUuVZw="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:931a567d-2a2f-40e3-93b3-d2d50bc4fb1b"}},"directories":{},"maintainers":[{"name":"abdur-codes","email":"abdurrahmansaad2020@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-sync_0.1.0_1788865492962_0.2682409390321494"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-08T10:43:30.898Z","modified":"2026-09-08T11:04:53.427Z","0.0.1":"2026-09-08T10:43:31.268Z","0.1.0":"2026-09-08T11:04:53.122Z"},"bugs":{"url":"https://github.com/Alpha-30-creator/agent-sync/issues"},"author":{"name":"Muhammad Abdur Rahman Saad"},"license":"MIT","homepage":"https://github.com/Alpha-30-creator/agent-sync#readme","keywords":["agent-skills","mcp","claude-code","codex","cursor","sync","cli"],"repository":{"type":"git","url":"git+https://github.com/Alpha-30-creator/agent-sync.git"},"description":"Sync skills and MCP servers across Claude Code, Codex, and Cursor — and across your devices","maintainers":[{"name":"abdur-codes","email":"abdurrahmansaad2020@gmail.com"}],"readme":"# agent-sync\n\n**One library of skills and MCP servers, synced across every coding agent you use and every machine you use them on.**\n\nIf you use more than one coding agent — Claude Code, OpenAI Codex, Cursor — on more than one machine, you know the problem. You write a good skill in Claude Code on your Mac, and it doesn't exist in Codex, doesn't exist in Cursor, and doesn't exist on your Windows machine. You add an MCP server to Cursor, then hand-translate the same config into TOML for Codex. Every agent speaks its own dialect of the same few ideas, and none of them talk to each other.\n\n```bash\nnpm install -g @abdur-codes/agent-sync\nagent-sync setup --create-remote agent-library\n```\n\nThe package is scoped because npm blocks the bare name as too similar to an unrelated package; the command is plain `agent-sync`.\n\nThat creates a private git repository for your library, registers the machine, and deploys agent-sync's own skills into every agent it finds. From then on you can just ask any of them: *\"create me a skill for reviewing SQL migrations\"* — and it is written to your library, deployed to every agent, committed and pushed, with no second command.\n\nOn your next machine:\n\n```bash\nagent-sync setup --clone <your-library-url>\n```\n\n## What it looks like\n\n```\n$ agent-sync status\nartifact                         claude        codex         cursor\nskill/sql-migration-review       ✔ synced      ✔ synced      ✔ synced\nskill/commit-style               ✔ synced      – excluded    – excluded\nmcp/github                       ✔ synced      ✔ synced      ⟳ outdated\nmcp/postgres                     ✔ synced      – excluded    ✔ synced\n```\n\n`agent-sync status --why` explains which rule produced every cell, so \"why doesn't Cursor have this?\" has an actual answer.\n\n## It will not damage your config\n\nThis is the part worth being specific about, because the whole tool depends on it.\n\nAdding an MCP server to a 4.3 KB Codex config with comments, nested env tables and typed values changes exactly this much:\n\n```diff\n+\n+[mcp_servers.langchain-docs]\n+url = \"https://docs.langchain.com/mcp\"\n```\n\nNothing else moves. Comments stay, key order stays, `120` does not become `120.0`, and a file using CRLF still uses CRLF. Codex's own `codex mcp add` does not manage this — it drops keys, reorders env tables and rewrites numbers, and removing the server afterwards does not undo it.\n\nThree more guarantees, each with tests behind it:\n\n- **A hand-edited file is never silently overwritten.** agent-sync notices, stops with a distinct exit code, and asks whether to keep your edit or replace it.\n- **A file it cannot parse is not touched at all.** It refuses rather than guessing.\n- **Credentials never enter the library.** MCP values are references (`${secret:name}`); the value stays on the one device, outside git. The CLI refuses a literal credential rather than committing one.\n\n## How it works\n\n```\n        ┌────────────────────────────┐\n        │   Canonical store (git)    │   ← you edit here, once\n        │   skills/   mcp/           │\n        │   manifest + routing rules │\n        └─────────────┬──────────────┘\n                      │  agent-sync apply\n                      ▼\n        ┌────────────────────────────┐\n        │     Resolver (pure fn)     │   ← manifest + machine facts → desired state\n        └─────────────┬──────────────┘\n          ┌───────────┼───────────┐\n          ▼           ▼           ▼\n     Claude Code    Codex       Cursor      ← adapters translate to native formats\n     ~/.claude/   ~/.codex/   ~/.cursor/\n     .claude/     .codex/     .cursor/\n```\n\nRouting rules decide what goes where — globally, per project, per agent, per device. Cross-device sync is `git push`/`git pull` on the store, wrapped so you don't think about it.\n\nNo server, no account, no lock-in. Your library is a normal git repository full of normal files: if agent-sync disappeared tomorrow, everything in it would still make sense.\n\n## Installing through an agent\n\nYou can also let an agent do it. Paste this into any of them:\n\n```\nRead https://raw.githubusercontent.com/Alpha-30-creator/agent-sync/main/INSTALL.md and follow it to set up agent-sync for me.\n```\n\nIt runs inspectable commands, asks you the two questions it genuinely cannot answer, and never handles a credential.\n\n## Documentation\n\n- **[Getting started](docs/getting-started.md)** — what it does, what it writes, and how to adopt an existing setup\n- **[Command reference](docs/commands.md)** — every command and flag\n- **[Contributing](CONTRIBUTING.md)** — how to work on it\n- **[Design docs](docs/design/)** — the spec and the [decision log](docs/design/decisions/), written before the code and kept current\n\n## Design principles\n\n- **Declarative, not imperative.** The manifest describes the end state; `apply` converges to it. Running it twice is a no-op.\n- **Functional core, imperative shell.** Decisions are pure functions over plain data; I/O lives at the edges. It is what makes the tool testable, and it is enforced by the build.\n- **Never destroy user work.** Drift is surfaced and resolved by you, never silently.\n- **Secrets never leave the machine.**\n- **Degrade honestly.** Agents have unequal capabilities. agent-sync says what it cannot map rather than pretending everything is portable.\n- **One action per intent.** Mutating commands are complete transactions: apply, commit, push.\n\n## Status\n\nWorking and in daily use across macOS and Windows. Skills, MCP servers, project scoping and routing are all implemented and tested on three operating systems. Plugin declarations are the main thing not yet supported — both Claude Code and Codex have plugin systems, and they were cut from the first release to get the rest shipped. See the [roadmap](docs/design/08-roadmap.md).\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","readmeFilename":"README.md"}