diff --git a/src/agentseam/data/vendors/cursor.json b/src/agentseam/data/vendors/cursor.json index 7dc82c5..e845667 100644 --- a/src/agentseam/data/vendors/cursor.json +++ b/src/agentseam/data/vendors/cursor.json @@ -60,7 +60,7 @@ "loads_claude_plugins": { "basis": "vendor-docs", "date": "2026-10-17", - "test": "tests/test_claude_plugins.py::test_each_entry_records_the_discovery_row" + "test": "tests/test_claude_plugins.py::test_only_the_witnessed_agents_carry_a_witness" }, "tools": { "basis": "live-run-partial", @@ -117,12 +117,13 @@ }, "loads_claude_plugins": { "deny_reply": "unknown", - "hooks": "unknown", - "how": "n/a for the documented formats (.cursor-plugin/plugin.json and a root plugin.json); unknown via the Third-Party Plugins toggle", - "loads": "unknown", - "notes": "recorded no for the documented plugin formats and unknown via the Third-Party Plugins toggle, so unknown overall; Claude Code settings hooks (not plugins) run by default, event and tool names mapped (Bash to Shell), HSO and exit 2 honoured", - "payload": "unknown", - "source": "https://cursor.com/docs/reference/plugins, https://cursor.com/docs/reference/third-party-hooks (org-plan discovery/2026-10-17-claude-plugin-compat.md)" + "hooks": "yes", + "how": "n/a for the documented formats (.cursor-plugin/plugin.json and a root plugin.json); via the Third-Party Plugins toggle (Include Third-Party Plugins, Skills, and Other Configs), Cursor imports a Claude Code plugin installed and enabled in Claude Code (claude plugin marketplace add , claude plugin install, claude plugin enable); disabled Claude plugins are not imported", + "loads": "yes", + "notes": "recorded no for the documented plugin formats and unknown via the Third-Party Plugins toggle; the toggle route settled as loads and hooks called by the 2026-10-18 witness, deny unknown (see witnessed); Claude Code settings hooks (not plugins) run by default, event and tool names mapped (Bash to Shell), HSO and exit 2 honoured", + "payload": "Cursor's own (hook_event_name preToolUse/stop/sessionStart; tool_name Shell, Write, Read, Grep), as witnessed", + "source": "https://cursor.com/docs/reference/plugins, https://cursor.com/docs/reference/third-party-hooks (org-plan discovery/2026-10-17-claude-plugin-compat.md)", + "witnessed": "hooks called, chock never ran, no verdict: Cursor imported the enabled Claude Code plugin (Customize -> Plugins listed chock-witness; Customize -> Hooks mapped its 8 hooks as preToolUse x5, stop x2, sessionStart x1) and its Execution Log shows every hook called with Cursor's own payload, but every hook's output is (empty) and chock logged no line from the session; the git commit --no-verify ran and the unpinned workflow write landed, so no refusal, and whether Cursor honours a Claude deny from an imported plugin is unsettled; cause unmeasured (the single-quoted hook command in Cursor's Windows hook shell, or CLAUDE_PLUGIN_ROOT unset); Cursor 3.25.9 (Execution Log) on Windows 11, 2026-10-18; plugin installed into Claude Code 2.1.302 by claude plugin marketplace add , claude plugin install chock-witness@chock-local and claude plugin enable chock-witness@chock-local (org-plan witness/results/witness-cursor-claude-plugin-2026-10-18.md at 0938b50)" }, "needs_trust": false, "tools": { diff --git a/src/agentseam/data/vendors/vscode_copilot.json b/src/agentseam/data/vendors/vscode_copilot.json index 0ef490f..88e76fa 100644 --- a/src/agentseam/data/vendors/vscode_copilot.json +++ b/src/agentseam/data/vendors/vscode_copilot.json @@ -151,7 +151,7 @@ "notes": "VS Code: the Local harness ignores matchers, so every nested command for the event runs; HSO deny and exit 2 block. Copilot CLI (chock's copilot client builds for this entry): loads yes via copilot plugin install or --plugin-dir, legacy manifest includes .claude-plugin/plugin.json, copilot plugin marketplace add anthropics/claude-code; hooks yes (hooks.json or hooks/hooks.json); payload Claude Code for PascalCase events (Claude tool names, e.g. Bash), Copilot camelCase otherwise; deny partial: exit 2 denies, flat permissionDecision documented, nested hookSpecificOutput unknown from the docs (closed source), settled by the Copilot CLI 1.0.98 witness for a shell command and a file write (see witnessed)", "payload": "Claude-shaped snake_case, but VS Code's own Local tool names", "source": "microsoft/vscode-docs@ef0ca127 docs/agents/reference/agent-plugin-reference.md; Copilot CLI: github/docs@dae83f7d content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md (org-plan discovery/2026-10-17-claude-plugin-compat.md)", - "witnessed": "VS Code Copilot agent on Windows 11, 2026-10-18, VS Code version unmeasured; plugin loaded by chat.plugins.enabled and chat.pluginLocations -> : in the Chat panel with the folder open, guard (shell command) and gate (file write, tool Edit) refused by preToolUse deny; in an Agents-window chat with no workspace the guard was refused (gate not tried); an Agents-window session bound to a repo (Copilot SDK) ran no hooks and refused nothing (org-plan witness/results/witness-vscode-claude-plugin-2026-10-18.md at 34272c0). Copilot CLI: guard (shell command) and gate (file write) refused by preToolUse deny; GitHub Copilot CLI 1.0.98 on Windows 11, 2026-10-17; plugin installed by copilot plugin install (a local path, which Copilot warns is deprecated) (org-plan witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md at 6516f57)" + "witnessed": "VS Code Copilot agent on Windows 11, 2026-10-18, VS Code version unmeasured; plugin loaded by chat.plugins.enabled and chat.pluginLocations -> : in the Chat panel with the folder open, guard (shell command) and gate (file write, tool Edit) refused by preToolUse deny; in an Agents-window chat with no workspace the guard was refused (gate not tried); an Agents-window session bound to a repo (Copilot SDK) ran no hooks and refused nothing (org-plan witness/results/witness-vscode-claude-plugin-2026-10-18.md at 34272c0). Copilot CLI: guard (shell command) and gate (file write) refused by preToolUse deny; GitHub Copilot CLI 1.0.98 on Windows 11, 2026-10-17; plugin installed by copilot plugin install (a local path, which Copilot warns is deprecated) (org-plan witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md at 6516f57). Copilot CLI marketplace route: guard (shell command) and gate (file write, tool Edit) refused by preToolUse deny; GitHub Copilot CLI 1.0.98 on Windows 11, 2026-10-18; plugin installed by copilot plugin marketplace add and copilot plugin install chock-witness@chock-local, loaded live (nothing copied), no deprecation warning; the add first failed with Marketplace \"chock-local\" already registered (chock's earlier Copilot build held the name) until copilot plugin marketplace remove chock-local; copilot plugin uninstall only disables a live plugin and leaves it on disk (org-plan witness/results/witness-copilot-cli-claude-plugin-marketplace-2026-10-18.md at 423231e)" }, "needs_trust": false, "tools": { diff --git a/tests/test_claude_plugins.py b/tests/test_claude_plugins.py index 2a31997..106d649 100644 --- a/tests/test_claude_plugins.py +++ b/tests/test_claude_plugins.py @@ -43,6 +43,14 @@ "deprecated", "witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md", "6516f57", + "Copilot CLI marketplace route: guard", + "copilot plugin marketplace add ", + "copilot plugin install chock-witness@chock-local", + "no deprecation warning", + 'Marketplace "chock-local" already registered', + "uninstall only disables", + "witness/results/witness-copilot-cli-claude-plugin-marketplace-2026-10-18.md", + "423231e", ), "codex_cli": ( "guard", @@ -56,6 +64,19 @@ "witness/results/witness-codex-claude-plugin-2026-10-17.md", "eb303f4", ), + "cursor": ( + "hooks called, chock never ran, no verdict", + "every hook's output is (empty)", + "no refusal", + "unsettled", + "cause unmeasured", + "Cursor 3.25.9", + "Windows 11", + "2026-10-18", + "claude plugin enable chock-witness@chock-local", + "witness/results/witness-cursor-claude-plugin-2026-10-18.md", + "0938b50", + ), "devin": ( "turn-end gate only", "the matcherless pre_tool hook and Stop ran", @@ -77,7 +98,7 @@ "claude_code": ("yes", "yes", "yes"), "cline": ("no", "n/a", "n/a"), "codex_cli": ("yes", "yes", "yes"), - "cursor": ("unknown", "unknown", "unknown"), + "cursor": ("yes", "yes", "unknown"), # unknown in discovery; loads and hooks called settled by its witness "devin": ("yes", "partial", "partial"), # hooks: unknown in discovery, settled partial by its witness "factory_droid": ("yes", "yes", "yes"), "gemini_cli": ("no", "n/a", "n/a"), diff --git a/tools/recount/claude_plugins.json b/tools/recount/claude_plugins.json index 4306d6b..cce94ec 100644 --- a/tools/recount/claude_plugins.json +++ b/tools/recount/claude_plugins.json @@ -51,12 +51,13 @@ "basis": "vendor-docs", "entry": { "deny_reply": "unknown", - "hooks": "unknown", - "how": "n/a for the documented formats (.cursor-plugin/plugin.json and a root plugin.json); unknown via the Third-Party Plugins toggle", - "loads": "unknown", - "notes": "recorded no for the documented plugin formats and unknown via the Third-Party Plugins toggle, so unknown overall; Claude Code settings hooks (not plugins) run by default, event and tool names mapped (Bash to Shell), HSO and exit 2 honoured", - "payload": "unknown", - "source": "https://cursor.com/docs/reference/plugins, https://cursor.com/docs/reference/third-party-hooks (org-plan discovery/2026-10-17-claude-plugin-compat.md)" + "hooks": "yes", + "how": "n/a for the documented formats (.cursor-plugin/plugin.json and a root plugin.json); via the Third-Party Plugins toggle (Include Third-Party Plugins, Skills, and Other Configs), Cursor imports a Claude Code plugin installed and enabled in Claude Code (claude plugin marketplace add , claude plugin install, claude plugin enable); disabled Claude plugins are not imported", + "loads": "yes", + "notes": "recorded no for the documented plugin formats and unknown via the Third-Party Plugins toggle; the toggle route settled as loads and hooks called by the 2026-10-18 witness, deny unknown (see witnessed); Claude Code settings hooks (not plugins) run by default, event and tool names mapped (Bash to Shell), HSO and exit 2 honoured", + "payload": "Cursor's own (hook_event_name preToolUse/stop/sessionStart; tool_name Shell, Write, Read, Grep), as witnessed", + "source": "https://cursor.com/docs/reference/plugins, https://cursor.com/docs/reference/third-party-hooks (org-plan discovery/2026-10-17-claude-plugin-compat.md)", + "witnessed": "hooks called, chock never ran, no verdict: Cursor imported the enabled Claude Code plugin (Customize -> Plugins listed chock-witness; Customize -> Hooks mapped its 8 hooks as preToolUse x5, stop x2, sessionStart x1) and its Execution Log shows every hook called with Cursor's own payload, but every hook's output is (empty) and chock logged no line from the session; the git commit --no-verify ran and the unpinned workflow write landed, so no refusal, and whether Cursor honours a Claude deny from an imported plugin is unsettled; cause unmeasured (the single-quoted hook command in Cursor's Windows hook shell, or CLAUDE_PLUGIN_ROOT unset); Cursor 3.25.9 (Execution Log) on Windows 11, 2026-10-18; plugin installed into Claude Code 2.1.302 by claude plugin marketplace add , claude plugin install chock-witness@chock-local and claude plugin enable chock-witness@chock-local (org-plan witness/results/witness-cursor-claude-plugin-2026-10-18.md at 0938b50)" } }, "devin": { @@ -191,7 +192,7 @@ "notes": "VS Code: the Local harness ignores matchers, so every nested command for the event runs; HSO deny and exit 2 block. Copilot CLI (chock's copilot client builds for this entry): loads yes via copilot plugin install or --plugin-dir, legacy manifest includes .claude-plugin/plugin.json, copilot plugin marketplace add anthropics/claude-code; hooks yes (hooks.json or hooks/hooks.json); payload Claude Code for PascalCase events (Claude tool names, e.g. Bash), Copilot camelCase otherwise; deny partial: exit 2 denies, flat permissionDecision documented, nested hookSpecificOutput unknown from the docs (closed source), settled by the Copilot CLI 1.0.98 witness for a shell command and a file write (see witnessed)", "payload": "Claude-shaped snake_case, but VS Code's own Local tool names", "source": "microsoft/vscode-docs@ef0ca127 docs/agents/reference/agent-plugin-reference.md; Copilot CLI: github/docs@dae83f7d content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md (org-plan discovery/2026-10-17-claude-plugin-compat.md)", - "witnessed": "VS Code Copilot agent on Windows 11, 2026-10-18, VS Code version unmeasured; plugin loaded by chat.plugins.enabled and chat.pluginLocations -> : in the Chat panel with the folder open, guard (shell command) and gate (file write, tool Edit) refused by preToolUse deny; in an Agents-window chat with no workspace the guard was refused (gate not tried); an Agents-window session bound to a repo (Copilot SDK) ran no hooks and refused nothing (org-plan witness/results/witness-vscode-claude-plugin-2026-10-18.md at 34272c0). Copilot CLI: guard (shell command) and gate (file write) refused by preToolUse deny; GitHub Copilot CLI 1.0.98 on Windows 11, 2026-10-17; plugin installed by copilot plugin install (a local path, which Copilot warns is deprecated) (org-plan witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md at 6516f57)" + "witnessed": "VS Code Copilot agent on Windows 11, 2026-10-18, VS Code version unmeasured; plugin loaded by chat.plugins.enabled and chat.pluginLocations -> : in the Chat panel with the folder open, guard (shell command) and gate (file write, tool Edit) refused by preToolUse deny; in an Agents-window chat with no workspace the guard was refused (gate not tried); an Agents-window session bound to a repo (Copilot SDK) ran no hooks and refused nothing (org-plan witness/results/witness-vscode-claude-plugin-2026-10-18.md at 34272c0). Copilot CLI: guard (shell command) and gate (file write) refused by preToolUse deny; GitHub Copilot CLI 1.0.98 on Windows 11, 2026-10-17; plugin installed by copilot plugin install (a local path, which Copilot warns is deprecated) (org-plan witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md at 6516f57). Copilot CLI marketplace route: guard (shell command) and gate (file write, tool Edit) refused by preToolUse deny; GitHub Copilot CLI 1.0.98 on Windows 11, 2026-10-18; plugin installed by copilot plugin marketplace add and copilot plugin install chock-witness@chock-local, loaded live (nothing copied), no deprecation warning; the add first failed with Marketplace \"chock-local\" already registered (chock's earlier Copilot build held the name) until copilot plugin marketplace remove chock-local; copilot plugin uninstall only disables a live plugin and leaves it on disk (org-plan witness/results/witness-copilot-cli-claude-plugin-marketplace-2026-10-18.md at 423231e)" } }, "windsurf": { diff --git a/tools/recount/sourced.py b/tools/recount/sourced.py index 3c56ba3..fb8f769 100644 --- a/tools/recount/sourced.py +++ b/tools/recount/sourced.py @@ -27,8 +27,9 @@ #: Whether each agent loads a Claude Code plugin, transcribed from org-plan #: discovery/2026-10-17-claude-plugin-compat.md (CC-1, read 2026-10-17); unknown and partial #: rows stay so. Grok (org-plan 25b9d9d), vscode_copilot's Copilot CLI (org-plan 6516f57) and VS Code -#: (34272c0), codex_cli (eb303f4) and devin (df71db6, which settles its hooks as partial) add the -#: owner's witness runs, from witness/results. +#: (34272c0) and marketplace route (423231e), codex_cli (eb303f4), devin (df71db6, which settles its +#: hooks as partial) and cursor (0938b50, loads and hooks called, deny unknown) add the owner's witness +#: runs, from witness/results. with open(os.path.join(os.path.dirname(__file__), "claude_plugins.json"), encoding="utf-8") as _fh: LOADS_CLAUDE_PLUGINS = json.load(_fh) _CLAUDE_PLUGINS_READ = "2026-10-17"