AI-powered OSINT agent for conversational intelligence gathering. For authorized security research use only.
Project description
AI-powered Open Source Intelligence agent for security researchers, journalists, and investigators.
GitHub social preview image:
assets/github-banner.svg
⚠️ Legal Disclaimer: OpenOSINT is intended for legal and authorized use only. Users are solely responsible for ensuring their use complies with all applicable laws. The authors accept no liability for misuse. See DISCLAIMER.md.
OpenOSINT is a conversational CLI that uses Claude's native tool-use API to autonomously decide which OSINT tools to run, in what order, and how to chain findings — then compiles a structured intelligence report. You provide the target; the AI does the investigation.
Table of Contents
- Features
- Quick Start
- OSINT Tools
- CLI Reference
- Providers
- Optional API Keys
- Python API
- Architecture
- Configuration
- Responsible Use
- Legal & Ethics
- Contributing
- What's New
- License
Features
- Native Anthropic tool use — no brittle prompt engineering; uses
stop_reason: tool_usewith real function dispatch - 10 OSINT modules covering email, username, domain, IP, phone, breach data, image metadata, and Google dorks
- 17-platform username search (GitHub, Reddit, Twitter/X, Instagram, TikTok, YouTube, Twitch, and more)
- Multi-provider — Anthropic (default), OpenAI, or any Ollama local model
- Beautiful terminal UI powered by Rich — spinners, live tool output, styled reports
- Interactive REPL + one-shot CLI — chat with the agent or pipe it into scripts
- Auto-saved Markdown reports in a configurable
reports/directory - Zero required API keys beyond Anthropic — most tools work without any additional credentials
Quick Start
1. Clone and install
git clone https://github.com/openosint/openosint
cd openosint
bash setup.sh
source .venv/bin/activate
2. Set your API key
export ANTHROPIC_API_KEY=sk-ant-...
# Or add to .env (copy from .env.example)
3. Investigate
# Interactive mode (recommended)
openosint
# One-shot investigation
openosint investigate john@example.com
openosint investigate example.com --save
openosint investigate 8.8.8.8
openosint investigate "+1 555 867 5309"
OSINT Tools
| Tool | Target | Data Sources | Key Required |
|---|---|---|---|
check_email |
DNS/MX records, disposable DB, provider detection | None | |
check_username |
Username | GitHub, Reddit, Twitter/X, Instagram, TikTok, YouTube, Twitch, +10 | None |
check_domain |
Domain | WHOIS, DNS (A/MX/NS/TXT), SSL cert, HTTP headers | None |
check_ip |
IP | ip-api.com geolocation, reverse DNS, AbuseIPDB (opt.) | Optional |
check_phone |
Phone | libphonenumber — country, carrier, line type | None |
check_breach |
HaveIBeenPwned v3 — breaches + pastes | HIBP key | |
check_metadata |
Image URL | EXIF — GPS, camera model, timestamps | None |
generate_dorks |
Any | Google/Bing dork generation (no API call) | None |
dns_lookup |
Domain | A, AAAA, MX, NS, TXT, CNAME, SOA, PTR | None |
whois_lookup |
Domain/IP | WHOIS — registrar, dates, nameservers | None |
CLI Reference
Interactive mode
$ openosint
Target john.doe@gmail.com
› check_email email john.doe@gmail.com
✓ valid=True provider=Google mx=gmail-smtp-in.l.google.com
› check_breach email john.doe@gmail.com
✓ breaches=2 latest=Adobe (2013)
› check_username username johndoe
✓ found on 5 platforms
...
openosint ❯ What about his domain example.com?
openosint ❯ save
openosint ❯ quit
Interactive commands:
| Command | Description |
|---|---|
<target> |
Start an investigation |
investigate <target> |
Explicit investigation |
clear |
Reset conversation history |
save |
Save last report to file |
help |
Show help |
quit / exit |
Exit |
One-shot mode
openosint investigate <target> [--save] [--output FILE] [--quiet]
# Examples
openosint investigate john@example.com
openosint investigate example.com --save
openosint investigate 198.51.100.1 --output /tmp/ip-report.md
openosint investigate "@johndoe" --quiet | grep "Account Discovery" -A 20
Configuration
openosint config --show # show current config
openosint config --provider anthropic # set provider
openosint config --model claude-opus-4-7 # set model
Settings are stored in ~/.config/openosint/config.json. Environment variables always override saved settings.
Providers
Anthropic (default — best results)
export ANTHROPIC_API_KEY=sk-ant-...
# Default model: claude-sonnet-4-20250514
Uses Claude's native tool use API with stop_reason: tool_use. No prompt engineering needed — the model natively understands tool chaining and investigation strategy.
OpenAI
export OPENAI_API_KEY=sk-...
export OPENOSINT_PROVIDER=openai
# Default model: gpt-4o
Ollama (local / no API cost)
ollama pull llama3.1 # or qwen2.5, mistral, etc.
export OPENOSINT_PROVIDER=ollama
export OPENOSINT_MODEL=llama3.1
Optional API Keys
These enhance investigation depth but are not required to start:
| Key | Service | How to get | What it unlocks |
|---|---|---|---|
HIBP_API_KEY |
HaveIBeenPwned | haveibeenpwned.com/API/Key ($3.50/mo) | Breach + paste checking |
ABUSEIPDB_API_KEY |
AbuseIPDB | abuseipdb.com/api (free tier) | IP reputation/abuse score |
Add to .env or export in your shell.
Python API
from openosint.config import Config
from openosint.display import Display
from openosint.agent import OpenOSINTAgent
config = Config.load() # reads .env + env vars
display = Display(quiet=True) # suppress banner/formatting
agent = OpenOSINTAgent(config, display)
report = agent.investigate("example.com")
print(report)
# Save to file
path = agent.save_report(report, "example.com")
Use individual tools directly:
from openosint.tools.email_tools import check_email
from openosint.tools.domain_tools import check_domain
from openosint.tools.username_tools import check_username
result = check_email("user@example.com")
print(result["mx_records"])
print(result["username_variants"])
domain = check_domain("example.com")
print(domain["ssl"]["issuer"])
Architecture
openosint/
├── cli.py # Click CLI — interactive REPL + investigate command
├── agent.py # AI agent loop — Anthropic/OpenAI tool-use dispatcher
├── config.py # Configuration — env vars, ~/.config/openosint/config.json
├── display.py # Rich terminal UI — banner, tool output, report rendering
└── tools/
├── registry.py # Tool definitions (Anthropic format) + dispatcher
├── email_tools.py # Email validation + DNS
├── username_tools.py # 17-platform username search
├── domain_tools.py # WHOIS + DNS + SSL + HTTP
├── ip_tools.py # Geolocation + reverse DNS + AbuseIPDB
├── phone_tools.py # libphonenumber validation
├── breach_tools.py # HaveIBeenPwned v3
├── metadata_tools.py # EXIF extraction
├── dork_tools.py # Google dork generation
└── dns_tools.py # Targeted DNS + WHOIS lookups
Agent loop (Anthropic):
User input
↓
messages.create(tools=TOOL_DEFINITIONS)
↓
stop_reason == "tool_use"? → execute_tool() for each block
↓ ↓
append tool_results display live output
↓
messages.create() again
↓
stop_reason == "end_turn" → render final report
Responsible Use
OpenOSINT queries only publicly available information. Users are responsible for ensuring their use complies with applicable law (GDPR, CFAA, local privacy regulations).
Intended for:
- Authorized security research and penetration testing
- Investigative journalism on matters of public interest
- Digital forensics and incident response
- CTF challenges and security education
- Verifying your own digital footprint
Not for: stalking, harassment, doxing, or unauthorized surveillance.
Contributing
Contributions are welcome. To add a new OSINT tool:
- Create
openosint/tools/your_tool.pywith a function returning adict[str, Any] - Add the tool definition to
openosint/tools/registry.py(TOOL_DEFINITIONSlist) - Add the dispatch case in
execute_tool() - Add the icon to
TOOL_ICONSindisplay.py
See existing tools for the expected return schema pattern.
Organization assets (GitHub banner, org logo, org banner) are in assets/.
Please open an issue first for large changes. For bugs, use the issue tracker.
What's New
v1.0.0 — May 2025
- Initial release — complete OSINT agent with native Claude tool use
- 10 OSINT modules: email, username search (17 platforms), domain, IP, phone, breach data, image EXIF, dork generation, DNS, WHOIS
- Multi-provider: Anthropic (default), OpenAI, Ollama
- Interactive REPL and one-shot
investigatecommand - Auto-saved Markdown reports in
reports/directory - Beautiful Rich-powered terminal UI with live tool output
- Full documentation site
Contributors
| Contributor | Role |
|---|---|
| JustSouichi | Author & maintainer |
Contributions via pull request are welcome — see Contributing.
License
MIT — see LICENSE.
Built on Anthropic Claude · Rich · python-whois · phonenumbers
Project details
Release history Release notifications | RSS feed
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 openosint-1.0.0.tar.gz.
File metadata
- Download URL: openosint-1.0.0.tar.gz
- Upload date:
- Size: 58.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0f89906e5bc0b511c6cb2611e835dede573a1c077487fb37e2bb45ae37517f2
|
|
| MD5 |
013b1ecaecdba472fd0651620afe0928
|
|
| BLAKE2b-256 |
b858f87782e99689af36472d90091b4ac208a05a8f7a52b7796d1844d297d416
|
Provenance
The following attestation bundles were made for openosint-1.0.0.tar.gz:
Publisher:
release.yml on OpenOSINT/OpenOSINT
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openosint-1.0.0.tar.gz -
Subject digest:
e0f89906e5bc0b511c6cb2611e835dede573a1c077487fb37e2bb45ae37517f2 - Sigstore transparency entry: 1473477137
- Sigstore integration time:
-
Permalink:
OpenOSINT/OpenOSINT@0d8af3f236d47b2d43c95e24e1799d35bc3e0671 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/OpenOSINT
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0d8af3f236d47b2d43c95e24e1799d35bc3e0671 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openosint-1.0.0-py3-none-any.whl.
File metadata
- Download URL: openosint-1.0.0-py3-none-any.whl
- Upload date:
- Size: 42.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d70f204ed8007c76984f91785a912747951e59f580040433bfe75081310bc24
|
|
| MD5 |
14e3d3b0b1e3de66aa9bf908126e0440
|
|
| BLAKE2b-256 |
9a18fa63119cbc56a17e86d8a72676b45d87215af2f2d1b85fecb90f2267192e
|
Provenance
The following attestation bundles were made for openosint-1.0.0-py3-none-any.whl:
Publisher:
release.yml on OpenOSINT/OpenOSINT
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openosint-1.0.0-py3-none-any.whl -
Subject digest:
8d70f204ed8007c76984f91785a912747951e59f580040433bfe75081310bc24 - Sigstore transparency entry: 1473477358
- Sigstore integration time:
-
Permalink:
OpenOSINT/OpenOSINT@0d8af3f236d47b2d43c95e24e1799d35bc3e0671 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/OpenOSINT
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0d8af3f236d47b2d43c95e24e1799d35bc3e0671 -
Trigger Event:
push
-
Statement type: