关于 Robin: AI-Powered Dark Web OSINT
Robin 是基于 AI 的暗网 OSINT 工具,通过 Tor 搜索洋葱搜索引擎、抓取页面,并借助所选模型筛选结果、生成调查摘要。适合从事合法调查与安全研究的人员,可以 Web UI 或 MCP 方式使用。
主要功能
- 01通过 Tor 搜索暗网引擎并抓取页面
- 02支持多家 LLM 服务及 OpenAI 兼容接口
- 03Streamlit Web UI 交互式调查
- 04基于调查数据的追问与关联查询建议
- 05提供 Docker 部署方式
适用场景
- 01对暗网相关主题开展合法的 OSINT 调查
- 02让 MCP 兼容 Agent 使用自身模型运行调查
- 03将调查结果保存为报告以便后续查阅
MCP 相关
Robin 可作为 MCP 服务运行,MCP 客户端调用其工具时使用客户端自身的模型,搜索与抓取通过 Tor 完成,报告保存在 investigations 目录中。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Robin:AI 驱动的暗网 OSINT 工具
Robin 是一款 AI 驱动的工具,用于开展暗网 OSINT 调查。它利用大模型优化查询、筛选暗网搜索引擎的搜索结果,并提供调查摘要。
安装 • 将 Robin 用作 MCP • 故障排除 • 参与贡献 • 致谢
架构

功能
- 🤖 多模型支持 – OpenAI、Claude、Gemini、Mistral、OpenRouter、Ollama,或任何兼容 OpenAI 的 API(LM Studio、llama.cpp、Groq 等)。
- 🌐 Web UI – 基于 Streamlit 的界面,支持交互式调查。
- 🔌 MCP 支持 – 可从任何支持 MCP 的 Agent 中运行 Robin,并使用该 Agent 自身的模型。参见将 Robin 用作 MCP。
- 💬 对话式后续提问 – 无需重新运行搜索,即可就调查内容提出有依据的后续问题;答案基于该调查自身的数据。
- 🔀 一键切换调查方向 – 根据调查发现推荐后续查询;点击即可启动新的调查。
- 🐳 支持 Docker – 推荐使用 Docker 部署,实现干净、隔离的使用环境。
⚠️ 免责声明
本工具仅供教育和合法调查之用。根据您所在的司法管辖区,访问或交互某些暗网内容可能违法。作者不对本工具的任何滥用行为或使用本工具收集的数据承担责任。
请负责任地使用,并自行承担风险。在开展 OSINT 调查前,请确保遵守所有相关法律和机构政策。
此外,Robin 使用第三方 API(包括大模型)。发送可能包含敏感信息的查询时请谨慎,并查看您所用 API 或模型提供商的服务条款。
安装
说明
该工具需要 Tor 执行搜索。你可以在 Linux/Windows(WSL) 上使用
apt install tor,或在 Mac 上使用brew install tor安装 Tor。安装后,请确认 Tor 是否在后台运行。
提示
通过
.env文件(复制.env.example)或环境变量提供 API 密钥即可。只需一个密钥:Robin 会列出其检测到的提供商所支持的模型。支持的密钥包括OPENAI_API_KEY、ANTHROPIC_API_KEY、GOOGLE_API_KEY、MISTRAL_API_KEY和OPENROUTER_API_KEY。使用 Ollama 时,不需要在
.env中设置任何内容。Robin 默认使用http://host.docker.internal:11434,这是推荐的 Docker 安装方式所需的地址。你仍需自行完成以下两项设置:
- 使用
--add-host=host.docker.internal:host-gateway运行容器(README 中的命令已包含此参数)。- 让 Ollama 监听所有网络接口,因为它默认绑定到
127.0.0.1,而容器无法访问该地址。如果你自行启动 Ollama,请运行OLLAMA_HOST=0.0.0.0 ollama serve &。如果 Ollama 由 systemd 运行,请执行sudo systemctl edit ollama.service,添加[Service]和Environment="OLLAMA_HOST=0.0.0.0",然后运行sudo systemctl daemon-reload && sudo systemctl restart ollama。如果仍未显示,请参阅 TROUBLESHOOTING.md。
对于其他任何兼容 OpenAI 的提供商(LM Studio、llama.cpp、Groq 等),请使用侧边栏中的 🔌 Custom API Provider 展开面板,无需更改
.env。输入基础 URL、可选的 API 密钥;如果提供商未开放/v1/models供自动发现,也可以输入模型名称。
Docker [推荐]
- 拉取最新的 Robin Docker 镜像
docker pull apurvsg/robin:latest
- 在运行命令的文件夹中创建
.env文件,并在其中填写 API 密钥(参见.env.example)。请在首次运行前创建此文件:如果文件不存在,Docker 会在该位置挂载一个空文件夹,Robin 启动时将没有任何密钥。
touch .env # then add your API key to it
- 按如下方式运行 Docker 镜像:
docker run --rm \
-v "$(pwd)/.env:/app/.env" \
--add-host=host.docker.internal:host-gateway \
-p 8501:8501 \
apurvsg/robin:latest
提示
若要在 Docker 重启后保留已保存的调查结果,请在
/app/investigations挂载命名卷或本地目录。命名卷适用于所有操作系统,无需指定主机路径。Robin as MCP 中 Agent 命令挂载的也是此卷,因此 UI 会显示 Agent 保存的同一批报告:
docker run --rm \ -v "$(pwd)/.env:/app/.env" \ -v robin-investigations:/app/investigations \ --add-host=host.docker.internal:host-gateway \ -p 8501:8501 \ apurvsg/robin:latest如果希望 JSON 文件保存在自己的磁盘上,也可以挂载本地目录:
docker run --rm \ -v "$(pwd)/.env:/app/.env" \ -v "$(pwd)/investigations:/app/investigations" \ --add-host=host.docker.internal:host-gateway \ -p 8501:8501 \ apurvsg/robin:latest调查结果会保存到工作目录中的
investigations/文件夹,并可从侧边栏的 Past Investigations 面板加载。请先自行创建该文件夹(
mkdir -p investigations),以免 Docker 将其创建为 root 用户所有。在 Linux 上,容器以 UID 1000 运行,其他用户所有的文件夹对其而言是只读的——Robin 会打印一条警告,保存操作会失败,但调查仍会继续。如果遇到此问题,或你的 UID 不是 1000,请使用上面的命名卷,或参阅 Saved investigations fail with permission denied on Linux。
- 打开浏览器并访问
http://localhost:8501
自行构建
若要运行自己的构建版本,而非已发布的镜像,请克隆仓库并 进行构建:
docker build -t robin .
然后使用相同的运行命令,将 apurvsg/robin:latest 替换为 robin:
docker run --rm \
-v "$(pwd)/.env:/app/.env" \
--add-host=host.docker.internal:host-gateway \
-p 8501:8501 \
robin
docker run --rm \
-v "$(pwd)/.env:/app/.env" \
-v "$(pwd)/investigations:/app/investigations" \
--add-host=host.docker.internal:host-gateway \
-p 8501:8501 \
robin
- 打开浏览器并访问
http://localhost:8501
Robin 作为 MCP
任何支持 MCP 的大模型服务都可以使用自己的模型运行它。下面各节提供了适用于常见宿主的示例;未列出的宿主也可以用同样的方式配置,只需使用它添加 MCP 服务时采用的措辞即可。
Claude Code
claude mcp add robin -- docker run -i --rm -v robin-investigations:/app/investigations apurvsg/robin mcp
也可以将配置提交到项目中的 .mcp.json。Tor 调查需要几分钟,因此请提高每个服务的超时时间:
{
"mcpServers": {
"robin": {
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "robin-investigations:/app/investigations", "apurvsg/robin", "mcp"],
"timeout": 600000
}
}
}
Codex
codex mcp add robin -- docker run -i --rm -v robin-investigations:/app/investigations apurvsg/robin mcp
ChatGPT 桌面应用共用此宿主:在其中通过 Settings → MCP servers 添加 Robin,会写入相同的配置;它的工具会出现在 Codex 会话中,而不是普通的 ChatGPT 对话中。
Tor 搜索通常需要几分钟,可能超过 Codex 默认的 MCP 工具超时时间,因此请提高 ~/.codex/config.toml 中的限制:
[mcp_servers.robin]
command = "docker"
args = ["run", "-i", "--rm", "-v", "robin-investigations:/app/investigations", "apurvsg/robin", "mcp"]
tool_timeout_sec = 600
startup_timeout_sec = 60
# Only for non-interactive runs (`codex exec`): Codex declines MCP tool calls
# that would need approval, so pre-approve Robin's read-only tools.
default_tools_approval_mode = "approve"
先拉取镜像(docker pull apurvsg/robin:latest),这样首次启动时就不必同时下载镜像。
Claude Desktop
将以下内容添加到 claude_desktop_config.json,然后重启应用:
{
"mcpServers": {
"robin": {
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "robin-investigations:/app/investigations", "apurvsg/robin", "mcp"]
}
}
}
Hermes
在 ~/.hermes/config.yaml 中:
mcp_servers:
robin:
command: docker
args: [run, -i, --rm, -v, "robin-investigations:/app/investigations", apurvsg/robin, mcp]
timeout: 600
OpenClaw
openclaw mcp add robin --command docker --arg run --arg -i --arg --rm --arg -v --arg robin-investigations:/app/investigations --arg apurvsg/robin --arg mcp
或者在配置的 mcp.servers 下添加:
{
"mcp": {
"servers": {
"robin": {
"transport": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "robin-investigations:/app/investigations", "apurvsg/robin", "mcp"],
"requestTimeoutMs": 600000
}
}
}
}
ChatGPT
桌面应用的 Settings → MCP servers 用于配置该应用、Codex CLI 和 IDE 扩展共用的 Codex 宿主,因此请在那里添加 Robin,它就会出现在 Codex 会话中:请参阅 Codex。普通的 ChatGPT 对话无法运行它,因为 ChatGPT 通过在 OpenAI 基础设施上运行的连接器访问 MCP 服务,而不是在你的计算机上运行。
安全性
- 不会发送、执行或运行任何 Shell 命令。唯一的写入操作是保存报告,文件位于
investigations/目录下,文件名由 Robin 选择;Agent 不会指定路径。 - 搜索、页面抓取和搜索引擎健康检查都通过 Tor 进行,因此你使用的应用本身不会抓取暗网网页。模型提供商调用和模型列表刷新则直接进行,不经过 Tor。
- 抓取的文本会放在不可信数据分隔符内返回,并且会先剥除控制字符、零宽字符和双向文本字符,因此模型会将其作为证据来读取,而不是作为指令。
致谢
- 创意灵感来自 Thomas Roccia 及其对 Perplexity of the Dark Web 的演示。
- 工具灵感来自我的 OSINT Tools for the Dark Web 仓库。
- 大模型提示词灵感来自 OSINT-Assistant 仓库。
- Logo 由我的朋友 Tanishq Rupaal 设计。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。