@chimix/agentscan 1.1.0 → 1.3.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/CHANGELOG.md +91 -0
- package/README.md +83 -26
- package/dist/cli.js +757 -194
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,97 @@ and [v0.4.0](https://github.com/SimaAlexandru99/agentscan/releases/tag/v0.4.0).
|
|
|
11
11
|
(the published package version). A separate 1.0.1 npm tag would need an
|
|
12
12
|
intermediate commit that this train does not cut.
|
|
13
13
|
|
|
14
|
+
## 1.3.0 — 2026-08-31
|
|
15
|
+
|
|
16
|
+
Native Windsurf / Cascade coverage against 2026-08-31 official docs.
|
|
17
|
+
**99 checks**, **457 tests**.
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Spec captures `docs/spec/windsurf-rules.md`, `windsurf-agents-md.md`,
|
|
22
|
+
`windsurf-mcp.md`.
|
|
23
|
+
- Workspace rules: `.devin/rules/*.md` (preferred), `.windsurf/rules/*.md`
|
|
24
|
+
(fallback), subdirectory-scoped trees, legacy `.windsurfrules`.
|
|
25
|
+
`.devin` is a scan-root signal.
|
|
26
|
+
- Character budgets: `windsurf.rule.too-large` (12,000) and
|
|
27
|
+
`windsurf.rule.global-too-large` (6,000). Never `cursor.rule.too-large`.
|
|
28
|
+
- `windsurf.rule.missing-trigger` on workspace `.devin` / `.windsurf` rules
|
|
29
|
+
that omit frontmatter `trigger`. Not on `.windsurfrules`,
|
|
30
|
+
`global_rules.md`, or `AGENTS.md`.
|
|
31
|
+
- Portable lowercase `agents.md` (same `sourceProvider: unknown` as
|
|
32
|
+
`AGENTS.md`).
|
|
33
|
+
- `--global` Cascade MCP at `~/.codeium/windsurf/mcp_config.json`
|
|
34
|
+
(`windsurf-json`). Launch is `command` or `serverUrl` or `url`.
|
|
35
|
+
`windsurf.mcp.no-launch` when none are set. Never
|
|
36
|
+
`claude.mcp.url-without-type`.
|
|
37
|
+
- `--global` `~/.codeium/windsurf/memories/global_rules.md` only. Other
|
|
38
|
+
files in that memories directory stay unread.
|
|
39
|
+
|
|
40
|
+
### Unread (intentional)
|
|
41
|
+
|
|
42
|
+
- Devin Local CLI MCP (no published path).
|
|
43
|
+
- Auto-generated memories other than `global_rules.md`.
|
|
44
|
+
- System / enterprise rule directories.
|
|
45
|
+
- Project MCP (none quoted).
|
|
46
|
+
- Marketplace, admin allowlists, OAuth stores.
|
|
47
|
+
|
|
48
|
+
## 1.2.1 — 2026-08-31
|
|
49
|
+
|
|
50
|
+
Codex user MCP under `--global`. **95 checks**, **441 tests**.
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
|
|
54
|
+
- `$CODEX_HOME/config.toml` (default `~/.codex/config.toml`) is opened only
|
|
55
|
+
with `--global`. Same `codex-toml` shape as project `.codex/config.toml`.
|
|
56
|
+
- Same-name user and project servers both stay in the inventory. The
|
|
57
|
+
published page does not quote a replace-entirely rule, so this scanner
|
|
58
|
+
does not invent `codexEffective`.
|
|
59
|
+
- Spec recapture `docs/spec/codex-mcp.md` (user path, `CODEX_HOME`, unread
|
|
60
|
+
system / managed / requirements / profiles / plugins / trust / `auth.json`).
|
|
61
|
+
|
|
62
|
+
### Unread (intentional)
|
|
63
|
+
|
|
64
|
+
- System `/etc/codex/config.toml`, managed preferences, `requirements.toml`,
|
|
65
|
+
profile files, plugin MCP, `trust_level`.
|
|
66
|
+
- User-file `project_doc_*` knobs.
|
|
67
|
+
- Claude global settings; Command Code `projects/{slug}/mcp.json`.
|
|
68
|
+
|
|
69
|
+
## 1.2.0 — 2026-08-31
|
|
70
|
+
|
|
71
|
+
Native Grok Build provider against 2026-08-31 official docs. **95 checks**,
|
|
72
|
+
**435 tests**. Compatibility with Claude or Cursor is not schema identity.
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
|
|
76
|
+
- Spec captures `docs/spec/grok-mcp.md`, `grok-hooks.md`, `grok-skills.md`,
|
|
77
|
+
`grok-rules.md`, `grok-agents.md`.
|
|
78
|
+
- Profiles: `grok-toml` MCP, `grok` hook and skill schemas.
|
|
79
|
+
`inferHookSchemaProfile("grok")` is `"grok"`, not `"claude"`.
|
|
80
|
+
- Project `.grok/config.toml` walk-up (cwd → scan boundary). User
|
|
81
|
+
`$GROK_HOME/config.toml` or `~/.grok/config.toml` under `--global`.
|
|
82
|
+
Same-name project replaces user; closer project file wins.
|
|
83
|
+
`grok.mcp.no-launch` when neither `command` nor `url` is set. Never
|
|
84
|
+
`claude.mcp.url-without-type` on `grok-toml`.
|
|
85
|
+
- `.grok/hooks/*.json` and user hooks under `--global`. Fourteen events;
|
|
86
|
+
handlers `command` / `http`. Copilot `version: 1` remap is not applied.
|
|
87
|
+
- `.grok/skills` (and user skills under `--global`). Frontmatter required;
|
|
88
|
+
`name` / `description` optional. Agent Skills directory-match and Claude
|
|
89
|
+
listing-budget checks do not run.
|
|
90
|
+
- `.grok/rules/*.md` with no size cap. `Agents.md` and `AGENT.md` as Grok
|
|
91
|
+
instruction files beside `AGENTS.md`.
|
|
92
|
+
- Conformance fixture `tests/fixtures/conformance/grok-toml/`.
|
|
93
|
+
- `spec:check` drifts Grok hook event names against the live hooks page.
|
|
94
|
+
|
|
95
|
+
### Unread (intentional)
|
|
96
|
+
|
|
97
|
+
- Managed / requirements TOML, plugins, marketplaces, personas, LSP,
|
|
98
|
+
`sandbox.toml`, `pager.toml`.
|
|
99
|
+
- `[skills] paths` (no quoted resolution base).
|
|
100
|
+
- `.grok/agents/` (directory named, no filename pattern).
|
|
101
|
+
- Claude / Cursor / `.mcp.json` as Grok-consumed.
|
|
102
|
+
- `.gitignore` skip for instruction files.
|
|
103
|
+
- Credential files (`auth.json`, `mcp_credentials.json`).
|
|
104
|
+
|
|
14
105
|
## 1.1.0 — 2026-08-31
|
|
15
106
|
|
|
16
107
|
Native Command Code provider, then a correctness pass over every registered
|
package/README.md
CHANGED
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<img src="https://img.shields.io/badge/checks-
|
|
9
|
-
<img src="https://img.shields.io/badge/tests-
|
|
8
|
+
<img src="https://img.shields.io/badge/checks-99-111111?style=flat-square" alt="99 checks">
|
|
9
|
+
<img src="https://img.shields.io/badge/tests-457%20passing-111111?style=flat-square" alt="457 tests">
|
|
10
10
|
<img src="https://img.shields.io/badge/network-none-111111?style=flat-square" alt="No network">
|
|
11
11
|
<img src="https://img.shields.io/badge/writes-none-111111?style=flat-square" alt="Writes nothing">
|
|
12
12
|
<img src="https://img.shields.io/badge/runs%20on-node%20%C2%B7%20bun-111111?style=flat-square" alt="Node or Bun">
|
|
13
13
|
<img src="https://img.shields.io/npm/v/@chimix/agentscan?style=flat-square&color=111111&label=npm" alt="npm version">
|
|
14
14
|
<img src="https://img.shields.io/badge/license-MIT-111111?style=flat-square" alt="MIT license">
|
|
15
|
-
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-1.
|
|
15
|
+
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-1.3.0-111111?style=flat-square" alt="Changelog"></a>
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
18
|
<p align="center">
|
|
19
|
-
<strong>
|
|
20
|
-
<sub>An offline linter for Claude Code, Command Code, portable Agent Skills, nested AGENTS.md, Copilot CLI hooks, and the MCP / hooks / rules surfaces that 1.
|
|
19
|
+
<strong>99 checks · offline · 0 network calls on <code>check</code> · provenance on every rule</strong><br>
|
|
20
|
+
<sub>An offline linter for Claude Code, Command Code, Grok Build, Windsurf, portable Agent Skills, nested AGENTS.md, Copilot CLI hooks, and the MCP / hooks / rules surfaces that 1.3.0 actually implements. Spec-required checks cite a published line in <a href="docs/spec/">docs/spec/</a>. Heuristics stay at <code>info</code> and say so. The coverage matrix below is the honesty contract — five dimensions, and a documented global location that is not scanned stays unread.</sub>
|
|
21
21
|
</p>
|
|
22
22
|
|
|
23
23
|
---
|
|
@@ -63,9 +63,9 @@ of the filesystem**, where nothing else in your stack will ever tell you.
|
|
|
63
63
|
No AI, no network on `check`. Read the config, read the disk, compare:
|
|
64
64
|
|
|
65
65
|
```
|
|
66
|
-
1. Discover .claude/ .commandcode/ .agents/ .vscode/ .cursor/ .codex/ .gemini/ .github/ .continue/ AGENTS.md skills-lock.json
|
|
66
|
+
1. Discover .claude/ .commandcode/ .grok/ .agents/ .vscode/ .cursor/ .codex/ .gemini/ .github/ .continue/ AGENTS.md skills-lock.json
|
|
67
67
|
2. Extract immutable facts — never re-read during checking
|
|
68
|
-
3. Check
|
|
68
|
+
3. Check 99 checks, each labeled spec-required, vendor-recommendation,
|
|
69
69
|
security, internal-consistency, or heuristic
|
|
70
70
|
4. Report text · --json · --output prompt (handoff for a fixing agent)
|
|
71
71
|
```
|
|
@@ -116,8 +116,8 @@ too close to an unrelated `agent-scan`. The command you type stays `agentscan`.
|
|
|
116
116
|
bun add -d @chimix/agentscan # then: bunx agentscan check
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
Point it at a project that actually has agent config — a `.claude
|
|
120
|
-
`.commandcode/` directory, an `.mcp.json`, an `AGENTS.md`. A directory with
|
|
119
|
+
Point it at a project that actually has agent config — a `.claude/`,
|
|
120
|
+
`.commandcode/`, or `.grok/` directory, an `.mcp.json`, an `AGENTS.md`. A directory with
|
|
121
121
|
agent config and no `package.json` is still scannable. On a directory with
|
|
122
122
|
neither it exits with a clear error.
|
|
123
123
|
|
|
@@ -186,7 +186,7 @@ Flags for `check`:
|
|
|
186
186
|
| `--verbose` | Show KEEP + info-severity findings, and print each finding's id |
|
|
187
187
|
| `--fail-on <level>` | `never` (default) · `warning` · `error` |
|
|
188
188
|
| `--fail-under <0-100>` | Fail when the score drops below this floor |
|
|
189
|
-
| `--global` | Also scan `~/.claude/skills`, `~/.codex/skills`, `~/.commandcode/skills`,
|
|
189
|
+
| `--global` | Also scan `~/.claude/skills`, `~/.codex/skills`, `$CODEX_HOME` / `~/.codex/config.toml`, `~/.commandcode/skills`, `~/.agents/skills`, and `$GROK_HOME` / `~/.grok` (see below) |
|
|
190
190
|
| `--config <path>` | Config file path |
|
|
191
191
|
|
|
192
192
|
**v1 does not write the tree** — no `apply`, no skill delete/install. Findings may *suggest* shell commands; you run them yourself.
|
|
@@ -199,7 +199,7 @@ Flags for `check`:
|
|
|
199
199
|
│ ⌒ │ 6 error · 2 warning · 11 info hidden (--verbose)
|
|
200
200
|
└─────┘
|
|
201
201
|
|
|
202
|
-
agentscan v1.
|
|
202
|
+
agentscan v1.3.0 — touchagency
|
|
203
203
|
|
|
204
204
|
Scanned: 46 deps · 108 skills · 1 mcp · 2 agents · packageManager=bun
|
|
205
205
|
|
|
@@ -231,7 +231,7 @@ JSON shape (abridged):
|
|
|
231
231
|
|
|
232
232
|
```json
|
|
233
233
|
{
|
|
234
|
-
"version": "1.
|
|
234
|
+
"version": "1.3.0",
|
|
235
235
|
"root": "/path/to/project",
|
|
236
236
|
"factsSummary": {
|
|
237
237
|
"packageManager": "bun",
|
|
@@ -259,14 +259,18 @@ Same tree → same sorted findings, with stable unique `id`s.
|
|
|
259
259
|
|
|
260
260
|
### `--global`
|
|
261
261
|
|
|
262
|
-
Adds `~/.claude/skills`, `~/.codex/skills`, `~/.commandcode/skills`,
|
|
263
|
-
`~/.agents/skills`
|
|
264
|
-
|
|
262
|
+
Adds `~/.claude/skills`, `~/.codex/skills`, `~/.commandcode/skills`,
|
|
263
|
+
`~/.agents/skills`, `$CODEX_HOME` / `~/.codex` (`config.toml` MCP plus
|
|
264
|
+
`AGENTS.override.md` / `AGENTS.md`), and `$GROK_HOME` / `~/.grok` (skills,
|
|
265
|
+
hooks, `config.toml`) to the structural checks: a `SKILL.md` that is malformed
|
|
266
|
+
is malformed wherever it lives, and those findings carry a `source: global`
|
|
265
267
|
evidence entry so you can tell them apart. Codex and Command Code skills use
|
|
266
|
-
the Agent Skills contract (`name` and `description` required).
|
|
267
|
-
|
|
268
|
-
(`~/.commandcode/
|
|
269
|
-
(`~/.commandcode/AGENTS.md`). It
|
|
268
|
+
the Agent Skills contract (`name` and `description` required). Grok skills do
|
|
269
|
+
not — `name` and `description` are optional. `--global` also inventories user
|
|
270
|
+
Command Code agents (`~/.commandcode/agents`), MCP (`~/.commandcode/mcp.json`
|
|
271
|
+
and user settings `mcp.servers`), and memory (`~/.commandcode/AGENTS.md`). It
|
|
272
|
+
never opens `auth.json`, `mcp-tokens.json`, Codex `auth.json`, or Grok
|
|
273
|
+
`auth.json` / `mcp_credentials.json`.
|
|
270
274
|
|
|
271
275
|
Lockfile checks stay project-scoped — a project lockfile cannot pin a skill that
|
|
272
276
|
lives in your home directory, so reporting one as "not in the lockfile" could
|
|
@@ -487,6 +491,14 @@ internal-consistency, or heuristic. `agentscan rules` lists them all.
|
|
|
487
491
|
| `commandcode.agent.reserved-name` | error | A Command Code custom agent named `explore`, `plan`, `review`, or `general` — ignored at load |
|
|
488
492
|
| `commandcode.agent.invalid-permission-mode` | error | A Command Code agent `permissionMode` that is not a documented value |
|
|
489
493
|
| `commandcode.agent.invalid-field-type` | error | A Command Code agent field whose type the spec does not accept |
|
|
494
|
+
| `grok.mcp.no-launch` | error | A Grok `[mcp_servers.*]` entry with neither `command` nor `url` |
|
|
495
|
+
| `grok.hook.unknown-event` | error | A Grok hook registered under an event that is never dispatched (14 events) |
|
|
496
|
+
| `grok.hook.missing-script` | error | A Grok command hook whose script does not exist |
|
|
497
|
+
| `grok.hook.invalid-group` | error | A Grok hook group missing the required nested `hooks` array, or a non-string `matcher` |
|
|
498
|
+
| `grok.hook.command-without-command` | error | A Grok `type: command` hook with no `command` |
|
|
499
|
+
| `grok.hook.http-without-url` | error | A Grok `type: http` hook with no `url` |
|
|
500
|
+
| `grok.hook.unknown-handler-type` | error | A Grok hook whose `type` is missing or not `command` / `http` |
|
|
501
|
+
| `grok.skill.missing-frontmatter` | warning | Grok `SKILL.md` with no `---` block |
|
|
490
502
|
| `mcp.command-missing` | error | An MCP `command` that is a path-like value whose file does not exist on disk |
|
|
491
503
|
| `security.hardcoded-secret` | error | A token-shaped literal in MCP config (the value is never echoed back) |
|
|
492
504
|
| `mcp.literal-env` | warning | Secret-named `env` values that are literals instead of interpolation |
|
|
@@ -516,8 +528,12 @@ internal-consistency, or heuristic. `agentscan rules` lists them all.
|
|
|
516
528
|
| `budget.mcp` | info | More MCP servers than a tool-selection hint (>5) — heuristic proxy |
|
|
517
529
|
| `codex.budget.instructions` | info | Codex root→cwd `AGENTS.md` chain exceeds the default 32 KiB |
|
|
518
530
|
| `cursor.rule.too-large` | info | A `.cursor/rules/*.mdc` file exceeds the 500-line recommendation |
|
|
531
|
+
| `windsurf.rule.too-large` | info | A Windsurf workspace rule exceeds 12,000 characters |
|
|
532
|
+
| `windsurf.rule.global-too-large` | info | `~/.codeium/windsurf/memories/global_rules.md` exceeds 6,000 characters |
|
|
533
|
+
| `windsurf.rule.missing-trigger` | warning | A `.devin/rules` / `.windsurf/rules` file omits frontmatter `trigger` |
|
|
534
|
+
| `windsurf.mcp.no-launch` | error | Windsurf MCP server declares neither `command`, `serverUrl`, nor `url` |
|
|
519
535
|
|
|
520
|
-
### Coverage in 1.
|
|
536
|
+
### Coverage in 1.3.0
|
|
521
537
|
|
|
522
538
|
Each cell is one coverage dimension. There is no `full` / `partial` label: a
|
|
523
539
|
documented global or static location that is not opened stays **unread**.
|
|
@@ -536,14 +552,14 @@ Dimensions:
|
|
|
536
552
|
| AGENTS.md | nested walk-up | n/a | no required fields | nearest-wins | tests |
|
|
537
553
|
| Claude Code | project settings, skills, agents, `CLAUDE.md`, `.mcp.json` / `.claude/mcp.json` | unread `~/.claude/settings.json`, managed policy, marketplace plugins | 33 events; required handler `type`; MCP reserved names; first-paragraph skill description; listing budget | walk-up `CLAUDE.md` / `.claude/agents` | `claude-json` fixture |
|
|
538
554
|
| Command Code | git-root project files; per-directory `AGENTS.md` else `.commandcode/AGENTS.md` | `--global` `~/.commandcode/*`; unread `projects/{slug}/mcp.json` | 4 events; command handlers; Agent Skills; MCP `transport` / `type` | settings merge; project+user hooks coexist; skill/MCP shadow | `commandcode` fixture |
|
|
539
|
-
| Codex | `.codex/config.toml`, `.codex/skills`, AGENTS chain | `--global` `~/.codex/AGENTS.override.md` then `AGENTS.md
|
|
555
|
+
| Codex | `.codex/config.toml`, `.codex/skills`, AGENTS chain | `--global` `$CODEX_HOME` / `~/.codex/config.toml` MCP; `AGENTS.override.md` then `AGENTS.md`; unread system, managed, requirements, profiles, plugins, trust | TOML MCP; `project_doc_max_bytes`; Agent Skills | override > `AGENTS.md` > fallbacks; one file per dir; root→cwd; `project_root_markers`; MCP user+project both inventoried | `codex-toml` fixture |
|
|
540
556
|
| VS Code | `.github/hooks` without `version: 1`, instruction files, `.github/agents`, `.vscode/mcp.json` | `--global` `~/.copilot/hooks` without `version: 1`; unread policy dirs | 8 events; command-only | workspace over user | `vscode-hooks`, `vscode-json` |
|
|
541
557
|
| Copilot CLI | `.github/hooks` with `version: 1` | `--global` `~/.copilot/hooks` with `version: 1`; unread `/etc/github-copilot/policy.d` | camelCase + PascalCase map; `bash` / `powershell` / `command`; `cwd`; `timeoutSec`; prompt on `sessionStart` | documented sources coexist; policy unread | `copilot-hooks` fixture |
|
|
542
558
|
| Cursor | nested `.cursor/skills`, `.cursor/mcp.json`, `.cursor/rules` | unread documented Cursor user/global paths | Agent Skills; MCP launch; 500-line rules | n/a | `cursor-json` fixture |
|
|
543
|
-
| Grok |
|
|
559
|
+
| Grok | `.grok/config.toml` walk-up; `.grok/hooks/*.json`; `.grok/skills`; `.grok/rules/*.md`; `Agents.md` / `AGENT.md` | `--global` `$GROK_HOME` or `~/.grok` config/hooks/skills; unread managed, requirements, plugins, `[skills] paths`, agents, credentials | `command` / `url` MCP (no `type`); 14 events; command/http; frontmatter required, name/description optional; no rules cap | closer project wins; project same-name replaces user | `grok-toml` fixture |
|
|
544
560
|
| Antigravity | `.agents/mcp_config.json` | none | `serverUrl` launch | n/a | `antigravity-json` fixture |
|
|
545
561
|
| Gemini | `.gemini/settings.json` | unread `~/.gemini/settings.json` unless `--global` is wired for it (it is not) | `command` / `url` / `httpUrl`; underscore-alias warning | n/a | `gemini-json` fixture |
|
|
546
|
-
| Windsurf |
|
|
562
|
+
| Windsurf | `.devin/rules/*.md` (preferred), `.windsurf/rules/*.md` (fallback), `.windsurfrules`; portable `AGENTS.md` / `agents.md` | `--global` `~/.codeium/windsurf/mcp_config.json` and `~/.codeium/windsurf/memories/global_rules.md`; unread auto memories, Devin CLI MCP, system `/etc/devin/rules` | 12k / 6k character rules; workspace `trigger`; MCP `command` / `serverUrl` / `url` (no `type`) | n/a (no project MCP; both rule trees inventoried) | `windsurf-rules` fixture |
|
|
547
563
|
| Kiro | none | none | none | n/a | none |
|
|
548
564
|
| Cline | none | none | none | n/a | none |
|
|
549
565
|
| Roo | none | none | none | n/a | none |
|
|
@@ -552,7 +568,7 @@ Dimensions:
|
|
|
552
568
|
| Junie | none | none | none | n/a | none |
|
|
553
569
|
| Continue | `.continue/config.yaml`, `.continue/mcpServers/*` | none | launch `command` / `url` / `uses`; standalone YAML `name` / `version` / `schema` | n/a | `continue-yaml`, `continue-mcpservers` |
|
|
554
570
|
|
|
555
|
-
Cursor project rules (`.cursor/rules/**/*.mdc`) are a separate surface: discovery plus `cursor.rule.too-large` at info. Claude `.claude/rules/**/*.md` is inventoried and has no published line budget.
|
|
571
|
+
Cursor project rules (`.cursor/rules/**/*.mdc`) are a separate surface: discovery plus `cursor.rule.too-large` at info. Claude `.claude/rules/**/*.md` is inventoried and has no published line budget. Windsurf workspace rules use a 12,000-character budget (`windsurf.rule.too-large`); do not apply the Cursor 500-line check. Portable `AGENTS.md` / `agents.md` stay `sourceProvider: unknown` — this scanner does not claim exclusive Windsurf ownership.
|
|
556
572
|
|
|
557
573
|
Old 0.7 rule ids still work in `ignoreRules` and `explain` (for example `hook.missing-script` aliases `claude.hook.missing-script`).
|
|
558
574
|
|
|
@@ -588,6 +604,8 @@ and Command Code settings hooks:
|
|
|
588
604
|
| `.github/hooks/*.json` with `version: 1` (Copilot CLI) | project root, `cwd`, host `bash` / `powershell` / `command` |
|
|
589
605
|
| `~/.copilot/hooks` under `--global` | same split on `version: 1` |
|
|
590
606
|
| `.commandcode/settings.json` · `.commandcode/settings.local.json` (and user settings under `--global`) | Command Code project root (git root, or cwd outside a git repo), `$COMMANDCODE_PROJECT_DIR`, `$COMMANDCODE_CWD` |
|
|
607
|
+
| `.grok/hooks/*.json` | project root and the hooks directory |
|
|
608
|
+
| `$GROK_HOME/hooks` or `~/.grok/hooks` under `--global` | same Grok 14-event / command-or-http split |
|
|
591
609
|
|
|
592
610
|
`${CLAUDE_PLUGIN_ROOT}` is expanded **only** for a hook that came from a plugin.
|
|
593
611
|
In a settings file it names nothing, so the path is skipped rather than guessed
|
|
@@ -630,6 +648,24 @@ first.
|
|
|
630
648
|
- **Runtime split.** Source development and the composite Action use Bun; the
|
|
631
649
|
published `dist/cli.js` runs on Node 20.11+ or Bun. The source entrypoint uses
|
|
632
650
|
Bun's `import.meta.dir` / `import.meta.main` and is not the Node entrypoint.
|
|
651
|
+
- **Grok compatibility and unpublished surfaces are unread.** Managed
|
|
652
|
+
(`~/.grok/managed_config.toml`, `/etc/grok/managed_config.toml`) and
|
|
653
|
+
requirements TOML are not opened. Plugins, marketplaces, personas, and
|
|
654
|
+
`[skills] paths` (no quoted resolution base) stay unread. `.grok/agents/`
|
|
655
|
+
is unread because the page names the directory but not a filename pattern
|
|
656
|
+
or required fields. Claude / Cursor / `.mcp.json` files keep their own
|
|
657
|
+
schemas — this scanner does not add `consumedBy: grok` to them. Grok’s
|
|
658
|
+
“skip gitignored instruction files” is unread: agentscan does not honor
|
|
659
|
+
`.gitignore`. `auth.json` and `mcp_credentials.json` are never opened.
|
|
660
|
+
Spec/runtime Grok MCP checks skip shadowed same-name servers; secrets
|
|
661
|
+
still inspect every readable MCP file.
|
|
662
|
+
- **Codex admin and profile layers are unread.** System `/etc/codex/config.toml`,
|
|
663
|
+
managed preferences, `requirements.toml`, `$CODEX_HOME/<name>.config.toml`
|
|
664
|
+
profiles, plugin MCP, and `trust_level` are not opened. User
|
|
665
|
+
`$CODEX_HOME/config.toml` (or `~/.codex/config.toml`) MCP is scanned only
|
|
666
|
+
under `--global`. `auth.json` is never opened. Same-name user and project
|
|
667
|
+
MCP servers are both inventoried — the published page does not quote a
|
|
668
|
+
replace-entirely rule. User-file `project_doc_*` knobs are not applied.
|
|
633
669
|
- **Command Code local MCP is unread.** `~/.commandcode/projects/{project}/mcp.json`
|
|
634
670
|
is keyed by a working-directory slug that the sessions page does not publish.
|
|
635
671
|
Until it does, that path is skipped rather than guessed. Bundled Command Code
|
|
@@ -650,8 +686,14 @@ first.
|
|
|
650
686
|
`~/.copilot/hooks` is scanned only under `--global`. Inline Copilot
|
|
651
687
|
`.github/copilot/settings.json` hooks are unread.
|
|
652
688
|
- **Gemini user settings are unread.** `~/.gemini/settings.json` is outside a
|
|
653
|
-
normal project scan.
|
|
654
|
-
|
|
689
|
+
normal project scan.
|
|
690
|
+
- **Windsurf Devin CLI MCP and auto memories are unread.** Cascade MCP is
|
|
691
|
+
global-only (`~/.codeium/windsurf/mcp_config.json`, `--global`). The Devin
|
|
692
|
+
Local agent uses unpublished CLI config files — that path is not guessed.
|
|
693
|
+
Auto-generated files under `~/.codeium/windsurf/memories/` other than
|
|
694
|
+
`global_rules.md` are not opened. System / enterprise rule directories
|
|
695
|
+
(`/etc/devin/rules`, `/etc/windsurf/rules`) stay unread. There is no
|
|
696
|
+
quoted project MCP path.
|
|
655
697
|
- **Bounded reads.** A `SKILL.md` is read to 64 KB and a policy file to 100 KB,
|
|
656
698
|
so `skill.broken-reference` and `policyLines` see only that much of a larger
|
|
657
699
|
file. This is reported — `scan.truncated`, at `info` — rather than left
|
|
@@ -665,6 +707,21 @@ Notes for every published version are in [CHANGELOG.md](CHANGELOG.md).
|
|
|
665
707
|
GitHub already has pages for [v0.1.0](https://github.com/SimaAlexandru99/agentscan/releases/tag/v0.1.0)
|
|
666
708
|
and [v0.4.0](https://github.com/SimaAlexandru99/agentscan/releases/tag/v0.4.0).
|
|
667
709
|
|
|
710
|
+
**1.3.0** (31 August 2026) adds native Windsurf / Cascade coverage: workspace
|
|
711
|
+
`.devin/rules` and `.windsurf/rules`, portable `agents.md`, and `--global`
|
|
712
|
+
`mcp_config.json` plus `global_rules.md`. Devin CLI MCP, auto memories,
|
|
713
|
+
system rules, and a project MCP path stay unread.
|
|
714
|
+
|
|
715
|
+
**1.2.1** (31 August 2026) opens Codex user MCP (`$CODEX_HOME/config.toml`
|
|
716
|
+
or `~/.codex/config.toml`) under `--global`. Same-name user and project
|
|
717
|
+
servers are both inventoried. System, managed, requirements, profiles,
|
|
718
|
+
plugins, and `trust_level` stay unread. `auth.json` is never opened.
|
|
719
|
+
|
|
720
|
+
**1.2.0** (31 August 2026) adds a native Grok Build provider: project
|
|
721
|
+
`.grok/*` plus `$GROK_HOME` / `~/.grok/*` under `--global`. Compatibility
|
|
722
|
+
with Claude or Cursor is not schema identity. Agents, managed/requirements
|
|
723
|
+
TOML, plugins, `[skills] paths`, and `.gitignore` skip stay unread.
|
|
724
|
+
|
|
668
725
|
**1.1.0** (31 August 2026) adds a native Command Code provider and finishes the
|
|
669
726
|
correctness pass across registered checks: hook schema profiles, Agent Skills
|
|
670
727
|
optional fields, Claude listing budget, Codex chain knobs, and Copilot CLI
|