Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/agentseam/data/vendors/grok.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
"loads_claude_plugins": {
"basis": "vendor-source",
"date": "2026-10-17",
"test": "tests/test_claude_plugins.py::test_grok_carries_the_witness_and_no_other_agent_does"
"test": "tests/test_claude_plugins.py::test_only_the_witnessed_agents_carry_a_witness"
},
"tools": {
"basis": "vendor-docs",
Expand Down
7 changes: 4 additions & 3 deletions src/agentseam/data/vendors/vscode_copilot.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"loads_claude_plugins": {
"basis": "vendor-source",
"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": "vendor-docs",
Expand Down Expand Up @@ -148,9 +148,10 @@
"hooks": "yes",
"how": "Claude-format plugin by manifest location, from a marketplace (.claude-plugin/marketplace.json, anthropics/claude-code accepted) or chat.pluginLocations; needs chat.plugins.enabled",
"loads": "yes",
"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 <mkt entry | OWNER/REPO | git URL | ./path> 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 (closed source)",
"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 <mkt entry | OWNER/REPO | git URL | ./path> 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)"
"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": "Copilot CLI only, not VS Code: 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 <dir> (a local path, which Copilot warns is deprecated) (org-plan witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md at 6516f57)"
},
"needs_trust": false,
"tools": {
Expand Down
46 changes: 36 additions & 10 deletions tests/test_claude_plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,31 @@
from agentseam.vendor_config import SCHEMA, VENDOR_CONFIG, loads_claude_plugins # noqa: E402

FIELD = "loads_claude_plugins"
WITNESS_FILE = "witness/results/witness-grok-claude-plugin-2026-10-17.md"
#: agent -> what its witness note must name: the run, the result file and the org-plan commit.
WITNESSES = {
"grok": (
"guard",
"gate",
"refus",
"Grok Build 1.0.62",
"2026-10-17",
"witness/results/witness-grok-claude-plugin-2026-10-17.md",
"25b9d9d",
),
"vscode_copilot": (
"Copilot CLI only, not VS Code",
"guard",
"gate",
"refused by preToolUse deny",
"Copilot CLI 1.0.98",
"Windows 11",
"2026-10-17",
"copilot plugin install <dir>",
"deprecated",
"witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md",
"6516f57",
),
}

#: (loads, hooks, deny_reply) per agent, as org-plan discovery/2026-10-17-claude-plugin-compat.md records them.
DISCOVERY_ROWS = {
Expand Down Expand Up @@ -49,15 +73,16 @@ def test_each_entry_records_the_discovery_row():
assert record["date"] == "2026-10-17", agent


def test_grok_carries_the_witness_and_no_other_agent_does():
def test_only_the_witnessed_agents_carry_a_witness():
witnessed = {agent for agent, entry in VENDOR_CONFIG.items() if "witnessed" in entry[FIELD]}
assert witnessed == {"grok"}
note = VENDOR_CONFIG["grok"][FIELD]["witnessed"]
for needle in ("guard", "gate", "refus", "Grok Build 1.0.62", "2026-10-17", WITNESS_FILE, "25b9d9d"):
assert needle in note, needle
record = VENDOR_CONFIG["grok"]["evidence"][FIELD]
assert record["basis"] == "vendor-source"
assert record["test"].endswith("::test_grok_carries_the_witness_and_no_other_agent_does")
assert witnessed == set(WITNESSES)
for agent, needles in WITNESSES.items():
note = VENDOR_CONFIG[agent][FIELD]["witnessed"]
for needle in needles:
assert needle in note, (agent, needle)
record = VENDOR_CONFIG[agent]["evidence"][FIELD]
assert record["basis"] == "vendor-source", agent
assert record["test"].endswith("::test_only_the_witnessed_agents_carry_a_witness"), agent


def test_a_no_or_unknown_load_never_reports_a_hook_or_deny_verdict():
Expand All @@ -74,7 +99,8 @@ def test_vscode_copilot_also_records_the_copilot_cli_row():
"Copilot CLI",
"copilot plugin install",
".claude-plugin/plugin.json",
"nested hookSpecificOutput unknown",
"nested hookSpecificOutput unknown from the docs",
"settled by the Copilot CLI 1.0.98 witness for a shell command and a file write",
):
assert needle in row["notes"], needle
assert "github/docs@dae83f7d" in row["source"]
Expand Down
5 changes: 3 additions & 2 deletions tools/recount/claude_plugins.json
Original file line number Diff line number Diff line change
Expand Up @@ -186,9 +186,10 @@
"hooks": "yes",
"how": "Claude-format plugin by manifest location, from a marketplace (.claude-plugin/marketplace.json, anthropics/claude-code accepted) or chat.pluginLocations; needs chat.plugins.enabled",
"loads": "yes",
"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 <mkt entry | OWNER/REPO | git URL | ./path> 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 (closed source)",
"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 <mkt entry | OWNER/REPO | git URL | ./path> 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)"
"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": "Copilot CLI only, not VS Code: 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 <dir> (a local path, which Copilot warns is deprecated) (org-plan witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md at 6516f57)"
}
},
"windsurf": {
Expand Down
5 changes: 3 additions & 2 deletions tools/recount/sourced.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,13 @@

#: 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 alone adds the owner's witness run (witness/results at org-plan 25b9d9d).
#: rows stay so. Grok (org-plan 25b9d9d) and vscode_copilot's Copilot CLI (org-plan 6516f57) 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"
_CLAUDE_PLUGINS_TEST = "tests/test_claude_plugins.py::test_each_entry_records_the_discovery_row"
_CLAUDE_PLUGINS_WITNESS_TEST = "tests/test_claude_plugins.py::test_grok_carries_the_witness_and_no_other_agent_does"
_CLAUDE_PLUGINS_WITNESS_TEST = "tests/test_claude_plugins.py::test_only_the_witnessed_agents_carry_a_witness"

#: Repo hook configs this agent read before its current `config_path`, and still reads as a
#: fallback. windsurf: docs.devin.ai/desktop/cascade/hooks (read 2026-10-13), Workspace-Level --
Expand Down
Loading