diff --git a/README.md b/README.md
index 52753b4..dea7e85 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
### AI-guided, all-in-one toolkit for authorized security testing
-**215 curated tools across 21 categories** — recon, OSINT, web, wireless, phishing,
+**219 curated tools across 21 categories** — recon, OSINT, web, wireless, phishing,
forensics, post-exploitation and more — with an **AI layer that turns plain English
into the right tool and the exact command**.
@@ -34,7 +34,7 @@ students — all working **legally, on systems they own or are authorised to tes
-    
+    
@@ -77,7 +77,7 @@ students — all working **legally, on systems they own or are authorised to tes
plans an objective step by step, then summarizes findings and drafts an engagement
report. Bring your own key or run a local model — nothing auto-executes and nothing
is fabricated.
-- **🗂 215 curated tools, one interactive console** — type to search every tool, then
+- **🗂 219 curated tools, one interactive console** — type to search every tool, then
install and run across 21 categories without hunting down Git repos; a fixed tag
taxonomy (63 tags in use) makes every tool discoverable.
- **🔎 It knows what it doesn't have** — `/find` searches your catalog first, then the
@@ -98,7 +98,7 @@ students — all working **legally, on systems they own or are authorised to tes
## Tool Categories
-**215 tools across 21 categories** — the full list, with links and tags, is in
+**219 tools across 21 categories** — the full list, with links and tags, is in
**[docs/TOOLS.md](docs/TOOLS.md)**.
@@ -119,9 +119,9 @@ students — all working **legally, on systems they own or are authorised to tes
-59 further entries are archived (unmaintained or dead upstream) and hidden unless
+44 further entries are archived (unmaintained or dead upstream) and hidden unless
you set `show_archived true` via `/config`. The in-app header counts 22 categories /
-217 tools because it also counts the built-in Update / Uninstall menu.
+219 tools because it also counts the built-in Update / Uninstall menu.
---
@@ -328,9 +328,15 @@ falls back to the classic numbered menu, where `/` or `s` searches, `t` filters
## Features
+> **Where these live today.** `/find`, `/goal`, plain-English recommendations,
+> `/tags`/`/search` and background panes currently run in the **`--classic`** REPL
+> (`hackingtool --classic`). The default TUI browses and type-searches the whole
+> catalog and runs tools; wiring these AI/search features into it is Phase 2. The
+> screenshots below showing a `/` command prompt are the `--classic` REPL.
+
### 🔎 `/find` — a tool for a need you don't have yet
-Searches the 215 curated tools first, then the GitHub search API, and ranks the
+Searches the 219 curated tools first, then the GitHub search API, and ranks the
results explainably. **Suggest-only** — it never clones, installs or runs anything —
and it makes **zero model calls**.
diff --git a/docs/HOW-TO-USE.md b/docs/HOW-TO-USE.md
index 4696dc5..81a2ea4 100644
--- a/docs/HOW-TO-USE.md
+++ b/docs/HOW-TO-USE.md
@@ -7,6 +7,12 @@ and something you get back — no prior knowledge of the codebase needed.
> written permission to test it. hackingtool never runs a step without asking you
> first, and never invents results.
+> **TUI vs `--classic`.** The default `hackingtool` is an interactive TUI: browse
+> categories, type to search every tool, `↑↓`/`Enter`/`Esc` to move, `/` for the
+> command palette. The `/…`, `@…` and plain-English **grammar** taught below
+> (sections 2, 4, 5, 8) is the **`--classic`** REPL — launch it with
+> `hackingtool --classic`. Bringing these into the default TUI is Phase 2.
+
- [1. First run](#1-first-run)
- [2. Learn the grammar in 60 seconds](#2-learn-the-grammar-in-60-seconds)
- [3. Open and install a tool](#3-open-and-install-a-tool)
@@ -47,9 +53,9 @@ and something you get back — no prior knowledge of the codebase needed.
| `~/.hackingtool/history` | your `↑`/`↓` command history |
4. 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
+ OS, IP, and `22 categories · 219 active · 44 archived` (that count includes
the built-in Update/Uninstall menu; the tool catalog itself is
- [21 categories / 215 tools](TOOLS.md)).
+ [21 categories / 219 tools](TOOLS.md)).
5. Type `/help` for the command card, and `q` (or `/quit`, `Ctrl-D`) to leave.
@@ -109,7 +115,7 @@ metapackages), hackingtool reuses that binary instead of re-cloning it.
## 4. Find a tool that isn't in the catalog (`/find`)
-`/find` answers "what should I use for X?" — first from the 215 curated tools,
+`/find` answers "what should I use for X?" — first from the 219 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**.
diff --git a/docs/TOOLS.md b/docs/TOOLS.md
index ca27445..439c5c0 100644
--- a/docs/TOOLS.md
+++ b/docs/TOOLS.md
@@ -1,7 +1,7 @@
# Tool catalog
-Every tool hackingtool can install, launch, or point you at — **215 active tools
-across 21 categories**, plus 59 archived entries kept out of this list (they are
+Every tool hackingtool can install, launch, or point you at — **219 active tools
+across 21 categories**, plus 44 archived entries kept out of this list (they are
unmaintained or dead upstream and are hidden in the app unless you set
`show_archived true` via `/config`).
diff --git a/images/logo.svg b/images/logo.svg
index 2d0f561..c394f5e 100644
--- a/images/logo.svg
+++ b/images/logo.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/test_logo_version.py b/tests/test_logo_version.py
new file mode 100644
index 0000000..edc80ef
--- /dev/null
+++ b/tests/test_logo_version.py
@@ -0,0 +1,11 @@
+"""Guard: the static logo.svg version label must match constants.VERSION (single source)."""
+from pathlib import Path
+
+from hackingtool.constants import VERSION
+
+_LOGO = Path(__file__).resolve().parents[1] / "images" / "logo.svg"
+
+
+def test_logo_svg_version_matches_constants():
+ assert f"hackingtool — v{VERSION}" in _LOGO.read_text(encoding="utf-8"), (
+ f"images/logo.svg version label is stale; bump it to v{VERSION}")