nodecode-pentester
Pentester: a PTES pentest run with seven stages, nineteen specialists and a deliverable on disk for each. A Nodecode rewrite of fb0sh/dsh-pentester by fb0sh.
Get it
Tell the agent "add the pentester cell", or run nodecode add nc://pentester.
Set it up
One setting, in the pentester section of ~/.nodecode/config.jsonc: workspace, the directory a run is kept in. ~/.nodecode/pentester is the obvious one. Nothing else is required and nothing is downloaded: the cell reaches no service, and only writes where you told it to.
{ "pentester": { "enabled": true, "workspace": "~/.nodecode/pentester" } }
Use it
Say what you are testing and how the run should work:
Start a pentest run on the staging shop, assets
app.staging.exampleand10.20.0.5. Written authorization from the owner, weekdays only, no denial of service.
The model then walks the seven PTES stages -- pre-engagement, intelligence gathering, threat modeling, vulnerability analysis, exploitation, post-exploitation, reporting -- with seven tools:
| Tool | What it does |
|---|---|
pentester_run |
start (target, assets, rules of engagement), status, resume, stop. One run at a time, kept in the workspace. |
pentester_delegate |
Hands a task to one of nineteen specialists; opens task/<NN>-<stage>/<D-00N>/task.md. |
pentester_close |
Closes a delegation with what it found and the assets that result covers; writes result.md beside task.md. |
pentester_advance |
Completes the stage and opens the next one. |
pentester_rollback |
Back one stage. Closed delegations stay closed. |
pentester_experts |
The stages and the nineteen specialists, and the stage each serves. |
pentester_exec |
Runs one command in the current stage's work directory, no shell. |
The stage gate. With two or more assets in scope, a stage will not advance until every asset is covered by a closed delegation of that stage; the refusal names the ones that are not. An open delegation covers nothing. With a single asset the stage may advance as it is -- the original's rule, kept as it wrote it.
The specialists are the original's nineteen: recon, threat modeling, vulnerability analysis, web, API and identity, mobile, network, Active Directory, Windows host, cloud, AI and agentic security, source code, reverse engineering, exploitation validation, bug bounty, CTF, forensics, post exploitation and reporting.
The operator types /pentester: bare, it shows where the run stands and a panel whose rows delegate, close, advance, go back, list the roster or stop. /pentester start acme app.example 10.20.0.5, /pentester next, /pentester delegate web prove the reset token expires, /pentester close D-001 it does not. The same is on the manual as (help :pentester), and as Lisp for an eval: (pentester:state), (pentester:advance), (pentester:experts).
Where it writes. Everything is under workspace: run.sexp (the run: target, assets, rules, stages, delegations), task/<NN>-<stage>/<D-00N>/ (each delegation's task.md and result.md, with its evidence beside them), and work/<NN>-<stage>/ (where pentester_exec runs). Nothing else on the machine is touched, and nothing leaves it.
A working session is reminded of where the run stands in one line at every request, once it has worked on that run, so a turn that drifts is told the stage and what is still uncovered.
Only test what you are authorized to test: the rules of engagement are yours to state, and the cell keeps them beside the run.
What the rewrite leaves out
The Docker and SSH runtimes (a command runs here, not in a Kali container), the skill pack the original downloads from its own releases, and its settings screens and MCP bindings. See NOTICE.