@googlarz/agents-sync 1.4.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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +507 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +267 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/loader.d.ts +9 -0
  8. package/dist/config/loader.d.ts.map +1 -0
  9. package/dist/config/loader.js +55 -0
  10. package/dist/config/loader.js.map +1 -0
  11. package/dist/config/schema.d.ts +69 -0
  12. package/dist/config/schema.d.ts.map +1 -0
  13. package/dist/config/schema.js +33 -0
  14. package/dist/config/schema.js.map +1 -0
  15. package/dist/derivers/aider.d.ts +19 -0
  16. package/dist/derivers/aider.d.ts.map +1 -0
  17. package/dist/derivers/aider.js +117 -0
  18. package/dist/derivers/aider.js.map +1 -0
  19. package/dist/derivers/claude.d.ts +19 -0
  20. package/dist/derivers/claude.d.ts.map +1 -0
  21. package/dist/derivers/claude.js +93 -0
  22. package/dist/derivers/claude.js.map +1 -0
  23. package/dist/derivers/cline.d.ts +17 -0
  24. package/dist/derivers/cline.d.ts.map +1 -0
  25. package/dist/derivers/cline.js +92 -0
  26. package/dist/derivers/cline.js.map +1 -0
  27. package/dist/derivers/copilot.d.ts +16 -0
  28. package/dist/derivers/copilot.d.ts.map +1 -0
  29. package/dist/derivers/copilot.js +162 -0
  30. package/dist/derivers/copilot.js.map +1 -0
  31. package/dist/derivers/cursor.d.ts +16 -0
  32. package/dist/derivers/cursor.d.ts.map +1 -0
  33. package/dist/derivers/cursor.js +121 -0
  34. package/dist/derivers/cursor.js.map +1 -0
  35. package/dist/derivers/gemini.d.ts +19 -0
  36. package/dist/derivers/gemini.d.ts.map +1 -0
  37. package/dist/derivers/gemini.js +33 -0
  38. package/dist/derivers/gemini.js.map +1 -0
  39. package/dist/derivers/index.d.ts +33 -0
  40. package/dist/derivers/index.d.ts.map +1 -0
  41. package/dist/derivers/index.js +134 -0
  42. package/dist/derivers/index.js.map +1 -0
  43. package/dist/derivers/merger.d.ts +36 -0
  44. package/dist/derivers/merger.d.ts.map +1 -0
  45. package/dist/derivers/merger.js +83 -0
  46. package/dist/derivers/merger.js.map +1 -0
  47. package/dist/derivers/roo.d.ts +18 -0
  48. package/dist/derivers/roo.d.ts.map +1 -0
  49. package/dist/derivers/roo.js +92 -0
  50. package/dist/derivers/roo.js.map +1 -0
  51. package/dist/derivers/windsurf.d.ts +16 -0
  52. package/dist/derivers/windsurf.d.ts.map +1 -0
  53. package/dist/derivers/windsurf.js +91 -0
  54. package/dist/derivers/windsurf.js.map +1 -0
  55. package/dist/extractor/extractor.d.ts +4 -0
  56. package/dist/extractor/extractor.d.ts.map +1 -0
  57. package/dist/extractor/extractor.js +125 -0
  58. package/dist/extractor/extractor.js.map +1 -0
  59. package/dist/extractor/schema.d.ts +187 -0
  60. package/dist/extractor/schema.d.ts.map +1 -0
  61. package/dist/extractor/schema.js +44 -0
  62. package/dist/extractor/schema.js.map +1 -0
  63. package/dist/generator/agents-md.d.ts +6 -0
  64. package/dist/generator/agents-md.d.ts.map +1 -0
  65. package/dist/generator/agents-md.js +135 -0
  66. package/dist/generator/agents-md.js.map +1 -0
  67. package/dist/generator/validator.d.ts +7 -0
  68. package/dist/generator/validator.d.ts.map +1 -0
  69. package/dist/generator/validator.js +67 -0
  70. package/dist/generator/validator.js.map +1 -0
  71. package/dist/lib/claude-client.d.ts +11 -0
  72. package/dist/lib/claude-client.d.ts.map +1 -0
  73. package/dist/lib/claude-client.js +74 -0
  74. package/dist/lib/claude-client.js.map +1 -0
  75. package/dist/lib/errors.d.ts +10 -0
  76. package/dist/lib/errors.d.ts.map +1 -0
  77. package/dist/lib/errors.js +27 -0
  78. package/dist/lib/errors.js.map +1 -0
  79. package/dist/lib/file-utils.d.ts +7 -0
  80. package/dist/lib/file-utils.d.ts.map +1 -0
  81. package/dist/lib/file-utils.js +56 -0
  82. package/dist/lib/file-utils.js.map +1 -0
  83. package/dist/lib/token-estimate.d.ts +7 -0
  84. package/dist/lib/token-estimate.d.ts.map +1 -0
  85. package/dist/lib/token-estimate.js +15 -0
  86. package/dist/lib/token-estimate.js.map +1 -0
  87. package/dist/scanner/codegraph.d.ts +13 -0
  88. package/dist/scanner/codegraph.d.ts.map +1 -0
  89. package/dist/scanner/codegraph.js +65 -0
  90. package/dist/scanner/codegraph.js.map +1 -0
  91. package/dist/scanner/docs.d.ts +13 -0
  92. package/dist/scanner/docs.d.ts.map +1 -0
  93. package/dist/scanner/docs.js +63 -0
  94. package/dist/scanner/docs.js.map +1 -0
  95. package/dist/scanner/gotchas.d.ts +8 -0
  96. package/dist/scanner/gotchas.d.ts.map +1 -0
  97. package/dist/scanner/gotchas.js +107 -0
  98. package/dist/scanner/gotchas.js.map +1 -0
  99. package/dist/scanner/index.d.ts +26 -0
  100. package/dist/scanner/index.d.ts.map +1 -0
  101. package/dist/scanner/index.js +95 -0
  102. package/dist/scanner/index.js.map +1 -0
  103. package/dist/scanner/manifest.d.ts +13 -0
  104. package/dist/scanner/manifest.d.ts.map +1 -0
  105. package/dist/scanner/manifest.js +285 -0
  106. package/dist/scanner/manifest.js.map +1 -0
  107. package/dist/scanner/mcp.d.ts +12 -0
  108. package/dist/scanner/mcp.d.ts.map +1 -0
  109. package/dist/scanner/mcp.js +96 -0
  110. package/dist/scanner/mcp.js.map +1 -0
  111. package/dist/scanner/repomix.d.ts +11 -0
  112. package/dist/scanner/repomix.d.ts.map +1 -0
  113. package/dist/scanner/repomix.js +87 -0
  114. package/dist/scanner/repomix.js.map +1 -0
  115. package/dist/scanner/skills.d.ts +18 -0
  116. package/dist/scanner/skills.d.ts.map +1 -0
  117. package/dist/scanner/skills.js +100 -0
  118. package/dist/scanner/skills.js.map +1 -0
  119. package/dist/scanner/source.d.ts +13 -0
  120. package/dist/scanner/source.d.ts.map +1 -0
  121. package/dist/scanner/source.js +157 -0
  122. package/dist/scanner/source.js.map +1 -0
  123. package/dist/scanner/structure.d.ts +10 -0
  124. package/dist/scanner/structure.d.ts.map +1 -0
  125. package/dist/scanner/structure.js +168 -0
  126. package/dist/scanner/structure.js.map +1 -0
  127. package/dist/server.d.ts +2 -0
  128. package/dist/server.d.ts.map +1 -0
  129. package/dist/server.js +245 -0
  130. package/dist/server.js.map +1 -0
  131. package/dist/snapshot/drift.d.ts +28 -0
  132. package/dist/snapshot/drift.d.ts.map +1 -0
  133. package/dist/snapshot/drift.js +205 -0
  134. package/dist/snapshot/drift.js.map +1 -0
  135. package/dist/snapshot/schema.d.ts +94 -0
  136. package/dist/snapshot/schema.d.ts.map +1 -0
  137. package/dist/snapshot/schema.js +24 -0
  138. package/dist/snapshot/schema.js.map +1 -0
  139. package/dist/snapshot/writer.d.ts +17 -0
  140. package/dist/snapshot/writer.d.ts.map +1 -0
  141. package/dist/snapshot/writer.js +44 -0
  142. package/dist/snapshot/writer.js.map +1 -0
  143. package/dist/tools/drift.d.ts +15 -0
  144. package/dist/tools/drift.d.ts.map +1 -0
  145. package/dist/tools/drift.js +51 -0
  146. package/dist/tools/drift.js.map +1 -0
  147. package/dist/tools/export.d.ts +14 -0
  148. package/dist/tools/export.d.ts.map +1 -0
  149. package/dist/tools/export.js +53 -0
  150. package/dist/tools/export.js.map +1 -0
  151. package/dist/tools/init.d.ts +28 -0
  152. package/dist/tools/init.d.ts.map +1 -0
  153. package/dist/tools/init.js +103 -0
  154. package/dist/tools/init.js.map +1 -0
  155. package/dist/tools/lint.d.ts +24 -0
  156. package/dist/tools/lint.d.ts.map +1 -0
  157. package/dist/tools/lint.js +213 -0
  158. package/dist/tools/lint.js.map +1 -0
  159. package/dist/tools/scan-report.d.ts +14 -0
  160. package/dist/tools/scan-report.d.ts.map +1 -0
  161. package/dist/tools/scan-report.js +136 -0
  162. package/dist/tools/scan-report.js.map +1 -0
  163. package/dist/tools/status.d.ts +18 -0
  164. package/dist/tools/status.d.ts.map +1 -0
  165. package/dist/tools/status.js +38 -0
  166. package/dist/tools/status.js.map +1 -0
  167. package/dist/tools/sync.d.ts +22 -0
  168. package/dist/tools/sync.d.ts.map +1 -0
  169. package/dist/tools/sync.js +123 -0
  170. package/dist/tools/sync.js.map +1 -0
  171. package/dist/tools/validate.d.ts +22 -0
  172. package/dist/tools/validate.d.ts.map +1 -0
  173. package/dist/tools/validate.js +97 -0
  174. package/dist/tools/validate.js.map +1 -0
  175. package/docs/agents-md-spec.md +233 -0
  176. package/docs/examples/.clinerules +29 -0
  177. package/docs/examples/.cursorrules +19 -0
  178. package/docs/examples/.windsurfrules +14 -0
  179. package/docs/examples/AGENTS.md +97 -0
  180. package/docs/examples/CLAUDE.md +88 -0
  181. package/docs/examples/GEMINI.md +61 -0
  182. package/docs/examples/copilot-instructions.md +24 -0
  183. package/docs/github-action.yml +89 -0
  184. package/package.json +63 -0
  185. package/scripts/demo.sh +138 -0
  186. package/skill/SKILL.md +158 -0
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@googlarz/agents-sync",
3
+ "version": "1.4.0",
4
+ "description": "Write your AI context once. One canonical AGENTS.md auto-derived into CLAUDE.md, .cursorrules, copilot-instructions.md, GEMINI.md, .windsurfrules, and .clinerules.",
5
+ "keywords": ["claude", "cursor", "mcp", "agents", "ai", "codegen", "context", "agentsmd", "cursorrules", "windsurf", "cline", "gemini", "agents-sync"],
6
+ "homepage": "https://github.com/googlarz/agents-sync#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/googlarz/agents-sync.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/googlarz/agents-sync/issues"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "registry": "https://registry.npmjs.org/"
17
+ },
18
+ "author": "googlarz",
19
+ "license": "MIT",
20
+ "type": "module",
21
+ "main": "dist/server.js",
22
+ "bin": {
23
+ "agents-sync": "dist/cli.js"
24
+ },
25
+ "files": [
26
+ "dist/",
27
+ "skill/",
28
+ "docs/",
29
+ "scripts/",
30
+ "README.md",
31
+ "LICENSE"
32
+ ],
33
+ "engines": {
34
+ "node": ">=18"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch",
39
+ "typecheck": "tsc --noEmit",
40
+ "lint": "eslint src --ext .ts",
41
+ "lint:fix": "eslint src --ext .ts --fix",
42
+ "test": "vitest run --reporter verbose",
43
+ "test:watch": "vitest",
44
+ "test:integration": "INTEGRATION=1 vitest run tests/integration --reporter verbose",
45
+ "test:coverage": "vitest run --coverage",
46
+ "prepublishOnly": "npm run build && npm test"
47
+ },
48
+ "dependencies": {
49
+ "@anthropic-ai/sdk": "^0.39.0",
50
+ "@modelcontextprotocol/sdk": "^1.12.0",
51
+ "fast-glob": "^3.3.3",
52
+ "zod": "^3.24.4"
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^22.15.21",
56
+ "@typescript-eslint/eslint-plugin": "^8.32.1",
57
+ "@typescript-eslint/parser": "^8.32.1",
58
+ "@vitest/coverage-v8": "^3.1.4",
59
+ "eslint": "^9.27.0",
60
+ "typescript": "^5.8.3",
61
+ "vitest": "^3.1.4"
62
+ }
63
+ }
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env bash
2
+ # agents-sync demo script
3
+ #
4
+ # Shows the full agents-sync workflow using a temporary Next.js fixture.
5
+ # Records cleanly with: asciinema rec demo.cast --command ./scripts/demo.sh
6
+ #
7
+ # Prerequisites:
8
+ # export ANTHROPIC_API_KEY=sk-ant-...
9
+ # npm run build (or: npx @googlarz/agents-sync)
10
+
11
+ set -euo pipefail
12
+
13
+ AGENTS_SYNC="${AGENTS_SYNC_BIN:-node dist/cli.js}"
14
+ DEMO_DIR="$(mktemp -d)"
15
+ trap 'rm -rf "$DEMO_DIR"' EXIT
16
+
17
+ # ─── helpers ─────────────────────────────────────────────────────────────────
18
+
19
+ say() { printf '\n\033[1;36m%s\033[0m\n' "$*"; }
20
+ run() { printf '\033[0;33m$ %s\033[0m\n' "$*"; sleep 0.4; eval "$*"; }
21
+ pause(){ sleep "${1:-1.2}"; }
22
+
23
+ # ─── scaffold a minimal Next.js project ──────────────────────────────────────
24
+
25
+ say "Setting up a minimal Next.js project..."
26
+
27
+ mkdir -p "$DEMO_DIR/src/app" "$DEMO_DIR/src/lib" "$DEMO_DIR/src/components"
28
+
29
+ cat > "$DEMO_DIR/package.json" <<'EOF'
30
+ {
31
+ "name": "acme-dashboard",
32
+ "version": "0.1.0",
33
+ "description": "Internal analytics dashboard for the sales team",
34
+ "scripts": { "dev": "next dev", "build": "next build", "test": "vitest" },
35
+ "dependencies": {
36
+ "next": "14.2.3",
37
+ "react": "^18.3.1",
38
+ "@prisma/client": "^5.15.0",
39
+ "next-auth": "^4.24.7",
40
+ "zod": "^3.23.8",
41
+ "tailwindcss": "^3.4.4"
42
+ },
43
+ "devDependencies": {
44
+ "typescript": "^5.4.5",
45
+ "prisma": "^5.15.0",
46
+ "vitest": "^1.6.0"
47
+ }
48
+ }
49
+ EOF
50
+
51
+ cat > "$DEMO_DIR/src/lib/db.ts" <<'EOF'
52
+ // IMPORTANT: Never import PrismaClient directly — use this singleton.
53
+ // Direct imports exhaust the connection pool in Vercel's serverless runtime.
54
+ import { PrismaClient } from "@prisma/client";
55
+
56
+ const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
57
+ export const db = globalForPrisma.prisma ?? new PrismaClient();
58
+ if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = db;
59
+ EOF
60
+
61
+ cat > "$DEMO_DIR/src/app/page.tsx" <<'EOF'
62
+ import { db } from "../lib/db";
63
+
64
+ export default async function DashboardPage() {
65
+ const stats = await db.report.count();
66
+ return <main><h1>Dashboard</h1><p>Total reports: {stats}</p></main>;
67
+ }
68
+ EOF
69
+
70
+ cat > "$DEMO_DIR/README.md" <<'EOF'
71
+ # Acme Dashboard
72
+
73
+ Internal analytics and reporting platform for the sales team.
74
+
75
+ Built with Next.js 14, Prisma, and NextAuth.
76
+ EOF
77
+
78
+ pause
79
+
80
+ # ─── 1. agents-sync init ─────────────────────────────────────────────────────
81
+
82
+ say "Step 1: Initialize agents-sync (scans codebase → Claude API → generates all files)"
83
+ run "$AGENTS_SYNC init $DEMO_DIR"
84
+
85
+ pause 2
86
+
87
+ # ─── 2. show generated files ─────────────────────────────────────────────────
88
+
89
+ say "Step 2: View the generated files"
90
+ run "ls -1 $DEMO_DIR/*.md $DEMO_DIR/.cursor* $DEMO_DIR/.github/copilot-instructions.md $DEMO_DIR/GEMINI.md $DEMO_DIR/.windsurfrules $DEMO_DIR/.clinerules 2>/dev/null || ls $DEMO_DIR"
91
+
92
+ pause 1.5
93
+
94
+ say "The canonical AGENTS.md:"
95
+ run "head -40 $DEMO_DIR/AGENTS.md"
96
+
97
+ pause 1.5
98
+
99
+ say "The derived .cursorrules (directive-style, <400 words):"
100
+ run "cat $DEMO_DIR/.cursorrules"
101
+
102
+ pause
103
+
104
+ # ─── 3. simulate a codebase change ───────────────────────────────────────────
105
+
106
+ say "Step 3: Simulate a dependency change (add drizzle-orm)"
107
+ run "node -e \"const p=require('$DEMO_DIR/package.json'); p.dependencies['drizzle-orm']='^0.31.0'; require('fs').writeFileSync('$DEMO_DIR/package.json', JSON.stringify(p, null, 2));\""
108
+
109
+ # also add a new directory
110
+ run "mkdir -p $DEMO_DIR/src/workers && touch $DEMO_DIR/src/workers/report-worker.ts"
111
+
112
+ pause
113
+
114
+ # ─── 4. drift check ──────────────────────────────────────────────────────────
115
+
116
+ say "Step 4: Check what drifted"
117
+ run "$AGENTS_SYNC drift $DEMO_DIR"
118
+
119
+ pause 1.5
120
+
121
+ # ─── 5. re-sync ──────────────────────────────────────────────────────────────
122
+
123
+ say "Step 5: Re-sync to update all files"
124
+ run "$AGENTS_SYNC sync $DEMO_DIR"
125
+
126
+ pause
127
+
128
+ # ─── 6. validate ─────────────────────────────────────────────────────────────
129
+
130
+ say "Step 6: Validate all files are in sync"
131
+ run "$AGENTS_SYNC validate $DEMO_DIR"
132
+
133
+ pause
134
+
135
+ # ─── done ────────────────────────────────────────────────────────────────────
136
+
137
+ say "Done! One AGENTS.md, six tool files, always in sync."
138
+ printf '\n\033[0;32m%s\033[0m\n\n' "npx @googlarz/agents-sync — try it on your project"
package/skill/SKILL.md ADDED
@@ -0,0 +1,158 @@
1
+ ---
2
+ name: agents-sync
3
+ description: Generate and sync AI context files (AGENTS.md, CLAUDE.md, .cursorrules, copilot-instructions.md, GEMINI.md, .windsurfrules, .clinerules) from your codebase. One canonical source, every tool stays current.
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # agents-sync
8
+
9
+ Generate and sync AI context files across every coding tool you use.
10
+
11
+ ## Prerequisites
12
+
13
+ Add to your Claude Code MCP config (`.claude/settings.json` or `~/.claude/claude_desktop_config.json`):
14
+
15
+ ```json
16
+ {
17
+ "mcpServers": {
18
+ "agents-sync": {
19
+ "command": "npx",
20
+ "args": ["@googlarz/agents-sync"],
21
+ "env": { "ANTHROPIC_API_KEY": "sk-ant-..." }
22
+ }
23
+ }
24
+ }
25
+ ```
26
+
27
+ Then restart Claude Code to connect.
28
+
29
+ ## Commands
30
+
31
+ ### `/agents-sync init`
32
+
33
+ First-time setup. Reads your codebase and generates all context files.
34
+
35
+ **When to use:** New project, or starting from scratch.
36
+
37
+ **What it does:**
38
+ 1. Scans your codebase (manifests, structure, source samples, docs, TODO/FIXME comments)
39
+ 2. Extracts project metadata via Claude API
40
+ 3. Generates canonical `AGENTS.md`
41
+ 4. Derives `CLAUDE.md`, `.cursorrules`, `.github/copilot-instructions.md`, `GEMINI.md`, `.windsurfrules`, `.clinerules`
42
+ 5. Saves a snapshot for drift detection
43
+
44
+ **Usage:**
45
+ > Run `/agents-sync init` on this project
46
+
47
+ Claude will call `agents_sync_init` with the current project path.
48
+
49
+ ---
50
+
51
+ ### `/agents-sync sync`
52
+
53
+ Re-sync after your codebase has changed. Preserves any manual customizations.
54
+
55
+ **When to use:** After major refactors, new dependencies, architecture changes.
56
+
57
+ **Options:**
58
+ - Add `--fast` to skip Claude API call when drift is minor (re-derives from existing AGENTS.md)
59
+ - Add `--dry-run` to preview changes without writing
60
+
61
+ **Usage:**
62
+ > Sync my AI context files
63
+ > `/agents-sync sync --fast`
64
+
65
+ ---
66
+
67
+ ### `/agents-sync drift`
68
+
69
+ Check what changed in your codebase since the last sync. Read-only.
70
+
71
+ **Usage:**
72
+ > What's drifted in my AI context files?
73
+ > `/agents-sync drift`
74
+
75
+ ---
76
+
77
+ ### `/agents-sync export [tool]`
78
+
79
+ Re-derive a single tool file without re-running analysis.
80
+
81
+ **Tools:** `claude`, `cursor`, `copilot`, `gemini`, `windsurf`, `cline`
82
+
83
+ **Usage:**
84
+ > `/agents-sync export cursor`
85
+ > Regenerate just my .cursorrules
86
+
87
+ ---
88
+
89
+ ### `/agents-sync validate`
90
+
91
+ Check whether all managed files are in sync with AGENTS.md.
92
+
93
+ **Usage:**
94
+ > `/agents-sync validate`
95
+ > Are my AI context files in sync?
96
+
97
+ ---
98
+
99
+ ### `/agents-sync status`
100
+
101
+ Show sync status: last sync time, managed files, drift score.
102
+
103
+ **Usage:**
104
+ > `/agents-sync status`
105
+
106
+ ---
107
+
108
+ ## How Claude Should Handle These Commands
109
+
110
+ When the user types `/agents-sync <command>`, call the corresponding MCP tool:
111
+
112
+ | Command | MCP Tool | Required params |
113
+ |---|---|---|
114
+ | `init` | `agents_sync_init` | `projectPath` = cwd |
115
+ | `sync` | `agents_sync_sync` | `projectPath` = cwd |
116
+ | `drift` | `agents_sync_drift` | `projectPath` = cwd |
117
+ | `export <tool>` | `agents_sync_export` | `projectPath` = cwd, `tool` = argument |
118
+ | `validate` | `agents_sync_validate` | `projectPath` = cwd |
119
+ | `status` | `agents_sync_status` | `projectPath` = cwd |
120
+
121
+ **Determine `projectPath`:** Use the current working directory. If ambiguous, ask the user which project to target.
122
+
123
+ **If MCP not connected:** Respond with:
124
+ > agents-sync MCP server is not connected. Add this to your Claude Code settings and restart:
125
+ > ```json
126
+ > {
127
+ > "mcpServers": {
128
+ > "agents-sync": {
129
+ > "command": "npx",
130
+ > "args": ["@googlarz/agents-sync"],
131
+ > "env": { "ANTHROPIC_API_KEY": "sk-ant-..." }
132
+ > }
133
+ > }
134
+ > }
135
+ > ```
136
+
137
+ **After init:** Remind the user to:
138
+ 1. Add `AGENTS.md` to git
139
+ 2. Add `.agents-sync/` to `.gitignore`
140
+
141
+ **After sync:** Show the list of files updated.
142
+
143
+ **Flags parsing:**
144
+ - `--fast` → set `fast: true` in `agents_sync_sync`
145
+ - `--dry-run` → set `dryRun: true`
146
+
147
+ ## Custom Sections
148
+
149
+ Users can add permanent customizations to any managed file that survive re-syncs:
150
+
151
+ ```markdown
152
+ <!-- AGENTS-SYNC:CUSTOM:START -->
153
+ When working on the payments module, always check with @alice first.
154
+ Use staging Stripe keys (in .env.staging) for all local testing.
155
+ <!-- AGENTS-SYNC:CUSTOM:END -->
156
+ ```
157
+
158
+ Add this anywhere in `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, `GEMINI.md`, `.windsurfrules`, or `.clinerules`. Re-sync preserves it.