OPSEC by default
Recon output, target IPs, credential snippets, internal hostnames — they all stay between Dark Wire and your local model. Nothing transits the public internet unless a tool explicitly does (and you can disable Web Tools entirely).
Dark Wire is a local-inference pentesting suite. Point a capable model at an authorized target, and the agent drives the full loop — recon, vulnerability research, command execution over SSH — without sending a single prompt or finding to a cloud API.
A capable model decides which tool to call next based on what it just learned. No LangChain, no external orchestrator. Up to 5 tool-call rounds per question for chained reasoning.
You give the agent a goal in plain English: "Map the perimeter of target.lab and tell me what's exploitable."
Agent invokes dns_lookup, red_team_recon (RDAP/WHOIS), get_ip_info, and ssh_run for active probes — all decided autonomously.
Discovered services feed into search_cve against the NIST NVD, plus web_search and url_fetch for write-ups and proof-of-concepts.
ssh_run runs the tools you'd normally type by hand — nmap, nikto, gobuster, sqlmap, dirb, tcpdump, etc. — against the host you authorized.
Agent collates the evidence, prioritizes findings, and writes a structured assessment with concrete next steps. Export to HTML or PDF for the report.
Pentest output is some of the most sensitive material a team produces. Most cloud chat APIs are the wrong place to put it.
Recon output, target IPs, credential snippets, internal hostnames — they all stay between Dark Wire and your local model. Nothing transits the public internet unless a tool explicitly does (and you can disable Web Tools entirely).
Most provider terms forbid using their hosted models for offensive security work, even on authorized targets. Local models you run yourself sidestep that whole conversation.
With Web Tools off, Dark Wire only needs your local Ollama / LM Studio / llama.cpp endpoint. Run engagements from inside a segmented lab, a jump box, or a flight without Wi-Fi.
Pin a model, set a seed, encrypt the history file, and you have a forensically traceable engagement transcript that you can hand to the client without DLP concerns.
Need a frontier model for one tough analysis step? Switch to OpenAI Cloud or Claude in the dropdown — the rest of the engagement still runs locally. Granular by design.
Long recon transcripts, big nmap dumps, and multi-round CVE chasing add up fast on metered APIs. Local inference is free at the margin — burn as many tokens as you need.
Capable models call these autonomously. Toggle them all off in Settings if you'd rather stay strictly local.
Tool definitions are only sent to models with the 🔧 capability marker. The agent loop runs up to 5 rounds for chained calls — recon → CVE lookup → command → re-analysis.
Configure host + user + key in Settings → SSH Configuration. The agent calls ssh_run with whatever shell command makes sense for the moment.
Point at an existing key file (~/.ssh/id_ed25519) or paste an OpenSSH private key directly. Pasted keys are written with 0600 perms, locked down with Windows ACLs, used for the command, then deleted. Test Connection button confirms auth before you trust the agent with it.
Hostname, username, and command are validated for control characters before execution. BatchMode=yes is forced — no interactive password fallback, no surprise host-key prompts.
15 s for the connection probe, 120 s per command. Stdout and stderr are merged, returned to the model, and fed back into the agent loop for the next decision.
The default Dark Wire persona is a security-analysis system prompt: it knows to prepend sudo for privileged tools, to prefer ssh_run over web_search for active probes, and to never paraphrase a tool call as plain text.
Switch the dropdown — URL and API-key fields update automatically. API keys are encrypted at rest with the OS keystore (DPAPI / Keychain / libsecret).
localhost:11434
Native API, NDJSON streaming, capability detection via /api/show, in-app model search & pull.
localhost:1234
OpenAI-compatible /v1/*. Use any model loaded in LM Studio.
localhost:8080
OpenAI-compatible. /props probe detects tools, vision, and <think> reasoning.
your endpoint
Any drop-in OpenAI-compatible server (vLLM, TGI, custom).
key optionalapi.openai.com
For one-off frontier-model analysis. Be mindful of ToS for offensive use.
key requiredapi.anthropic.com
Native Messages API. Server-side tool-format conversion.
key required
contextIsolation: true, nodeIntegration: false. Every privileged action goes through preload IPC — the chat UI cannot touch the file system or the network directly.
API keys and pasted SSH private keys are encrypted at rest via Electron safeStorage — DPAPI on Windows, Keychain on macOS, libsecret on Linux.
Optional encrypted disk history with scrypt key derivation. Unique salt & IV per save. Passphrase lives in memory only — never written, never sent to the model.
url_fetch rejects file://, loopback, link-local, and RFC1918 private addresses — even if the model is convinced to ask for them.
Pasted keys are written with 0600 permissions, ACL-locked to the current user on Windows, and deleted as soon as the command completes. BatchMode=yes blocks interactive password fallbacks.
calculate strips everything outside math characters before evaluating in strict mode. No JS injection vector via the agent's own arithmetic.
git clone https://github.com/MuchDevSuchCode/DarkWire.git
cd DarkWire
npm install
Node 18+ required.
npm start
Auto-connects to localhost:11434.
# Windows portable
npm run build:win
# Linux AppImage / deb
npm run build:linux
Output lands in dist/. Carry the portable .exe on a USB stick to your engagement laptop.
You want tools 🔧 and ideally reasoning 🧠. Start with one of these in Ollama:
qwen2.5:14b — solid tool calling, runs on a 16 GB GPU.qwen2.5:32b — better at multi-step recon chains, needs ~24 GB VRAM.llama3.1:8b — fast, reliable tool calls, fits in 12 GB.qwq:32b — reasoning model; slow but the agent plans much further ahead.Smaller models (≤ 3 B) advertise tool support but call them poorly — fine for chat, not for autonomous engagements.
No — Dark Wire is a driver, not an exploit collection. The exploits, scanners, and post-exploitation tools live on your jump box (kali, parrot, your own toolkit). Dark Wire's job is to plan, sequence, and run them via SSH, then reason over the output.
By default, no. Dark Wire talks to whatever endpoint you point it at — typically localhost. The 14 tools call public APIs (DNS, NVD, DuckDuckGo, etc.) only when the model invokes them, and you can flip Web Tools off in Settings to disable that entirely. Cloud LLM providers (OpenAI, Claude) only see traffic if you choose them in the dropdown.
If History Mode is Memory, nowhere — it dies with the window. If it's Disk, it goes to your OS user data directory under chat_history/current.json. Enable Encrypt History to write current.enc instead, AES-256-GCM with a passphrase that lives only in memory.
Each turn, the model sees its tool definitions and the conversation so far. It emits a tool_calls request, Dark Wire executes the tool in the main process, and feeds the result back. Loop runs up to 5 rounds before the model has to write a final response — enough for chains like dns_lookup → ssh_run nmap → search_cve → recommendation.
Yes — pair it with Ollama, LM Studio, or llama.cpp and disable Web Tools. Configure SSH to a target on your air-gapped lab network, and the only outbound traffic is from your jump box to the target.
The default Dark Wire system prompt frames the model as a sanctioned security analyst with tool access. Model refusals depend entirely on the model you load — community fine-tunes and base models behave very differently here. If you need looser refusals, load an uncensored or DPO'd offensive-security model in Ollama and point Dark Wire at it.
Yes. Bundle a portable build, an Ollama install with one of the recommended models, and the OpenSSH client. With Web Tools off, the only network traffic Dark Wire generates is to your local model and your authorized SSH target.
Absolutely — Dark Wire is also just a great desktop chat client. Switch to the Dark Wire — Light theme for a professional general-purpose persona without the offensive-security framing.
MIT licensed. Cross-platform. Built for people who care where their engagement data lives.