@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.
Files changed (4) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +83 -26
  3. package/dist/cli.js +757 -194
  4. 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-87-111111?style=flat-square" alt="87 checks">
9
- <img src="https://img.shields.io/badge/tests-420%20passing-111111?style=flat-square" alt="420 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.1.0-111111?style=flat-square" alt="Changelog"></a>
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>87 checks &middot; offline &middot; 0 network calls on <code>check</code> &middot; provenance on every rule</strong><br>
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.1.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>
19
+ <strong>99 checks &middot; offline &middot; 0 network calls on <code>check</code> &middot; 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 87 checks, each labeled spec-required, vendor-recommendation,
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/` or
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`, and `~/.agents/skills` (see below) |
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.1.0 — touchagency
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.1.0",
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`, and
263
- `~/.agents/skills` to the structural checks: a `SKILL.md` that is malformed is
264
- malformed wherever it lives, and those findings carry a `source: global`
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). `--global` also
267
- inventories user Command Code agents (`~/.commandcode/agents`), MCP
268
- (`~/.commandcode/mcp.json` and user settings `mcp.servers`), and memory
269
- (`~/.commandcode/AGENTS.md`). It never opens `auth.json` or `mcp-tokens.json`.
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.1.0
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` | TOML MCP; `project_doc_max_bytes`; Agent Skills | override > `AGENTS.md` > fallbacks; one file per dir; root→cwd; `project_root_markers` | `codex-toml` fixture |
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 | none | none | none | n/a | none |
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 | none | unread (official page is global-only) | none | n/a | none |
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. Windsurf's official MCP page is global-only and is not
654
- scanned.
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