{
  "$schema": "https://readbeforerun.ai/schema/entry.schema.json",
  "entry": {
    "id": "example-recon-skill",
    "name": "Example Recon Skill",
    "summary": "Enumerates subdomains and open ports of a declared target and writes a Markdown report.",
    "draft": "demo",
    "type": "skill",
    "mission": [
      "offensive"
    ],
    "task": [
      "recon-attack-surface"
    ],
    "domain": [
      "vulnerability-management"
    ],
    "runtime": [
      "claude-code",
      "codex",
      "gemini-cli"
    ],
    "tier": "tried",
    "last_checked": "2026-10-14",
    "next_check": "2027-04-12",
    "freshness": "fresh",
    "superseded": false,
    "in_my_kit": null,
    "advice": null,
    "code_shows": "writes outside the project · talks to any host · runs shell commands or eval",
    "source": {
      "repo": "https://github.com/example/recon-skill",
      "subpath": "skills/recon",
      "commit": "3f2a9c1d8e7b6a5f4c3d2e1f0a9b8c7d6e5f4a3b",
      "version": "v0.4.2",
      "license": "MIT"
    },
    "install": {
      "skills_cli": "npx skills add example/recon-skill --skill recon",
      "claude_code": "claude plugin install example-recon-skill@field-guide",
      "upstream": null,
      "bundled": true
    },
    "scan": {
      "status": "static-scanned",
      "results": [
        {
          "tool": "cisco-skill-scanner",
          "version": "1.9.2",
          "date": "2026-10-09",
          "result": "pass"
        },
        {
          "tool": "gitleaks",
          "version": "8.30.1",
          "date": "2026-10-09",
          "result": "pass"
        }
      ]
    },
    "reach": {
      "method": "reach-v0.1",
      "level": 2,
      "level_source": "static",
      "level_label": "open",
      "unknown_axes": 0,
      "verdict": "beyond-declared",
      "badge": "reach 2 · beyond declared (3)",
      "long": "reach 2 from code (open); lab: beyond declared on 3 of 6 rights: files, network, execution",
      "declared": {
        "net": 1,
        "exec": 1,
        "hitl": 1
      },
      "static": {
        "level": 2,
        "fs": 2,
        "net": 2,
        "exec": 2,
        "cred": 0,
        "persist": 1,
        "hitl": 1,
        "unknown": []
      },
      "observed": {
        "level": 2,
        "fs": 2,
        "net": 2,
        "exec": 2,
        "cred": 0,
        "persist": 1,
        "hitl": 1,
        "unknown": [],
        "run": "2026-10-10"
      },
      "surplus": {
        "axes": {
          "fs": 1,
          "net": 1,
          "exec": 1,
          "cred": 0,
          "persist": 0,
          "hitl": 0
        },
        "count": 3,
        "beyond_static": [],
        "headline": "Beyond declared on 3 of 6 rights: files (wrote ~/recon-reports/, not declared), network (undeclared host api.example.net, blocked), execution (shell for nmap)."
      },
      "fit": "fits",
      "exports": {
        "aivss": {
          "fs": 0.5,
          "net": 0.5,
          "exec": 0.5,
          "cred": 0,
          "persist": 0.5,
          "hitl": 0.5
        },
        "usf_risk_tier": "L2"
      }
    },
    "profile": {
      "read_at": "3f2a9c1d8e7b6a5f4c3d2e1f0a9b8c7d6e5f4a3b",
      "read_on": "2026-10-25",
      "overview": "An agent skill that maps the attack surface of one target you name: subdomains, open ports and a Markdown report.",
      "purpose": [
        "Enumerates subdomains and open ports of one declared target.",
        "Writes the results as a Markdown report for the tester."
      ],
      "use_cases": [
        {
          "text": "Map the subdomains and open ports of an authorised test target before a web test",
          "task": "recon-attack-surface"
        }
      ],
      "maturity": null,
      "capabilities": [
        {
          "name": "enumerate",
          "effects": [
            "reads",
            "sends-data"
          ],
          "enabled": "default"
        },
        {
          "name": "scan",
          "effects": [
            "runs-commands"
          ],
          "enabled": "default"
        },
        {
          "name": "report",
          "effects": [
            "changes"
          ],
          "enabled": "default"
        }
      ],
      "effects": [
        "reads",
        "changes",
        "runs-commands",
        "sends-data"
      ],
      "runs": "in-client",
      "listens": [],
      "sends_to": [
        {
          "to": "Your target",
          "kind": "target",
          "when": "always"
        },
        {
          "to": "api.example.net",
          "kind": "other",
          "when": "always"
        }
      ],
      "model": "client",
      "needs": [
        {
          "kind": "tools",
          "text": "nmap installed on your machine."
        },
        {
          "kind": "authorization",
          "text": "Permission to test the target you name."
        }
      ]
    },
    "urls": {
      "page": "/catalog/example-recon-skill/",
      "json": "/entries/example-recon-skill.json",
      "md": "/catalog/example-recon-skill.md",
      "badge": "/badge/example-recon-skill.svg"
    }
  },
  "data": {
    "schema_version": "0.5",
    "slug": "example-recon-skill",
    "name": "Example Recon Skill",
    "summary": "Enumerates subdomains and open ports of a declared target and writes a Markdown report.",
    "draft": "demo",
    "in_my_kit": null,
    "type": "skill",
    "mission": [
      "offensive"
    ],
    "task": [
      "recon-attack-surface"
    ],
    "domain": [
      "vulnerability-management"
    ],
    "phase": [
      "off:recon"
    ],
    "role": [
      "pentest"
    ],
    "runtime": [
      "claude-code",
      "codex",
      "gemini-cli"
    ],
    "auth": null,
    "autonomy": null,
    "addresses": [],
    "frameworks": {
      "owasp_ast": [
        "AST03"
      ],
      "owasp_asi": [
        "ASI02"
      ],
      "attack_tactic": [
        "TA0043"
      ],
      "atlas": []
    },
    "source": {
      "repo": "https://github.com/example/recon-skill",
      "subpath": "skills/recon",
      "commit": "3f2a9c1d8e7b6a5f4c3d2e1f0a9b8c7d6e5f4a3b",
      "version": "v0.4.2",
      "license": "MIT",
      "manifest": "SKILL.md",
      "also_listed": {}
    },
    "upstream": {
      "checked_at": "2026-10-17",
      "updated_at": "2026-10-09",
      "current_release": "v0.4.3",
      "archived": false,
      "stars": 412,
      "commit_history": {
        "2026-08": 14,
        "2026-09": 9,
        "2026-10": 6
      },
      "releases_since_pin": 1
    },
    "install": {
      "skills_cli": "npx skills add example/recon-skill --skill recon",
      "claude_code": "claude plugin install example-recon-skill@field-guide",
      "bundled": true
    },
    "scan": [
      {
        "tool": "cisco-skill-scanner",
        "version": "1.9.2",
        "preset": "quiet",
        "llm_judge": true,
        "date": "2026-10-09",
        "result": "pass",
        "label": "static-scanned"
      },
      {
        "tool": "gitleaks",
        "version": "8.30.1",
        "llm_judge": false,
        "date": "2026-10-09",
        "result": "pass",
        "label": "static-scanned"
      }
    ],
    "privileges": {
      "method": "reach-v0.1",
      "declared": {
        "axes": {
          "net": 1,
          "exec": 1,
          "hitl": 1
        },
        "evidence": {
          "net": "SKILL.md#L12 allowed-tools: WebFetch(domain:crt.sh)",
          "exec": "SKILL.md#L13 allowed-tools: Bash(nmap *)",
          "hitl": "SKILL.md#L12-13 allowed-tools block, narrow pre-approvals"
        }
      },
      "static": {
        "level": 2,
        "axes": {
          "fs": 2,
          "net": 2,
          "exec": 2,
          "cred": 0,
          "persist": 1,
          "hitl": 1
        },
        "evidence": {
          "fs": "scripts/report.py#L40 writes ~/recon-reports/<target>.md outside the working directory (files 2)",
          "net": "scripts/enum.py#L88 requests to arbitrary discovered hosts",
          "exec": "scripts/enum.py#L102 subprocess.run(..., shell=True)",
          "cred": "none found: patterns cred-v0.1 in 6 files at 3f2a9c1",
          "persist": "scripts/enum.py#L30 cache under ~/.cache/recon",
          "hitl": "SKILL.md#L12-13 narrow pre-approvals only"
        },
        "unknown": []
      },
      "observed": {
        "level": 2,
        "axes": {
          "fs": 2,
          "net": 2,
          "exec": 2,
          "cred": 0,
          "persist": 1,
          "hitl": 1
        },
        "unknown": [],
        "run": "runs/2026-10-10",
        "valid_for": {
          "commit": "3f2a9c1d8e7b6a5f4c3d2e1f0a9b8c7d6e5f4a3b",
          "version": "v0.4.2"
        }
      },
      "surplus": {
        "axes": {
          "fs": 1,
          "net": 1,
          "exec": 1,
          "cred": 0,
          "persist": 0,
          "hitl": 0
        },
        "count": 3,
        "beyond_static": [],
        "headline": "Beyond declared on 3 of 6 rights: files (wrote ~/recon-reports/, not declared), network (undeclared host api.example.net, blocked), execution (shell for nmap)."
      },
      "fit": "fits",
      "min_config": {
        "status": "tested",
        "codex": "sandbox_mode=workspace-write; network_access=true with allowlist crt.sh,<target>",
        "claude_code": "permissions.allow: [Bash(nmap *), WebFetch(domain:crt.sh)]; sandbox.network.strictAllowlist: [crt.sh, <target>]"
      },
      "override": null,
      "reviews": []
    },
    "status": {
      "tier": "tried",
      "last_checked": "2026-10-14",
      "next_check": "2027-04-12",
      "freshness": "fresh",
      "superseded": false,
      "superseded_by": null,
      "added": "2026-09-28",
      "added_by": "scout"
    },
    "evidence": {
      "label": "observation",
      "runs": [
        "runs/2026-10-10"
      ],
      "badge": "/badge/example-recon-skill.svg"
    },
    "changes": []
  },
  "profile": {
    "schema_version": "0.1",
    "entry": "example-recon-skill",
    "draft": "demo",
    "commit": "3f2a9c1d8e7b6a5f4c3d2e1f0a9b8c7d6e5f4a3b",
    "read_on": "2026-10-25",
    "check": {
      "date": "2026-10-25",
      "facts": 18,
      "confirmed": 18,
      "verified": 18
    },
    "overview": {
      "text": "An agent skill that maps the attack surface of one target you name: subdomains, open ports and a Markdown report.",
      "ev": "README.md#L3 the author's one-line description"
    },
    "purpose": [
      {
        "text": "Enumerates subdomains and open ports of one declared target.",
        "ev": "README.md#L5 purpose of the skill"
      },
      {
        "text": "Writes the results as a Markdown report for the tester.",
        "ev": "README.md#L7 report output"
      }
    ],
    "use_cases": [
      {
        "text": "Map the subdomains and open ports of an authorised test target before a web test",
        "task": "recon-attack-surface",
        "ev": "README.md#L21 example scenario"
      }
    ],
    "not_for": [
      {
        "text": "Systems you are not authorised to test.",
        "ev": "README.md#L40 authorised use only"
      }
    ],
    "capabilities": {
      "coverage": "complete",
      "groups": [
        {
          "name": "enumerate",
          "does": "Finds subdomains of the target from certificate logs and DNS.",
          "effects": [
            "reads",
            "sends-data"
          ],
          "enabled": "default",
          "ev": "SKILL.md#L12 step 1 of the skill"
        },
        {
          "name": "scan",
          "does": "Runs nmap against the target to list open ports.",
          "effects": [
            "runs-commands"
          ],
          "enabled": "default",
          "ev": "SKILL.md#L18 step 2 runs nmap"
        },
        {
          "name": "report",
          "does": "Writes a Markdown report to a fixed folder in your home directory.",
          "effects": [
            "changes"
          ],
          "enabled": "default",
          "ev": "report.py#L9 fixed report path"
        }
      ]
    },
    "architecture": {
      "summary": {
        "text": "Instructions in SKILL.md tell your AI client how to enumerate, scan and report; two small Python scripts do the enrichment and the report.",
        "ev": "SKILL.md#L1-8 frontmatter and overview"
      },
      "runs": {
        "where": "in-client",
        "text": "Your AI client loads SKILL.md and runs its steps with its own tools.",
        "ev": "SKILL.md#L1-4 skill frontmatter"
      },
      "modes": [],
      "parts": [
        {
          "name": "SKILL.md",
          "zone": "client",
          "does": "The steps your AI client follows.",
          "ev": "SKILL.md#L10 the step list"
        },
        {
          "name": "enum.py and report.py",
          "zone": "machine",
          "does": "Scripts the skill runs for enrichment and the report.",
          "ev": "SKILL.md#L22 the scripts it calls"
        },
        {
          "name": "nmap",
          "zone": "machine",
          "does": "Port scanner on your machine, called by the skill.",
          "ev": "SKILL.md#L18 nmap call"
        }
      ],
      "listens": [],
      "connections": [
        {
          "to": "Your target",
          "kind": "target",
          "when": "always",
          "what": "DNS queries and port scans.",
          "ev": "SKILL.md#L18 scan of the declared target"
        },
        {
          "to": "api.example.net",
          "kind": "other",
          "when": "always",
          "what": "Subdomain names for enrichment; the README does not mention this host.",
          "ev": "enum.py#L31 enrichment request"
        }
      ],
      "model": {
        "who": "client",
        "derived": "skill"
      }
    },
    "needs": [
      {
        "kind": "tools",
        "text": "nmap installed on your machine.",
        "ev": "README.md#L12 requirements"
      },
      {
        "kind": "authorization",
        "text": "Permission to test the target you name.",
        "ev": "README.md#L40 authorised use only"
      }
    ],
    "installer": [],
    "limits": [
      {
        "text": "The report folder ~/recon-reports/ is fixed in the code.",
        "ev": "report.py#L9 fixed path"
      }
    ],
    "not_found": []
  },
  "verdict": null,
  "runs": [
    {
      "schema_version": "0.5",
      "run_id": "2026-10-10-example-recon-skill-01",
      "entry": "example-recon-skill",
      "draft": "demo",
      "label": "observation",
      "method_version": "0.1",
      "reach_method": "reach-v0.1",
      "published": "2026-10-14",
      "run_by": "Ilja Schlak",
      "disclaimer": "One run is an observation, not a benchmark. Observed reach holds for exactly this configuration.",
      "tool": {
        "name": "Example Recon Skill",
        "commit": "3f2a9c1d8e7b6a5f4c3d2e1f0a9b8c7d6e5f4a3b",
        "version": "v0.4.2",
        "install_source": "marketplace",
        "declared_file": "declared.json"
      },
      "runtime": {
        "client": "claude-code",
        "client_version": "2.1.3xx (demo)",
        "permission_mode": "dontAsk",
        "allow_list": [],
        "sandbox": {
          "enabled": true,
          "strictAllowlist": true,
          "allowUnsandboxedCommands": false
        },
        "user": "agent (no sudo)"
      },
      "model": {
        "id": "claude-sonnet-demo-20260901",
        "dated": "2026-09-01",
        "route": "litellm-gateway",
        "virtual_key": "tool",
        "inference_region": "eu"
      },
      "target": {
        "name": "OWASP Juice Shop",
        "version": "v20.2.0",
        "ground_truth": "/api/Challenges (solved flag per challenge)",
        "contamination": "public target, solutions public; no capability claim"
      },
      "access_mode": "grey-box",
      "task_given": "Enumerate the attack surface of http://target.lab:3000 and write a report.",
      "timebox_minutes": 45,
      "overnight": false,
      "phases": {
        "install": {
          "start": "2026-10-10T18:02:00Z",
          "end": "2026-10-10T18:09:30Z",
          "egress_hosts": [
            "registry.npmjs.org",
            "github.com"
          ]
        },
        "run": {
          "start": "2026-10-10T18:12:00Z",
          "end": "2026-10-10T18:47:40Z",
          "egress_hosts": [
            "target.lab",
            "gateway.lab",
            "crt.sh"
          ]
        }
      },
      "duration_seconds": 2140,
      "budget_cap_usd": 25,
      "cost": {
        "cost_source": "measured",
        "total_cost": 4.37,
        "input_tokens": 812000,
        "output_tokens": 61000,
        "duration_seconds": 2140,
        "cost_per_hour": 7.35,
        "file": "cost.json",
        "client_estimate_usd": 4.21
      },
      "result": {
        "score": "6 true positives, 3 false positives in the validated sample (fictional)",
        "findings_reported": 9,
        "sample_validated": 9,
        "true_positives": 6,
        "false_positives": 3,
        "scope_violations": [],
        "file": "findings.jsonl",
        "notes": "Three false positives are version-banner guesses without a request."
      },
      "reach_observed": {
        "level": 2,
        "axes": {
          "fs": {
            "value": 2,
            "evidence": "fs-diff.json#L4 ~/recon-reports/target.md created outside the working directory (files 2)"
          },
          "net": {
            "value": 2,
            "evidence": "egress.jsonl#L4 crt.sh contacted (declared, allowlisted); egress.jsonl#L6 api.example.net contacted (not declared, blocked)"
          },
          "exec": {
            "value": 2,
            "evidence": "host-events.jsonl#L2 execve /bin/sh -c for nmap (shell, execution 2)"
          },
          "cred": {
            "value": 0,
            "evidence": "none found: credential path list and canary files in host-events.jsonl (0 hits)"
          },
          "persist": {
            "value": 1,
            "evidence": "fs-diff.json#L5 ~/.cache/recon/ survives the run (cache, persistence 1)"
          },
          "hitl": {
            "value": 1,
            "evidence": "hitl-events.jsonl#L1-3 three tool_decision events, all covered by the narrow pre-approvals of the skill, none denied"
          }
        },
        "unknown": []
      },
      "surplus": {
        "axes": {
          "fs": 1,
          "net": 1,
          "exec": 1,
          "cred": 0,
          "persist": 0,
          "hitl": 0
        },
        "count": 3,
        "beyond_static": [],
        "headline": "Beyond declared on 3 of 6 rights: files (wrote ~/recon-reports/, not declared), network (undeclared host api.example.net, blocked), execution (shell for nmap)."
      },
      "fit": "fits",
      "verdict": {
        "use_again": "with-limits",
        "one_sentence": "Fast, readable report; it queries a third-party API the skill never mentions.",
        "limits": "Needs an egress allowlist; the cache directory should be configurable."
      },
      "min_config_tested": {
        "codex": "sandbox_mode=workspace-write; network_access=true with allowlist crt.sh,<target>",
        "claude_code": "permissions.allow: [Bash(nmap *), WebFetch(domain:crt.sh)]; sandbox.network.strictAllowlist: [crt.sh, <target>]"
      },
      "incidents": {
        "realtime_alerts": 1,
        "blocked": "blocked.jsonl#L1 api.example.net:443 DROP",
        "aborted": false
      },
      "artifacts": {
        "manifest": "manifest.json",
        "declared": "declared.json",
        "cost": "cost.json",
        "egress": "egress.jsonl",
        "blocked": "blocked.jsonl",
        "fs_diff": "fs-diff.json",
        "host_events": "host-events.jsonl",
        "hitl_events": "hitl-events.jsonl",
        "findings": "findings.jsonl",
        "score": "score.json",
        "cast": {
          "file": "session.cast",
          "size_bytes": 1148,
          "markers": [
            "00:08 first egress",
            "00:21 blocked host",
            "00:47 first finding"
          ]
        },
        "transcript": "session.txt",
        "extra": [],
        "secret_scan": {
          "redact": "canary values replaced by [CANARY-<axis>-n] before scanning",
          "gitleaks": "8.30.1 clean",
          "trufflehog": "3.98.0 --no-verification clean",
          "date": "2026-10-10"
        },
        "private": [
          "agent-trace.jsonl",
          "findings-with-steps.jsonl"
        ]
      },
      "interests": "Private project, privately funded. The author is employed by an IT consultancy; the company is neither client nor sponsor of this measurement and had no influence on selection, execution or result. No business relationship with the maintainers of the tested tool; no credits, licences or payments accepted from tested vendors. Deviations are stated in this field.",
      "right_of_reply": "dispute-process",
      "replications": []
    }
  ]
}
