By Manny Fernandez

September 22, 2026

Installing the Argus OSINT Framework on macOS

Executive Summary

Argus (jasonxtn/Argus) is a Python based, all in one reconnaissance toolkit built around a single interactive CLI shell and 135 modules spread across three categories: Network & Infrastructure, Web Application Analysis, and Security & Threat Intelligence. It’s the kind of tool you reach for when you want WHOIS, DNS, TLS, subdomain, and exposure checks in one console instead of ten different one off scripts.

The official install docs are written for a generic Linux box. macOS has its own wrinkles: no bundled python3 on current releases, PEP 668’s “externally managed environment” lockout on Homebrew Python, a sudo-only installer script that quietly loses your PATH, and a couple of C extension dependencies that need Xcode’s compiler toolchain. This guide walks through a clean, fully working install on both Apple Silicon and Intel Macs, covers all four install paths from the README, and closes with the macOS specific failures you’re actually going to hit.

Target audience: SEs, OSINT analysts, and blue/red team practitioners who are comfortable in Terminal and want a native macOS install rather than a Linux VM.

Legal disclaimer: Argus is built for educational and authorized security research only. Only point it at assets you own or have explicit written permission to test.

Prerequisites & Architecture

Component Purpose Install command
Xcode Command Line Tools Compiler toolchain for C extension packages (mmh3, and any dependency without a prebuilt macOS wheel) xcode-select –install
Homebrew Package manager for Python, Git, and pipx /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
Python 3.10+ Argus requires Python 3.10 or newer (requires-python = ">=3.10") brew install python@3.12
Git Clone the repository brew install git
pipx (optional) Isolated installs of the PyPI package without fighting PEP 668 brew install pipx && pipx ensurepath
Docker Desktop (optional) Container based install, no Python packaging at all Download from docker.com

A quick note on why Python itself needs a call out: recent macOS releases no longer ship a usable /usr/bin/python3 (Apple’s stub either redirects to the Xcode CLT installer or points at an ancient build). Don’t fight it. Install Python 3.12 through Homebrew and use that.

Installation Method 1: Git Clone + Virtual Environment (Recommended)

This is the path that installs every dependency in requirements.txt, which means every one of the 135 modules is available, including the SNMP, LDAP, and SSL/JWT focused ones. It also sidesteps PEP 668 entirely because a virtual environment is never “externally managed.”

git clone https://github.com/jasonxtn/Argus.git
cd Argus

python3.12 -m venv .venv
source .venv/bin/activate

pip install --upgrade pip
pip install -r requirements.txt

python -m argus

Every time you come back to it in a new terminal session, reactivate the environment first:

cd Argus && source .venv/bin/activate && python -m argus

Installation Method 2: pipx Quick Install

The README’s “Option 2” installs Argus straight from PyPI as argus-recon. pipx is the right tool for this on macOS because it builds an isolated virtual environment for you behind the scenes and drops a clean argus command on your PATH, no manual venv juggling required.

brew install pipx
pipx ensurepath
pipx install argus-recon

argus

Read this before you pick Method 2: the PyPI package’s pyproject.toml pins a noticeably shorter dependency list than the git repo’s requirements.txt. It’s missing pysnmp, pyOpenSSL, PyJWT, cryptography, ldap3, jarm, cmd2, rich, colorama, tabulate, aiohttp, and aioquic. That means the SNMP walk modules, several TLS/certificate modules, the JWT analyzer, and the LDAP module can throw ImportError the first time you run them. If you hit that, inject the missing packages into the same isolated environment:

pipx inject argus-recon pysnmp pyOpenSSL PyJWT cryptography ldap3 jarm cmd2 rich colorama tabulate aiohttp aioquic

If you want zero chance of a missing module, use Method 1 instead.

Installation Method 3: Full System-Wide Installer

The README’s “Option 3” runs install.sh, which copies the source to /opt/argus, drops a launcher at /usr/local/bin/argus, and installs dependencies with a plain, non-venv pip3 install -r requirements.txt. It requires root.

git clone https://github.com/jasonxtn/Argus.git
cd Argus
chmod +x install.sh
sudo ./install.sh

Two macOS specific things will bite you here, both covered in Troubleshooting below: sudo resetting your PATH so it can’t find a Homebrew python3, and the same PEP 668 lockout from Method 2, except now you don’t have pipx’s isolation to save you. If you go this route, read the Troubleshooting section before you run it.

Installation Method 4: Docker

The README’s “Option 4.” No Python packaging on the host at all, at the cost of running Argus inside a container.

git clone https://github.com/jasonxtn/Argus.git
cd Argus

docker build -t argus-recon:latest .
docker run -it --rm -v $(pwd)/results:/app/results argus-recon:latest

On Apple Silicon, Docker Desktop builds a native arm64 image by default as long as the Dockerfile doesn’t hardcode a platform. Confirm you actually got a native build rather than an emulated one:

docker image inspect argus-recon:latest --format '{{.Architecture}}'

You want arm64 back on an M-series Mac. amd64 means the image is running under Rosetta emulation, which works but is noticeably slower for anything CPU heavy.

First Run and Basic Usage

However you installed it, the shell works the same way:

argus
# or, running from inside the repo folder without an installed entry point:
python -m argus
argus> modules
argus> modules -d
argus> use 18
argus> set target example.com
argus> run

Module 18 in the current catalog is WHOIS Lookup, a safe first module to confirm everything is wired up correctly. Point set target at a domain you actually own or are authorized to assess, not a random third party.

Configuring API Keys

Several modules (Shodan, VirusTotal, Censys, Have I Been Pwned) are far more useful with API keys attached. macOS has used zsh as the default login shell since Catalina, so these go in ~/.zshrc, not ~/.bash_profile:

cat >> ~/.zshrc << 'EOF'
export VIRUSTOTAL_API_KEY="your_key_here"
export SHODAN_API_KEY="your_key_here"
export CENSYS_API_ID="your_id_here"
export CENSYS_API_SECRET="your_secret_here"
export GOOGLE_API_KEY="your_key_here"
export HIBP_API_KEY="your_key_here"
EOF

source ~/.zshrc

Confirm they loaded from inside the shell:

argus> show api_status

Verification & Validation

You’re in good shape if:

  • argus> modules -d lists all 135 modules across the three categories without a stack trace on launch.
  • argus> use 18 followed by set target <your-domain> and run returns WHOIS output rather than a ModuleNotFoundError or ImportError.
  • argus> show api_status shows any keys you configured as active rather than missing.

If a module import fails specifically, that’s almost always the Method 2 dependency gap above, not a broken install.

Troubleshooting & Gotchas

“error: externally-managed-environment” during pip install

Homebrew’s Python (and current python.org installers) refuse a bare pip install outside a virtual environment, per PEP 668. This is what Method 1’s venv and Method 2’s pipx both exist to avoid. If you’re stuck doing a raw system install anyway, the escape hatch is pip3 install --break-system-packages -r requirements.txt, but a venv is the better answer every time.

sudo ./install.sh fails with “Python3 not found” even though python3 works fine in your normal shell

sudo resets PATH to a restricted “secure_path” that typically only includes /usr/bin:/bin:/usr/sbin:/sbin, so it never sees Homebrew’s python3 at /opt/homebrew/bin (Apple Silicon) or /usr/local/bin (Intel). Preserve your own PATH for the one command instead of editing sudoers:

sudo env "PATH=$PATH" ./install.sh

mmh3 (or another package) fails to build with a clang error or “command not found”

That’s a missing compiler, not a broken package. Install the Command Line Tools and retry:

xcode-select --install

A specific module throws ImportError: No module named ‘pysnmp’ (or ldap3, jwt, OpenSSL)

You installed via pipx install argus-recon (Method 2). See the dependency gap noted above; either pipx inject the missing packages or switch to Method 1’s full requirements.txt install.

Modules time out or return empty results on the first run

macOS’s built-in Application Firewall (or Little Snitch, if you run it) may be silently blocking outbound connections from an unsigned Python process the first time it tries to reach the network. Check System Settings > Network > Firewall for a blocked-connection prompt, or check Little Snitch’s connection log, and allow outbound access for python3 (or the argus binary if you used Method 3).

Docker build produces a slow, emulated image on an M-series Mac

Confirm the architecture with docker image inspect argus-recon:latest --format '{{.Architecture}}'. If it comes back amd64, rebuild without forcing a platform, or explicitly pass --platform linux/arm64 to docker build.


Argus is a third party open source project (MIT licensed) maintained by jasonxtn, unaffiliated with Fortinet or InfoSecMonkey. Test only what you’re authorized to test.

Recent posts

  • If you've spent any time configuring user authentication on... Full Story

  • DNS is one of those technologies that quietly underpins... Full Story

  • BGP issues on FortiGate firewalls usually trace back to... Full Story

  • Every time your laptop talks to your router, a... Full Story

  • If you've spent any time configuring NAT on a... Full Story

  • If you have spent any time configuring firewall policies... Full Story

  • High availability on FortiGate is one of those features... Full Story

  • If you've configured SD-WAN on a FortiGate, you've almost... Full Story

  • FortiLink is the management protocol that turns a FortiSwitch... Full Story

  • FortiSwitches are pretty rock solid from Mean Time Between... Full Story

  • This is a quicky tip.  Have you ever gone... Full Story

  • DNS is one of those quiet pieces of internet... Full Story

  • This article is an updated version of the previous... Full Story

  • You will add ns2 as a secondary (slave) BIND9... Full Story

  • In the process of deploying my lab, I needed... Full Story

  • RFC 8805, used to be known as Self-Correcting IP... Full Story

  • Years back, I wrote an article about certificate pinning. ... Full Story

  • FortiGates have the ability to send alerts to Microsoft... Full Story

  • In this post, I am going to walk through... Full Story

  • Troubleshooting VoIP on a FortiGate can feel like trying... Full Story

  • Prior to FortiOS 7.0, there were three commands to... Full Story

  • In this post, I am going to go over... Full Story

  • What we are going to do:  We are going... Full Story

  • Choosing between FGCP (FortiGate Clustering Protocol) and FGSP (FortiGate... Full Story

  • Creating a VLAN on macOS (The "Pro" Move) A... Full Story

  • This blog post explores the logic behind how macOS... Full Story

  • Pretty Fly for a Wi-Fi Tell My Wi-Fi Love... Full Story

  • Part of my daily gig is creating BoMs (Bill-of-Materials)... Full Story

  • ICMP introduces several security risks, but careful filtering, rate... Full Story

  • The command diag debug application dhcps -1 enables full... Full Story

  • In the world of FortiOS, execute tac report is... Full Story

  • LLDP; What is it The Link Layer Discovery Protocol... Full Story

  • What it actually does When you run diagnose fdsm... Full Story

  • Monkey Bites are bite-sized, high-impact security insights designed for... Full Story

  • I have run macOS in macOS with Parallels but... Full Story

  • Don't be confused with my other FortiNAC posts where... Full Story

  • This is the third session in a multi-part article... Full Story

  • Today I was configuring key-based authentication on a FortiGate... Full Story

  • Netcat, often called the "Swiss Army knife" of networking,... Full Story

  • At its core, IEEE 802.1X is a network layer... Full Story

  • In case you did not see the previous FortiNAC... Full Story

  • This is our 5th session where we are going... Full Story

  • Now that we have Wireshark installed and somewhat configured,... Full Story

  • The Philosophy of Packet Analysis Troubleshooting isn't about looking... Full Story

  • Speed Up the Dock via TerminalOpen the Terminal app... Full Story

  • Executive Summary Argus (jasonxtn/Argus) is a Python based, all... Full Story

  • Windows 11 has well over a hundred keyboard shortcuts,... Full Story