@yawlabs/ctxlint 0.9.1 → 0.9.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/AGENT_SESSION_LINT_SPEC.md +27 -0
- package/CONTEXT_LINT_SPEC.md +23 -5
- package/README.md +35 -4
- package/agent-session-lint-rules.json +25 -7
- package/context-lint-rules.json +191 -45
- package/dist/index.js +1827 -1461
- package/mcp-config-lint-rules.json +189 -44
- package/package.json +8 -2
package/context-lint-rules.json
CHANGED
|
@@ -29,6 +29,12 @@
|
|
|
29
29
|
"description": "Monitors context file size to help teams manage context window consumption.",
|
|
30
30
|
"scope": "per-file and cross-file"
|
|
31
31
|
},
|
|
32
|
+
{
|
|
33
|
+
"id": "tier-tokens",
|
|
34
|
+
"name": "Tier-Aware Token Accounting",
|
|
35
|
+
"description": "Reports per-section token cost for always-loaded context files and flags demotion candidates for on-demand tiers (skills, subagents, memory).",
|
|
36
|
+
"scope": "per-file"
|
|
37
|
+
},
|
|
32
38
|
{
|
|
33
39
|
"id": "redundancy",
|
|
34
40
|
"name": "Inferable Content",
|
|
@@ -69,7 +75,8 @@
|
|
|
69
75
|
"trigger": "Path reference in context file resolves to a non-existent file or directory.",
|
|
70
76
|
"message": "{path} does not exist",
|
|
71
77
|
"fixable": true,
|
|
72
|
-
"fixDescription": "Replace broken path with suggestion from git rename detection or fuzzy matching."
|
|
78
|
+
"fixDescription": "Replace broken path with suggestion from git rename detection or fuzzy matching.",
|
|
79
|
+
"stability": "stable"
|
|
73
80
|
},
|
|
74
81
|
{
|
|
75
82
|
"id": "paths/glob-no-match",
|
|
@@ -78,7 +85,8 @@
|
|
|
78
85
|
"description": "Glob pattern matches zero files in the project.",
|
|
79
86
|
"trigger": "Path contains wildcard characters (*, ?) but matches no files.",
|
|
80
87
|
"message": "{pattern} matches no files",
|
|
81
|
-
"fixable": false
|
|
88
|
+
"fixable": false,
|
|
89
|
+
"stability": "stable"
|
|
82
90
|
},
|
|
83
91
|
{
|
|
84
92
|
"id": "paths/directory-not-found",
|
|
@@ -87,7 +95,8 @@
|
|
|
87
95
|
"description": "Referenced directory does not exist.",
|
|
88
96
|
"trigger": "Path ending with / does not resolve to an existing directory.",
|
|
89
97
|
"message": "{path} directory does not exist",
|
|
90
|
-
"fixable": false
|
|
98
|
+
"fixable": false,
|
|
99
|
+
"stability": "stable"
|
|
91
100
|
},
|
|
92
101
|
{
|
|
93
102
|
"id": "commands/script-not-found",
|
|
@@ -96,7 +105,8 @@
|
|
|
96
105
|
"description": "Package manager script name is not found in package.json scripts.",
|
|
97
106
|
"trigger": "npm run, pnpm, yarn, or bun script reference does not match a key in package.json#scripts.",
|
|
98
107
|
"message": "\"{cmd}\" — script \"{name}\" not found in package.json",
|
|
99
|
-
"fixable": false
|
|
108
|
+
"fixable": false,
|
|
109
|
+
"stability": "stable"
|
|
100
110
|
},
|
|
101
111
|
{
|
|
102
112
|
"id": "commands/make-target-not-found",
|
|
@@ -105,7 +115,8 @@
|
|
|
105
115
|
"description": "Make target is not found in Makefile.",
|
|
106
116
|
"trigger": "make command references a target not declared in the project's Makefile.",
|
|
107
117
|
"message": "\"{cmd}\" — target \"{name}\" not found in Makefile",
|
|
108
|
-
"fixable": false
|
|
118
|
+
"fixable": false,
|
|
119
|
+
"stability": "stable"
|
|
109
120
|
},
|
|
110
121
|
{
|
|
111
122
|
"id": "commands/no-makefile",
|
|
@@ -114,7 +125,8 @@
|
|
|
114
125
|
"description": "Make command used but no Makefile exists in the project.",
|
|
115
126
|
"trigger": "Context file references a make command but no Makefile is found at the project root.",
|
|
116
127
|
"message": "\"{cmd}\" — no Makefile found in project",
|
|
117
|
-
"fixable": false
|
|
128
|
+
"fixable": false,
|
|
129
|
+
"stability": "stable"
|
|
118
130
|
},
|
|
119
131
|
{
|
|
120
132
|
"id": "commands/npx-not-in-deps",
|
|
@@ -123,7 +135,8 @@
|
|
|
123
135
|
"description": "npx package is not in project dependencies.",
|
|
124
136
|
"trigger": "npx package is not in package.json dependencies/devDependencies and not in node_modules/.bin.",
|
|
125
137
|
"message": "\"{cmd}\" — \"{pkg}\" not found in dependencies",
|
|
126
|
-
"fixable": false
|
|
138
|
+
"fixable": false,
|
|
139
|
+
"stability": "stable"
|
|
127
140
|
},
|
|
128
141
|
{
|
|
129
142
|
"id": "commands/tool-not-found",
|
|
@@ -132,7 +145,8 @@
|
|
|
132
145
|
"description": "Common development tool is not in project dependencies.",
|
|
133
146
|
"trigger": "Tool name (vitest, jest, eslint, prettier, tsc, etc.) not found in dependencies or node_modules/.bin.",
|
|
134
147
|
"message": "\"{cmd}\" — \"{tool}\" not found in dependencies or node_modules/.bin",
|
|
135
|
-
"fixable": false
|
|
148
|
+
"fixable": false,
|
|
149
|
+
"stability": "stable"
|
|
136
150
|
},
|
|
137
151
|
{
|
|
138
152
|
"id": "staleness/stale",
|
|
@@ -141,7 +155,8 @@
|
|
|
141
155
|
"description": "Context file has not been updated in 30+ days while referenced code has changed.",
|
|
142
156
|
"trigger": "File last modified 30+ days ago AND paths it references have git commits since.",
|
|
143
157
|
"message": "Last updated {days} days ago. {path} has {N} commits since.",
|
|
144
|
-
"fixable": false
|
|
158
|
+
"fixable": false,
|
|
159
|
+
"stability": "stable"
|
|
145
160
|
},
|
|
146
161
|
{
|
|
147
162
|
"id": "staleness/aging",
|
|
@@ -150,7 +165,8 @@
|
|
|
150
165
|
"description": "Context file has not been updated in 14-30 days while referenced code has changed.",
|
|
151
166
|
"trigger": "File last modified 14-30 days ago AND paths it references have git commits since.",
|
|
152
167
|
"message": "Last updated {days} days ago. {path} has {N} commits since.",
|
|
153
|
-
"fixable": false
|
|
168
|
+
"fixable": false,
|
|
169
|
+
"stability": "stable"
|
|
154
170
|
},
|
|
155
171
|
{
|
|
156
172
|
"id": "tokens/excessive",
|
|
@@ -161,7 +177,8 @@
|
|
|
161
177
|
"message": "{N} tokens — consumes significant context window space",
|
|
162
178
|
"fixable": false,
|
|
163
179
|
"configurable": true,
|
|
164
|
-
"defaultThreshold": 8000
|
|
180
|
+
"defaultThreshold": 8000,
|
|
181
|
+
"stability": "stable"
|
|
165
182
|
},
|
|
166
183
|
{
|
|
167
184
|
"id": "tokens/large",
|
|
@@ -172,7 +189,8 @@
|
|
|
172
189
|
"message": "{N} tokens — large context file",
|
|
173
190
|
"fixable": false,
|
|
174
191
|
"configurable": true,
|
|
175
|
-
"defaultThreshold": 3000
|
|
192
|
+
"defaultThreshold": 3000,
|
|
193
|
+
"stability": "stable"
|
|
176
194
|
},
|
|
177
195
|
{
|
|
178
196
|
"id": "tokens/info",
|
|
@@ -183,7 +201,8 @@
|
|
|
183
201
|
"message": "Uses ~{N} tokens per session",
|
|
184
202
|
"fixable": false,
|
|
185
203
|
"configurable": true,
|
|
186
|
-
"defaultThreshold": 1000
|
|
204
|
+
"defaultThreshold": 1000,
|
|
205
|
+
"stability": "stable"
|
|
187
206
|
},
|
|
188
207
|
{
|
|
189
208
|
"id": "tokens/aggregate",
|
|
@@ -194,7 +213,45 @@
|
|
|
194
213
|
"message": "{count} context files consume {N} tokens combined",
|
|
195
214
|
"fixable": false,
|
|
196
215
|
"configurable": true,
|
|
197
|
-
"defaultThreshold": 5000
|
|
216
|
+
"defaultThreshold": 5000,
|
|
217
|
+
"stability": "stable"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"id": "tier-tokens/section-breakdown",
|
|
221
|
+
"category": "tier-tokens",
|
|
222
|
+
"severity": "info",
|
|
223
|
+
"description": "Reports the heaviest top-level sections in an always-loaded context file and suggests demoting the largest to an on-demand tier (skill, subagent, or memory).",
|
|
224
|
+
"trigger": "An always-loaded context file (CLAUDE.md, AGENTS.md, .cursorrules, etc. — excluding path-scoped rules files) exceeds the tierBreakdown threshold (default 1000 tokens) and contains H1 or H2 sections.",
|
|
225
|
+
"message": "{N} tokens loaded every session — heaviest top-level section(s): ...",
|
|
226
|
+
"fixable": false,
|
|
227
|
+
"configurable": true,
|
|
228
|
+
"configKey": "tokenThresholds.tierBreakdown",
|
|
229
|
+
"defaultThreshold": 1000,
|
|
230
|
+
"stability": "stable"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"id": "tier-tokens/aggregate",
|
|
234
|
+
"category": "tier-tokens",
|
|
235
|
+
"severity": "warning",
|
|
236
|
+
"description": "Combined token cost of always-loaded context files exceeds the recommended budget.",
|
|
237
|
+
"trigger": "Two or more always-loaded files total more than the tierAggregate threshold (default 4000 tokens).",
|
|
238
|
+
"message": "{count} always-loaded files total {N} tokens — loaded every session",
|
|
239
|
+
"fixable": false,
|
|
240
|
+
"configurable": true,
|
|
241
|
+
"configKey": "tokenThresholds.tierAggregate",
|
|
242
|
+
"defaultThreshold": 4000,
|
|
243
|
+
"stability": "stable"
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"id": "tier-tokens/hard-enforcement-missing",
|
|
247
|
+
"category": "tier-tokens",
|
|
248
|
+
"severity": "info",
|
|
249
|
+
"description": "An always-loaded file uses inviolable framing (NEVER / ALWAYS / DO NOT / MUST NOT) paired with a concrete command, but no corresponding PreToolUse hook or permissions.deny entry exists in settings.json. Rules in always-loaded files are advisory — without a hook the agent may still run the command.",
|
|
250
|
+
"trigger": "Line in an always-loaded file matches NEVER|ALWAYS|DO NOT|MUST NOT with a backticked command, and .claude/settings.json / ~/.claude/settings.json does not contain a matching PreToolUse hook or permissions.deny entry.",
|
|
251
|
+
"message": "Inviolable framing without a hook to back it up",
|
|
252
|
+
"fixable": false,
|
|
253
|
+
"source": "code.claude.com/docs/en/hooks-guide",
|
|
254
|
+
"stability": "experimental"
|
|
198
255
|
},
|
|
199
256
|
{
|
|
200
257
|
"id": "redundancy/tech-mention",
|
|
@@ -203,7 +260,8 @@
|
|
|
203
260
|
"description": "Context file mentions a technology that is already in package.json dependencies.",
|
|
204
261
|
"trigger": "File contains phrases like 'use React' or 'built with Express' and that package is in dependencies.",
|
|
205
262
|
"message": "\"{tech}\" is in package.json {depType} — agent can infer this",
|
|
206
|
-
"fixable": false
|
|
263
|
+
"fixable": false,
|
|
264
|
+
"stability": "stable"
|
|
207
265
|
},
|
|
208
266
|
{
|
|
209
267
|
"id": "redundancy/discoverable-dir",
|
|
@@ -212,7 +270,8 @@
|
|
|
212
270
|
"description": "Context file describes the location of a directory that the agent can discover by listing files.",
|
|
213
271
|
"trigger": "File says files 'are in' or 'go in' a directory that exists in the project.",
|
|
214
272
|
"message": "Directory \"{dir}\" exists and is discoverable — agent can find this by listing files",
|
|
215
|
-
"fixable": false
|
|
273
|
+
"fixable": false,
|
|
274
|
+
"stability": "stable"
|
|
216
275
|
},
|
|
217
276
|
{
|
|
218
277
|
"id": "redundancy/duplicate-content",
|
|
@@ -221,7 +280,8 @@
|
|
|
221
280
|
"description": "Two context files have significant content overlap.",
|
|
222
281
|
"trigger": "Two files share 60%+ of their lines (by trimmed content, lines >10 chars).",
|
|
223
282
|
"message": "{file1} and {file2} have {N}% content overlap",
|
|
224
|
-
"fixable": false
|
|
283
|
+
"fixable": false,
|
|
284
|
+
"stability": "stable"
|
|
225
285
|
},
|
|
226
286
|
{
|
|
227
287
|
"id": "contradictions/conflict",
|
|
@@ -240,7 +300,8 @@
|
|
|
240
300
|
"naming convention",
|
|
241
301
|
"CSS approach",
|
|
242
302
|
"state management"
|
|
243
|
-
]
|
|
303
|
+
],
|
|
304
|
+
"stability": "stable"
|
|
244
305
|
},
|
|
245
306
|
{
|
|
246
307
|
"id": "frontmatter/missing",
|
|
@@ -250,7 +311,12 @@
|
|
|
250
311
|
"trigger": "Cursor .mdc, Copilot instruction, or Windsurf rule file has no --- frontmatter block.",
|
|
251
312
|
"message": "{format} file is missing frontmatter",
|
|
252
313
|
"fixable": false,
|
|
253
|
-
"appliesTo": [
|
|
314
|
+
"appliesTo": [
|
|
315
|
+
"cursor-mdc",
|
|
316
|
+
"copilot-instructions",
|
|
317
|
+
"windsurf-rules"
|
|
318
|
+
],
|
|
319
|
+
"stability": "stable"
|
|
254
320
|
},
|
|
255
321
|
{
|
|
256
322
|
"id": "frontmatter/missing-field",
|
|
@@ -260,7 +326,12 @@
|
|
|
260
326
|
"trigger": "Frontmatter exists but is missing a key field (description for Cursor, applyTo for Copilot, trigger for Windsurf).",
|
|
261
327
|
"message": "Missing \"{field}\" field in {format} frontmatter",
|
|
262
328
|
"fixable": false,
|
|
263
|
-
"appliesTo": [
|
|
329
|
+
"appliesTo": [
|
|
330
|
+
"cursor-mdc",
|
|
331
|
+
"copilot-instructions",
|
|
332
|
+
"windsurf-rules"
|
|
333
|
+
],
|
|
334
|
+
"stability": "stable"
|
|
264
335
|
},
|
|
265
336
|
{
|
|
266
337
|
"id": "frontmatter/invalid-value",
|
|
@@ -270,7 +341,11 @@
|
|
|
270
341
|
"trigger": "alwaysApply is not true/false, trigger is not a valid enum value, globs doesn't look like a pattern.",
|
|
271
342
|
"message": "Invalid {field} value: \"{value}\"",
|
|
272
343
|
"fixable": false,
|
|
273
|
-
"appliesTo": [
|
|
344
|
+
"appliesTo": [
|
|
345
|
+
"cursor-mdc",
|
|
346
|
+
"windsurf-rules"
|
|
347
|
+
],
|
|
348
|
+
"stability": "stable"
|
|
274
349
|
},
|
|
275
350
|
{
|
|
276
351
|
"id": "frontmatter/no-activation",
|
|
@@ -280,7 +355,10 @@
|
|
|
280
355
|
"trigger": "Cursor .mdc has frontmatter with neither globs nor alwaysApply set.",
|
|
281
356
|
"message": "No activation field — rule may not be applied automatically",
|
|
282
357
|
"fixable": false,
|
|
283
|
-
"appliesTo": [
|
|
358
|
+
"appliesTo": [
|
|
359
|
+
"cursor-mdc"
|
|
360
|
+
],
|
|
361
|
+
"stability": "stable"
|
|
284
362
|
},
|
|
285
363
|
{
|
|
286
364
|
"id": "ci/no-release-docs",
|
|
@@ -289,7 +367,8 @@
|
|
|
289
367
|
"description": "Release/deploy CI workflow exists but no context file documents the process.",
|
|
290
368
|
"trigger": ".github/workflows/ contains release/deploy/publish workflow but no context file mentions the release process.",
|
|
291
369
|
"message": "Release workflow found but no context file documents the release process",
|
|
292
|
-
"fixable": false
|
|
370
|
+
"fixable": false,
|
|
371
|
+
"stability": "stable"
|
|
293
372
|
},
|
|
294
373
|
{
|
|
295
374
|
"id": "ci/undocumented-secret",
|
|
@@ -298,14 +377,19 @@
|
|
|
298
377
|
"description": "CI workflow references a secret not mentioned in any context file.",
|
|
299
378
|
"trigger": "${{ secrets.NAME }} found in workflow YAML but NAME not mentioned in any context file. GitHub-provided secrets (GITHUB_TOKEN, etc.) are excluded.",
|
|
300
379
|
"message": "CI secret \"{name}\" is used in {workflow} but not mentioned in any context file",
|
|
301
|
-
"fixable": false
|
|
380
|
+
"fixable": false,
|
|
381
|
+
"stability": "stable"
|
|
302
382
|
}
|
|
303
383
|
],
|
|
304
384
|
"formats": [
|
|
305
385
|
{
|
|
306
386
|
"id": "claude-code",
|
|
307
387
|
"client": "Claude Code",
|
|
308
|
-
"patterns": [
|
|
388
|
+
"patterns": [
|
|
389
|
+
"CLAUDE.md",
|
|
390
|
+
"CLAUDE.local.md",
|
|
391
|
+
".claude/rules/*.md"
|
|
392
|
+
],
|
|
309
393
|
"type": "markdown",
|
|
310
394
|
"frontmatter": "none",
|
|
311
395
|
"scope": "project-wide and rule-based"
|
|
@@ -313,7 +397,11 @@
|
|
|
313
397
|
{
|
|
314
398
|
"id": "aaif",
|
|
315
399
|
"client": "AAIF / Multi-agent standard",
|
|
316
|
-
"patterns": [
|
|
400
|
+
"patterns": [
|
|
401
|
+
"AGENTS.md",
|
|
402
|
+
"AGENT.md",
|
|
403
|
+
"AGENTS.override.md"
|
|
404
|
+
],
|
|
317
405
|
"type": "markdown",
|
|
318
406
|
"frontmatter": "none",
|
|
319
407
|
"scope": "project-wide"
|
|
@@ -321,42 +409,77 @@
|
|
|
321
409
|
{
|
|
322
410
|
"id": "cursor",
|
|
323
411
|
"client": "Cursor",
|
|
324
|
-
"patterns": [
|
|
412
|
+
"patterns": [
|
|
413
|
+
".cursorrules",
|
|
414
|
+
".cursor/rules/*.md",
|
|
415
|
+
".cursor/rules/*.mdc",
|
|
416
|
+
".cursor/rules/*/RULE.md"
|
|
417
|
+
],
|
|
325
418
|
"type": "markdown",
|
|
326
419
|
"frontmatter": "required for .mdc",
|
|
327
420
|
"frontmatterFields": {
|
|
328
|
-
"description": {
|
|
329
|
-
|
|
330
|
-
|
|
421
|
+
"description": {
|
|
422
|
+
"required": true,
|
|
423
|
+
"type": "string"
|
|
424
|
+
},
|
|
425
|
+
"globs": {
|
|
426
|
+
"required": false,
|
|
427
|
+
"type": "string or string[]"
|
|
428
|
+
},
|
|
429
|
+
"alwaysApply": {
|
|
430
|
+
"required": false,
|
|
431
|
+
"type": "boolean"
|
|
432
|
+
}
|
|
331
433
|
},
|
|
332
434
|
"scope": "project-wide and rule-based"
|
|
333
435
|
},
|
|
334
436
|
{
|
|
335
437
|
"id": "copilot",
|
|
336
438
|
"client": "GitHub Copilot",
|
|
337
|
-
"patterns": [
|
|
439
|
+
"patterns": [
|
|
440
|
+
".github/copilot-instructions.md",
|
|
441
|
+
".github/instructions/*.md",
|
|
442
|
+
".github/git-commit-instructions.md"
|
|
443
|
+
],
|
|
338
444
|
"type": "markdown",
|
|
339
445
|
"frontmatter": "optional",
|
|
340
446
|
"frontmatterFields": {
|
|
341
|
-
"applyTo": {
|
|
447
|
+
"applyTo": {
|
|
448
|
+
"required": false,
|
|
449
|
+
"type": "string (glob)"
|
|
450
|
+
}
|
|
342
451
|
},
|
|
343
452
|
"scope": "project-wide and scoped"
|
|
344
453
|
},
|
|
345
454
|
{
|
|
346
455
|
"id": "windsurf",
|
|
347
456
|
"client": "Windsurf",
|
|
348
|
-
"patterns": [
|
|
457
|
+
"patterns": [
|
|
458
|
+
".windsurfrules",
|
|
459
|
+
".windsurf/rules/*.md"
|
|
460
|
+
],
|
|
349
461
|
"type": "markdown",
|
|
350
462
|
"frontmatter": "recommended for rules",
|
|
351
463
|
"frontmatterFields": {
|
|
352
|
-
"trigger": {
|
|
464
|
+
"trigger": {
|
|
465
|
+
"required": true,
|
|
466
|
+
"type": "enum",
|
|
467
|
+
"values": [
|
|
468
|
+
"always_on",
|
|
469
|
+
"glob",
|
|
470
|
+
"manual",
|
|
471
|
+
"model"
|
|
472
|
+
]
|
|
473
|
+
}
|
|
353
474
|
},
|
|
354
475
|
"scope": "project-wide and rule-based"
|
|
355
476
|
},
|
|
356
477
|
{
|
|
357
478
|
"id": "gemini",
|
|
358
479
|
"client": "Gemini CLI",
|
|
359
|
-
"patterns": [
|
|
480
|
+
"patterns": [
|
|
481
|
+
"GEMINI.md"
|
|
482
|
+
],
|
|
360
483
|
"type": "markdown",
|
|
361
484
|
"frontmatter": "none",
|
|
362
485
|
"scope": "project-wide"
|
|
@@ -364,7 +487,9 @@
|
|
|
364
487
|
{
|
|
365
488
|
"id": "cline",
|
|
366
489
|
"client": "Cline",
|
|
367
|
-
"patterns": [
|
|
490
|
+
"patterns": [
|
|
491
|
+
".clinerules"
|
|
492
|
+
],
|
|
368
493
|
"type": "plain text",
|
|
369
494
|
"frontmatter": "none",
|
|
370
495
|
"scope": "project-wide"
|
|
@@ -372,7 +497,9 @@
|
|
|
372
497
|
{
|
|
373
498
|
"id": "aider",
|
|
374
499
|
"client": "Aider",
|
|
375
|
-
"patterns": [
|
|
500
|
+
"patterns": [
|
|
501
|
+
".aiderules"
|
|
502
|
+
],
|
|
376
503
|
"type": "plain text",
|
|
377
504
|
"frontmatter": "none",
|
|
378
505
|
"scope": "project-wide"
|
|
@@ -380,7 +507,9 @@
|
|
|
380
507
|
{
|
|
381
508
|
"id": "aide",
|
|
382
509
|
"client": "Aide / Codestory",
|
|
383
|
-
"patterns": [
|
|
510
|
+
"patterns": [
|
|
511
|
+
".aide/rules/*.md"
|
|
512
|
+
],
|
|
384
513
|
"type": "markdown",
|
|
385
514
|
"frontmatter": "none",
|
|
386
515
|
"scope": "rule-based"
|
|
@@ -388,7 +517,9 @@
|
|
|
388
517
|
{
|
|
389
518
|
"id": "amazonq",
|
|
390
519
|
"client": "Amazon Q Developer",
|
|
391
|
-
"patterns": [
|
|
520
|
+
"patterns": [
|
|
521
|
+
".amazonq/rules/*.md"
|
|
522
|
+
],
|
|
392
523
|
"type": "markdown",
|
|
393
524
|
"frontmatter": "none",
|
|
394
525
|
"scope": "rule-based"
|
|
@@ -396,7 +527,10 @@
|
|
|
396
527
|
{
|
|
397
528
|
"id": "goose",
|
|
398
529
|
"client": "Goose (Block)",
|
|
399
|
-
"patterns": [
|
|
530
|
+
"patterns": [
|
|
531
|
+
".goose/instructions.md",
|
|
532
|
+
".goosehints"
|
|
533
|
+
],
|
|
400
534
|
"type": "markdown",
|
|
401
535
|
"frontmatter": "none",
|
|
402
536
|
"scope": "project-wide"
|
|
@@ -404,7 +538,10 @@
|
|
|
404
538
|
{
|
|
405
539
|
"id": "junie",
|
|
406
540
|
"client": "JetBrains Junie",
|
|
407
|
-
"patterns": [
|
|
541
|
+
"patterns": [
|
|
542
|
+
".junie/guidelines.md",
|
|
543
|
+
".junie/AGENTS.md"
|
|
544
|
+
],
|
|
408
545
|
"type": "markdown",
|
|
409
546
|
"frontmatter": "none",
|
|
410
547
|
"scope": "project-wide"
|
|
@@ -412,7 +549,9 @@
|
|
|
412
549
|
{
|
|
413
550
|
"id": "jetbrains-ai",
|
|
414
551
|
"client": "JetBrains AI Assistant",
|
|
415
|
-
"patterns": [
|
|
552
|
+
"patterns": [
|
|
553
|
+
".aiassistant/rules/*.md"
|
|
554
|
+
],
|
|
416
555
|
"type": "markdown",
|
|
417
556
|
"frontmatter": "none",
|
|
418
557
|
"scope": "rule-based"
|
|
@@ -420,7 +559,10 @@
|
|
|
420
559
|
{
|
|
421
560
|
"id": "continue",
|
|
422
561
|
"client": "Continue",
|
|
423
|
-
"patterns": [
|
|
562
|
+
"patterns": [
|
|
563
|
+
".continuerules",
|
|
564
|
+
".continue/rules/*.md"
|
|
565
|
+
],
|
|
424
566
|
"type": "markdown",
|
|
425
567
|
"frontmatter": "none",
|
|
426
568
|
"scope": "project-wide and rule-based"
|
|
@@ -428,7 +570,9 @@
|
|
|
428
570
|
{
|
|
429
571
|
"id": "zed",
|
|
430
572
|
"client": "Zed",
|
|
431
|
-
"patterns": [
|
|
573
|
+
"patterns": [
|
|
574
|
+
".rules"
|
|
575
|
+
],
|
|
432
576
|
"type": "plain text",
|
|
433
577
|
"frontmatter": "none",
|
|
434
578
|
"scope": "project-wide"
|
|
@@ -436,7 +580,9 @@
|
|
|
436
580
|
{
|
|
437
581
|
"id": "replit",
|
|
438
582
|
"client": "Replit",
|
|
439
|
-
"patterns": [
|
|
583
|
+
"patterns": [
|
|
584
|
+
"replit.md"
|
|
585
|
+
],
|
|
440
586
|
"type": "markdown",
|
|
441
587
|
"frontmatter": "none",
|
|
442
588
|
"scope": "project-wide"
|