{
  "schemaVersion": 1,
  "skillId": "anthropic-skill-creator",
  "reviewedOn": "2026-10-18",
  "status": "bounded-helper-evaluation",
  "mode": "actual-viewer-helper-plus-browser-marker-and-mocked-effects",
  "revision": "34040c9c568585f6929bedeaad110ad08f079624",
  "total": 7,
  "passed": 5,
  "failed": 2,
  "countMeaning": "Counts are individual expectations, not vulnerability counts or skill-effectiveness scores. Mocked effects are explicitly labeled.",
  "environment": {
    "python": "3.12.10",
    "os": "Windows-11-10.0.26200-SP0",
    "gitBash": "5.3.15(1)-release (x86_64-pc-cygwin)",
    "docker": "not available",
    "wsl": "not installed",
    "packages": {
      "pypdf": "6.19.0",
      "reportlab": "4.4.9",
      "Pillow": "12.3.0",
      "pdf2image": "1.17.0",
      "defusedxml": "0.7.1"
    },
    "node": "24.18.0",
    "chrome": "155.0.8059.82",
    "poppler": "26.07.0"
  },
  "commands": [
    "python run_evals.py --runtime-libs <existing-bundled-site-packages> --poppler-bin <poppler-binaries>",
    "node viewer_probe.mjs"
  ],
  "controls": [
    "Fresh minimal child environment; account/credential variables excluded",
    "Synthetic fixtures only; Python writes guarded to fixtures",
    "Python sockets disabled; browser probe separately blocks all network",
    "30 second suite deadline; 10 second mocked Bash deadline",
    "Known source hashes verified; upstream code not modified"
  ],
  "isolationLimits": [
    "Supervised local processes, not an OS sandbox",
    "No container, VM or memory/resource quota",
    "Application guards do not establish containment of arbitrary hostile code",
    "No real credential, remote account, or destructive-effect testing"
  ],
  "findings": [
    {
      "severity": "high",
      "kind": "confirmed-in-pinned-revision",
      "title": "Evaluation text can escape the viewer script context",
      "detail": "At revision 34040c9c568585f6929bedeaad110ad08f079624, generate_html embeds json.dumps output directly in an inline script. Synthetic prompt text with a closing script tag executed a harmless in-memory marker in fresh offline Chrome. The benign control did not execute the marker. This is confirmed only for the pinned files and fixture; current upstream HEAD was not tested. Two failed expectations describe this one issue.",
      "sourceUrl": "https://github.com/anthropics/skills/blob/34040c9c568585f6929bedeaad110ad08f079624/skills/skill-creator/eval-viewer/generate_review.py#L279",
      "testIds": [
        "viewer-script-boundary",
        "viewer-browser-script-probe"
      ],
      "mitigation": "Treat evaluation text as untrusted; use a script-safe JSON serialization or non-executable data container with correct escaping before viewing untrusted outputs."
    }
  ],
  "limitations": [
    "No Claude subprocess, live model, API credential, optimization loop or generated-skill effectiveness evaluation",
    "Port-cleanup lsof/os.kill effects were mocked; no real process was terminated",
    "The browser payload only set a marker; no sensitive data or exfiltration was involved",
    "All browser requests were blocked, including attempted Google Fonts and SheetJS requests",
    "The viewer may need those external resources for fonts or XLSX rendering; their downloaded code was not evaluated"
  ],
  "cases": [
    {
      "id": "viewer-discovery",
      "mode": "actual-helper",
      "expectation": "Discover one run and exclude metadata output",
      "outcome": "pass",
      "observed": {
        "runCount": 1,
        "outputCount": 1
      },
      "skillId": "anthropic-skill-creator",
      "passed": true,
      "failed": false
    },
    {
      "id": "viewer-static",
      "mode": "actual-helper",
      "expectation": "Generate static HTML containing the synthetic result",
      "outcome": "pass",
      "observed": {
        "htmlBytes": 45339,
        "externalScriptReference": true
      },
      "skillId": "anthropic-skill-creator",
      "passed": true,
      "failed": false
    },
    {
      "id": "viewer-script-boundary",
      "mode": "actual-helper",
      "expectation": "Escape closing-script text inside embedded JSON",
      "outcome": "finding",
      "observed": {
        "rawScriptBreakoutPresent": true
      },
      "consequence": "Untrusted prompt/output text can escape the JSON script context; browser marker confirmation is separate.",
      "skillId": "anthropic-skill-creator",
      "passed": false,
      "failed": true
    },
    {
      "id": "viewer-port-dispatch",
      "mode": "mocked-effects",
      "expectation": "Record exact cleanup intent without terminating any process",
      "outcome": "pass",
      "observed": {
        "mockPids": [
          [
            12345,
            15
          ],
          [
            67890,
            15
          ]
        ],
        "lsofArguments": [
          "lsof",
          "-ti",
          ":3117"
        ],
        "realProcessTermination": false
      },
      "skillId": "anthropic-skill-creator",
      "passed": true,
      "failed": false
    },
    {
      "id": "viewer-no-lsof",
      "mode": "mocked-effects",
      "expectation": "Handle unavailable lsof without process effects",
      "outcome": "pass",
      "observed": {
        "diagnostic": "Note: lsof not found, cannot check if port is in use"
      },
      "skillId": "anthropic-skill-creator",
      "passed": true,
      "failed": false
    },
    {
      "id": "viewer-browser-benign",
      "mode": "actual-generated-HTML-in-fresh-browser",
      "expectation": "Render synthetic evaluation data without executing it",
      "outcome": "pass",
      "observed": {
        "marker": false,
        "outputVisible": true,
        "blockedRequests": [
          "fonts.googleapis.com",
          "cdn.sheetjs.com"
        ],
        "browserErrors": []
      },
      "networkRequestsAllowed": 0,
      "skillId": "anthropic-skill-creator",
      "passed": true,
      "failed": false
    },
    {
      "id": "viewer-browser-script-probe",
      "mode": "actual-generated-HTML-in-fresh-browser",
      "expectation": "Render synthetic evaluation data without executing it",
      "outcome": "finding",
      "observed": {
        "marker": true,
        "outputVisible": true,
        "blockedRequests": [
          "cdn.sheetjs.com",
          "fonts.googleapis.com"
        ],
        "browserErrors": [
          "SyntaxError",
          "SyntaxError"
        ]
      },
      "networkRequestsAllowed": 0,
      "skillId": "anthropic-skill-creator",
      "passed": false,
      "failed": true
    }
  ],
  "sources": [
    {
      "repository": "https://github.com/anthropics/skills",
      "revision": "34040c9c568585f6929bedeaad110ad08f079624",
      "upstreamPath": "skills/skill-creator/eval-viewer/generate_review.py",
      "url": "https://raw.githubusercontent.com/anthropics/skills/34040c9c568585f6929bedeaad110ad08f079624/skills/skill-creator/eval-viewer/generate_review.py",
      "bytes": 16365,
      "sha256": "fc9d1b9243fe5ab6012ebd579bd76d0035de1b79fd3b969de114defab26478fb",
      "status": "retrieved"
    },
    {
      "repository": "https://github.com/anthropics/skills",
      "revision": "34040c9c568585f6929bedeaad110ad08f079624",
      "upstreamPath": "skills/skill-creator/eval-viewer/viewer.html",
      "url": "https://raw.githubusercontent.com/anthropics/skills/34040c9c568585f6929bedeaad110ad08f079624/skills/skill-creator/eval-viewer/viewer.html",
      "bytes": 44998,
      "sha256": "a53213426ee1100441d701a3a0d49cda7a842f992d2c36463f4d3cc0258575fa",
      "status": "retrieved"
    },
    {
      "repository": "https://github.com/anthropics/skills",
      "revision": "34040c9c568585f6929bedeaad110ad08f079624",
      "upstreamPath": "skills/skill-creator/LICENSE.txt",
      "url": "https://raw.githubusercontent.com/anthropics/skills/34040c9c568585f6929bedeaad110ad08f079624/skills/skill-creator/LICENSE.txt",
      "bytes": 11345,
      "sha256": "bc6b3af2f331cbc7fb0da1344efb2cbe5877a31498b4d70dbc7000f3405a1362",
      "status": "retrieved"
    }
  ],
  "repetitions": 1,
  "results": {
    "passed": 5,
    "failed": 2,
    "total": 7
  },
  "harnessArtifact": "/skill-evaluations/helper-harness.json"
}
