elb-pr/claude-sleuth

GitHub: elb-pr/claude-sleuth

这是一个面向调查人员的智能化开源情报(OSINT)工具包,通过六阶段标准化工作流与严格的证据评级体系,协助完成从信息收集、实体关联到假设推理及最终报告生成的深度调查任务。

Stars: 17 | Forks: 2

Claude Sleuth

记者与调查人员的完美助手。

Claude Sleuth — Intelligence-Grade OSINT Toolkit

没错……还有你。没关系。这东西是我做的,而我也不是上述任何一种人。

6 Phases 56 Tasks Detective: Cutiepie DI Claude: License to Mildly Investigate

现在是周二晚上 11:14。十一月,这一点从玻璃边缘凝结的水汽就能看出来,水珠在窗框底部的潮湿枝孢菌之间缓缓形成图案。公寓位于佩克汉姆,三楼,唯一亮着的是台灯,投出一束黄色的光锥,可能会被误认为是陈旧的尼古丁污渍,直直地印在显示器正上方的墙上。显示器不同意,它用自己冰冷的蓝色回击。除了那对颧骨的边缘和偶尔被吸入这团丑陋色彩混合物中的烟雾外,其他一切都处于一种特殊的黑暗中。房间里弥漫着冷咖啡的味道,以及背后某种淡淡的有机物气味,那是建筑物在夜间的缓慢呼气,Sarah 在过去两个小时里一直靠这两者来保持清醒。 Sarah Lawton 34 岁。她是一名自由职业调查记者,实际上这意味着她独自工作,自费购买 PACER 访问权限,并且在十一年的时间里,培养出了一种精细校准的直觉,能够判断一组数字何时在撒谎。她个子不高,留着短发,有着一种特殊的静止感,那是学会了耐心是一种职业技能的人才会有的。她的同事形容她“坚持不懈”。她的编辑形容她“难以委托,但一旦完成就无法不发表”。她的屏幕上有一个名字,一家在开曼群岛的公司注册信息,一个在三个不同司法管辖区以两种略有不同的拼写出现的受益人,以及一系列尚未完全理清的转账。 她已经盯着这个看了六个小时。她打开了一个终端。 ## 快速开始 ### Claude Desktop、Mobile 和 Web `skills/claude-sleuth` 文件夹作为 Claude skill 上传。Claude 读取 SKILL.md。任务运行器激活。 ### CLI ``` git clone https://github.com/elb-pr/claude-sleuth.git cd claude-sleuth pip install ".[all]" python3 scripts/task_runner.py next ``` ## 任务运行器 终端返回了一行字。任务 1.1。行动方向。在调查收集到第一个来源之前,它需要一个主题、一份 PLAN 文档和一组种子实体。Sarah 读了两遍。她在这个案子上已经工作了六个小时,但这三件事都没有正式记录在案。她打开了一个新文件。 ``` python3 scripts/task_runner.py next # read current task and required resources python3 scripts/task_runner.py done # verify checklist, advance to next task python3 scripts/task_runner.py status # progress overview by phase python3 scripts/task_runner.py notebook # view the Investigation Notebook python3 scripts/task_runner.py jump t6.2 # jump to a specific task ``` 她花了四十分钟完成任务 1.1。她输入 `done`。检查清单有七项。五项立即通过。第六项——PLAN 理由,即关于这项调查为何符合公众利益的正式声明——需要重写。她重写了它。第七项通过。任务运行器前进到 1.2。 ## 标准 到了午夜,她进入了第二阶段,而 Admiralty 量表是第一件让她慢下来的东西。 她在晚上 9 点找到的那个论坛帖子,那个包含账号和空壳公司名称的帖子,没有作者,没有日期,也没有佐证链接。`source_grader.py` 将其评为 F-6。可靠性 F:无法评估来源。可信度 6:无法判断真实性。脚本不会争辩。它记录下该来源并将其搁置。Sarah 在过去两个小时里一直把那个帖子作为心理锚点。她删除了引用它的笔记,重新开始。 | 标准 | 目的 | |---|---| | **Admiralty 6x6** | 在任何主张进入记录之前,独立评估来源可靠性(A–F)和可信度(1–6) | | **ACH** | 通过不一致性原理得出结论——幸存的假设是反对证据最少的假设 | | **ICD 203** | 将所有概率性语言映射到 7 层量表。不允许使用模糊的限定词 | ICD 203 量表是第二件让她慢下来的东西。她输入“这些转账很可能与马耳他的控股公司有关”,但管道不接受它。Probably 不是一个术语。她查看了量表。 | 术语 | 范围 | |---|---| | 几乎不可能 | < 5% | | 极不可能 | 5–20% | | 不太可能 | 20–45% | | 可能性大致相当 | 45–55% | | 可能 | 55–80% | | 极有可能 | 80–95% | | 几乎肯定 | > 95% | 她思考了一会儿。她输入:可能。55 到 80 百分比。管道接受了它。 ## 管道 六个阶段。每一个都依赖于上一个。 ``` flowchart LR P1["Phase 1\nOperational\nDirection"] --> P2["Phase 2\nIntelligence\nCollection"] P2 --> P3["Phase 3\nCollation &\nEntity Resolution"] P3 --> P4["Phase 4\nChronological &\nRelational"] P4 --> P5["Phase 5\nHypothesis\nReasoning"] P5 --> P6["Phase 6\nFinal Reporting"] P1 -.- P1a["STEEPLES\nPLAN justification\nSeed entities"] P2 -.- P2a["Source grading\nEvidence hashing\nTiered collection"] P3 -.- P3a["POLE records\nFellegi-Sunter\nEntity resolution"] P4 -.- P4a["UTC timeline\nDiGraph analysis\nMedia authentication"] P5 -.- P5a["ACH matrix\nSensitivity analysis\nDeception analysis"] P6 -.- P6a["ICD 203 briefing\nHash audit\nCSDb closure"] ```
阶段描述 第一阶段是行动方向。调查定义其主题、范围及其结束的条件。STEEPLES 分析。PLAN 理由。种子实体已记录并锁定。Sarah 在此花费了四十分钟,然后才被允许继续。 第二阶段是情报收集。每个来源在证据进入记录之前都要进行分级。每条数据在捕获时都会进行哈希处理。Sarah 找到了一份 2019 年的 Companies House 备案文件,直接指名了受益人。它被评为 A-1。可靠性 A:来源可靠,毫无疑问。可信度 1:已得到其他独立来源的确认。哈希值已记录。监管链开始。 第三阶段是整理和实体解析。到凌晨 12:30,Sarah 有十四条实体记录。其中两条共享一个名字、一个 SE5 的地址和一份 2019 年的公司注册信息,但一个姓氏拼写是双 n,另一个是单 n。她运行 `entity_resolver.py`。Fellegi-Sunter 算法处理完整记录并返回 0.94 的匹配概率。他们是同一个人。记录被合并。调查继续进行,剩下十三个实体。 第四阶段是按时间顺序和关系处理。一个 UTC 时间线由已验证的事件构建。当 Sarah 发现 2021 年 3 月至 7 月之间存在空白时,她将其记录为空白。她没有用伪装成事实的推断来填补它。她将其标记为调查线索并继续前进。 第五阶段是假设推理。Sarah 有两个假设。第一个:这些转账是一种避税结构,激进但合法。第二个:它们是制裁逃避计划的一部分。ACH 矩阵测试每一个假设,不是看什么支持它,而是看什么与它相矛盾。三份证据与假设 1 不一致。一份与假设 2 不一致。假设 2 幸存下来。 第六阶段是最终报告。符合 ICD 203 标准的简报。SHA-256 哈希审计。监管链完整,否则报告不得离开房间。
## 脚本参考 该工具包包含十五个 Python 脚本。 | 脚本 | 目的 | |---|---| | `task_runner.py` | 驱动 56 任务管道(`next`、`done`、`status`、`jump`、`peek`、`notebook`、`reset`) | | `template_builder.py` | 按阶段、步骤或任务 ID 从 `templates/` 组装 Markdown 工作文档 | | `source_grader.py` | Admiralty 6x6 来源可靠性和可信度分级,并提供操作建议 | | `entity_resolver.py` | Fellegi-Sunter 概率记录链接;唯一标识符上的确定性匹配 | | `corporate_intel.py` | 从英国 Companies House、SEC EDGAR、GLEIF LEI 和 ICIJ Offshore Leaks 聚合公司数据 | | `domain_intel.py` | 通过 DNS、RDAP、crt.sh、Shodan InternetDB 进行域侦察——无需身份验证 | | `username_enum.py` | 使用 Maigret、Sherlock 或 WhatsMyName 在社交平台上进行异步用户名枚举 | | `sanctions_screen.py` | 针对 OFAC SDN、英国 HMT 和其他公共制裁名单进行模糊名称匹配 | | `evidence_preservation.py` | 取证式网页捕获:截图、HTML、WARC、Wayback 提交、SHA-256 监管链 | | `content_archiver.py` | 通过 yt-dlp、gallery-dl 和 Playwright 进行异步媒体下载和编目,并生成清单 | | `chronological_matrix.py` | UTC 标准化时间线构建;空白检测、来源冲突标记、CSV 导出 | | `network_graph.py` | 有向 POLE 关系图;入/出度、PageRank、社区检测、HTML/GEXF 导出 | | `geolocation.py` | EXIF GPS 提取、太阳位置/阴影分析、历史天气相关性、反向地理编码 | | `financial_analysis.py` | SEC EDGAR 财务异常检测:本福德定律、同比方差、Altman Z-Score | | `report_generator.py` | 通过 Jinja2 模板生成符合 ICD 203 标准的简报和发现备忘录;可选 WeasyPrint PDF 导出 | 凌晨 1 点,Sarah 针对目标公司的 SEC EDGAR 备案文件运行 `financial_analysis.py`。本福德定律标记了三年报告交易中首位数字的分布。数字 1 的预期频率为 30.1%。观测频率为 14.3%。脚本将其标记为异常,并以置信度等级记录了该发现。她盯着它看了很久。然后她打开笔记本,输入了一个新条目。 ## 安装 Python 3.10 或更高版本。 ### Claude Desktop、Mobile 或 Web 下载 zip 包,或克隆仓库,然后将文件夹放入 Claude 中。 ### CLI ``` git clone https://github.com/elb-pr/claude-sleuth.git cd claude-sleuth pip install . pip install ".[all]" pip install ".[geo,graph,sanctions,corporate]" ``` ### 通过设置脚本 ``` python3 scripts/setup.py --modules core geo graph sanctions corporate python3 scripts/setup.py --list python3 scripts/setup.py --dry-run all ```
可选依赖组 | 组 | 覆盖范围 | |---|---| | `identity` | Sherlock、Maigret —— 用户名枚举 | | `social` | yt-dlp、gallery-dl、Playwright —— 社交媒体归档 | | `network` | dnspython、ipwhois、tldextract —— 域和基础设施 | | `corporate` | edgartools —— SEC EDGAR 财务备案 | | `sanctions` | rapidfuzz、jellyfish —— 制裁名单的模糊名称匹配 | | `geo` | geopandas、geopy、pysolar、exifread —— 地理位置和空间分析 | | `nlp` | spaCy、NLTK、scikit-learn —— 实体提取 | | `graph` | NetworkX、pyvis、Plotly —— 网络可视化 | | `archiving` | waybackpy、warcio、trafilatura —— 证据保存 | | `documents` | pdfplumber、pytesseract、Pillow —— OCR 和文档处理 | | `reporting` | Jinja2、WeasyPrint、docxtpl —— HTML/PDF/Word 输出 | | `entity_resolution` | recordlinkage —— 概率记录去重 |
## MCP 服务器 三个服务器。两个是托管的。一个是自托管的。服务器 URL 放入 `.claude/mcp.json`。 | 服务器 | 目的 | 链接 | |---|---|---| | **Thinking Toolkit** | 12 种技术推理框架。在任何僵局、竞争框架或卡点处调用 `diagnose` | [Smithery](https://server.smithery.ai/elbpr/thinking-toolkit) | | **Pigeon Superstition Superposition** | 基于文档证据的 16 部分认知替代画像。每当综合主体信息时,该画像就会更新 | [Smithery](https://server.smithery.ai/elbpr/pigeon-superstition-superposition) | | **CSDb** | 通过 Cloudflare D1 跨会话保持持久调查状态。存储实体、关系、时间线、证据、等级和调查笔记本 | 通过 `server/` 自托管 | 到凌晨 1:30,Pigeon Superstition Superposition 画像已有十六个部分。Sarah 完全根据公开文件构建了它:公司备案、一份 2017 年的证词笔录、一种在季度报告期前两周内持续做出的董事任命模式,以及主体接受行业刊物的三次采访,在这些采访中,他对公司结构的描述发生了细微而具体的变化,她现在怀疑这是故意的。该画像不需要采访。它不需要访问权限。它需要记录,而记录是详尽的。 ### CSDb 自托管 ``` cd server ./setup.sh ``` CSDb 跨会话存储每个实体、每个时间线条目、每个已分级的来源。当 Sarah 合上笔记本电脑并在早上再次打开时,调查会准确地停留在她离开的地方。 ## 数据标准
应用于所有输出的约定 时间戳为 ISO 8601,标准化为 UTC。 实体记录遵循 POLE 模式。必填字段:`source`、`date_observed`、`analyst_id`、`confidence`。 网络边包含 `source_node`、`target_node`、`relationship_type` 和 `evidence_ref`。它们是有向的,从源到目标。没有方向的关系不是关系。它是谣言。 证据在捕获时通过 SHA-256 哈希、捕获时间戳、分析师 ID 和存储位置进行保存并记录。 概率语言仅使用 ICD 203。
快凌晨 2 点了。杯子是冷的,而且已经冷了很久。Sarah 三个小时没离开过桌子。屏幕上:一份文档,一条归因发现链,每一条都带有来源等级、哈希和来自固定量表的置信度评级。四十七个标签页不见了。姓氏有两种拼写的受益人是同一个人,而且一直都是。2021 年 3 月至 7 月之间的空白有一个标签:未完成的调查线索,标记为待跟进。假设 2 仍然有效。假设 1 已死。 她回读了摘要。这些转账极有可能是制裁逃避计划的一部分。极有可能。80 到 95 百分比。 这足以付印了。
标签:AI助手, Claude, CVE检测, ESC4, OSINT, Python, 任务运行, 假设推理, 关系处理, 实体解析, 工作流, 情报分析, 情报收集, 无后门, 最终报告, 模板, 漏洞研究, 特权检测, 研究员, 私家侦探, 网络诊断, 网络调试, 自动化, 记者, 调查, 调查取证, 逆向工具