memoir-cli 2.2.0 → 2.5.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <div align="center">
2
2
 
3
- # 🧠 memoir
3
+ # memoir
4
4
  **Your AI Remembers Everything. Sync It Everywhere.**
5
5
 
6
6
  [![npm version](https://img.shields.io/npm/v/memoir-cli.svg?style=flat-square)](https://npmjs.org/package/memoir-cli)
@@ -14,186 +14,164 @@
14
14
 
15
15
  ---
16
16
 
17
- ## šŸ’” The Problem
17
+ ## The Problem
18
18
 
19
- You spend weeks teaching your local AI CLI exactly how you like your code formatted, your preferred architectural patterns, and your project's unique context.
19
+ You spend weeks teaching your AI tools how you code — your preferred patterns, project context, coding standards.
20
20
 
21
- Then, you switch laptops. Or you want to share that setup with your team.
21
+ Then you switch laptops. Or try a new AI tool. Or want your team on the same page.
22
22
 
23
- Suddenly, you're starting from scratch. Your AI's "memory" is trapped in hidden `.gemini` or `.claude` folders on a single machine.
23
+ All that context is trapped in hidden dotfiles on one machine.
24
24
 
25
- ## šŸš€ The Solution
25
+ ## The Solution
26
26
 
27
- `memoir` is a zero-friction CLI that extracts, backs up, restores, and **translates** your AI's memory across any computer and any tool. Bring your own storage (a private GitHub repo or an iCloud/Dropbox folder), and `memoir` handles the rest.
28
-
29
- No locked-in SaaS, no lost context, no complex shell scripts. Switch from Claude to Gemini in one command.
30
-
31
- ### Supported Integrations
32
- - [x] **Gemini CLI**
33
- - [x] **Claude Code**
34
- - [x] **OpenAI Codex CLI**
35
- - [x] **Cursor**
36
- - [x] **GitHub Copilot**
37
- - [x] **Windsurf**
38
- - [x] **Aider**
39
-
40
- ---
41
-
42
- ## šŸ› ļø Installation
43
-
44
- Install globally via npm so you can use it anywhere on your machine:
27
+ `memoir` extracts, backs up, restores, and **translates** your AI memory across any computer and any tool. One command to save. One command to restore. One command to translate between tools.
45
28
 
46
29
  ```bash
47
30
  npm install -g memoir-cli
48
31
  ```
49
32
 
50
- ## ⚔ Quick Start
33
+ ### Supported Tools (11)
34
+ | Tool | Config synced |
35
+ |------|--------------|
36
+ | **ChatGPT** | `CHATGPT.md` — custom instructions, preferences |
37
+ | **Claude Code** | `~/.claude/` — settings, projects, memory files |
38
+ | **Gemini CLI** | `~/.gemini/` — settings, GEMINI.md |
39
+ | **OpenAI Codex** | `~/.codex/` — config, instructions |
40
+ | **Cursor** | Settings, keybindings, rules |
41
+ | **GitHub Copilot** | Config, settings |
42
+ | **Windsurf** | Settings, keybindings, rules |
43
+ | **Zed** | Settings, keymap, tasks |
44
+ | **Cline** | Settings, rules |
45
+ | **Continue.dev** | Config, rules |
46
+ | **Aider** | `.aider.conf.yml`, system prompt |
47
+
48
+ Plus **per-project configs**: automatically finds `CLAUDE.md`, `GEMINI.md`, `CHATGPT.md`, `.cursorrules`, `AGENTS.md` across all your projects.
51
49
 
52
- ### 1. Initialize
53
- Run the setup wizard. We'll help you securely link a private GitHub repository or a local sync folder.
50
+ ---
54
51
 
52
+ ## Quick Start
53
+
54
+ ### 1. Initialize
55
55
  ```bash
56
56
  memoir init
57
+ # Walks you through setup — GitHub repo or local folder
58
+ # Auto-creates a private repo if you have gh CLI
57
59
  ```
58
60
 
59
- ### 2. Backup Your Memory
60
- Just had a great session? Save your AI's learned context to the cloud:
61
-
61
+ ### 2. Back up your memory
62
62
  ```bash
63
63
  memoir push
64
- # or simply use the alias:
65
- memoir remember
66
64
  ```
67
65
 
68
- ### 3. Restore Anywhere
69
- Got a new machine? Pull your brain down instantly:
70
-
66
+ ### 3. Restore on a new machine
71
67
  ```bash
72
68
  memoir restore
73
- # or:
74
- memoir pull
75
69
  ```
76
70
 
77
- ### 4. Translate Between Tools
78
- Switch AI tools without losing context. Memoir uses Gemini AI to intelligently rewrite your memory files for any supported tool:
79
-
71
+ ### 4. Translate between tools
80
72
  ```bash
81
73
  memoir migrate --from claude --to gemini
82
- # or run interactively:
83
- memoir migrate
74
+ # AI-powered translation — not copy-paste, real rewriting
84
75
  ```
85
76
 
86
- Your Claude instructions become a proper `GEMINI.md` — not a copy-paste, but a real translation that follows each tool's conventions.
87
-
88
77
  ---
89
78
 
90
- ## šŸ“– All Commands
79
+ ## All Commands
91
80
 
92
81
  | Command | What it does |
93
82
  |---------|-------------|
94
- | `memoir init` | Setup wizard — pick GitHub or local folder, upload or download |
95
- | `memoir push` | Extract all AI tool configs, back up to GitHub/local |
96
- | `memoir restore` | Pull backup down, restore missing files (non-destructive) |
97
- | `memoir status` | Show which AI tools are detected on this machine |
98
- | `memoir view` | Preview backup contents with diffs against local |
99
- | `memoir migrate` | Translate memory between tools via Gemini AI |
83
+ | `memoir init` | Setup wizard — GitHub or local, upload or download |
84
+ | `memoir push` | Back up all AI configs |
85
+ | `memoir restore` | Restore on a new machine (non-destructive) |
86
+ | `memoir status` | Show detected AI tools |
87
+ | `memoir doctor` | Diagnose issues, scan for secrets |
88
+ | `memoir view` | Preview what's in your backup |
89
+ | `memoir diff` | Show changes since last backup |
90
+ | `memoir migrate` | Translate memory between tools via AI |
91
+ | `memoir snapshot` | Capture current coding session |
92
+ | `memoir resume` | Pick up where you left off |
93
+ | `memoir profile` | Manage profiles (personal/work) |
94
+ | `memoir update` | Self-update to latest version |
100
95
 
101
96
  ---
102
97
 
103
- ## šŸŽÆ Common Workflows
98
+ ## Profiles
99
+
100
+ Separate personal and work configs — different repos, different tools.
104
101
 
105
- ### New laptop setup
106
102
  ```bash
107
- # Old machine — save everything
108
- memoir init # → Upload → GitHub
103
+ memoir profile create work # set up work profile with its own repo
104
+ memoir profile create personal # personal side projects
109
105
 
110
- # New machine — restore everything
111
- memoir init # → Download → GitHub
112
- # All your .claude/, .gemini/, .cursorrules configs restored in 30 seconds
113
- ```
106
+ memoir push --profile work # sync only work configs
107
+ memoir restore --profile personal
114
108
 
115
- ### Switch from Claude to Gemini (or any tool)
116
- ```bash
117
- memoir migrate --from claude --to gemini
109
+ memoir profile list # see all profiles
110
+ memoir profile switch work # change default
118
111
  ```
119
- Your CLAUDE.md + Claude memory files get intelligently rewritten as a proper GEMINI.md — not a copy-paste, but a real translation that follows Gemini's conventions.
120
112
 
121
- ### Keep your whole team in sync
122
- ```bash
123
- # Team lead writes CLAUDE.md, then generates for everyone else:
124
- memoir migrate --from claude --to cursor
125
- memoir migrate --from claude --to copilot
126
- memoir migrate --from claude --to codex
127
- ```
113
+ Each profile can filter which tools to sync, so your personal side project memory never mixes with work.
128
114
 
129
- ### Fan out to every tool at once
130
- ```bash
131
- memoir migrate --from claude --to gemini
132
- memoir migrate --from claude --to codex
133
- memoir migrate --from claude --to cursor
134
- memoir migrate --from claude --to windsurf
135
- memoir migrate --from claude --to aider
136
- ```
137
- Use one tool as the source of truth, propagate to all others.
115
+ ---
116
+
117
+ ## Common Workflows
138
118
 
139
- ### Preview before committing
119
+ ### New laptop setup
140
120
  ```bash
141
- memoir migrate --from gemini --to claude --dry-run
142
- # Shows translated output but writes nothing
121
+ # Old machine
122
+ memoir push
123
+
124
+ # New machine
125
+ memoir init # → Download → same GitHub repo
126
+ memoir restore # All configs restored in seconds
143
127
  ```
144
128
 
145
- ### Protect existing files
129
+ ### Translate between tools
146
130
  ```bash
147
- memoir migrate --from claude --to gemini
148
- # → "GEMINI.md already exists."
149
- # → Overwrite / Append / Skip
150
- # Append adds a dated separator so you keep your existing instructions
131
+ memoir migrate --from chatgpt --to claude
132
+ # Your ChatGPT custom instructions become a proper CLAUDE.md
151
133
  ```
152
134
 
153
- ### Daily sync across machines
135
+ ### Fan out to every tool
154
136
  ```bash
155
- # End of day
156
- memoir push
157
-
158
- # Next morning, different machine
159
- memoir pull
137
+ memoir migrate --from chatgpt --to all
138
+ # One source of truth, every tool gets its own format
160
139
  ```
161
140
 
162
- ### Check what's on this machine
141
+ ### Daily sync
163
142
  ```bash
164
- memoir status
165
- # Shows checkmarks for every detected AI tool and their config locations
143
+ memoir push # end of day
144
+ memoir restore # next morning, different machine
166
145
  ```
167
146
 
168
147
  ---
169
148
 
170
- ## šŸ”’ Security First
149
+ ## Security
171
150
 
172
- Your AI memory files often sit right next to sensitive API keys and OAuth tokens. **`memoir` is designed to be paranoid.**
151
+ Memoir **only** syncs config files, instructions, and memory markdown. It never touches credentials, API keys, `.env` files, or auth tokens.
173
152
 
174
- Our specialized adapters intelligently filter your directories. We **only** sync configuration files, custom prompts, and markdown memory (`GEMINI.md`, `CLAUDE.md`). We will never touch, copy, or push `.env` files, `.key` files, or credential caches.
153
+ Run `memoir doctor` to see exactly what would be synced and scan for accidental secrets before pushing.
175
154
 
176
155
  ---
177
156
 
178
- ## šŸ—ŗļø Roadmap
157
+ ## Roadmap
179
158
 
180
- **What's next:**
181
- - Team sharing — sync a shared memory repo across your whole team
182
- - Auto-detect new AI tools as they appear
183
- - Two-way merge — combine memories from multiple tools into one
159
+ - **Universal format** — write one `MEMOIR.md`, generate all tool-specific configs
160
+ - **Cloud sync** — no GitHub needed, encrypted backups
161
+ - **Teams** — shared coding standards across your whole team
162
+ - **Templates** — community-shared AI tool configs
184
163
 
185
164
  ---
186
165
 
187
- ## šŸ¤ Contributing
166
+ ## Contributing
188
167
 
189
- We welcome contributions! Whether it's adding an adapter for a new AI CLI, improving the UI, or helping build the Migration Engine.
168
+ Contributions welcome — especially new tool adapters and migration improvements.
190
169
 
191
- 1. Fork the Project
192
- 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
193
- 3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
194
- 4. Push to the Branch (`git push origin feature/AmazingFeature`)
195
- 5. Open a Pull Request
170
+ 1. Fork the repo
171
+ 2. Create your branch (`git checkout -b feature/my-feature`)
172
+ 3. Commit and push
173
+ 4. Open a PR
196
174
 
197
- ## šŸ“„ License
175
+ ## License
198
176
 
199
- Distributed under the MIT License. See `LICENSE` for more information.
177
+ MIT
package/bin/memoir.js CHANGED
@@ -13,6 +13,10 @@ import { diffCommand } from '../src/commands/diff.js';
13
13
  import { migrateCommand } from '../src/commands/migrate.js';
14
14
  import { snapshotCommand } from '../src/commands/snapshot.js';
15
15
  import { resumeCommand } from '../src/commands/resume.js';
16
+ import { profileListCommand, profileCreateCommand, profileSwitchCommand, profileDeleteCommand } from '../src/commands/profile.js';
17
+ import { loginCommand, logoutCommand } from '../src/commands/login.js';
18
+ import { cloudPushCommand, cloudRestoreCommand } from '../src/commands/cloud.js';
19
+ import { historyCommand } from '../src/commands/history.js';
16
20
  import { createRequire } from 'module';
17
21
 
18
22
  const require = createRequire(import.meta.url);
@@ -57,8 +61,14 @@ if (process.argv.length <= 2) {
57
61
  chalk.cyan(' memoir snapshot ') + chalk.gray('— capture your current session') + '\n' +
58
62
  chalk.cyan(' memoir resume ') + chalk.gray('— pick up where you left off') + '\n' +
59
63
  chalk.cyan(' memoir status ') + chalk.gray('— see detected AI tools') + '\n' +
64
+ chalk.cyan(' memoir profile ') + chalk.gray('— manage profiles (personal/work)') + '\n' +
60
65
  chalk.cyan(' memoir update ') + chalk.gray('— update to latest version') + '\n\n' +
61
- chalk.gray(' Tip: use --only claude,gemini to sync specific tools') + '\n\n' +
66
+ chalk.white.bold('Cloud (Pro):') + '\n' +
67
+ chalk.cyan(' memoir login ') + chalk.gray('— sign in to memoir cloud') + '\n' +
68
+ chalk.cyan(' memoir cloud push ') + chalk.gray('— back up to the cloud') + '\n' +
69
+ chalk.cyan(' memoir cloud restore ') + chalk.gray('— restore from cloud') + '\n' +
70
+ chalk.cyan(' memoir history ') + chalk.gray('— view backup versions') + '\n\n' +
71
+ chalk.gray(' Tip: use --profile work to sync a specific profile') + '\n\n' +
62
72
  chalk.gray(`v${VERSION}`),
63
73
  { padding: 1, borderStyle: 'round', borderColor: 'cyan', dimBorder: true }
64
74
  ) + '\n');
@@ -93,7 +103,8 @@ program
93
103
  .command('push')
94
104
  .alias('remember')
95
105
  .description('Back up your AI memory to the cloud')
96
- .option('--only <tools>', 'Only sync specific tools (comma-separated: claude,gemini,codex,cursor,copilot,windsurf,aider)')
106
+ .option('--only <tools>', 'Only sync specific tools (comma-separated)')
107
+ .option('-p, --profile <name>', 'Use a specific profile')
97
108
  .action(async (options) => {
98
109
  try {
99
110
  await pushCommand(options);
@@ -107,8 +118,9 @@ program
107
118
  .command('restore')
108
119
  .alias('pull')
109
120
  .description('Restore your AI memory on this machine')
110
- .option('--only <tools>', 'Only restore specific tools (comma-separated: claude,gemini,codex,cursor,copilot,windsurf,aider)')
121
+ .option('--only <tools>', 'Only restore specific tools (comma-separated)')
111
122
  .option('-y, --yes', 'Skip confirmation prompts (restore all)')
123
+ .option('-p, --profile <name>', 'Use a specific profile')
112
124
  .action(async (options) => {
113
125
  try {
114
126
  await restoreCommand(options);
@@ -121,9 +133,10 @@ program
121
133
  program
122
134
  .command('status')
123
135
  .description('See what AI tools are on this machine')
124
- .action(async () => {
136
+ .option('-p, --profile <name>', 'Use a specific profile')
137
+ .action(async (options) => {
125
138
  try {
126
- await statusCommand();
139
+ await statusCommand(options);
127
140
  } catch (err) {
128
141
  console.error(chalk.red('\nāœ– Error:'), err.message);
129
142
  process.exit(1);
@@ -134,9 +147,10 @@ program
134
147
  .command('doctor')
135
148
  .alias('diagnose')
136
149
  .description('Diagnose common issues with your memoir setup')
137
- .action(async () => {
150
+ .option('-p, --profile <name>', 'Use a specific profile')
151
+ .action(async (options) => {
138
152
  try {
139
- await doctorCommand();
153
+ await doctorCommand(options);
140
154
  } catch (err) {
141
155
  console.error(chalk.red('\nāœ– Error:'), err.message);
142
156
  process.exit(1);
@@ -147,9 +161,10 @@ program
147
161
  .command('view')
148
162
  .alias('ls')
149
163
  .description('Preview what files are in your backup')
150
- .action(async () => {
164
+ .option('-p, --profile <name>', 'Use a specific profile')
165
+ .action(async (options) => {
151
166
  try {
152
- await viewCommand();
167
+ await viewCommand(options);
153
168
  } catch (err) {
154
169
  console.error(chalk.red('\nāœ– Error:'), err.message);
155
170
  process.exit(1);
@@ -160,9 +175,10 @@ program
160
175
  .command('diff')
161
176
  .alias('changes')
162
177
  .description('Show what changed since your last backup')
163
- .action(async () => {
178
+ .option('-p, --profile <name>', 'Use a specific profile')
179
+ .action(async (options) => {
164
180
  try {
165
- await diffCommand();
181
+ await diffCommand(options);
166
182
  } catch (err) {
167
183
  console.error(chalk.red('\nāœ– Error:'), err.message);
168
184
  process.exit(1);
@@ -175,6 +191,7 @@ program
175
191
  .description('Capture your current coding session for handoff')
176
192
  .option('--smart', 'Use AI to generate a better summary (requires Gemini API key)')
177
193
  .option('--goal <goal>', 'What you want to do next (goal-directed handoff)')
194
+ .option('-p, --profile <name>', 'Use a specific profile')
178
195
  .action(async (options) => {
179
196
  try {
180
197
  await snapshotCommand(options);
@@ -189,6 +206,7 @@ program
189
206
  .description('Pick up where you left off on another machine')
190
207
  .option('--inject', 'Write the handoff where your AI tool will read it')
191
208
  .option('--to <tool>', 'Target tool for injection (claude, gemini, cursor, codex)')
209
+ .option('-p, --profile <name>', 'Use a specific profile')
192
210
  .action(async (options) => {
193
211
  try {
194
212
  await resumeCommand(options);
@@ -220,7 +238,6 @@ program
220
238
  console.log('\n' + chalk.cyan(`Updating memoir ${VERSION} → ${chalk.green.bold(latest)}...`) + '\n');
221
239
 
222
240
  const { execSync } = await import('child_process');
223
- // Detect package manager — prefer the one that installed memoir
224
241
  const execPath = process.argv[1] || '';
225
242
  const useBun = execPath.includes('.bun') || process.env.BUN_INSTALL;
226
243
  const cmd = useBun ? 'bun install -g memoir-cli' : 'npm install -g memoir-cli';
@@ -254,6 +271,128 @@ program
254
271
  }
255
272
  });
256
273
 
274
+ // Cloud auth
275
+ program
276
+ .command('login')
277
+ .description('Sign in to memoir cloud')
278
+ .action(async () => {
279
+ try {
280
+ await loginCommand();
281
+ } catch (err) {
282
+ console.error(chalk.red('\nāœ– Error:'), err.message);
283
+ process.exit(1);
284
+ }
285
+ });
286
+
287
+ program
288
+ .command('logout')
289
+ .description('Sign out of memoir cloud')
290
+ .action(async () => {
291
+ try {
292
+ await logoutCommand();
293
+ } catch (err) {
294
+ console.error(chalk.red('\nāœ– Error:'), err.message);
295
+ process.exit(1);
296
+ }
297
+ });
298
+
299
+ // Cloud sync
300
+ const cloud = program.command('cloud').description('Cloud backup and restore (Pro)');
301
+
302
+ cloud
303
+ .command('push')
304
+ .description('Back up your AI memory to the cloud')
305
+ .option('--only <tools>', 'Only sync specific tools (comma-separated)')
306
+ .action(async (options) => {
307
+ try {
308
+ await cloudPushCommand(options);
309
+ } catch (err) {
310
+ console.error(chalk.red('\nāœ– Error:'), err.message);
311
+ process.exit(1);
312
+ }
313
+ });
314
+
315
+ cloud
316
+ .command('restore')
317
+ .description('Restore your AI memory from the cloud')
318
+ .option('--only <tools>', 'Only restore specific tools (comma-separated)')
319
+ .option('-y, --yes', 'Skip confirmation prompts')
320
+ .option('--version <number>', 'Restore a specific version')
321
+ .action(async (options) => {
322
+ try {
323
+ await cloudRestoreCommand(options);
324
+ } catch (err) {
325
+ console.error(chalk.red('\nāœ– Error:'), err.message);
326
+ process.exit(1);
327
+ }
328
+ });
329
+
330
+ program
331
+ .command('history')
332
+ .description('View your cloud backup history')
333
+ .action(async () => {
334
+ try {
335
+ await historyCommand();
336
+ } catch (err) {
337
+ console.error(chalk.red('\nāœ– Error:'), err.message);
338
+ process.exit(1);
339
+ }
340
+ });
341
+
342
+ // Profile management
343
+ const profile = program.command('profile').description('Manage profiles (personal, work, etc.)');
344
+
345
+ profile
346
+ .command('list')
347
+ .alias('ls')
348
+ .description('List all profiles')
349
+ .action(async () => {
350
+ try {
351
+ await profileListCommand();
352
+ } catch (err) {
353
+ console.error(chalk.red('\nāœ– Error:'), err.message);
354
+ process.exit(1);
355
+ }
356
+ });
357
+
358
+ profile
359
+ .command('create <name>')
360
+ .description('Create a new profile')
361
+ .action(async (name) => {
362
+ try {
363
+ await profileCreateCommand(name);
364
+ } catch (err) {
365
+ console.error(chalk.red('\nāœ– Error:'), err.message);
366
+ process.exit(1);
367
+ }
368
+ });
369
+
370
+ profile
371
+ .command('switch <name>')
372
+ .alias('use')
373
+ .description('Switch to a profile')
374
+ .action(async (name) => {
375
+ try {
376
+ await profileSwitchCommand(name);
377
+ } catch (err) {
378
+ console.error(chalk.red('\nāœ– Error:'), err.message);
379
+ process.exit(1);
380
+ }
381
+ });
382
+
383
+ profile
384
+ .command('delete <name>')
385
+ .alias('rm')
386
+ .description('Delete a profile')
387
+ .action(async (name) => {
388
+ try {
389
+ await profileDeleteCommand(name);
390
+ } catch (err) {
391
+ console.error(chalk.red('\nāœ– Error:'), err.message);
392
+ process.exit(1);
393
+ }
394
+ });
395
+
257
396
  program.hook('postAction', async () => {
258
397
  await checkForUpdate();
259
398
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memoir-cli",
3
- "version": "2.2.0",
3
+ "version": "2.5.0",
4
4
  "description": "Sync AI memory across devices. Back up and restore Claude, Gemini, Codex, Cursor, Copilot, Windsurf configs. Snapshot coding sessions and resume on another machine. Migrate instructions between AI assistants.",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -35,6 +35,10 @@
35
35
  "copilot",
36
36
  "windsurf",
37
37
  "aider",
38
+ "zed",
39
+ "cline",
40
+ "continue-dev",
41
+ "profiles",
38
42
  "ai-memory",
39
43
  "ai-tools",
40
44
  "dotfiles",
@@ -42,6 +46,7 @@
42
46
  "claude-code",
43
47
  "gemini-cli",
44
48
  "openai",
49
+ "chatgpt",
45
50
  "ai-assistant",
46
51
  "coding-assistant",
47
52
  "context-sync",
@@ -58,7 +63,6 @@
58
63
  "fs-extra": "^11.2.0",
59
64
  "gradient-string": "^3.0.0",
60
65
  "inquirer": "^9.2.15",
61
- "open": "^11.0.0",
62
- "ora": "^7.0.1"
66
+ "ora": "^7.0.1"
63
67
  }
64
68
  }
@@ -298,7 +298,7 @@ export async function extractMemories(stagingDir, spinner, onlyFilter = null) {
298
298
  spinner.text = `šŸ“ Scanning for project-level AI configs...`;
299
299
 
300
300
  const projectFiles = [
301
- 'CLAUDE.md', 'GEMINI.md', 'AGENTS.md', '.cursorrules',
301
+ 'CLAUDE.md', 'GEMINI.md', 'CHATGPT.md', 'AGENTS.md', '.cursorrules',
302
302
  '.github/copilot-instructions.md', '.windsurfrules',
303
303
  '.aider.conf.yml', '.clinerules'
304
304
  ];