{
  "$schema": "https://readbeforerun.ai/schema/entry.schema.json",
  "entry": {
    "id": "keygraph-shannon",
    "name": "Shannon",
    "summary": "Autonomous white-box AI penetration tester for web apps and APIs; reports only vulnerabilities it proves by exploitation.",
    "draft": "review",
    "type": "agent",
    "mission": [
      "offensive"
    ],
    "task": [
      "web-api-testing"
    ],
    "domain": [
      "application-security",
      "vulnerability-management"
    ],
    "runtime": [
      "standalone"
    ],
    "tier": "listed",
    "last_checked": "2026-10-19",
    "next_check": "2027-01-17",
    "freshness": "fresh",
    "superseded": false,
    "in_my_kit": null,
    "advice": null,
    "code_shows": "bypasses approval · writes outside the project · talks to any host · runs shell commands or eval · changes config or installs globally",
    "source": {
      "repo": "https://github.com/KeygraphHQ/shannon",
      "subpath": null,
      "commit": "f6a770d1199934e1e0b8af25e47f4faed96f3723",
      "version": "v3.4.0",
      "license": "AGPL-3.0"
    },
    "install": {
      "skills_cli": null,
      "claude_code": null,
      "upstream": "npx @keygraph/shannon@latest setup\nnpx @keygraph/shannon@latest start \\\n  -u https://your-app.com \\\n  -r /path/to/your/repo",
      "bundled": false
    },
    "scan": {
      "status": "static scan pending (not run)"
    },
    "reach": {
      "method": "reach-v0.1",
      "level": 3,
      "level_source": "static",
      "level_label": "privileged",
      "unknown_axes": 0,
      "verdict": "not-run",
      "badge": "reach 3 · not run yet",
      "long": "reach 3 from code (privileged); lab: not run yet",
      "declared": {
        "fs": 1,
        "net": 1,
        "exec": 2,
        "cred": 1,
        "persist": 2,
        "hitl": 2
      },
      "static": {
        "level": 3,
        "fs": 2,
        "net": 2,
        "exec": 2,
        "cred": 1,
        "persist": 2,
        "hitl": 3,
        "unknown": []
      },
      "observed": null,
      "surplus": null,
      "fit": null,
      "exports": {
        "aivss": {
          "fs": 0.5,
          "net": 0.5,
          "exec": 0.5,
          "cred": 0.5,
          "persist": 0.5,
          "hitl": 1
        },
        "usf_risk_tier": "L3"
      }
    },
    "profile": {
      "read_at": "f6a770d1199934e1e0b8af25e47f4faed96f3723",
      "read_on": "2026-10-25",
      "overview": "Shannon is an autonomous AI pentester for web applications and APIs.",
      "purpose": [
        "It tests web applications and their APIs by combining source-code analysis with live exploitation against the running application.",
        "It is meant to run exploitation-backed tests against staging environments and releases as part of the development lifecycle."
      ],
      "use_cases": [
        {
          "text": "Test a running web app and its API for injection, XSS, SSRF, broken authentication and broken authorization.",
          "task": "web-api-testing"
        },
        {
          "text": "Run Shannon through the GitHub Action or GitLab CI/CD component and gate releases on proven vulnerabilities.",
          "task": "finding-validation"
        },
        {
          "text": "Run agentic static analysis that reads the repository for vulnerabilities before the pentest.",
          "task": "code-review-sast"
        }
      ],
      "maturity": null,
      "capabilities": [
        {
          "name": "Pre-Recon / Recon",
          "effects": [
            "reads",
            "runs-commands"
          ],
          "enabled": "default"
        },
        {
          "name": "Vulnerability Analysis",
          "effects": [
            "reads",
            "runs-commands"
          ],
          "enabled": "default"
        },
        {
          "name": "Exploitation",
          "effects": [
            "changes",
            "runs-commands"
          ],
          "enabled": "default"
        },
        {
          "name": "Agentic SAST (Capella)",
          "effects": [
            "reads"
          ],
          "enabled": "optional"
        },
        {
          "name": "Reporting",
          "effects": [
            "reads",
            "changes"
          ],
          "enabled": "default"
        },
        {
          "name": "Agent tools (pi harness)",
          "effects": [
            "reads",
            "changes",
            "runs-commands"
          ],
          "enabled": "default"
        },
        {
          "name": "playwright-cli",
          "effects": [
            "reads",
            "runs-commands"
          ],
          "enabled": "default"
        }
      ],
      "effects": [
        "reads",
        "changes",
        "runs-commands"
      ],
      "runs": "container",
      "listens": [
        {
          "mode": "default",
          "bind": "loopback",
          "sign_in": "unknown"
        },
        {
          "mode": "default",
          "bind": "loopback",
          "sign_in": "unknown"
        }
      ],
      "sends_to": [
        {
          "to": "Model provider",
          "kind": "model-provider",
          "when": "always"
        },
        {
          "to": "Target URL",
          "kind": "target",
          "when": "always"
        },
        {
          "to": "Docker Hub",
          "kind": "download",
          "when": "default"
        },
        {
          "to": "pi model catalogue",
          "kind": "download",
          "when": "always"
        },
        {
          "to": "Anthropic / OpenAI",
          "kind": "model-provider",
          "when": "default"
        },
        {
          "to": "Anthropic",
          "kind": "model-provider",
          "when": "default"
        }
      ],
      "model": "own-key",
      "needs": [
        {
          "kind": "container",
          "text": "Docker is required for the worker container."
        },
        {
          "kind": "runtime",
          "text": "Node.js 18+ for the npx workflow."
        },
        {
          "kind": "model-key",
          "text": "A key in SHANNON_AI_API_KEY for the provider SHANNON_AI_MODEL names; Bedrock uses its AWS_ variables instead."
        },
        {
          "kind": "account",
          "text": "When the provider is Anthropic or OpenAI, their real-time cyber safeguards apply and can interrupt a scan; their guidance for security testers is to be completed before the first run."
        },
        {
          "kind": "authorization",
          "text": "Explicit written authorization from the owner of the target system."
        },
        {
          "kind": "os",
          "text": "On Windows it needs WSL2; native Windows is not supported."
        }
      ]
    },
    "urls": {
      "page": "/catalog/keygraph-shannon/",
      "json": "/entries/keygraph-shannon.json",
      "md": "/catalog/keygraph-shannon.md",
      "badge": "/badge/keygraph-shannon.svg"
    }
  },
  "data": {
    "schema_version": "0.5",
    "slug": "keygraph-shannon",
    "name": "Shannon",
    "summary": "Autonomous white-box AI penetration tester for web apps and APIs; reports only vulnerabilities it proves by exploitation.",
    "draft": "review",
    "in_my_kit": null,
    "type": "agent",
    "mission": [
      "offensive"
    ],
    "task": [
      "web-api-testing"
    ],
    "domain": [
      "application-security",
      "vulnerability-management"
    ],
    "phase": [
      "off:discovery"
    ],
    "role": [
      "pentest"
    ],
    "runtime": [
      "standalone"
    ],
    "auth": null,
    "autonomy": 3,
    "addresses": [],
    "frameworks": {
      "owasp_ast": [],
      "owasp_asi": [],
      "attack_tactic": [],
      "atlas": []
    },
    "source": {
      "repo": "https://github.com/KeygraphHQ/shannon",
      "commit": "f6a770d1199934e1e0b8af25e47f4faed96f3723",
      "version": "v3.4.0",
      "license": "AGPL-3.0",
      "manifest": "package.json",
      "also_listed": {}
    },
    "upstream": {
      "checked_at": "2026-10-19",
      "updated_at": "2026-10-15",
      "current_release": "v3.4.0",
      "archived": false,
      "stars": 49097,
      "commit_history": {},
      "releases_since_pin": 0
    },
    "install": {
      "upstream": "npx @keygraph/shannon@latest setup\nnpx @keygraph/shannon@latest start \\\n  -u https://your-app.com \\\n  -r /path/to/your/repo",
      "upstream_evidence": "README.md#L146-151",
      "bundled": false
    },
    "scan": [
      {
        "tool": "cisco-skill-scanner",
        "version": "not-run",
        "llm_judge": false,
        "date": "2026-10-19",
        "result": "pending"
      }
    ],
    "privileges": {
      "method": "reach-v0.1",
      "declared": {
        "axes": {
          "fs": 1,
          "net": 1,
          "exec": 2,
          "cred": 1,
          "persist": 2,
          "hitl": 2
        },
        "evidence": {
          "fs": "apps/worker/prompts/shared/_target.txt#L4 author declares the target repo is mounted read-only",
          "net": "apps/worker/prompts/shared/_exploit-scope.txt#L2 author constrains exploitation to the single declared target URL",
          "exec": "README.md#L77 author states the agent runs command-line tools and browser automation to execute real exploits",
          "cred": "README.md#L134 author states the user supplies one provider key and Keygraph never proxies traffic",
          "persist": "docs/development.md#L95 author declares a persistent local Temporal service that stays up across scans",
          "hitl": "README.md#L171 author declares end-to-end autonomous execution from a single command"
        }
      },
      "static": {
        "level": 3,
        "axes": {
          "fs": 2,
          "net": 2,
          "exec": 2,
          "cred": 1,
          "persist": 2,
          "hitl": 3
        },
        "evidence": {
          "fs": "apps/worker/src/ai/pi/permission-system.ts#L90 the agent permission posture allows reads and writes outside the read-only repo",
          "net": "apps/cli/src/docker.ts#L503 an arbitrary user-supplied target URL is passed to the worker, which makes outbound requests to it",
          "exec": "apps/worker/src/ai/pi/pi-executor.ts#L60 every agent gets a free bash tool plus write and edit",
          "cred": "apps/cli/src/env.ts#L103 forwards only the selected provider's named credential variables into the container, not the whole environment",
          "persist": "apps/cli/src/docker.ts#L230 the CLI rewrites the Temporal namespace retention and runs a persistent container with a named volume",
          "hitl": "apps/cli/src/docker.ts#L497 the worker container runs with seccomp unconfined and the agent runs with an allow-all permission posture and no per-step approval"
        },
        "unknown": []
      },
      "min_config": {
        "status": "derived",
        "note": "derived from the code, not tested in the lab; run only against systems you are authorised to test, inside the ephemeral Docker worker, and never point it at an untrusted codebase; for maximum isolation run it inside a disposable VM, as its own safety guide advises"
      },
      "override": null,
      "reviews": []
    },
    "status": {
      "tier": "listed",
      "last_checked": "2026-10-19",
      "next_check": "2027-01-17",
      "freshness": "fresh",
      "superseded": false,
      "superseded_by": null,
      "added": "2026-10-19",
      "added_by": "scout"
    },
    "evidence": {
      "runs": [],
      "badge": "/badge/keygraph-shannon.svg"
    },
    "changes": []
  },
  "profile": {
    "schema_version": "0.1",
    "entry": "keygraph-shannon",
    "draft": "review",
    "commit": "f6a770d1199934e1e0b8af25e47f4faed96f3723",
    "read_on": "2026-10-25",
    "check": {
      "date": "2026-10-25",
      "facts": 61,
      "confirmed": 61,
      "verified": 48
    },
    "overview": {
      "text": "Shannon is an autonomous AI pentester for web applications and APIs.",
      "ev": "README.md#L14 author's one-line description"
    },
    "purpose": [
      {
        "text": "It tests web applications and their APIs by combining source-code analysis with live exploitation against the running application.",
        "ev": "README.md#L75 author's statement of what it does"
      },
      {
        "text": "It is meant to run exploitation-backed tests against staging environments and releases as part of the development lifecycle.",
        "ev": "README.md#L109 stated intended use"
      }
    ],
    "use_cases": [
      {
        "text": "Test a running web app and its API for injection, XSS, SSRF, broken authentication and broken authorization.",
        "task": "web-api-testing",
        "ev": "README.md#L174 coverage classes"
      },
      {
        "text": "Run Shannon through the GitHub Action or GitLab CI/CD component and gate releases on proven vulnerabilities.",
        "task": "finding-validation",
        "ev": "README.md#L176 CI/CD integration"
      },
      {
        "text": "Run agentic static analysis that reads the repository for vulnerabilities before the pentest.",
        "task": "code-review-sast",
        "ev": "docs/configuration.md#L123 agentic SAST description"
      }
    ],
    "not_for": [
      {
        "text": "Only for applications and environments the user owns or has explicit written authorization to test.",
        "ev": "README.md#L142 author warning"
      },
      {
        "text": "Not to be run against production systems.",
        "ev": "docs/safety.md#L15 author statement"
      },
      {
        "text": "Not for untrusted or adversarial codebases, because source-reading AI tools can be steered by malicious repository content.",
        "ev": "docs/safety.md#L32 prompt-injection warning"
      }
    ],
    "autonomy": {
      "text": "It runs reconnaissance, analysis, exploitation and reporting from a single command.",
      "ev": "README.md#L171 autonomous execution"
    },
    "capabilities": {
      "coverage": "partial",
      "missing": "Reconciliation and miscellaneous-exploit details, Capella stage internals, login/TOTP helper scripts and CLI lifecycle commands were not listed as separate groups.",
      "groups": [
        {
          "name": "Pre-Recon / Recon",
          "does": "Pre-recon analyzes source code to build an architectural baseline; recon maps the attack surface from those initial findings.",
          "effects": [
            "reads",
            "runs-commands"
          ],
          "enabled": "default",
          "ev": "CLAUDE.md#L151-152 first two pipeline phases"
        },
        {
          "name": "Vulnerability Analysis",
          "does": "Five parallel vulnerability analysis agents cover injection, xss, auth, authz and ssrf.",
          "effects": [
            "reads",
            "runs-commands"
          ],
          "enabled": "default",
          "ev": "CLAUDE.md#L153 vulnerability analysis phase"
        },
        {
          "name": "Exploitation",
          "does": "Exploitation agents actively execute attacks to confirm vulnerabilities, which can mutate application state and data.",
          "effects": [
            "changes",
            "runs-commands"
          ],
          "enabled": "default",
          "ev": "docs/safety.md#L13 exploitation effects"
        },
        {
          "name": "Agentic SAST (Capella)",
          "does": "Optional agentic static analysis runs as a child workflow before the pentest when agentic_sast.enabled is \"true\".",
          "effects": [
            "reads"
          ],
          "enabled": "optional",
          "ev": "CLAUDE.md#L159 optional SAST child workflow"
        },
        {
          "name": "Reporting",
          "does": "Reporting produces PDF and Markdown reports plus JSON and SARIF 2.1.0.",
          "effects": [
            "reads",
            "changes"
          ],
          "enabled": "default",
          "ev": "README.md#L177 report formats"
        },
        {
          "name": "Agent tools (pi harness)",
          "does": "Every agent gets the built-in tools read, bash, edit, write, grep, find and ls.",
          "effects": [
            "reads",
            "changes",
            "runs-commands"
          ],
          "enabled": "default",
          "ev": "apps/worker/src/ai/pi/pi-executor.ts#L60 agent tool list"
        },
        {
          "name": "playwright-cli",
          "does": "A playwright-cli skill lets agents drive a real browser through the playwright-cli binary to navigate and click.",
          "effects": [
            "reads",
            "runs-commands"
          ],
          "enabled": "default",
          "ev": "apps/worker/src/ai/pi/pi-executor.ts#L70 playwright skill description"
        }
      ]
    },
    "architecture": {
      "summary": {
        "text": "Temporal infrastructure runs via docker-compose.yml, and each scan runs in its own ephemeral docker run --rm worker container with a unique task queue and isolated volume mounts.",
        "ev": "CLAUDE.md#L124 Docker architecture"
      },
      "runs": {
        "where": "container",
        "text": "Runs in an ephemeral Docker worker container started by the CLI.",
        "ev": "README.md#L278 container execution"
      },
      "modes": [
        {
          "where": "container",
          "mode": "source build (local)",
          "switch": "SHANNON_LOCAL=1",
          "text": "Local (source-build) mode activates when the ./shannon entry point sets SHANNON_LOCAL=1; otherwise the CLI runs in npx mode.",
          "ev": "CLAUDE.md#L22 mode auto-detection"
        },
        {
          "where": "container",
          "mode": "analysis-only",
          "switch": "exploit: \"false\"",
          "text": "Setting exploit: \"false\" in the YAML configuration skips the exploitation phase.",
          "ev": "docs/configuration.md#L51-52 documented switch to skip exploitation"
        }
      ],
      "parts": [
        {
          "name": "shannon CLI",
          "zone": "machine",
          "does": "The CLI's Docker orchestration handles the compose lifecycle, network, image pull or build, and worker spawning.",
          "ev": "apps/cli/src/docker.ts#L2 CLI orchestration role"
        },
        {
          "name": "Temporal (shannon-temporal)",
          "zone": "container",
          "does": "Temporal server container started from the temporalio/temporal:1.7.0 image.",
          "ev": "docker-compose.yml#L7 Temporal image"
        },
        {
          "name": "Worker container",
          "zone": "container",
          "does": "Per-scan worker container that runs apps/worker/dist/temporal/worker.js with the target URL and the repository path inside the container.",
          "ev": "apps/cli/src/docker.ts#L503 worker command"
        },
        {
          "name": "Model provider",
          "zone": "outside",
          "does": "The model provider or endpoint the user configures; model requests go straight to it and carry source and application context.",
          "ev": "README.md#L366 model traffic destination"
        },
        {
          "name": "Target application",
          "zone": "outside",
          "does": "The running target application, against which exploitation agents attempt proof-of-concept attacks.",
          "ev": "README.md#L272 exploitation against running app"
        }
      ],
      "listens": [
        {
          "what": "Temporal gRPC on 127.0.0.1:7233.",
          "mode": "default",
          "bind": "loopback",
          "sign_in": "unknown",
          "ev": "docker-compose.yml#L11 published gRPC port"
        },
        {
          "what": "Temporal Web UI on 127.0.0.1:8233.",
          "mode": "default",
          "bind": "loopback",
          "sign_in": "unknown",
          "ev": "docker-compose.yml#L12 published web UI port"
        }
      ],
      "connections": [
        {
          "to": "Model provider",
          "kind": "model-provider",
          "when": "always",
          "what": "Model requests carrying source and application context go to the configured provider or endpoint.",
          "ev": "README.md#L366 model requests content"
        },
        {
          "to": "Target URL",
          "kind": "target",
          "when": "always",
          "what": "Attacks and browser sessions go to the target URL given with -u.",
          "ev": "apps/cli/src/help.ts#L29 target URL flag"
        },
        {
          "to": "Docker Hub",
          "kind": "download",
          "when": "default",
          "what": "With the documented npx launch, Shannon pulls the worker image from Docker Hub and starts local infrastructure.",
          "ev": "README.md#L154 image pull"
        },
        {
          "to": "pi model catalogue",
          "kind": "download",
          "when": "always",
          "what": "The worker builds its model runtime with allowModelNetwork: true, letting pi fetch its model catalogue over the network.",
          "ev": "apps/worker/src/ai/models.ts#L243 network catalogue refresh"
        },
        {
          "to": "Anthropic / OpenAI",
          "kind": "model-provider",
          "when": "default",
          "what": "For Anthropic and OpenAI, a preflight cyber-access verification request checks whether the provider's cyber safeguards allow the workload.",
          "ev": "docs/ai-providers.md#L62 cyber-access verification"
        },
        {
          "to": "Anthropic",
          "kind": "model-provider",
          "when": "default",
          "what": "If SHANNON_AI_MODEL is unset, Shannon uses anthropic:claude-sonnet-4-6 as its model.",
          "ev": "docs/ai-providers.md#L20 default model and provider"
        }
      ],
      "model": {
        "who": "own-key",
        "text": "The tool calls the model provider with LLM credentials the user provides, in every deployment (BYOK).",
        "ev": "README.md#L370 BYOK statement"
      }
    },
    "needs": [
      {
        "kind": "container",
        "text": "Docker is required for the worker container.",
        "ev": "README.md#L132 prerequisite"
      },
      {
        "kind": "runtime",
        "text": "Node.js 18+ for the npx workflow.",
        "ev": "README.md#L133 prerequisite"
      },
      {
        "kind": "model-key",
        "text": "A key in SHANNON_AI_API_KEY for the provider SHANNON_AI_MODEL names; Bedrock uses its AWS_ variables instead.",
        "ev": "docs/ai-providers.md#L20 credential variable"
      },
      {
        "kind": "account",
        "text": "When the provider is Anthropic or OpenAI, their real-time cyber safeguards apply and can interrupt a scan; their guidance for security testers is to be completed before the first run.",
        "ev": "README.md#L135 prerequisite"
      },
      {
        "kind": "authorization",
        "text": "Explicit written authorization from the owner of the target system.",
        "ev": "docs/safety.md#L7 authorization requirement"
      },
      {
        "kind": "os",
        "text": "On Windows it needs WSL2; native Windows is not supported.",
        "ev": "docs/platforms.md#L7 platform requirement"
      }
    ],
    "installer": [
      {
        "text": "The documented launch runs the latest npm release through npx, without pinning a version.",
        "ev": "README.md#L23 install command"
      },
      {
        "text": "saveConfig writes the CLI config to ~/.shannon/config.toml with 0o600 permissions.",
        "ev": "apps/cli/src/config/writer.ts#L22 config persistence"
      },
      {
        "text": "The CLI removes local keygraph/shannon Docker images whose tag does not match the current version.",
        "ev": "apps/cli/src/docker.ts#L660-669 pruneOldImages runs docker rmi on other tags"
      },
      {
        "text": "The CLI creates its workspaces directory under ~/.shannon/workspaces in npx mode and under ./workspaces in local mode.",
        "ev": "apps/cli/src/home.ts#L33-38 initHome creates the state directory per mode"
      },
      {
        "text": "In npx mode the setup wizard saves the provider credentials in ~/.shannon/config.toml, which the CLI reads after environment variables.",
        "ev": "docs/configuration.md#L12-15 npx-mode credential sources and the file created by setup"
      }
    ],
    "limits": [
      {
        "text": "The worker container runs with seccomp=unconfined for every process inside it.",
        "ev": "apps/cli/src/docker.ts#L497 container security option"
      },
      {
        "text": "The pi-permission-system config Shannon writes sets '*': 'allow' and external_directory: 'allow' for agent tools.",
        "ev": "apps/worker/src/ai/pi/permission-system.ts#L87-91 allow-all permission config"
      },
      {
        "text": "The host's /etc/hosts entries are forwarded into the worker unless SHANNON_FORWARD_HOSTS is false.",
        "ev": "apps/cli/src/docker.ts#L362 hosts forwarding default"
      },
      {
        "text": "If a pi auth host path is set, it is bind-mounted into the worker at PI_AUTH_CONTAINER_PATH without the :ro flag.",
        "ev": "apps/cli/src/docker.ts#L487 pi auth mount"
      },
      {
        "text": "Reports can contain weakly supported or incorrect details and need human review.",
        "ev": "README.md#L308 author caveat"
      },
      {
        "text": "A full run takes about 1 to 1.5 hours and incurs LLM API costs.",
        "ev": "docs/safety.md#L50 cost and time"
      },
      {
        "text": "Issues it cannot exploit, such as many dependency, configuration or policy findings, are not reported.",
        "ev": "docs/safety.md#L44 scope limit"
      },
      {
        "text": "Exploitation agents can create users, submit forms, mutate application state, trigger outbound requests and otherwise affect the target system.",
        "ev": "README.md#L301 author's statement of exploitation side effects"
      },
      {
        "text": "The worker writes a Playwright cli.config.json with stealth defaults that playwright-cli open loads for browser sessions; an existing config is not overwritten.",
        "ev": "apps/worker/src/ai/playwright-config-writer.ts#L7-10 stealth browser config"
      },
      {
        "text": "The worker mounts the target repository into the container read-only.",
        "ev": "apps/cli/src/docker.ts#L453-455 repository volume mount carries the :ro flag"
      },
      {
        "text": "The host workspaces directory is mounted into the worker at /app/workspaces without the :ro flag, so the worker can write to it.",
        "ev": "apps/cli/src/docker.ts#L453-454 workspaces volume mount without read-only flag"
      },
      {
        "text": "Four writable mounts backed by the run's workspace folder shadow .shannon/deliverables, .shannon/scratchpad, .shannon/.playwright-cli and .playwright inside the read-only repository mount.",
        "ev": "apps/cli/src/docker.ts#L457-463 writable overlay mounts inside the repository path"
      },
      {
        "text": "On Linux without Podman, the worker starts with --add-host host.docker.internal:host-gateway, so that name resolves to the host.",
        "ev": "apps/cli/src/docker.ts#L309-314 addHostFlag adds host-gateway mapping on Linux when podman is absent"
      },
      {
        "text": "Loopback entries (127.x, ::1) forwarded from the host's /etc/hosts are rewritten to host-gateway, so those names point to the host instead of the container.",
        "ev": "apps/cli/src/docker.ts#L386-389 loopback IPs from /etc/hosts mapped to host-gateway"
      },
      {
        "text": "The author's safety guide recommends running Shannon inside a disposable virtual machine for maximum isolation.",
        "ev": "docs/safety.md#L26 author's isolation recommendation"
      }
    ],
    "not_found": [
      {
        "field": "maturity",
        "searched": "README.md, docs/*.md, package.json for preview/beta/stable/experimental wording"
      },
      {
        "field": "capability_count",
        "searched": "README.md, CLAUDE.md for an author-stated tool or agent count"
      }
    ]
  },
  "verdict": null,
  "runs": []
}
