关于 osint
osint 是用于系统化收集个人公开及内部情报的研究技能,面向需要整理人物资料的 Agent。它按阶段组织搜索、来源核验、社交平台提取与交叉分析,并可并行分配子任务。
主要功能
- 01分阶段执行人物研究
- 02并行调用多种搜索与研究工具
- 03提取社交平台资料
- 04交叉核验并整理档案
- 05按可用凭据检查工具
适用场景
- 01从姓名或账号开始收集线索
- 02补充现有档案中的社交资料
- 03核验来源并评估档案完整度
MCP 相关
文档列出 Bright Data MCP endpoint 及 mcporter 配置变量,并将 Bright Data 用于抓取和搜索任务。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ smixs/ osint-skill --skill osint安装后在 Claude Code 中输入/osint确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/dossier-template.mdreferences/content-extraction.mdplatforms.mdpsychoprofile.mdtools.mdscripts/apify.shbrightdata.shdiagnose.shexa.shfirst-volley.shjina.shmcp-client.pymerge-volley.shpackage.jsonparallel.shperplexity.shrun_actor.jsrun-actor.shtavily.sh详细介绍
OSINT 技能 v3.2
对个人进行系统化情报收集。从姓名或账号名开始,最终形成带有心理画像、职业脉络和切入点的评分档案。
阶段路由
根据上下文确定入口:
- 新的姓名/账号名/URL、“пробей”、“find out about” → 阶段 0(完整流程)
- 在现有档案中“添加 LinkedIn/Instagram 数据” → 阶段 2(提取)
- 根据现有数据“建立心理画像” → 阶段 4
- 为现有档案“评估完整度” → 阶段 5
- “重新格式化”或“呈现”调查结果 → 阶段 6
默认(完整调查请求):阶段 0 → 1 → 1.5 → 2 → 3 → 4 → 5 → 6。
环境
所有 API 密钥均通过环境变量提供。切勿将令牌硬编码。
PERPLEXITY_API_KEY— Perplexity Sonar(快速回答 + 深度研究)EXA_API_KEY— Exa AI(语义搜索、公司/人员研究、深度研究)TAVILY_API_KEY— Tavily(针对 Agent 优化的搜索 + 提取,基础版 $0.005/次请求)APIFY_API_TOKEN— Apify 抓取(LinkedIn、Instagram、Facebook)JINA_API_KEY— Jina 阅读器/搜索/深度搜索PARALLEL_API_KEY— Parallel AI 搜索BRIGHTDATA_MCP_URL— Bright Data MCP 端点(包含令牌的完整 URL)MCPORTER_CONFIG— mcporter 配置路径
脚本
在技能目录中运行:bash scripts/<name>.sh。
每个脚本都会验证环境变量;若出错,会退出并提供说明性错误信息和获取密钥的 URL。
搜索与研究:
diagnose.sh— 首先运行。生成所有工具的能力图谱。perplexity.sh—search <query>|sonar <query>(AI 回答)|deep <query>(深度研究)tavily.sh—search <query>(基础版 $0.005)|deep <query>(高级版)|extract <url>exa.sh—search <query>|company <name>|people <name>|crawl <url>|deep <prompt>first-volley.sh "Name" "context"— 并行搜索,同时调用所有引擎。merge-volley.sh <outdir>— 去重并合并 first-volley 结果。
抓取:
apify.sh—linkedin <url>|instagram <handle>|run|results|store-searchrun-actor.sh— 通用 Apify 运行器(55+ 个 Actor)。 内嵌自 apify/agent-skills。 快速回答:bash scripts/run-actor.sh "actor/id" '{"input":"json"}'导出:bash scripts/run-actor.sh "actor/id" '{"input":"json"}' --output /tmp/out.csvjina.sh—read <url>|search <query>|deepsearch <query>parallel.sh—search <query>|extract <url>brightdata.sh—scrape <url>|scrape-batch|search|search-geo <cc>|search-yandex
研究升级流程
原则:从低成本到高成本,从快速到深入。
级别 1:快速回答(数秒,约 $0.00)
始终从这里开始。先获取快速背景信息,再深入调查。 同时运行所有工具:
# Perplexity Sonar — AI ответ с цитатами
bash skills/osint/scripts/perplexity.sh sonar "Who is <Name>, <context>"
# Brave Search — классический поиск
web_search "<Name> <company> <role>"
# Tavily — agent-optimized search с AI answer
bash skills/osint/scripts/tavily.sh search "<Name> <context>"
# Exa — семантический поиск + company/people research
bash skills/osint/scripts/exa.sh search "<Name> <context>"
bash skills/osint/scripts/exa.sh people "<Name>"
→ 获取:快速事实、链接、背景信息。 → 决策:够了吗?→ 阶段 6。需要更多?→ 级别 2。
级别 2:来源核验(数秒至数分钟,约 $0.01)
通过 fetch 核验级别 1 中的来源:
# Читай найденные URL
web_fetch "<url_from_perplexity>"
bash skills/osint/scripts/jina.sh read "<url>"
bash skills/osint/scripts/parallel.sh extract "<url>"
→ 获取:已确认的事实、交叉引用。 → 是否吻合?→ 补充档案。需要深入?→ 级别 3。
级别 3:社交媒体深度调查(约 $0.01–0.10)
接入抓取工具以调查社交媒体:
# LinkedIn
bash skills/osint/scripts/apify.sh linkedin "<url>"
# Instagram
bash skills/osint/scripts/apify.sh instagram "<handle>"
# Facebook, заблокированные сайты
bash skills/osint/scripts/brightdata.sh scrape "<url>"
→ 获取:结构化档案、照片、关系。
级别 4:深度研究(约 $0.05–0.50)
如果需要进一步深入调查,请编写详尽的提示词并提交深度研究。 同时运行所有工具(每个耗时 30–60 秒):
# Perplexity Deep Research
bash skills/osint/scripts/perplexity.sh deep "<detailed research prompt about Name>"
# Exa Deep Research
bash skills/osint/scripts/exa.sh deep "<detailed prompt>"
# Parallel AI Deep Search
bash skills/osint/scripts/parallel.sh search "<detailed query>"
# Jina DeepSearch
bash skills/osint/scripts/jina.sh deepsearch "<query>"
规则: 级别 4 的提示词必须详尽——纳入级别 1–3 中已掌握的所有信息,让深度研究跳过基础事实,继续深入调查。
蜂群模式(默认)
OSINT 研究以 Sonnet 上的并行子 Agent 蜂群方式运行。 主 Agent 负责协调——它不会亲自执行抓取。
工作原理:
- 主 Agent 运行 Phase 0(工具检查)和 Phase 1(种子信息收集),获取初始上下文
- 主 Agent 通过
sessions_spawn启动 3-5 个子 Agent,使用model: sonnet、mode: run - 每个子 Agent 获得一项聚焦任务和 Phase 1 中已知的所有数据
- 子 Agent 返回结果 → 主 Agent 将其整合到档案中
任务拆分模式:
- Agent 1:YouTube/内容 — 通过 Apify 提取文字稿(不要用 yt-dlp,也不要用 BrightData — YouTube 会屏蔽它们)。收集 3-5 个视频、语言风格和主题。频道数据使用
streamers/youtube-channel-scraper - Agent 2:Facebook 深度调查 — 使用 BrightData 抓取:个人资料、帖子、简介、照片、好友(使用 m.facebook.com 获取更多数据)。对于公共主页:使用
apify/facebook-pages-scraper+apify/facebook-page-contact-information - Agent 3:社交平台 — Instagram(Apify + 标签/评论抓取工具)、DOU、公司网站、LinkedIn(BrightData)。补充联系人信息:对找到的网站使用
vdrmota/contact-info-scraper - Agent 4:TikTok + 区域信息 — TikTok 个人资料/视频(
clockworks/tiktok-profile-scraper)、本地登记信息、新闻报道、大学记录、Yandex 搜索、Google Maps(如果是企业所有者,使用compass/crawler-google-places) - Agent 5:深度研究 — Perplexity deep、Exa deep、Parallel deep(如有需要)
规则:
- 始终向每个子 Agent 传递所有已知数据(姓名、URL、邮箱、电话号码、上下文)
- 每个子 Agent 将结果保存到
/tmp/osint-<subject>-<task>.md - 主 Agent 等待所有结果返回,然后运行 Phase 3-6(交叉核查、心理画像、档案整理)
- 预算:每个子 Agent ≤$0.15,整个 Agent 集群 ≤$0.50
- YouTube 文字稿:使用 Apify Actor,不要使用 BrightData 或 yt-dlp(两者都会被 YouTube 屏蔽)
为什么要使用 Agent 集群:
- 5 个 Agent × 5 分钟 = 总计 10 分钟(而顺序执行需要 30 分钟以上)
- Sonnet 的成本是 Opus 的 1/5
- 并行抓取可避免单个 IP 触发速率限制
Phase 0:工具自检
- 执行
bash skills/osint/scripts/diagnose.sh。 - 记录可用和缺失的工具。
- 检查内部工具:
tg.py(Telegram 历史记录)、himalaya(电子邮件)、Vault 联系人。 - 如果 Bright Data 不可用 → Facebook 和 LinkedIn 深度抓取将受限。告知用户。
- 如果 Apify 不可用 → Instagram 和 LinkedIn 结构化数据将受限。
- 使用现有工具继续操作。
Phase 1:种子信息收集
始终先从 Level 1(快速解答)开始,再进行大规模抓取。
- 解析用户输入。提取标识信息:姓名、账号名、URL、公司、地点。
- Perplexity 快速检索:
bash skills/osint/scripts/perplexity.sh search "Who is <Name>, <context>" - 并行使用 Brave + Parallel:
web_search "<Name> <company>" bash skills/osint/scripts/first-volley.sh "Full Name" "context" - 检查 Perplexity 引用 — 获取并核实重要来源:
web_fetch "<citation_url_1>" web_fetch "<citation_url_2>" - 解析并合并:
bash skills/osint/scripts/merge-volley.sh /tmp/osint-<timestamp>。 - 将所有标识信息收集到种子列表中。去重。
- 标记姓名冲突(常见姓名 → 通过公司/地点交叉核查)。
- **决策点:**上下文是否充足?→ 跳至 Phase 4。需要社交媒体信息?→ 进入 Phase 2。需要深入调查?→ Level 4(深度研究)。
**速率限制:**Brave 查询间隔 1 秒,Jina 调用间隔 2 秒。 不要在短时间内密集调用 API — 错开并行任务的启动时间。
Phase 1.5:内部情报
**对外搜索前,先检查我们已掌握的信息。**此阶段会挖掘可能包含宝贵信息的本地来源 — 以往对话、电子邮件、Vault 联系人。
Telegram 历史记录
如果 tg.py 可用(请在 Phase 0 中检查):
# Search by name/handle in Telegram
python3 skills/telegram/scripts/tg.py search "Name" 20
# If we have their username/id — read conversation history
python3 skills/telegram/scripts/tg.py history <username_or_id> 50
从 Telegram 历史记录中提取的内容:
- 沟通风格(正式或非正式、语言、表情符号使用习惯)
- 讨论的话题——他们关心什么、会提出什么需求
- 回复模式——回复速度、活跃时段 → 时区
- 分享的链接/文件——他们参与的项目
- 他们如何称呼用户——双方的关系动态
- 提及的同事、合作伙伴、竞争对手 → 社交关系图谱线索
- 定价讨论、交易条款(如果是业务联系人)
⚠️ Telegram 历史记录属于 A 级情报——未经筛选、实时且真实。 其权重应高于经过筛选的 LinkedIn/Instagram 个人资料。 ⚠️ **隐私:**内部情报应保留在档案中。绝不要在公开内容中引用私信。
电子邮件历史记录
如果 himalaya 可用:
# Search emails by name or domain
~/.local/bin/himalaya search "from:[email protected] OR to:[email protected]" -f INBOX
# Or by name
~/.local/bin/himalaya search "Name Surname" -f INBOX
~/.local/bin/himalaya search "Name Surname" -f Sent
从电子邮件中提取的内容:
- 与 Telegram 风格相比,正式的沟通风格如何(对比之处就是洞察)
- 商业提案、发票 → 财务关系
- 被抄送的人 → 组织关系图
- 签名栏 → 职称、电话、公司、社交链接(通常比 LinkedIn 上的信息更丰富)
知识库 / CRM 检查
# Check if we already have a card
grep -rl "Name" vault/crm/ vault/contacts/ 2>/dev/null
# Check MOC indexes (adjust paths to your vault structure)
grep -i "name" vault/MOC/*.md 2>/dev/null
**如果存在知识库卡片:**读取卡片,记录 last_accessed、现有标签和以往互动。 不要重复创建——研究完成后,丰富现有卡片。
节点摄像头/位置(如果已配对设备)
如果要当面会面且节点可用,nodes camera_snap 可用于采集现场信息。
仅在获得用户明确许可后使用。
内部情报摘要
完成 Phase 1.5 后,你应了解:
- 之前是否存在关系?(陌生/熟悉/关系密切的联系人)
- 他们偏好哪种语言?
- 他们的沟通风格是什么?
- 是否存在现有业务背景?
- 对话中有哪些社交关系图谱线索?
这些背景信息会影响 Phase 2 的优先事项——如果我们已从邮件中了解他们的职业经历, 则应将外部研究重点放在心理画像和社交媒体上。
Phase 2:平台信息提取
仅在需要 URL 模式或提取线索时,才读取 references/platforms.md。
工具优先级(主要工具 → 后备工具)。如果主要工具失败,立即切换。不要重试同一工具。
- LinkedIn:
apify.sh linkedin→brightdata.sh scrape→jina.sh read - Instagram:
apify.sh instagram→brightdata.sh scrape - Instagram 深度分析:
run-actor.sh "apify/instagram-tagged-scraper"(谁标记了他们)、apify/instagram-comment-scraper(情绪倾向) - Facebook 个人主页:
brightdata.sh scrape→ 无(只有 Bright Data 可用) - Facebook 公共主页/群组:
run-actor.sh "apify/facebook-pages-scraper"→brightdata.sh scrape - TikTok:
run-actor.sh "clockworks/tiktok-profile-scraper"→clockworks/tiktok-scraper(全面抓取) - TikTok 发现:
run-actor.sh "clockworks/tiktok-user-search-scraper"(按关键词查找) - YouTube:
run-actor.sh "streamers/youtube-channel-scraper"→jina.sh read→brightdata.sh scrape - Telegram 频道:
web_fetch t.me/s/{channel}→jina.sh read - Twitter/X:
python3 scripts/twitter.py tweet <url>→jina.sh read - Google 地图(商家):
run-actor.sh "compass/crawler-google-places" - 联系人信息补充:
run-actor.sh "vdrmota/contact-info-scraper"(从任意 URL 提取电子邮件/电话号码) - 任意网站:
jina.sh read→brightdata.sh scrape
run-actor.sh = 通用 Apify 执行器(内置 55+ 个 Actor)。完整 Actor 目录请参阅 references/tools.md。
仅在排查工具故障时,才读取 references/tools.md。
⚠️ 内容平台规则(关键)
如果找到 YouTube、播客、博客或会议演讲内容,请立即阅读 references/content-extraction.md,并当场提取 3–5 项内容。
不要只记录 URL。现在就提取字幕/文本。 一段 20 分钟的 YouTube 视频所揭示的一个人的信息,比他们整个 LinkedIn 个人资料还多。 内容平台是心理画像的首要信息来源——跳过这些内容 = 档案内容浅薄。
了解 OpSec 的目标对象
如果初步搜索发现某人的线上足迹异常少,而按理说其应该留有足迹:
- Wayback Machine:
web_fetch "https://web.archive.org/web/2024*/target-url"— 已删除的个人资料、旧简介 - Google Cache:
web_search "cache:domain.com/path"— 最近移除的页面 - Yandex Cache:
brightdata.sh search-yandex "Name"— Yandex 对独联体地区的索引更深入,缓存时间也更长 - 用户名变体: 尝试不同的转写方式(Иванов → ivanov、ivanoff)、在末尾添加出生年份、使用公司缩写
- 反向图片搜索: 如果找到照片,检查其他个人资料是否使用了同一头像
- 会议档案: 个人资料删除后,演讲者简介通常仍会保留
第 3 阶段:交叉比对与置信度评分
步骤 1:事实表
将每条说法列为一行:事实 | 来源 1 | 来源 2 | 等级。
步骤 2:交叉核实关键事实
对于每项关键事实(雇主、职位、地点、教育经历):
- 比较 LinkedIn 头衔、Telegram 签名、电子邮件签名与公司网站
- 如果 2 个或更多来源相符 → A 级
- 如果只有 1 个来源 → B 级
- 如果是推断得出(根据消息推测时区、地理标记)→ C 级
- 如果是单条未经核实的提及 → D 级
步骤 3:解决矛盾
如果 LinkedIn 上写着“CEO”,但公司网站写着“联合创始人”——明确标出。附上两个说法及其来源。不要悄悄择一采用。
步骤 4:检查重名情况
如果姓名常见,至少核实 2 项事实(公司 + 城市,或照片 + 公司)以确认指向同一人。如果无法确定,应拆分为不同实体。
置信度等级:
- A(已确认):2 个或更多独立来源,或官方/已验证的个人资料,或直接的 Telegram/电子邮件对话
- B(较可能):1 个可信来源(LinkedIn、官方媒体、公司网站)
- C(推断):间接证据(照片地理标记、根据消息模式推测时区、社交关系)
- D(未核实):单条提及,可能有误
内部情报(第 1.5 阶段)计为独立来源。
第 4 阶段:心理画像
仅在此阶段阅读 references/psychoprofile.md。
- 收集文本样本:帖子、简介、访谈、频道内容、Telegram 消息(信号最强)。
- 根据有引用的行为证据评估各个维度的 MBTI,并给出置信度(高/中/低)。
- 量化写作风格:句子长度、表情符号密度、自我指涉率。
- 比较正式场合(LinkedIn/电子邮件)与非正式场合(Telegram/Instagram)的表达方式——二者的差异能揭示真实的个性。
- 根据行为而非自我陈述推断价值观。
- 仅当出生日期已确认(A 级或 B 级)时,才判断星座。
第 5 阶段:完整性评估(递归)
维度 1:数据覆盖度(逐项检查通过/不通过)
9 项必查内容。如果任何一项未通过,应标记为关键缺口:
- 是否正确识别了目标对象?(而非同名者)
- 是否确认了当前职位/公司?
- 是否找到至少 2 个社交平台?
- 是否找到至少 1 种联系方式(电子邮件/电话/即时通信工具)?
- 职业经历中是否有 2 个或更多可核实的职位?
- 是否确认了当前位置?
- 是否找到至少 1 张照片?
- 各来源之间是否没有尚未解决的矛盾?
- 是否检查了内部情报?(Telegram/电子邮件/保管库——即使其中没有内容)
维度 2:深度评分(8 项加权标准)
| 维度 | 权重 | 评分内容(1-10) |
|---|---|---|
| 身份 | 0.15 | 全名、出生日期、地点、教育经历、照片 |
| 职业 | 0.20 | 工作经历的完整度、当前职位的明确程度 |
| 数字足迹 | 0.15 | 找到的平台数量、账号活跃程度 |
| 心理画像 | 0.15 | MBTI 置信度、量化后的写作风格、推断出的价值观 |
| 内部情报 | 0.10 | Telegram/电子邮件历史的深度、保管库数据 |
| 个人生活 | 0.05 | 家庭、爱好、生活方式、宠物 |
| 交叉比对 | 0.10 | A 级事实的数量、矛盾数量 |
| 可操作性 | 0.10 | 已识别的切入点、明确的接触策略 |
加权总分(1-10)= 深度评分。
维度 3:来源多样性
统计使用的独特来源类型(最多 12 种): LinkedIn、Instagram、Facebook、Telegram 私信、Telegram 频道、VK、Twitter/X、 公司网站、新闻/媒体文章、会议简介、政府/商业登记册、 电子邮件往来。
- 8 种以上来源 = 优秀
- 5-7 种 = 良好
- 2-4 种 = 浅显
- 1 种 = 不足
差距分析
| 深度评分 | 覆盖情况 | 诊断 | 操作 |
|---|---|---|---|
| 8+ | 全部通过 | 档案扎实 | 进入第 6 阶段 |
| 8+ | 部分未通过 | 深入但存在盲点 | 针对未通过的检查,再进行 1 轮 |
| <7 | 全部通过 | 覆盖广但不够深入 | 通过访谈/文章/深度搜索进一步挖掘 |
| <7 | 部分未通过 | 需要重新开始 | 更换搜索角度,尝试新的工具组合 |
停止标准
(a) 深度评分 ≥ 8.0 且所有覆盖检查均通过 → 进入第 6 阶段 (b) 已完成 3 轮 → 提交当前最佳结果,并如实说明评估 (c) 连续两轮的增量 < 0.5 → 已达平台期,附注说明后提交
校准基准
- 9-10:完整的职业生涯时间线、5 个以上平台、已确认出生日期、高置信度的心理画像、已知家庭/爱好、多个切入点、已分析 Telegram 历史记录。相当于专业 PI 报告。
- 7-8:职业生涯概况、3 个以上平台、大多数事实达到 B 级或更高、具有中等置信度的心理画像。尽职调查扎实。
- 5-6:基本简介、1-2 个平台、存在一些缺口。快速背景调查水平。
- <5:找到的信息极少。最多只能确认姓名和当前职位。标记为信息不足。
第 6 阶段:档案输出
渲染前阅读 assets/dossier-template.md。严格遵循模板结构。
输出中不要使用 Markdown 表格(Telegram 无法渲染)。仅使用项目符号列表。
报告深度评分、来源数量、来源类型和 API 总支出。
如果使用了内部情报,请添加单独的 “内部通信内容” 部分 (标记为内部/机密,不得对外分享)。
预算
- 每个目标 ≤$0.50:无需询问即可支出。
-
$0.50:继续前先询问用户。
- 跟踪每个研究会话的累计支出。
故障排除
- 所有工具都返回空结果:目标的数字化痕迹很少。尝试 Bright Data Yandex 搜索(在 CIS 地区效果更好),改用公司名称 + 职位搜索,而不是姓名。
- 反复出现错误的人物:在所有查询中加入公司名称、城市或职位。用引号括起全名。
- LinkedIn 被屏蔽:优先使用
brightdata.sh scrape,而不是 Apify。 - Apify actor 已失效/变更:通过
apify.sh store-search "linkedin scraper"查找替代项。Apify 上的 actor 变化频繁 — 务必准备 Bright Data 备用方案。 - 深度评分停留在 6-7:很可能缺少新闻/媒体文章或内部情报。搜索行业刊物(俄罗斯市场可查 AdIndex、Sostav、Forbes、Kommersant)。尝试
jina.sh deepsearch。检查 Telegram 历史记录。 - 找不到社交媒体:此人可能使用化名。按电子邮件、电话号码或公司员工页面搜索。在 Apify 商店搜索:
bash scripts/apify.sh store-search "people search"。如果已安装mcpc:APIFY_TOKEN=$APIFY_API_TOKEN mcpc --json mcp.apify.com --header "Authorization: Bearer $APIFY_TOKEN" tools-call search-actors keywords:="people search" limit:=10。按电话号码检查 Telegram 联系人。 - TikTok 抓取工具失败:尝试使用
clockworks/free-tiktok-scraper(免费套餐)作为备用方案。TikTok 用户名通常与其他平台不同 — 通过clockworks/tiktok-user-search-scraper按真实姓名搜索。 - 需要从网站获取电子邮件:使用
vdrmota/contact-info-scraper— 它会抓取网站并提取所有联系信息。 - 受到速率限制(429):先等待 5 秒,再等待 15 秒。切换到备用工具。切勿立即重试。
反模式
- 切勿只从一个工具开始。并行启动所有可用工具。
- 失败的工具最多重试一次。改用备用方案。
- 切勿猜测出生日期、家庭情况或星座。
- 未与同名者交叉核对前,切勿将数据归于某人。
- 切勿包含未经来源证实的事实。
- 切勿在公开消息中透露 OSINT 方法。
- 递归循环切勿超过 3 次。收益会递减。
- 没有充分理由,切勿将深度评分评为 9 分或以上。
- 切勿跳过心理画像分析。没有它,档案就只是维基百科词条。
- 切勿跳过第 1.5 阶段(内部情报)。Telegram 历史记录往往是最丰富的信息来源。
- 切勿在可分享的输出中逐字引用私信。应概述并注明出处。
- 切勿在没有速率限制的情况下频繁调用 API。应错开请求。