@yawlabs/ctxlint 0.18.7 → 0.19.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/.pre-commit-hooks.yaml +1 -1
- package/AGENT_SESSION_LINT_SPEC.md +548 -450
- package/CONTEXT_LINT_SPEC.md +11 -0
- package/README.md +1 -1
- package/agent-session-lint-rules.json +223 -193
- package/context-lint-rules.json +734 -734
- package/dist/index.js +592 -39
- package/package.json +1 -1
package/CONTEXT_LINT_SPEC.md
CHANGED
|
@@ -672,6 +672,17 @@ The catalog enables:
|
|
|
672
672
|
|
|
673
673
|
See the JSON file for the full schema.
|
|
674
674
|
|
|
675
|
+
### Catalog rule IDs vs. reference-implementation ruleIds
|
|
676
|
+
|
|
677
|
+
For all but two rules the catalog ID and the emitted `ruleId` are identical. The `ci` rules are the exception: their catalog IDs use a pillar-stable `ci/<slug>` form -- these are the cross-tool names to use in documentation, configuration, and issue reports -- while the reference implementation namespaces the `ruleId` it emits (in `--format json` output) by check module. The full correspondence (pinned by a consistency test in the reference implementation):
|
|
678
|
+
|
|
679
|
+
| Catalog rule ID | Emitted `ruleId` (reference implementation) |
|
|
680
|
+
|---|---|
|
|
681
|
+
| `ci/no-release-docs` | `ci-coverage/no-release-docs` |
|
|
682
|
+
| `ci/undocumented-secret` | `ci-secrets/undocumented-secret` |
|
|
683
|
+
|
|
684
|
+
Other implementations of this specification may emit either form; when interoperating, treat the catalog IDs as canonical and map implementation-specific ruleIds onto them as above. The same two-level arrangement is documented for the session pillar in [`AGENT_SESSION_LINT_SPEC.md`](./AGENT_SESSION_LINT_SPEC.md) section 3.
|
|
685
|
+
|
|
675
686
|
---
|
|
676
687
|
|
|
677
688
|
## 5. Implementing This Specification
|
package/README.md
CHANGED
|
@@ -513,7 +513,7 @@ ctxlint is the reference implementation of four open specifications for linting
|
|
|
513
513
|
| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
514
514
|
| **[AI Context File Linting Spec](./CONTEXT_LINT_SPEC.md)** | 39 rules for validating context files (CLAUDE.md, .cursorrules, AGENTS.md, etc.) across 16 clients. Covers file formats, frontmatter schemas, path/command validation, staleness, token budgets, redundancy, and contradictions. |
|
|
515
515
|
| **[MCP Config Linting Spec](./MCP_CONFIG_LINT_SPEC.md)** | 29 rules for validating MCP server configs (.mcp.json, .cursor/mcp.json, .vscode/mcp.json, etc.) across 8 clients. Covers schema validation, hardcoded secrets, env var syntax, deprecated transports, and cross-file consistency. |
|
|
516
|
-
| **[Agent Session Linting Spec](./AGENT_SESSION_LINT_SPEC.md)** |
|
|
516
|
+
| **[Agent Session Linting Spec](./AGENT_SESSION_LINT_SPEC.md)** | 11 rules for auditing agent session data (history, memory) across 8 agents. Covers cross-project secret consistency, config drift, stale memory, and loop detection. |
|
|
517
517
|
| **[Agent Skill Linting Spec](./AGENT_SKILL_LINT_SPEC.md)** | 5 rules for auditing Claude Code skill (`SKILL.md`) and agent (`.md`) definitions under `~/.claude`. Covers frontmatter presence, broken refs, trigger-phrase collisions, orphaned skills, and dead tool restrictions. (v1, experimental) |
|
|
518
518
|
|
|
519
519
|
All specs include machine-readable rule catalogs for programmatic consumption:
|
|
@@ -1,193 +1,223 @@
|
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
"id": "
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
"
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
"
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
"
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
"
|
|
151
|
-
"
|
|
152
|
-
"
|
|
153
|
-
"
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
"
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
"
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
"
|
|
169
|
-
"
|
|
170
|
-
"
|
|
171
|
-
"
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
"
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
"
|
|
178
|
-
"
|
|
179
|
-
"
|
|
180
|
-
"
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
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
|
+
"dataSources": [
|
|
140
|
+
{
|
|
141
|
+
"id": "claude-code",
|
|
142
|
+
"name": "Claude Code",
|
|
143
|
+
"provider": "Anthropic",
|
|
144
|
+
"historyLocation": "~/.claude/history.jsonl",
|
|
145
|
+
"historyFormat": "JSONL",
|
|
146
|
+
"memoryLocation": "~/.claude/projects/*/memory/*.md",
|
|
147
|
+
"documented": true
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "codex-cli",
|
|
151
|
+
"name": "Codex CLI",
|
|
152
|
+
"provider": "OpenAI",
|
|
153
|
+
"historyLocation": "~/.codex/history.jsonl",
|
|
154
|
+
"historyFormat": "JSONL",
|
|
155
|
+
"sessionsLocation": "~/.codex/sessions/**/*.jsonl",
|
|
156
|
+
"documented": true
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "aider",
|
|
160
|
+
"name": "Aider",
|
|
161
|
+
"provider": "Paul Gauthier",
|
|
162
|
+
"historyLocation": ".aider.chat.history.md",
|
|
163
|
+
"historyFormat": "Markdown",
|
|
164
|
+
"documented": true,
|
|
165
|
+
"notes": "History file is per-project, stored in the project root."
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"id": "vibe-cli",
|
|
169
|
+
"name": "Vibe CLI",
|
|
170
|
+
"provider": "Mistral",
|
|
171
|
+
"historyLocation": "~/.vibe/sessions/*/messages.jsonl",
|
|
172
|
+
"historyFormat": "JSONL",
|
|
173
|
+
"documented": false,
|
|
174
|
+
"notes": "Partially documented."
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "amazon-q",
|
|
178
|
+
"name": "Amazon Q Developer",
|
|
179
|
+
"provider": "AWS",
|
|
180
|
+
"historyLocation": "~/.aws/amazonq/history/chat-history-*.json",
|
|
181
|
+
"historyFormat": "JSON",
|
|
182
|
+
"documented": false,
|
|
183
|
+
"notes": "Semi-documented; file layout inferred from observation."
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"id": "goose",
|
|
187
|
+
"name": "Goose",
|
|
188
|
+
"provider": "Block",
|
|
189
|
+
"historyLocation": "~/.local/share/goose/sessions/sessions.db",
|
|
190
|
+
"historyFormat": "SQLite",
|
|
191
|
+
"documented": true,
|
|
192
|
+
"notes": "Requires SQLite dependency to read session data."
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"id": "continue",
|
|
196
|
+
"name": "Continue",
|
|
197
|
+
"provider": "Continue.dev",
|
|
198
|
+
"historyLocation": "~/.continue/sessions/*.json",
|
|
199
|
+
"historyFormat": "JSON",
|
|
200
|
+
"documented": false,
|
|
201
|
+
"notes": "Partially documented."
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"id": "windsurf",
|
|
205
|
+
"name": "Windsurf",
|
|
206
|
+
"provider": "Codeium",
|
|
207
|
+
"historyLocation": "~/.windsurf/transcripts/*.jsonl",
|
|
208
|
+
"historyFormat": "JSONL",
|
|
209
|
+
"documented": false,
|
|
210
|
+
"notes": "Partially documented; format marked unstable by vendor."
|
|
211
|
+
}
|
|
212
|
+
],
|
|
213
|
+
"agents": [
|
|
214
|
+
"claude-code",
|
|
215
|
+
"codex-cli",
|
|
216
|
+
"aider",
|
|
217
|
+
"vibe-cli",
|
|
218
|
+
"amazon-q",
|
|
219
|
+
"goose",
|
|
220
|
+
"continue",
|
|
221
|
+
"windsurf"
|
|
222
|
+
]
|
|
223
|
+
}
|