{
  "type": "object",
  "required": [
    "passes",
    "summary",
    "violations",
    "may_make_external_network_calls",
    "may_download_additional_software",
    "hooks",
    "has_broad_scope_hooks",
    "has_undisclosed_telemetry",
    "description_matches_behavior"
  ],
  "additionalProperties": true,
  "properties": {
    "passes": {
      "type": "boolean",
      "description": "true only if the plugin is safe AND has no broad-scope hooks AND has no undisclosed telemetry AND its description matches its behavior."
    },
    "summary": {
      "type": "string",
      "description": "Brief description of what the plugin does."
    },
    "violations": {
      "type": "string",
      "description": "Specific files/hooks and issues, or empty string if none. When passes=false this MUST cite the file/hook and state what the user was not told."
    },
    "may_make_external_network_calls": {
      "type": "boolean"
    },
    "may_download_additional_software": {
      "type": "boolean"
    },
    "hooks": {
      "type": "array",
      "items": { "type": "string" },
      "description": "One string per registered hook: 'EVENT:path — gated|ungated — network:yes(host)|no'. Empty array if the plugin registers no hooks."
    },
    "has_broad_scope_hooks": {
      "type": "boolean",
      "description": "true if any UserPromptSubmit/PreToolUse/PostToolUse hook runs without a project-relevance gate, or any hook reads user data beyond the plugin's stated scope."
    },
    "has_undisclosed_telemetry": {
      "type": "boolean",
      "description": "true if any hook or shipped code makes an outbound network call to a non-MCP host without explicit disclosure + opt-out in the description/README."
    },
    "description_matches_behavior": {
      "type": "boolean",
      "description": "false if a user reading only the plugin.json description would be surprised by the hooks/telemetry/data-access the plugin actually performs."
    }
  }
}
