Wordlist Smith
Generate smart, size-controlled wordlists and clean existing ones.
Core Principle: Smart, Not Mechanical
Never generate dumb sequential permutations (00000, 00001, 00002...). That is what crunch does; this skill exists to do better. Generate words ranked by real-world likelihood:
- Semantic expansion: from seed words, generate related words in the same domain (teams, names, places, slang, brands, cultural terms).
- Locale awareness: for Spanish/Mexican targets, include ñ/á/é variants, common name patterns, LADA/city terms, fútbol clubs, date formats (DDMMYYYY), typical combos (
chivas2024, tijuana123).
- Ranked output: most probable words first, not alphabetical.
Common Human Password Habits (apply as mutations)
These are what real people do — use them as the mutation vocabulary:
- Leetspeak swaps: a→4/@, e→3, i→1/!, o→0, s→$/5, t→7, b→8, g→9
- Suffix padding: 123, 1234, !, !!, 01, birth year, current year
- First-letter capitalization only:
Password (the lazy complexity trick)
- Name + year:
juan1995, maria2024
- Word + word combos:
perro_negro, chivasgana
- Keyboard walks:
qwerty, asdf, 1qaz2wsx
- Reversed words:
drowssap
- Doubled words:
abcabc, mexicomexico
Apply mutations selectively to likely candidates — never explode every mutation across every word (that recreates the dumb-permutation problem with extra steps).
User-Specified Substitutions
If the user asks to replace specific letters with numbers/chars (e.g. "replace all e with 3"), use the cleaner's deterministic swap instead of hand-editing lines:
# keep originals AND emit swapped variants
python3 scripts/clean_wordlist.py INPUT -o OUTPUT --swap a=4,e=3
# emit ONLY swapped variants
python3 scripts/clean_wordlist.py INPUT -o OUTPUT --swap-all a=4,e=3
Swaps are case-insensitive (a=4 also rewrites A). Always pass the user's exact mapping — do not substitute the default leet table unless the user just says "leetspeak it" without specifics.
Input Modes
- Natural language: "top 20 most used Mexican passwords, expand to 1000 similar words" → generate seeds, expand semantically, cap size.
- Seed file: user provides a .txt → clean it first (below), then expand if asked.
- SecLists: user points at a SecLists path (Kali:
/usr/share/seclists/) → read, clean, expand/combine as requested.
- Raw pasted text: user pastes content copied from a website/article (numbered rankings, comma-separated blobs, words in prose). Save the paste to a temp .txt, then:
- Numbered/listed format (
1., 3), - ) → run the cleaner as-is; it strips ranking prefixes and surrounding quotes/punctuation automatically.
- Comma/space-separated blob → run the cleaner with
--split.
- Words embedded in full article prose → extract the candidate words yourself first, write them to a .txt, then clean.
Size Control (Hard Rule)
The user's requested count is a hard cap. "Make 1000 words" = exactly 1000, never 1001. If expansion would exceed the cap, keep the highest-likelihood words. If it falls short, say so and ask before padding.
Cleaning Existing Lists
Always run the bundled cleaner on any user-fed .txt before processing:
python3 scripts/clean_wordlist.py INPUT -o OUTPUT [--max N] [--min-len N] [--max-len N]
It handles:
- Encoding: detects and converts UTF-8 BOM, UTF-16, cp1252, latin-1 → clean UTF-8 output
- Dedupe: exact duplicates removed, original order preserved
- Ghost characters: zero-width (U+200B/FEFF), control chars, stray spaces, non-printables stripped
- Blanks/length filters: empty lines dropped; optional min/max length
Check the stderr report (kept=X dups=Y) and relay it to the user in one line.
Output
- Plain .txt, one word per line, UTF-8, no BOM, trailing newline.
- Default save location:
/home/kali/Desktop/wordlists/ on Kali (create it with mkdir -p if missing). If the user names a different location for a specific request, that overrides the default.
- Default filename from the task (e.g.
mexico_top1000.txt).
- Report in one line: total words, cap applied, save path. No filler.
1---2name: wordsmith3description: Smart wordlist generator and cleaner. Use when the user asks to create, build, expand, or clean a wordlist / password dictionary / .txt list of words — from a natural-language description, a seed .txt file, or SecLists files — with control over output size. Also for merging/deduping/cleaning existing lists before use with hashcat, aircrack, crunch-style workflows, or any tool that consumes wordlists. Trigger phrases: "make me a wordlist", "generate a dictionary", "expand these words", "clean this list", "dedupe this txt", "wordlist for hashcat/aircrack", "top N passwords".4---56# Wordlist Smith78Generate smart, size-controlled wordlists and clean existing ones.910## Core Principle: Smart, Not Mechanical1112Never generate dumb sequential permutations (`00000`, `00001`, `00002`...). That is what crunch does; this skill exists to do better. Generate words ranked by real-world likelihood:1314- **Semantic expansion:** from seed words, generate related words in the same domain (teams, names, places, slang, brands, cultural terms).15- **Locale awareness:** for Spanish/Mexican targets, include ñ/á/é variants, common name patterns, LADA/city terms, fútbol clubs, date formats (DDMMYYYY), typical combos (`chivas2024`, `tijuana123`).16- **Ranked output:** most probable words first, not alphabetical.1718## Common Human Password Habits (apply as mutations)1920These are what real people do — use them as the mutation vocabulary:21221. **Leetspeak swaps:** a→4/@, e→3, i→1/!, o→0, s→$/5, t→7, b→8, g→9232. **Suffix padding:** 123, 1234, !, !!, 01, birth year, current year243. **First-letter capitalization only:** `Password` (the lazy complexity trick)254. **Name + year:** `juan1995`, `maria2024`265. **Word + word combos:** `perro_negro`, `chivasgana`276. **Keyboard walks:** `qwerty`, `asdf`, `1qaz2wsx`287. **Reversed words:** `drowssap`298. **Doubled words:** `abcabc`, `mexicomexico`3031Apply mutations selectively to likely candidates — never explode every mutation across every word (that recreates the dumb-permutation problem with extra steps).3233## User-Specified Substitutions3435If the user asks to replace specific letters with numbers/chars (e.g. "replace all e with 3"), use the cleaner's deterministic swap instead of hand-editing lines:3637```bash38# keep originals AND emit swapped variants39python3 scripts/clean_wordlist.py INPUT -o OUTPUT --swap a=4,e=34041# emit ONLY swapped variants42python3 scripts/clean_wordlist.py INPUT -o OUTPUT --swap-all a=4,e=343```4445Swaps are case-insensitive (`a=4` also rewrites `A`). Always pass the user's exact mapping — do not substitute the default leet table unless the user just says "leetspeak it" without specifics.4647## Input Modes48491. **Natural language:** "top 20 most used Mexican passwords, expand to 1000 similar words" → generate seeds, expand semantically, cap size.502. **Seed file:** user provides a .txt → clean it first (below), then expand if asked.513. **SecLists:** user points at a SecLists path (Kali: `/usr/share/seclists/`) → read, clean, expand/combine as requested.524. **Raw pasted text:** user pastes content copied from a website/article (numbered rankings, comma-separated blobs, words in prose). Save the paste to a temp .txt, then:53 - Numbered/listed format (`1.`, `3)`, `- `) → run the cleaner as-is; it strips ranking prefixes and surrounding quotes/punctuation automatically.54 - Comma/space-separated blob → run the cleaner with `--split`.55 - Words embedded in full article prose → extract the candidate words yourself first, write them to a .txt, then clean.5657## Size Control (Hard Rule)5859The user's requested count is a **hard cap**. "Make 1000 words" = exactly 1000, never 1001. If expansion would exceed the cap, keep the highest-likelihood words. If it falls short, say so and ask before padding.6061## Cleaning Existing Lists6263Always run the bundled cleaner on any user-fed .txt before processing:6465```bash66python3 scripts/clean_wordlist.py INPUT -o OUTPUT [--max N] [--min-len N] [--max-len N]67```6869It handles:70- **Encoding:** detects and converts UTF-8 BOM, UTF-16, cp1252, latin-1 → clean UTF-8 output71- **Dedupe:** exact duplicates removed, original order preserved72- **Ghost characters:** zero-width (U+200B/FEFF), control chars, stray spaces, non-printables stripped73- **Blanks/length filters:** empty lines dropped; optional min/max length7475Check the stderr report (`kept=X dups=Y`) and relay it to the user in one line.7677## Output7879- Plain .txt, one word per line, UTF-8, no BOM, trailing newline.80- **Default save location:** `/home/kali/Desktop/wordlists/` on Kali (create it with `mkdir -p` if missing). If the user names a different location for a specific request, that overrides the default.81- Default filename from the task (e.g. `mexico_top1000.txt`).82- Report in one line: total words, cap applied, save path. No filler.