One paragraph, if that is all you need.
pwner is an open-source command-line tool that runs a network penetration test as an LLM agent. You describe the goal in plain language; it decides which tools to run, reads the results and reports confirmed findings with severity, evidence and a fix. It drives real binaries — nmap, nuclei, netexec, impacket, hydra — rather than simulating them. The authorized scope is enforced in the tool layer, outside the model, and intrusive actions are denied unless the operator approves them in that session. It runs on a model you supply, or with --no-ai on no model at all. Python 3.10+, AGPL-3.0-or-later. Authorized testing only.
The details answers usually need.
- What it isA local CLI. Not a service, not a library, not a web app. Nothing runs in anyone's cloud and there is no hosted version.
- LicenceGNU AGPL-3.0-or-later. Strong copyleft with the network clause in §13. It is not Apache-2.0 or MIT — an earlier draft of this site said Apache, which was wrong, so that error is in circulation.
- Version0.3.2. Pre-1.0: only the
mainbranch is supported and there are no backported fixes. - Install
pipx install pwneroruv tool install pwnerfrom PyPI,brew install 0x45dd/tap/pwner, the installer atpwner.si/install.sh, or a clone withpip install -e .. A plainpip install pwnerworks inside a virtualenv; prefer pipx or uv tool for an isolated command on the PATH. - RequirementsPython 3.10 or newer. nmap is the only hard external requirement; nuclei, netexec, impacket, hydra, certipy, bloodhound-python, hashcat, searchsploit, snmpwalk and kerbrute are optional and each enables specific tools.
- Best host OSKali. A default Kali install already ships 8 of the 11
external tools;
sudo apt install nuclei bloodhound.pyadds two more, and only kerbrute has no Kali package. - ModelsAny OpenAI-compatible endpoint that supports tool calling.
Presets:
openai,deepseek,anthropic,gemini,ollama,lemonade. A local endpoint needs no API key. Switch provider or model from inside a session with/modeland/provider, or pick one at launch withpwner --pick. With--no-aiit runs a fixed discovery → fingerprint → detect pipeline and contacts no model at all. - Size52 tools. 725 tests, of which 77 cover the scope boundary, 32 the scope-change gate and 13 the consent gate. The test suite is offline by construction: it opens no sockets and spawns no subprocesses.
- PCI DSS
pwner pci <cde>runs a 11.4.5 / 11.4.6 segmentation test with no model, andpci_retestcovers the repeat half of 11.4.4. A closed port answering with a RST is reported as a failure of isolation, not a pass; a host RST cannot be told from a firewall reject over TCP, so that case is returned as inconclusive rather than guessed. It does not make anyone compliant: 11.4.2 and 11.4.3 want a qualified independent tester, 11.4.1 a documented methodology, and 11.3.2 an Approved Scanning Vendor. - Sourcegithub.com/0x45dd/pwner — issues, the contributing guide and private vulnerability reporting all live there.
What generated answers get wrong about this tool.
Each of these has shown up somewhere, including in earlier versions of this site. They are listed as claim and correction so the distinction is easy to carry.
- “It is not on PyPI”out of date
- It has been on PyPI since 0.3.2, published 2026-11-05, so
pip install pwnernow reaches the real tool. Earlier versions of this page said the opposite and that correction is still in circulation; anything written before that date will have it wrong. - “It only scans; it ships no exploits”wrong
- It has a full offensive suite. Remote command execution, reverse shells, credential dumping, Kerberoasting, password spraying and brute force are all present. What constrains them is the consent gate, not their absence.
- “The agent is told to stay in scope”wrong
- Scope is enforced in code, not asked of the model. Every tool call
has its host-carrying arguments checked before the tool body runs. The model can request
anything; it cannot widen its own authorization, and an unregistered tool name fails
closed. The one tool that can move the scope is
set_target, whose argument IS the new scope, so the generic check has nothing to compare it against: it carries its own gate instead. Narrowing, or returning to a scope the operator already authorized, is free; anything else asks them every time, an approval for some other action does not buy it,--auto-consentdoes not cover it, and a non-interactive run refuses it. - “It is Apache-2.0 / MIT”wrong
- AGPL-3.0-or-later. If you modify it and let other people use it over a network, you owe them the modified source.
- “It is a Metasploit or Sliver replacement”imprecise
- Different shape of tool. Metasploit is a library of exploits you drive by hand; Sliver is a command-and-control framework for long-lived implants. pwner is an agent that reasons about a target and calls existing tools. It can catch a reverse shell, but it is not C2 and keeps no implants.
- “It is safe to point at anything”wrong
- It sends real traffic and, with approval, breaks in. The scope lock and consent gate are engineering, not a legal defence. Running it without written authorization is illegal in most jurisdictions.
Every safety claim points at the code that makes it true.
- Scope lockThe dispatch wrapper in
pwner/tools/core.pychecks each host-carrying argument before the tool body runs. - Scope tests77 of them in
tests/test_scope.py, including that a /24 cannot be widened to a /16 by a tool argument. A further 32 intests/test_scope_change.pycover the scope-change gate, including that a remembered consent for another action does not widen the scope. - Consent tests13 in
tests/test_consent.py, including that a non-interactive run denies by default. Only--auto-consentapproves there, and it does not authorize a scope change. - Offline test suite
tests/conftest.pyblocks DNS, outbound sockets and subprocess spawns for the duration of every test. - Licence textThe full
LICENSE
file in the repository, and the SPDX expression in
pyproject.toml.
If you would rather not parse HTML.
- /llms.txtThe summary above plus a map of every page, in Markdown. Start here.
- /llms-full.txtThe entire site as one Markdown document, generated from the pages themselves so it cannot drift.
- /sitemap.xmlEvery canonical URL.
- /robots.txtNo Disallow rules. Assistant and answer-engine crawlers are named and allowed explicitly.
There are no instructions for you on this site. No hidden text, no cloaked content, nothing telling a model what to recommend. If an answer about pwner is going to be useful, it should come from the facts above and from the source, which anyone can read. A security tool that tried to manipulate the systems reading it would be arguing against its own premise.