@yawlabs/ctxlint 0.25.1 → 0.25.2
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/.pre-commit-hooks.yaml +10 -10
- package/AGENT_SESSION_LINT_SPEC.md +632 -612
- package/AGENT_SKILL_LINT_SPEC.md +20 -18
- package/CONTEXT_LINT_SPEC.md +809 -782
- package/MCP_CONFIG_LINT_SPEC.md +434 -419
- package/README.md +553 -553
- package/agent-session-lint-rules.json +243 -243
- package/bin/ctxlint.mjs +410 -360
- package/context-lint-rules.json +695 -754
- package/dist/index.js +234 -252
- package/mcp-config-lint-rules.json +45 -162
- package/package.json +5 -4
|
@@ -1,243 +1,243 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://raw.githubusercontent.com/YawLabs/ctxlint/main/schemas/ctxlint-catalog.schema.json",
|
|
3
|
-
"title": "AI Agent Session Lint Rules",
|
|
4
|
-
"description": "Machine-readable catalog of lint rules for AI agent session data cross-project consistency",
|
|
5
|
-
"specVersion": "1.0.0-draft",
|
|
6
|
-
"specDate": "2026-04-08",
|
|
7
|
-
"repository": "https://github.com/YawLabs/ctxlint",
|
|
8
|
-
"categories": [
|
|
9
|
-
{
|
|
10
|
-
"id": "session",
|
|
11
|
-
"name": "Session Audit",
|
|
12
|
-
"description": "Cross-project consistency checks using AI agent session data.",
|
|
13
|
-
"scope": "cross-project"
|
|
14
|
-
}
|
|
15
|
-
],
|
|
16
|
-
"rules": [
|
|
17
|
-
{
|
|
18
|
-
"id": "session/missing-secret",
|
|
19
|
-
"category": "session",
|
|
20
|
-
"severity": "error",
|
|
21
|
-
"description": "GitHub secret set on sibling repos but not this project.",
|
|
22
|
-
"trigger": "gh secret set command found in agent history for 2+ siblings but not current project.",
|
|
23
|
-
"message": "Secret \"{name}\" is set on {count} sibling repos but not this project",
|
|
24
|
-
"fixable": false,
|
|
25
|
-
"stability": "stable"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"id": "session/diverged-file",
|
|
29
|
-
"category": "session",
|
|
30
|
-
"severity": "warning",
|
|
31
|
-
"description": "Canonical file has diverged from sibling repos.",
|
|
32
|
-
"trigger": "File exists in current project and siblings with 20-90% line overlap.",
|
|
33
|
-
"message": "\"{file}\" has {overlap}% overlap with {sibling} — may have diverged",
|
|
34
|
-
"fixable": false,
|
|
35
|
-
"canonicalFiles": [
|
|
36
|
-
"release.sh",
|
|
37
|
-
".github/workflows/ci.yml",
|
|
38
|
-
".github/workflows/release.yml",
|
|
39
|
-
"biome.json",
|
|
40
|
-
".prettierrc",
|
|
41
|
-
".eslintrc.json",
|
|
42
|
-
"tsconfig.json",
|
|
43
|
-
".gitignore"
|
|
44
|
-
],
|
|
45
|
-
"stability": "stable"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"id": "session/missing-workflow",
|
|
49
|
-
"category": "session",
|
|
50
|
-
"severity": "warning",
|
|
51
|
-
"description": "GitHub Actions workflow missing from this project.",
|
|
52
|
-
"trigger": "Workflow file exists in 2+ siblings but not current project (which has .github).",
|
|
53
|
-
"message": "Workflow \"{workflow}\" exists in {count} sibling repos but not this project",
|
|
54
|
-
"fixable": false,
|
|
55
|
-
"stability": "stable"
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"id": "session/stale-memory",
|
|
59
|
-
"category": "session",
|
|
60
|
-
"severity": "info",
|
|
61
|
-
"description": "Memory file references paths that no longer exist.",
|
|
62
|
-
"trigger": "Claude Code memory file contains path references to files that have been deleted or moved.",
|
|
63
|
-
"message": "Memory references \"{path}\" which no longer exists",
|
|
64
|
-
"fixable": false,
|
|
65
|
-
"stability": "stable"
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
"id": "session/duplicate-memory",
|
|
69
|
-
"category": "session",
|
|
70
|
-
"severity": "info",
|
|
71
|
-
"description": "Near-duplicate memory entries across projects.",
|
|
72
|
-
"trigger": "Two memory files from different projects have >60% line overlap, and at least one of the pair belongs to the current project (otherwise every lint run from any repo would resurface the same unrelated cross-project duplicates).",
|
|
73
|
-
"message": "\"{file1}\" and \"{file2}\" have {overlap}% content overlap",
|
|
74
|
-
"fixable": false,
|
|
75
|
-
"stability": "stable"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"id": "session/consecutive-repeat",
|
|
79
|
-
"category": "session",
|
|
80
|
-
"severity": "warning",
|
|
81
|
-
"description": "Same command run 3+ times consecutively in agent history.",
|
|
82
|
-
"trigger": "Agent history for the current project (entries lacking a project path or timestamp are excluded), grouped into sessions (by provider + session ID, split at >30-minute timestamp gaps), shows the same display string 3+ times in a row within a single session segment. Single-command sessions are additionally merged per provider into one stream (split at the same gaps) so rapid one-shot respawn loops are caught.",
|
|
83
|
-
"message": "Command run {count} times consecutively: \"{command}\"",
|
|
84
|
-
"fixable": false,
|
|
85
|
-
"stability": "experimental"
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
"id": "session/cyclic-pattern",
|
|
89
|
-
"category": "session",
|
|
90
|
-
"severity": "warning",
|
|
91
|
-
"description": "Cyclic command pattern detected in agent history.",
|
|
92
|
-
"trigger": "Within a single session segment (same provider + session ID, split at >30-minute gaps; entries lacking a project path or timestamp are excluded), agent history shows a repeating sequence of 2-3 commands (e.g. A,B,A,B) repeated 2+ times. Spans already reported by session/consecutive-repeat are not re-reported. The merged one-shot stream is not scanned for cycles.",
|
|
93
|
-
"message": "Cyclic pattern repeated {count} times: {cycle}",
|
|
94
|
-
"fixable": false,
|
|
95
|
-
"stability": "experimental"
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
"id": "session/memory-index-overflow",
|
|
99
|
-
"category": "session",
|
|
100
|
-
"severity": "warning",
|
|
101
|
-
"description": "MEMORY.md exceeds Claude Code's session-load cap. The first 200 lines / 25KB are loaded every session; anything beyond is effectively invisible to the agent.",
|
|
102
|
-
"trigger": "~/.claude/projects/<encoded-project>/memory/MEMORY.md exceeds 200 lines OR 25,600 bytes.",
|
|
103
|
-
"message": "MEMORY.md has {N} lines — only the first 200 are loaded. {excess} lines are effectively invisible.",
|
|
104
|
-
"fixable": false,
|
|
105
|
-
"source": "code.claude.com/docs/en/memory",
|
|
106
|
-
"stability": "stable"
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"id": "session/shared-temp-path",
|
|
110
|
-
"category": "session",
|
|
111
|
-
"severity": "error",
|
|
112
|
-
"description": "A fixed, non-session-scoped temp path is written and later read back.",
|
|
113
|
-
"trigger": "Agent history writes a literal path under /tmp, /var/tmp, $TMPDIR or %TEMP% with no per-run component, then reads the same path.",
|
|
114
|
-
"message": "Fixed temp path \"{path}\" is written and later read back",
|
|
115
|
-
"fixable": false,
|
|
116
|
-
"stability": "stable"
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"id": "session/unverified-gate-claimed-clean",
|
|
120
|
-
"category": "session",
|
|
121
|
-
"severity": "warning",
|
|
122
|
-
"description": "A quality gate is asserted as passing while its invocation failed or produced no output.",
|
|
123
|
-
"trigger": "A lint/typecheck/test/build command errors or emits nothing, and nearby agent prose claims it passed.",
|
|
124
|
-
"message": "'{gate}' asserted as passing, but the invocation produced no output",
|
|
125
|
-
"fixable": false,
|
|
126
|
-
"stability": "stable"
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
"id": "session/default-branch-accumulation",
|
|
130
|
-
"category": "session",
|
|
131
|
-
"severity": "warning",
|
|
132
|
-
"description": "Many files edited on the default branch with no intervening commit.",
|
|
133
|
-
"trigger": "Ten or more distinct files written while on main/master without a commit or branch-away in between.",
|
|
134
|
-
"message": "{count} files edited on '{branch}' with no intervening commit",
|
|
135
|
-
"fixable": false,
|
|
136
|
-
"stability": "stable"
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
"id": "session/unresolvable-sha",
|
|
140
|
-
"category": "session",
|
|
141
|
-
"severity": "warning",
|
|
142
|
-
"description": "A memory cites a git SHA that does not resolve in the repository.",
|
|
143
|
-
"trigger": "A 7-40 character hex token outside code fences, preceded on the same line by a commit-citation cue (commit, SHA, HEAD, landed in, reverted, ...), does not resolve via git cat-file. UUID members, digest prefixes, decimal ids and version fragments are excluded before resolution; without a git repository the rule reports nothing.",
|
|
144
|
-
"message": "cited commit {sha} does not resolve in this repository",
|
|
145
|
-
"fixable": false,
|
|
146
|
-
"stability": "experimental"
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
"id": "session/large-read",
|
|
150
|
-
"category": "session",
|
|
151
|
-
"severity": "info",
|
|
152
|
-
"description": "Measures session context spent on whole-file Reads of large files. Each result is re-sent as prompt context (cache reads) on every later turn of its session; the finding is a baseline for judging read-routing changes, reported as one summary per project.",
|
|
153
|
-
"trigger": "One or more whole-file Read calls (no offset, limit or pages) in the current project's transcripts whose result is 4,000 tokens or more. Carry is each result's tokens times the later turns of its session that re-sent it, up to the session's end or its next /compact boundary; a turn is a distinct assistant message id.",
|
|
154
|
-
"message": "{count} whole-file Reads of 4,000+ tokens ({tokens} tokens); est. {carry} tokens of cache-read carry on later turns",
|
|
155
|
-
"fixable": false,
|
|
156
|
-
"stability": "experimental"
|
|
157
|
-
}
|
|
158
|
-
],
|
|
159
|
-
"dataSources": [
|
|
160
|
-
{
|
|
161
|
-
"id": "claude-code",
|
|
162
|
-
"name": "Claude Code",
|
|
163
|
-
"provider": "Anthropic",
|
|
164
|
-
"historyLocation": "~/.claude/history.jsonl",
|
|
165
|
-
"historyFormat": "JSONL",
|
|
166
|
-
"memoryLocation": "~/.claude/projects/*/memory/*.md",
|
|
167
|
-
"documented": true
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
"id": "codex-cli",
|
|
171
|
-
"name": "Codex CLI",
|
|
172
|
-
"provider": "OpenAI",
|
|
173
|
-
"historyLocation": "~/.codex/history.jsonl",
|
|
174
|
-
"historyFormat": "JSONL",
|
|
175
|
-
"sessionsLocation": "~/.codex/sessions/**/*.jsonl",
|
|
176
|
-
"documented": true
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
"id": "aider",
|
|
180
|
-
"name": "Aider",
|
|
181
|
-
"provider": "Paul Gauthier",
|
|
182
|
-
"historyLocation": ".aider.chat.history.md",
|
|
183
|
-
"historyFormat": "Markdown",
|
|
184
|
-
"documented": true,
|
|
185
|
-
"notes": "History file is per-project, stored in the project root."
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
"id": "vibe-cli",
|
|
189
|
-
"name": "Vibe CLI",
|
|
190
|
-
"provider": "Mistral",
|
|
191
|
-
"historyLocation": "~/.vibe/sessions/*/messages.jsonl",
|
|
192
|
-
"historyFormat": "JSONL",
|
|
193
|
-
"documented": false,
|
|
194
|
-
"notes": "Partially documented."
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
"id": "amazon-q",
|
|
198
|
-
"name": "Amazon Q Developer",
|
|
199
|
-
"provider": "AWS",
|
|
200
|
-
"historyLocation": "~/.aws/amazonq/history/chat-history-*.json",
|
|
201
|
-
"historyFormat": "JSON",
|
|
202
|
-
"documented": false,
|
|
203
|
-
"notes": "Semi-documented; file layout inferred from observation."
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
"id": "goose",
|
|
207
|
-
"name": "Goose",
|
|
208
|
-
"provider": "Block",
|
|
209
|
-
"historyLocation": "~/.local/share/goose/sessions/sessions.db",
|
|
210
|
-
"historyFormat": "SQLite",
|
|
211
|
-
"documented": true,
|
|
212
|
-
"notes": "Requires SQLite dependency to read session data."
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
"id": "continue",
|
|
216
|
-
"name": "Continue",
|
|
217
|
-
"provider": "Continue.dev",
|
|
218
|
-
"historyLocation": "~/.continue/sessions/*.json",
|
|
219
|
-
"historyFormat": "JSON",
|
|
220
|
-
"documented": false,
|
|
221
|
-
"notes": "Partially documented."
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
"id": "windsurf",
|
|
225
|
-
"name": "Windsurf",
|
|
226
|
-
"provider": "Codeium",
|
|
227
|
-
"historyLocation": "~/.windsurf/transcripts/*.jsonl",
|
|
228
|
-
"historyFormat": "JSONL",
|
|
229
|
-
"documented": false,
|
|
230
|
-
"notes": "Partially documented; format marked unstable by vendor."
|
|
231
|
-
}
|
|
232
|
-
],
|
|
233
|
-
"agents": [
|
|
234
|
-
"claude-code",
|
|
235
|
-
"codex-cli",
|
|
236
|
-
"aider",
|
|
237
|
-
"vibe-cli",
|
|
238
|
-
"amazon-q",
|
|
239
|
-
"goose",
|
|
240
|
-
"continue",
|
|
241
|
-
"windsurf"
|
|
242
|
-
]
|
|
243
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/YawLabs/ctxlint/main/schemas/ctxlint-catalog.schema.json",
|
|
3
|
+
"title": "AI Agent Session Lint Rules",
|
|
4
|
+
"description": "Machine-readable catalog of lint rules for AI agent session data cross-project consistency",
|
|
5
|
+
"specVersion": "1.0.0-draft",
|
|
6
|
+
"specDate": "2026-04-08",
|
|
7
|
+
"repository": "https://github.com/YawLabs/ctxlint",
|
|
8
|
+
"categories": [
|
|
9
|
+
{
|
|
10
|
+
"id": "session",
|
|
11
|
+
"name": "Session Audit",
|
|
12
|
+
"description": "Cross-project consistency checks using AI agent session data.",
|
|
13
|
+
"scope": "cross-project"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"rules": [
|
|
17
|
+
{
|
|
18
|
+
"id": "session/missing-secret",
|
|
19
|
+
"category": "session",
|
|
20
|
+
"severity": "error",
|
|
21
|
+
"description": "GitHub secret set on sibling repos but not this project.",
|
|
22
|
+
"trigger": "gh secret set command found in agent history for 2+ siblings but not current project.",
|
|
23
|
+
"message": "Secret \"{name}\" is set on {count} sibling repos but not this project",
|
|
24
|
+
"fixable": false,
|
|
25
|
+
"stability": "stable"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "session/diverged-file",
|
|
29
|
+
"category": "session",
|
|
30
|
+
"severity": "warning",
|
|
31
|
+
"description": "Canonical file has diverged from sibling repos.",
|
|
32
|
+
"trigger": "File exists in current project and siblings with 20-90% line overlap.",
|
|
33
|
+
"message": "\"{file}\" has {overlap}% overlap with {sibling} — may have diverged",
|
|
34
|
+
"fixable": false,
|
|
35
|
+
"canonicalFiles": [
|
|
36
|
+
"release.sh",
|
|
37
|
+
".github/workflows/ci.yml",
|
|
38
|
+
".github/workflows/release.yml",
|
|
39
|
+
"biome.json",
|
|
40
|
+
".prettierrc",
|
|
41
|
+
".eslintrc.json",
|
|
42
|
+
"tsconfig.json",
|
|
43
|
+
".gitignore"
|
|
44
|
+
],
|
|
45
|
+
"stability": "stable"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "session/missing-workflow",
|
|
49
|
+
"category": "session",
|
|
50
|
+
"severity": "warning",
|
|
51
|
+
"description": "GitHub Actions workflow missing from this project.",
|
|
52
|
+
"trigger": "Workflow file exists in 2+ siblings but not current project (which has .github).",
|
|
53
|
+
"message": "Workflow \"{workflow}\" exists in {count} sibling repos but not this project",
|
|
54
|
+
"fixable": false,
|
|
55
|
+
"stability": "stable"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "session/stale-memory",
|
|
59
|
+
"category": "session",
|
|
60
|
+
"severity": "info",
|
|
61
|
+
"description": "Memory file references paths that no longer exist.",
|
|
62
|
+
"trigger": "Claude Code memory file contains path references to files that have been deleted or moved.",
|
|
63
|
+
"message": "Memory references \"{path}\" which no longer exists",
|
|
64
|
+
"fixable": false,
|
|
65
|
+
"stability": "stable"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "session/duplicate-memory",
|
|
69
|
+
"category": "session",
|
|
70
|
+
"severity": "info",
|
|
71
|
+
"description": "Near-duplicate memory entries across projects.",
|
|
72
|
+
"trigger": "Two memory files from different projects have >60% line overlap, and at least one of the pair belongs to the current project (otherwise every lint run from any repo would resurface the same unrelated cross-project duplicates).",
|
|
73
|
+
"message": "\"{file1}\" and \"{file2}\" have {overlap}% content overlap",
|
|
74
|
+
"fixable": false,
|
|
75
|
+
"stability": "stable"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "session/consecutive-repeat",
|
|
79
|
+
"category": "session",
|
|
80
|
+
"severity": "warning",
|
|
81
|
+
"description": "Same command run 3+ times consecutively in agent history.",
|
|
82
|
+
"trigger": "Agent history for the current project (entries lacking a project path or timestamp are excluded), grouped into sessions (by provider + session ID, split at >30-minute timestamp gaps), shows the same display string 3+ times in a row within a single session segment. Single-command sessions are additionally merged per provider into one stream (split at the same gaps) so rapid one-shot respawn loops are caught.",
|
|
83
|
+
"message": "Command run {count} times consecutively: \"{command}\"",
|
|
84
|
+
"fixable": false,
|
|
85
|
+
"stability": "experimental"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "session/cyclic-pattern",
|
|
89
|
+
"category": "session",
|
|
90
|
+
"severity": "warning",
|
|
91
|
+
"description": "Cyclic command pattern detected in agent history.",
|
|
92
|
+
"trigger": "Within a single session segment (same provider + session ID, split at >30-minute gaps; entries lacking a project path or timestamp are excluded), agent history shows a repeating sequence of 2-3 commands (e.g. A,B,A,B) repeated 2+ times. Spans already reported by session/consecutive-repeat are not re-reported. The merged one-shot stream is not scanned for cycles.",
|
|
93
|
+
"message": "Cyclic pattern repeated {count} times: {cycle}",
|
|
94
|
+
"fixable": false,
|
|
95
|
+
"stability": "experimental"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "session/memory-index-overflow",
|
|
99
|
+
"category": "session",
|
|
100
|
+
"severity": "warning",
|
|
101
|
+
"description": "MEMORY.md exceeds Claude Code's session-load cap. The first 200 lines / 25KB are loaded every session; anything beyond is effectively invisible to the agent.",
|
|
102
|
+
"trigger": "~/.claude/projects/<encoded-project>/memory/MEMORY.md exceeds 200 lines OR 25,600 bytes.",
|
|
103
|
+
"message": "MEMORY.md has {N} lines — only the first 200 are loaded. {excess} lines are effectively invisible.",
|
|
104
|
+
"fixable": false,
|
|
105
|
+
"source": "code.claude.com/docs/en/memory",
|
|
106
|
+
"stability": "stable"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "session/shared-temp-path",
|
|
110
|
+
"category": "session",
|
|
111
|
+
"severity": "error",
|
|
112
|
+
"description": "A fixed, non-session-scoped temp path is written and later read back.",
|
|
113
|
+
"trigger": "Agent history writes a literal path under /tmp, /var/tmp, $TMPDIR or %TEMP% with no per-run component, then reads the same path.",
|
|
114
|
+
"message": "Fixed temp path \"{path}\" is written and later read back",
|
|
115
|
+
"fixable": false,
|
|
116
|
+
"stability": "stable"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"id": "session/unverified-gate-claimed-clean",
|
|
120
|
+
"category": "session",
|
|
121
|
+
"severity": "warning",
|
|
122
|
+
"description": "A quality gate is asserted as passing while its invocation failed or produced no output.",
|
|
123
|
+
"trigger": "A lint/typecheck/test/build command errors or emits nothing, and nearby agent prose claims it passed.",
|
|
124
|
+
"message": "'{gate}' asserted as passing, but the invocation produced no output",
|
|
125
|
+
"fixable": false,
|
|
126
|
+
"stability": "stable"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "session/default-branch-accumulation",
|
|
130
|
+
"category": "session",
|
|
131
|
+
"severity": "warning",
|
|
132
|
+
"description": "Many files edited on the default branch with no intervening commit.",
|
|
133
|
+
"trigger": "Ten or more distinct files written while on main/master without a commit or branch-away in between.",
|
|
134
|
+
"message": "{count} files edited on '{branch}' with no intervening commit",
|
|
135
|
+
"fixable": false,
|
|
136
|
+
"stability": "stable"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"id": "session/unresolvable-sha",
|
|
140
|
+
"category": "session",
|
|
141
|
+
"severity": "warning",
|
|
142
|
+
"description": "A memory cites a git SHA that does not resolve in the repository.",
|
|
143
|
+
"trigger": "A 7-40 character hex token outside code fences, preceded on the same line by a commit-citation cue (commit, SHA, HEAD, landed in, reverted, ...), does not resolve via git cat-file. UUID members, digest prefixes, decimal ids and version fragments are excluded before resolution; without a git repository the rule reports nothing.",
|
|
144
|
+
"message": "cited commit {sha} does not resolve in this repository",
|
|
145
|
+
"fixable": false,
|
|
146
|
+
"stability": "experimental"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"id": "session/large-read",
|
|
150
|
+
"category": "session",
|
|
151
|
+
"severity": "info",
|
|
152
|
+
"description": "Measures session context spent on whole-file Reads of large files. Each result is re-sent as prompt context (cache reads) on every later turn of its session; the finding is a baseline for judging read-routing changes, reported as one summary per project.",
|
|
153
|
+
"trigger": "One or more whole-file Read calls (no offset, limit or pages) in the current project's transcripts whose result is 4,000 tokens or more. Carry is each result's tokens times the later turns of its session that re-sent it, up to the session's end or its next /compact boundary; a turn is a distinct assistant message id.",
|
|
154
|
+
"message": "{count} whole-file Reads of 4,000+ tokens ({tokens} tokens); est. {carry} tokens of cache-read carry on later turns",
|
|
155
|
+
"fixable": false,
|
|
156
|
+
"stability": "experimental"
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"dataSources": [
|
|
160
|
+
{
|
|
161
|
+
"id": "claude-code",
|
|
162
|
+
"name": "Claude Code",
|
|
163
|
+
"provider": "Anthropic",
|
|
164
|
+
"historyLocation": "~/.claude/history.jsonl",
|
|
165
|
+
"historyFormat": "JSONL",
|
|
166
|
+
"memoryLocation": "~/.claude/projects/*/memory/*.md",
|
|
167
|
+
"documented": true
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"id": "codex-cli",
|
|
171
|
+
"name": "Codex CLI",
|
|
172
|
+
"provider": "OpenAI",
|
|
173
|
+
"historyLocation": "~/.codex/history.jsonl",
|
|
174
|
+
"historyFormat": "JSONL",
|
|
175
|
+
"sessionsLocation": "~/.codex/sessions/**/*.jsonl",
|
|
176
|
+
"documented": true
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"id": "aider",
|
|
180
|
+
"name": "Aider",
|
|
181
|
+
"provider": "Paul Gauthier",
|
|
182
|
+
"historyLocation": ".aider.chat.history.md",
|
|
183
|
+
"historyFormat": "Markdown",
|
|
184
|
+
"documented": true,
|
|
185
|
+
"notes": "History file is per-project, stored in the project root."
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"id": "vibe-cli",
|
|
189
|
+
"name": "Vibe CLI",
|
|
190
|
+
"provider": "Mistral",
|
|
191
|
+
"historyLocation": "~/.vibe/sessions/*/messages.jsonl",
|
|
192
|
+
"historyFormat": "JSONL",
|
|
193
|
+
"documented": false,
|
|
194
|
+
"notes": "Partially documented."
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"id": "amazon-q",
|
|
198
|
+
"name": "Amazon Q Developer",
|
|
199
|
+
"provider": "AWS",
|
|
200
|
+
"historyLocation": "~/.aws/amazonq/history/chat-history-*.json",
|
|
201
|
+
"historyFormat": "JSON",
|
|
202
|
+
"documented": false,
|
|
203
|
+
"notes": "Semi-documented; file layout inferred from observation."
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "goose",
|
|
207
|
+
"name": "Goose",
|
|
208
|
+
"provider": "Block",
|
|
209
|
+
"historyLocation": "~/.local/share/goose/sessions/sessions.db",
|
|
210
|
+
"historyFormat": "SQLite",
|
|
211
|
+
"documented": true,
|
|
212
|
+
"notes": "Requires SQLite dependency to read session data."
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"id": "continue",
|
|
216
|
+
"name": "Continue",
|
|
217
|
+
"provider": "Continue.dev",
|
|
218
|
+
"historyLocation": "~/.continue/sessions/*.json",
|
|
219
|
+
"historyFormat": "JSON",
|
|
220
|
+
"documented": false,
|
|
221
|
+
"notes": "Partially documented."
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"id": "windsurf",
|
|
225
|
+
"name": "Windsurf",
|
|
226
|
+
"provider": "Codeium",
|
|
227
|
+
"historyLocation": "~/.windsurf/transcripts/*.jsonl",
|
|
228
|
+
"historyFormat": "JSONL",
|
|
229
|
+
"documented": false,
|
|
230
|
+
"notes": "Partially documented; format marked unstable by vendor."
|
|
231
|
+
}
|
|
232
|
+
],
|
|
233
|
+
"agents": [
|
|
234
|
+
"claude-code",
|
|
235
|
+
"codex-cli",
|
|
236
|
+
"aider",
|
|
237
|
+
"vibe-cli",
|
|
238
|
+
"amazon-q",
|
|
239
|
+
"goose",
|
|
240
|
+
"continue",
|
|
241
|
+
"windsurf"
|
|
242
|
+
]
|
|
243
|
+
}
|