docs/HOW-TO-USE.md
Step-by-step walkthroughs of the console. Every step below is something you type and something you get back — no prior knowledge of the codebase needed.
Authorized targets only. Everything here assumes you own the target or hold written permission to test it. hackingtool never runs a step without asking you first, and never invents results.
/find)/goal)/config)/find (/config github)Install it (see the README). From a checkout, the
quickest path that puts hackingtool on your PATH is:
git clone https://github.com/Z4nzu/hackingtool.git
cd hackingtool
pipx install .
Launch it:
hackingtool
On the first launch hackingtool creates its home directory — nothing is written outside it:
| Path | What it is |
|---|---|
~/.hackingtool/config.json | your settings (defaults on first run) |
~/.hackingtool/.env | commented secrets template, chmod 600 — no active secret in it |
~/.hackingtool/tools/ | where tools you install are cloned/built |
~/.hackingtool/history | your ↑/↓ command history |
You land on the banner + prompt. The header line tells you what you have:
OS, IP, and 22 categories · 217 active · 59 archived (that count includes
the built-in Update/Uninstall menu; the tool catalog itself is
21 categories / 215 tools).
Type /help for the command card, and q (or /quit, Ctrl-D) to leave.
If your terminal isn't interactive, or prompt_toolkit isn't available, you get
the classic numbered menu instead — same features, numbers instead of commands.
Force it any time with hackingtool --classic.
There are exactly three things you can type:
| You type | It means | Example |
|---|---|---|
/… | a command you run | /search subdomain |
@… | a thing you name | @nmap, @tag:osint |
| anything else | plain-English "what I want to do" | crack a wifi handshake |
Try these in order:
/tags — prints every tag with its tool count (63 tags in use).@tag:osint — lists the tools carrying that tag, then lets you pick one by
number.@nmap — opens a tool straight away (matching is case-insensitive with a
fuzzy fallback, so @nmpa still finds it)./search wordlist — keyword search over names, descriptions and tags.crack a wifi handshake — no slash, no at-sign: the recommender reads your
words and shows matching tools.Tab completes commands, tool names and tags. ↑/↓ walk your history.
Ctrl-C clears the current line; Ctrl-D exits.
@nuclei (or /run nuclei).1 install the tool2 run itc (or cmd) ask for the exact command for a goal, when the tool has a
usage cheatsheet — it answers from the curated cheatsheet first, and only
asks a model if nothing matches. Nothing is executed; you get a command to
read and copy.98 open the project page99 back97 installs every not-yet-installed tool in that
category and 98 opens the archived tools of that category (if it has any).If a tool is already on your PATH from your distro (apt, brew, Kali's
metapackages), hackingtool reuses that binary instead of re-cloning it.
/find)/find answers "what should I use for X?" — first from the 215 curated tools,
then from the GitHub search API, ranked with a reason for each hit. It is
suggest-only: it never clones, installs or runs anything, and it makes zero
model calls.
Ask in plain English:
/find hidden directories on a website
You get two blocks:
16446★ · trusted author (ships in our catalog) · active · matches: fuzzer, web)
and a git clone … line to copy. Read the repo before you run it — that
warning is there because nobody has vetted these for you.To keep one, press a at the prompt, then the result number:
[a] add one to your toolbox · [Enter] done: a
which? 1-5: 2
Added. /Users/you/.hackingtool/found.yaml
What that writes: an entry in ~/.hackingtool/found.yaml under a
Discovered tools category — title, tags, description, project URL. It
deliberately stores no install or run command, so a discovered entry can
never execute anything; it is a bookmark that shows up in your menu and in
/search on the next launch.
Out-of-scope asks are refused before any network call, with an authorized alternative where one exists:
/find build a wifi jammer
Out of scope: Jamming is a denial-of-service attack and is out of scope. For
authorized work, wifi AUDITING tools test your own/scoped networks:
aircrack-ng, hcxtools, wifite (offline WPA/WPA2 handshake cracking).
Defensive and DFIR phrasing ("detect a SYN flood", "hunt for…", "triage AV false positives") is never refused.
Without a token you get 10 searches per minute from GitHub. See step 7 to raise that to 30.
/goal)/goal turns one objective into a short, ordered plan of real commands, then
runs the steps you approve, one at a time.
State the objective:
/goal find live subdomains of example.com
hackingtool plans (one model call, made against a vetted operator methodology) and prints the plan: each step's tool, the exact argv it would run, why it's there, and — for tools you don't have — an install hint.
Confirm authorization. Nothing runs before you answer y:
⚠ This goal will run tools against: example.com
Confirm you are AUTHORIZED to test this target? [y/N]
Approve step by step:
─ step 1/4 ─ subfinder -d example.com -silent
[y] run [s] skip [e] edit [q] abort ›
y runs it (list-form, never through a shell) and prints the output when it
finishes — steps run in the goal's workspace directory, with a 30-minute caps skips ite lets you edit the command first — the edited command is what gets run
and what gets loggedq aborts the restSteps whose tool isn't installed are skipped automatically and reported at the end, with the install hint from the plan.
Everything lands in a timestamped workspace:
~/.hackingtool/goals/2026-07-26T18-40-12-123456/
├── plan.json the drafted plan
├── run.log UTC-stamped: authorization, per-step decision, outcome
└── step-1-subfinder.txt raw output of each step you ran
Two guarantees worth knowing: the model is called once, for planning only, and tool output is never fed back to it — so nothing a target prints can steer the next step. And a step is only ever a list of arguments, never a shell string.
No model configured? /goal says so and falls back to plain tool
recommendations for the same objective.
/config)The AI layer is opt-in and bring-your-own-key. Without it everything still works:
recommendations fall back to a keyword matcher, /find never needed a model, and
commands come from the curated cheatsheets.
Option A — a hosted OpenAI-compatible endpoint
Open the settings editor:
/config
↑/↓ move, ←/→ change a value (saved immediately), Enter edits a
free-text row, t tests the connection, Esc closes.
Set ai_base_url (e.g. https://api.openai.com/v1) and ai_model.
Select the ai_key row, press Enter, paste your key. It is masked while
typing and written to ~/.hackingtool/.env (mode 600) — never to
config.json, never printed back.
Test it:
/config test
✓ AI connection OK <your-model> replied 'connected'
Option B — a local model with Ollama
ollama pull llama3.ai_base_url empty and set ai_model to the model you pulled./config test to confirm.Any key can also be set in one line, e.g. /config theme cyan,
/config show_archived true, /config background_runner off. Environment
variables (HACKINGTOOL_AI_BASE_URL, HACKINGTOOL_AI_MODEL,
HACKINGTOOL_AI_KEY, HACKINGTOOL_AI_PROVIDER) always win over config.json.
/find (/config github)Optional. It buys one thing: GitHub's search rate limit goes from 10 to 30 requests per minute. The token needs no scopes and no permissions at all — never grant it any.
Check your current state:
/config github
○ GitHub no token configured — unauthenticated search is 10 req/min
hackingtool then prints the exact steps. They are:
GitHub → your profile picture → Settings
Left sidebar → Developer settings
Personal access tokens → Fine-grained tokens → Generate new token
Name it (e.g. hackingtool-find) and pick an expiration.
Resource owner: yourself. Repository access: leave the default — do NOT select any repositories.
Permissions: select none at all. (GitHub: "Tokens always include read-only access to all public repositories on GitHub.")
Generate the token and copy it.
Add it to ~/.hackingtool/.env (the file is already chmod 600):
HACKINGTOOL_GITHUB_TOKEN=ghp_your-token-here
Verify:
/config github
✓ GitHub token OK token OK — search limit 30 req/min
Classic tokens work too: Developer settings → Tokens (classic) → Generate new
token → tick NO scopes at all. GITHUB_TOKEN / GH_TOKEN from your
environment are picked up as well. The token is never echoed back and is only
ever sent to api.github.com.
Long scans shouldn't block your console. If tmux is installed, hackingtool
keeps one detached session called hackingtool and gives each background job its
own labeled window.
Add & to a /run:
/run nmap -sV -oA scan 10.0.0.5 &
▶ started 'nmap' in background — /attach to view
A bare /run nmap & opens a shell already cd'd into the tool's directory,
with the tool's first cheatsheet command typed in as a comment.
See what's running — the status line under the prompt shows ▶ N running, and:
/panes (alias /jobs)
nmap (window 0)
Watch one: /attach — this hands your terminal to tmux. Press Ctrl-b then
d to detach and come back to the console.
Stop one, or all: /kill nmap · /kill all.
No tmux? Nothing breaks — hackingtool says so and opens the tool inline instead.
Turn backgrounding off entirely with /config background_runner off.
The same catalog drives a non-interactive orchestrator, for CI or a scripted
engagement. Findings are normalized into one findings.json you can grep, diff
or feed into other tooling.
# create/extend an engagement and run the default recon pipeline against it
hackingtool --engagement acme --targets example.com --pipeline recon
# a file of targets, one per line
hackingtool --engagement acme --targets ./scope.txt --pipeline recon
# (re)generate the deterministic Markdown report
hackingtool --engagement acme --report
# opt-in AI passes over the REAL findings only
hackingtool --engagement acme --ai-summary
hackingtool --engagement acme --ai-report # writes report.draft.md
--engagement is required in headless mode. Out-of-scope targets are flagged and
logged before anything runs. --ai-summary and --ai-report only ever
summarize findings that exist — the deterministic report.md is never
overwritten by the AI draft.
| Path | Contents |
|---|---|
~/.hackingtool/config.json | settings (/config) |
~/.hackingtool/.env | API key + GitHub token, mode 600 |
~/.hackingtool/found.yaml | tools you kept from /find |
~/.hackingtool/goals/<utc-timestamp>/ | /goal plan, run log, step output |
~/.hackingtool/tools/ | installed tools |
~/.hackingtool/hackingtool.log | command/audit log |
~/.hackingtool/history | prompt history |
Related reading: full tool catalog ·
operator playbook (also /skill) ·
SECURITY.md · CONTRIBUTING.md