kalirange // offensive tooling
SKIRMISHER
Command Reference
Every command, what it does, and how to use it.
Toolskirmisher / sk
Versionv1.0.0
Shellzsh · bash
Date06 Sep 2026
// skirmishercommand reference
01

The one command

Call it, name the target, go — like nmap <target>. A bare target runs the recon pipeline (the default action); no recon keyword needed. Everything is scope-gated and audited: no network action runs against a host that isn't on an explicit, non-expired allow-list.

02

Commands — in detail

skirmisher <target>skirmisher acme.com

The default action — no recon keyword needed. Runs the full OSINT pipeline against an authorized target: infers its email/username schema, correlates scattered signals into confidence-scored identities (exact → fuzzy → perceptual avatar-hash), enriches them, maps in-scope authentication surfaces, and returns a ranked "most-likely way in". Accepts several targets at once, and - to read them from stdin. The scope is auto-discovered; it refuses to run without one.

skirmisher init [target]skirmisher init -g acme.com

Scaffolds a scope.json engagement file, pre-filling the allow-list with the target and its subdomains and setting a one-year window. Edit authorized_by before you run — the scope is your declaration of authorization. -g writes it globally to ~/.config/skirmisher/scope.json so skirmisher <target> then works from any directory; -o FILE chooses the path; --force overwrites an existing one.

skirmisher recon <target>skirmisher recon acme.com -O -P

The explicit form of skirmisher <target> — runs the five stages (Profile → Correlate → Enrich → Surface → Rank). Add -O for live surface discovery (DNS + TLS on in-scope hosts), -P for passive crt.sh subdomain discovery, and -e FILE for credential-reuse enrichment. -j / --dot change the output format.

skirmisher scope [file]skirmisher scope eng.json -H vpn.acme.com

Validates a scope file — it must be well-formed, name an authorized_by, carry a non-empty allow-list, and not be expired — then prints what's authorized (allow / deny). With -H <host> it tests a single host against the scope and prints ALLOW or DENY with the reason, so you can confirm a target is in scope before touching it. The file is auto-discovered if omitted.

skirmisher modulesskirmisher modules

Lists every available module with its short alias and a one-line description, and whether it is read-only [aux] or [invasive]. Use the alias with run/check — e.g. probe, expose, headers, fp, tls, ssh.

skirmisher collectorsskirmisher collectors

Lists the recon collectors and their tier: offline (always run — schema inference, fixtures), network (-O: live surface discovery), or passive (-P: crt.sh). Shows which are gated behind an opt-in flag.

// skirmishercommand reference
02

Commands — in detail (cont.)

skirmisher run <module> [target]skirmisher run expose vpn.acme.com

Runs a module against a host. The positional target sets RHOST; set other options with -o KEY=VAL (repeatable, e.g. -o RPORT=8443 -o SSL=false). The runner authorizes every target through the scope guard before the module executes, so an out-of-scope host is refused before a single packet is sent — and the decision is audited. Each meaningful result is recorded as a finding (to <scope>.findings.jsonl) for skirmisher report; --no-findings skips that.

skirmisher check <module> [target]skirmisher check probe 10.0.0.5

Runs a module's non-invasive check only — the quick "is it there / is it exposed?" probe without the full action (e.g. which ports are open, whether the host serves HTTP). Same scope-gating, options, and findings behaviour as run.

skirmisher reportskirmisher report -o report.md

Builds a Markdown penetration-test report from the findings recorded during the engagement: an executive summary with a severity tally, the scope, every finding by severity with its evidence and timestamp, a methodology section derived from the audit trail, and an appendix. -o FILE writes it to a file (otherwise stdout); -s points at the scope for engagement metadata; findings are auto-discovered alongside the scope.

skirmisher completions bash|zshskirmisher completions zsh

Prints a shell-completion script for the sk and skirmisher commands so subcommands and module aliases tab-complete. Source it from your shell rc — e.g. skirmisher completions zsh > ~/.config/skirmisher/completion.zsh, then source it (after compinit on zsh).

skirmisher manskirmisher man

Prints the full manual to the terminal — the same reference as the installed man sk page (synopsis, commands, options, pipes, exit status, and the authorization statement).

skirmisher versionskirmisher version

Prints the installed version. skirmisher --version works too.

Every command also accepts skirmisher <command> -h to print its full flags. The next pages detail the flags for the commands that have them (recon, run/check) plus scope, output, and examples.

// skirmishercommand reference
03

recon options — skirmisher <target> [options]

FlagWhat it does
-s, --scope FILEEngagement scope JSON. Optional — auto-discovered (see §06). Default-deny if none found.
-n, --names "A,B"Comma-separated known names → seeds candidate identities (e.g. "Jane Doe,John Roe").
-f, --fixtures DIROffline fixtures dir (defaults to ./fixtures if present) — <target>.json sample data.
-F, --fixture-file FAn explicit fixture JSON file.
-e, --exposure FILEExposure index → flags identities whose email/username is exposed (credential-reuse), boosts their routes.
--no-enrichSkip enrichment (credential-reuse flags).
-O, --onlineEnable networked collectors: live DNS + TLS surface discovery on in-scope hosts.
-P, --passiveEnable third-party passive OSINT (crt.sh subdomain discovery; in-scope domains only).
--timeout SECPer-connection timeout for -O probes (default 4).
-c, --collectors LComma-separated collector names to run (default: all applicable).
-l, --limit NMax ranked routes (default 10).
-j, --jsonMachine output — NDJSON, one compact object per target (pipes to jq).
--dotGraphviz DOT of the identity graph (pipe to dot -Tpng).
-q, --quietResults only — no banner or decoration.
-v, --verbosePrint pipeline stages to stderr (stdout stays clean for pipes).
How recon works

Five stages, one flow: Profile (infer email/username schema) → Correlate (fuse usernames/emails/avatars into confidence-scored identities: exact → fuzzy → perceptual avatar-hash) → Enrich (credential-reuse) → Surface (map in-scope auth surfaces) → Rank (identity × surface × evidence → a "most-likely way in" shortlist).

// skirmishercommand reference
04

run / check — flags & modules

FlagMeaning
-s, --scope FILEScope JSON (auto-discovered if omitted).
-o, --option K=VSet a module option (repeatable), e.g. -o RPORT=8443 -o SSL=false.
--findings FILEFindings JSONL to append to (default: alongside the scope). --no-findings to skip.
Module (alias)What it doesOptions (defaults)
tcp_service_probe (probe)Scope-gated TCP connect + banner grab across common ports.RHOST, PORTS=21,22,25,80,110,143,443, TIMEOUT=4
http_expose (expose)Read-only web-exposure audit: .git/.env/.svn, directory listing, status endpoints.RHOST, RPORT=443, SSL=true, PATHS, TIMEOUT=5
http_fingerprint (fp)Fingerprint a web surface: server banner, page title, tech tells.RHOST, RPORT=443, SSL=true, TIMEOUT=5
http_headers (headers)Security-headers audit: missing HSTS / CSP / X-Frame-Options, version disclosure, insecure cookies.RHOST, RPORT=443, SSL=true, TIMEOUT=5
tls_audit (tls)TLS posture: deprecated protocol, weak cipher, expired / self-signed cert.RHOST, RPORT=443, TIMEOUT=5
ssh_audit (ssh)SSH banner audit: SSH protocol 1.x, outdated OpenSSH (< 7.4).RHOST, RPORT=22, TIMEOUT=5
$ skirmisher run expose 10.0.0.5 # target → RHOST; records a finding $ skirmisher run tls 10.0.0.5 -o RPORT=8443 # override an option $ skirmisher report -o report.md # then build the report $ skirmisher run probe 8.8.8.8 ✗ REFUSED # out of scope (default-deny)
// skirmishercommand reference
05

Collectors

CollectorTierWhat it does
email-schemaofflineInfer likely email/username formats for the target domain.
fixtureofflineLoad signals/surfaces from a local JSON fixture (demo/test).
surface-probenetwork (-O)Resolve in-scope hosts + read TLS cert → live auth surfaces.
cert-transparencypassive (-P)crt.sh subdomain discovery; feeds the active probe.

Offline collectors always run. Networked ones run only under -O; third-party ones only under -P (and only for in-scope domains).

06

scope — the safety core

{ "engagement": "acme-2026", "authorized_by": "Acme CISO", "expires": "2026-12-31", "allow": ["*.acme.com", "203.0.113.0/24"], "deny": ["vpn-legacy.acme.com"] }

Allow / deny entries domains (*. = subdomains only), bare hostnames, IPs, or CIDRs. engagement and authorized_by are required; an empty allow-list is rejected. Default-deny, deny beats allow, expiry enforced, every decision audited.

Discovery order -s FILE./scope.json./scope.example.json$SKIRMISHER_SCOPE~/.config/skirmisher/scope.json. Exposure & findings files follow the same pattern.

// skirmishercommand reference
07

Output & pipes

$ skirmisher acme.com # human report (ranked "way in") $ skirmisher acme.com -j | jq '.routes[0]' # NDJSON → jq $ skirmisher acme.com --dot | dot -Tpng -o map.png # the visual identity→surface map $ cat hosts.txt | skirmisher - -j > out.ndjson # many targets from stdin $ skirmisher report -o report.md # the pentest deliverable

JSON goes to stdout, logs/stage timings to stderr (-v), so output pipes cleanly.

08

Exit codes

CodeMeaning
0Success.
1A module check failed / nothing found.
2Bad usage or error (e.g. no scope, malformed file).
3Refused — target out of scope.

Scriptable: skirmisher acme.com && ….

09

Worked example — a full engagement

$ skirmisher init -g acme.com # once — then edit authorized_by $ skirmisher acme.com -P -O # recon: passive + live discovery $ skirmisher run expose vpn.acme.com # act on a surface (records a finding) $ skirmisher run headers vpn.acme.com; skirmisher run tls vpn.acme.com; skirmisher run ssh vpn.acme.com $ skirmisher report -o report.md # the deliverable — a pentest report
Authorized use only

Skirmisher is for targets you own or are contracted to test. Scope defines legality; the guard enforces it and the audit log records it.