{
  "_meta": {
    "schema_version": 1,
    "what": "Dryx's coverage card, the public summary. For each AI coding tool Dryx knows on a Mac, three words: whether Dryx detects it, whether Dryx registers its answer service into it, and whether Dryx gates it.",
    "words": {
      "detected": "Dryx's inspection reads the tool's configuration on the Mac and maps it.",
      "registered": "Dryx registers its answer service, the Authority Anchor, into the tool's own server list, at your request.",
      "gated": "Dryx writes a hook entry into the tool's own hooks file; which actions the hook reaches is in the full card."
    },
    "generated": "2026-10-15",
    "generator": "scripts/gen-coverage-json.py --public",
    "parity_check": "scripts/check-coverage-claims.py, in the coverage suite and in CI; it regenerates this file and fails on drift or on any private-only key or phrase",
    "full_card": "The full coverage card is available on request. Write to security@dryx.ai."
  },
  "gate": {
    "legs": [
      "Claude Code",
      "Codex (CLI and desktop app)",
      "Cursor"
    ],
    "plain": "Dryx writes a hook entry into Claude Code, Codex and Cursor today. On Codex the entry waits for your approval in Codex's own trust flow.",
    "gate_cannot_run": "Where a Mac has no usable Python interpreter the gate cannot run, nothing is gated on Claude Code, Codex or Cursor, and Dryx records that and shows gate cannot run, never green.",
    "floor": {
      "shapes_count": 16,
      "file": "/floor.json",
      "plain": "The destructive floor the gate refuses before any policy is read is sixteen shapes, published at dryx.ai/floor.json and held equal to the shipped gate by a parity check."
    },
    "verify": "Dryx checks this on your own Mac. In the app, Action Guard's runtime gate line shows the state of each of the three hooks on this Mac and Test Guard drives the deployed gate; the Verify button, which prints the gate's fingerprint beside the one this build ships, comes with the in-app coverage card."
  },
  "tools": [
    {
      "name": "Claude Code",
      "detected": "yes",
      "registered": "yes",
      "gated": "yes"
    },
    {
      "name": "Claude Code inside the Claude desktop app",
      "detected": "yes",
      "registered": "yes",
      "gated": "yes",
      "note": "Code mode shares the Claude Code hook surface, so this row follows the Claude Code row; the desktop app's own chat is not this row."
    },
    {
      "name": "Codex (CLI and desktop app)",
      "detected": "yes",
      "registered": "yes",
      "gated": "yes"
    },
    {
      "name": "Cursor",
      "detected": "yes",
      "registered": "yes",
      "gated": "yes"
    },
    {
      "name": "Devin Desktop (Windsurf)",
      "detected": "yes",
      "registered": "yes",
      "gated": "no"
    },
    {
      "name": "Cline",
      "detected": "yes",
      "registered": "yes",
      "gated": "no"
    },
    {
      "name": "VS Code",
      "detected": "yes",
      "registered": "no",
      "gated": "no"
    },
    {
      "name": "Gemini CLI",
      "detected": "yes",
      "registered": "no",
      "gated": "no"
    },
    {
      "name": "OpenClaw",
      "detected": "yes",
      "registered": "no",
      "gated": "no"
    },
    {
      "name": "Ollama",
      "detected": "yes",
      "registered": "no",
      "gated": "no"
    },
    {
      "name": "LM Studio",
      "detected": "yes",
      "registered": "no",
      "gated": "no"
    },
    {
      "name": "Aider",
      "detected": "yes",
      "registered": "no",
      "gated": "no"
    },
    {
      "name": "Continue",
      "detected": "yes",
      "registered": "yes",
      "gated": "no"
    },
    {
      "name": "GitHub Copilot",
      "detected": "yes",
      "registered": "yes",
      "gated": "no"
    },
    {
      "name": "Google Antigravity",
      "detected": "no",
      "registered": "yes",
      "gated": "no"
    }
  ]
}
