Define, validate, and manage authorized target scope with asset tracking, vuln type exclusions, required headers, and testing constraints for penetration testing engagements
From greyhatccnpx claudepluginhub overtimepog/greyhatcc --plugin greyhatccThis skill uses the workspace's default tool permissions.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
/greyhatcc:scope init <engagement_name> - Create new scope/greyhatcc:scope set <HackerOne_URL> - Auto-extract scope from program page via Playwright/greyhatcc:scope add <domain/IP> - Add authorized target/greyhatcc:scope remove <domain/IP> - Remove target from scope/greyhatcc:scope exclude <domain/IP> - Add domain exclusion/greyhatcc:scope exclude-vuln <vuln_type> - Add vulnerability type exclusion/greyhatcc:scope check <target> - Validate target against scope/greyhatcc:scope check-vuln <vuln_type> - Check if vuln type is excluded/greyhatcc:scope show - Display current scope with all rules/greyhatcc:scope import <scope.md> - Import from program scope.md fileBefore executing this skill:
.greyhatcc/scope.json — verify target is in scope, note exclusions.greyhatcc/hunt-state.json — check active phase, resume contextfindings_log.md, tested.json, gadgets.json — avoid duplicating workIf HackerOne API is configured, use structured scopes for the most accurate scope data:
Use: mcp__plugin_greyhatcc_hackerone__h1_structured_scopes
Arguments: { handle: "<HANDLE>", page_size: 100 }
Each scope asset includes:
asset_identifier — the domain/URL/app nameasset_type — Domain, URL, API, Mobile, etc.eligible_for_bounty — whether it pays bountieseligible_for_submission — whether it accepts reportsmax_severity — maximum severity acceptedinstruction — testing instructions from the programMap these directly into scope.json entries for precise scope validation.
When /greyhatcc:scope set <URL> is used:
/greyhatcc:scope add api.target.com
→ Adds to authorized.domains AND authorized.assets with type detection
/greyhatcc:scope remove staging.target.com
→ Moves from authorized to excluded.domains
→ Warns if any findings exist for this target
Exclusions have two categories:
When checking a finding:
1. Is the asset in authorized? → YES: proceed / NO: STOP
2. Is the asset in excluded? → YES: STOP / NO: proceed
3. Is the vuln type in excluded.vulnTypes? → YES: check for override / NO: proceed
4. Override check: Does the finding prove the exclusion doesn't apply?
→ YES: proceed with explicit justification in report
→ NO: add to gadgets as chain-only, DO NOT report standalone
Some programs restrict testing to specific hours:
"rules": {
"testingHours": "24/7" | "business_hours_only" | "custom",
"testingTimezone": "UTC",
"testingSchedule": {
"start": "09:00",
"end": "17:00",
"days": ["Mon", "Tue", "Wed", "Thu", "Fri"]
}
}
If restricted, the scope-validator hook warns when Bash commands are run outside allowed hours.
Location: .greyhatcc/scope.json
{
"engagement": "Bug Bounty - Program Name",
"created": "2026-02-23",
"version": 2,
"authorized": {
"domains": ["*.example.com", "api.example.com"],
"ips": ["10.0.0.0/24"],
"urls": ["https://api.example.com/*"],
"assets": [
{ "name": "api.example.com", "type": "URL", "tier": 1, "notes": "Main API" },
{ "name": "*.example.com", "type": "Wildcard", "tier": 2, "notes": "All subdomains" },
{ "name": "com.example.app", "type": "Android App", "tier": 1, "notes": "" }
]
},
"excluded": {
"domains": ["payments.example.com", "staging.example.com"],
"paths": ["/admin/*"],
"vulnTypes": [
"Missing HSTS",
"Missing X-Frame-Options",
"Missing CSP",
"Missing cookie flags",
"Missing SPF/DKIM/DMARC",
"Clickjacking",
"Open redirect without additional impact",
"CORS without data exfiltration proof",
"Self-XSS",
"User enumeration",
"Rate limiting without ATO or financial impact",
"Content injection with minimal impact",
"Vulnerable library without working PoC",
"SSL/TLS configuration issues",
"Banner/version disclosure",
"Root/jailbreak detection bypass",
"SSL pinning bypass",
"robots.txt disclosure",
"Stack traces without sensitive data"
]
},
"rules": {
"rateLimit": "10req/s",
"noDoS": true,
"noSocialEngineering": true,
"testingHours": "24/7",
"requiredHeaders": {
"X-HackerOne-Research": "overtimedev"
},
"testAccounts": {
"note": "Sign up with @wearehackerone.com email or use provided creds",
"credentials": []
},
"uatToProd": false,
"staticAnalysisOnly": false,
"customRules": []
},
"bountyTable": {
"critical": { "min": 1000, "max": 5000 },
"high": { "min": 500, "max": 2000 },
"medium": { "min": 150, "max": 800 },
"low": { "min": 50, "max": 250 }
},
"platform": {
"name": "HackerOne",
"url": "https://hackerone.com/program",
"username": "overtimedev"
}
}
excluded.vulnTypes (Critical)This array is checked by:
When setting up scope, always extract the full non-qualifying list from the program page.
rules.requiredHeaders (Critical)This object is checked by:
authorized.assets (New in v2)Structured asset list with tiers. Used by:
bountyTableUsed by:
When /greyhatcc:scope import is used, parse scope.md and extract:
authorized.assets + authorized.domainsexcluded.domainsexcluded.vulnTypesrulesbountyTableplatformAfter completing this skill:
tested.json — record what was tested (asset + vuln class)gadgets.json — add any informational findings with provides/requires tags for chainingfindings_log.md — log any confirmed findings with severity