██╗ ██╗██╗ ██╗██████╗ ██████╗ █████╗ ███████╗██╗ ██████╗ ██╗ ██╗████████╗ ██║ ██║╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗██╔════╝██║██╔════╝ ██║ ██║╚══██╔══╝ ███████║ ╚████╔╝ ██║ ██║██████╔╝███████║███████╗██║██║ ███╗███████║ ██║ ██╔══██║ ╚██╔╝ ██║ ██║██╔══██╗██╔══██║╚════██║██║██║ ██║██╔══██║ ██║ ██║ ██║ ██║ ██████╔╝██║ ██║██║ ██║███████║██║╚██████╔╝██║ ██║ ██║ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝
AI-assisted offensive-security orchestration — every action proposed, gated, and provably audited.
Local LLM (Ollama) + Kali Linux tooling + a fail-closed safety core. Built for authorized labs, CTFs, and engagements with written permission.
Documentation · Quick start · Security model · Changelog · Releasing
⚠️ Authorized use only. HydraSight is built for systems you own or test under explicit written permission. Unauthorized security testing is illegal and unethical. The maintainers accept no responsibility for misuse. The tool's safety architecture enforces authorization at runtime — but the attestation is an integrity gate, not a legality gate: you are responsible for what you attest.
What this is
HydraSight is a local, stateful operator console that sits between a privately-running LLM (via Ollama) and real security tools on a Kali Linux host (via the kali-linux-mcp REST bridge). It translates operator intent into proposed tool invocations, runs every proposal through a hard security gauntlet, executes only what passes, and writes an immutable record of the whole session.
It is not a chatbot, not a cloud service, and not an autonomous agent. The model plans; the gates decide; you confirm.
Where it differs from the rest of the field
| Chat-wrapper "AI pentesters" | Autonomous pentest agents | HydraSight | |
|---|---|---|---|
| Human-in-the-loop by construction | sometimes | optional | every non-read action |
| Model can execute arbitrary commands | ✔ risk | ✔ risk | ✘ typed allowlisted commands only |
| Mandatory scope authorization before any packet | ✘ | ✘ | ✔ (authorize, deny-by-default) |
| Tamper-evident, redacted audit trail | ✘ | partial | ✔ SHA-256 hash-chained JSONL |
| Runs fully offline / air-gapped | ✘ | ✘ | ✔ (local LLM, local bridge) |
| Open source, MIT, self-hostable | mixed | ✘ | ✔ |
How it works
flowchart LR
OP["Operator input"] --> RT{"CommandRouter"}
RT -- "bare chat" --> CHAT["ChatAIClient — no tool access, dispatch forbidden"]
RT -- "builtin / /run / NL intent" --> PLAN["IntentClassifier → ActionPlanner → PendingAction"]
PLAN --> POL["ExecutionPolicy — confirm / auto / never"]
POL --> DISP{"Dispatcher: the single enforcement chokepoint"}
DISP -- "attested scope ∩ ROE ∧ sanitized" --> KALI["Kali bridge → nmap, enum4linux, gobuster, hydra, msfconsole, john …"]
DISP -- "any gate fails" --> BLOCK["Blocked + logged"]
KALI --> FIND["Parsers → findings state → JSON / PDF report"]
DISP -. "every allow/block decision" .-> AUD[("hydrasight_audit.jsonl — hash-chained, secret-redacted")]
Three properties are architectural, not aspirational:
- Deny by default. No command reaches a target until an operator attests authorization for an
explicit IP/CIDR scope — interactively (
authorize 10.10.10.0/24→ typeI AUTHORIZE) or via a pre-signed file for CI/CTF runs. No attestation, no execution — in every code path, including the engine's. - One chokepoint. ROE rules and the attested scope are enforced in a single place
(
Dispatcher.dispatch); neither can widen the other, and the AI has no route around it — routing decisions are pure regex, never LLM output. - Provable afterwards. Every proposal, approval, block, and outcome is appended to a SHA-256
hash-chained JSONL log with automatic credential redaction. Log integrity is verifiable at any time
(
AuditLogger.verify()), including detection of deleted lines.
Quick start
Requirements
| Component | Version | Notes |
|---|---|---|
| Python | 3.10 – 3.12 | Any OS that can reach Ollama and the bridge (execution happens on Kali); console verified on Linux and Windows |
| Ollama | latest | Any chat model; default: qcwind/qwen3-8b-instruct-Q4-K-M:latest |
| Kali Linux + kali-linux-mcp | rolling | On Kali: sudo apt install mcp-kali-server, then start the bridge with kali-server-mcp (serves the API on :5000) |
Install & configure
pip install hydrasight
cp hydrasight.json.example hydrasight.json # point kali_api_url at your bridge
ollama pull qcwind/qwen3-8b-instruct-Q4-K-M:latest # or set "model" in hydrasight.json
Run your first engagement
hydrasight # or: python -m hydrasight
hydrasight › authorize 10.129.74.0/24 ── type "I AUTHORIZE" at the prompt
hydrasight › enumerate smb shares on 10.129.74.47
Proposing enum4linux -a 10.129.74.47 2>&1 | head -n 150
Confirm? [y/N] y
✔ Found 3 shares: IPC$, ADMIN$, Data
Chat is always safe: any question (what is smb signing?) never dispatches — a fake-execution
guard rejects LLM role-play like “I will begin scanning.” Full walkthrough:
Getting started.
The safety & accountability model
Five independent layers — any one of them can stop a command; the LLM can be wrong four times in a row and still hit a wall:
| Layer | Mechanism | Failure mode it prevents |
|---|---|---|
| Mode separation | Regex CommandRouter; chat client structurally cannot dispatch |
model decides to “just run this” |
| Authorization attestation | scope-bound, expiring, deny-by-default | out-of-scope targets, forgotten sessions |
| Rules of Engagement | per-engagement JSON: allowed targets, blocked ports/modules, kill_switch |
scope errors, runaways |
| Command sanitizer | fail-closed allowlist of binaries + shell-metacharacter rejection; typed CommandSpec → string, never interpolation |
injection through tool arguments |
| Audit ledger | append-only hash chain + redaction, records both allowed and blocked | deniability, silent failures |
Execution modes: confirm (default — every action prompted) · auto (self-executes only at
model confidence ≥ 80%) · never (explain-and-suggest only — the demo/supervisor mode).
The toolbelt covers recon → exploitation → post-access → credential work (nmap, enum4linux, smbclient, gobuster, nikto, whatweb, hydra, msfconsole RC, john, and the metasploit post-access handlers for SSH/FTP/web admin), each defined as a typed action in the registry. Complete list and how to add tools: Tools · Extending.
Documentation
| Getting started | setup, first engagement, Docker/compose |
| Configuration | every key, env overrides, precedence |
| Security model | the five layers in depth |
| Authorization & audit | attestation lifecycle, chain verification |
| Rules of Engagement | writing an ROE file, kill switch |
| Architecture & Development | codebase tour, contributor guide |
Quality bar
CI enforces, on every push and pull request:
| Gate | Floor |
|---|---|
| Tests | 797, offline, mocked — no network, no flake |
| Branch coverage | ≥ 75% (--cov-fail-under), reported with missing-line detail |
| Typing | mypy: untyped defs forbidden, strict-equality, no-implicit-optional |
| Lint & format | ruff + ruff format --check, pylint ≥ 9.0 (currently 9.18) |
| Docs | mkdocs build --strict |
| Releases | twine check, then PyPI publish via OIDC trusted publishing — no API tokens, ever — gated by a GitHub environment; provenance on v* tags only |
Local equivalent: make install && make lint typecheck test — see Makefile.
Versioning & releases
Semantic Versioning; the release flow and its guarantees are documented in
RELEASING.md. Every published artifact is reproducible from the tagged commit, and
CHANGELOG.md follows Keep a Changelog.
Security & responsible disclosure
Found a vulnerability in HydraSight itself (bypass of the sanitizer, scope or audit layer)? Please report privately per SECURITY.md — the safety architecture is the product, so these reports are treated with the highest priority. Contributions are welcome: CONTRIBUTING.md.
Acknowledgments
Built on Ollama, Rich, ReportLab, and the kali-linux-mcp bridge — and shaped by the HTB/CTF community's workflow.
License
MIT © 2026 Shyamprasanth04.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hydrasight-4.1.1.tar.gz.
File metadata
- Download URL: hydrasight-4.1.1.tar.gz
- Upload date:
- Size: 180.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43ec60e15e7c403dea7aeed22a2ed3a8b7ef6713ade4fd9d2595d64b2e6766df
|
|
| MD5 |
d7383deeb4d50d36684e0d2545b514ff
|
|
| BLAKE2b-256 |
8f10b460f101b36a369cdcbcfcba91335242e5b6cf3ad574a4591a914ace8b7b
|
Provenance
The following attestation bundles were made for hydrasight-4.1.1.tar.gz:
Publisher:
release.yml on Shyamprasanth04/hydrasight
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hydrasight-4.1.1.tar.gz -
Subject digest:
43ec60e15e7c403dea7aeed22a2ed3a8b7ef6713ade4fd9d2595d64b2e6766df - Sigstore transparency entry: 2695292363
- Sigstore integration time:
-
Permalink:
Shyamprasanth04/hydrasight@2dd01a2715f2e70d3a7566c5cce5291a352f3ff4 -
Branch / Tag:
refs/tags/v4.1.1 - Owner: https://github.com/Shyamprasanth04
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2dd01a2715f2e70d3a7566c5cce5291a352f3ff4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file hydrasight-4.1.1-py3-none-any.whl.
File metadata
- Download URL: hydrasight-4.1.1-py3-none-any.whl
- Upload date:
- Size: 150.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f08ff108627b410dbb9282241b3acf64c3e762ea4cdadd2c037764f87d56d909
|
|
| MD5 |
081eb35a2d02fc01f8e106d6dc88fcb3
|
|
| BLAKE2b-256 |
f1d99b78ea217bed314130a12e9a500f1e54bde2989854390d66b39545d9a497
|
Provenance
The following attestation bundles were made for hydrasight-4.1.1-py3-none-any.whl:
Publisher:
release.yml on Shyamprasanth04/hydrasight
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hydrasight-4.1.1-py3-none-any.whl -
Subject digest:
f08ff108627b410dbb9282241b3acf64c3e762ea4cdadd2c037764f87d56d909 - Sigstore transparency entry: 2695292425
- Sigstore integration time:
-
Permalink:
Shyamprasanth04/hydrasight@2dd01a2715f2e70d3a7566c5cce5291a352f3ff4 -
Branch / Tag:
refs/tags/v4.1.1 - Owner: https://github.com/Shyamprasanth04
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2dd01a2715f2e70d3a7566c5cce5291a352f3ff4 -
Trigger Event:
push
-
Statement type: