{"adoption": {"forks": 2632, "observed_at": "2026-08-28T04:11:09.135228+00:00", "stars": 15091}, "canonical_url": "https://ross.abutalabs.com/products/pentestgpt", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Automated Penetration Testing Agentic Framework Powered by Large Language Models", "domain": ["security", "penetration-testing", "artificial-intelligence", "large-language-models"], "enriched": true, "function": ["penetration-testing", "agent-framework", "llm-inference", "security", "cli"], "health_score": 91, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["GreyDGL/PentestGPT"], "name": "GreyDGL/PentestGPT", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2026-07-14T12:58:31+00:00", "repo": "GreyDGL/PentestGPT", "stars": 15091, "tags": ["ctf", "autonomous-agent", "llm-agent", "offensive-security", "vulnerability-assessment", "ai-agents", "linux", "macos"], "topics": ["penetration-testing", "python", "large-language-models", "llm"], "urls": [], "use_cases": ["automate penetration testing with an LLM agent", "solve CTF challenges automatically", "run reconnaissance and exploitation pipelines with AI", "generate penetration testing reports from findings", "get AI guidance during interactive pentesting sessions", "test web, crypto, reversing, forensics, and pwn challenges"], "what_it_is": "PentestGPT is an AI-powered penetration testing agent framework that drives LLMs (Claude Code, Codex, or many providers in legacy mode) to autonomously run security tools and reason through multi-stage pentest and CTF pipelines. It is a Python CLI tool published at USENIX Security 2024, with session persistence and live step tracking.", "when_to_avoid": ["you need a passive vulnerability scanner rather than an agentic tool driver", "you cannot expose LLM access to sensitive target environments", "you require a GUI-based pentesting platform", "your use case is defensive security monitoring rather than offensive testing"], "when_to_choose": ["you want an autonomous LLM-driven agent to run pentest or CTF workflows end to end", "you need multi-provider LLM support including local Ollama in interactive mode", "you want research-backed tooling with session persistence and staged pipelines"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pentestgpt", "repo": "GreyDGL/PentestGPT", "role": "main", "score": 70}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.135228+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:06:44.519206+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "57b9be12af278e3da08c092ca29827d3e24c68cf48f14248dcd672b893a267cb", "fetched_at": "2026-08-28T04:11:09.135228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/GreyDGL/PentestGPT"}, {"content_hash": "1796f78a3d3237d4ff7ac1723c4326303e255327f3647affe4c65d35c7a674bf", "fetched_at": "2026-08-29T08:04:39.835697+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/pentestgpt/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 92, "longevity": 91, "rhythm": 30}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1283, "days_push": 50, "days_rel": 252, "gap_med": null, "n_releases_24m": 1}, "score": 70, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}