RepoDaily · 2026-07-09 · Security tool

Graphify:在 Claude Code 里把任意文件夹变成可查询的知识图谱

#7 Security tool Python +885 Graphify-Labs/graphify 打开仓库

Graphify 把代码、PDF、Markdown、截图、推文统一抽取成一张持久化的知识图谱,可在 Claude Code、Obsidian、Neo4j 或本地 MCP 服务中查询。

项目类型Security tool
最适合已经在用 Claude Code 并希望对代码库、论文、笔记建立持久化、多模态知识图谱的开发者
风险等级作为纯本地开发工具属于中等
评估时间30 分钟即可安装并在真实文件夹上跑一次 /graphify .

核心问题: 在一个 0.1.x 的 skill 和临时 PyPI 包名之上投入,换取的 token 节省和图谱持久化是否值得?

92/100

RepoDaily 采用评分

RepoDaily 将该项目的采用分评为 92/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。

基于 RepoDaily 来源和采用说明的方向性评分,不是基准测试。风险: 中
100证据质量

包含 6 个来源、覆盖 4 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。

100可安装/可试用性

检测到 7 个工作流步骤、6 个下一步动作,以及 3 个命令/安装信号。

67维护可信度

趋势热度为 +885 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。

96生产准备度

采纳风险标记为 medium,并包含 8 条安全说明与 4 条跳过条件。

100差异化

3 个机会视角、4 个替代方案,以及 3 个类型化模块支撑差异化判断。

82许可证清晰度

文章中包含许可证来源或许可证表述。

90Agent / AI 适配度

文章正文和元数据中检测到 9 个 AI/Agent 相关信号。

项目概览

Graphify 是一个 Claude Code skill,它会读取你指定的任意文件夹,结合 Claude 视觉和 tree-sitter AST 解析抽取概念和关系,并把结果组装成一张持久化的知识图谱。它的卖点非常具体:你不需要为每次查询重新读取原始文件,而是先建一次图谱,之后在多个会话里反复查询,README 给出的对比基准是相比直接读原始文件每条查询减少 71.5 倍 token。

在一个拥挤的 RAG 与 GraphRAG 赛道里,graphify 之所以显眼,是因为它同时具备多模态野心和一份少见地严谨的安全姿态。它通过 tree-sitter 支持 13 种编程语言,能处理 PDF、Markdown、截图、图表、白板照片乃至其他语言的图片,并输出你真正会用到的产物:交互式 HTML 图谱、Obsidian 仓库、面向 Agent 的 Wikipedia 风格 wiki、给 Gephi 用的 GraphML,以及给 Neo4j 用的 Cypher。

项目仍在早期,当前发布线为 0.1.x,PyPI 包名临时为 graphifyy,等 graphify 正式名称被收回。但维护节奏在 changelog 里一目了然:2026 年 4 月就发布了 8 个版本,每一个都在关掉真实缺陷,例如把“后续问题靠重新遍历目录而不是查询 graph.json 来回答”这种严重问题修掉。

解决什么问题

  • 在一个 AI 编程助手里反复读取大量代码、论文和笔记既费 token 又慢,而且按调用计费。
  • 单次会话里建立的知识在会话结束后就消失,下一次又得重读同样的文件。
  • 只处理代码的工具会漏掉跨 PDF、推文、截图和文字笔记的概念关系,而这正是 README 里归因于 Karpathy 的 `/raw` 文件夹模式。
  • GraphRAG 与 RAG 流水线往往要先搭重型基础设施、向量库和自定义 embedding,才能问出一个有用的问题。
  • 图谱可视化里的节点标签和文件内容会把不可信文本带进 HTML 或面向 Agent 的输出,如果不做消毒就会造成注入风险。

工作原理

  1. 通过 `pip install graphifyy && graphify install` 安装 Claude Code skill,注意 PyPI 包名临时为 graphifyy,待 graphify 名称收回。
  2. 在任意目录打开 Claude Code 并运行 `/graphify .`,触发 skill 去读取文件、检测类型并抽取概念与关系。
  3. 对源码,tree-sitter 会在 13 种语言上解析 AST,包括 Python、JavaScript、TypeScript、Go、Rust、Java、C、C++、Ruby、C#、Kotlin、Scala、PHP。
  4. 对 PDF、Markdown、截图、图表和图片,Claude 视觉会抽取概念和关系并连入同一张图。
  5. 基于 graspologic 的 Leiden 社区检测算法对图聚类,并对超大社区做拆分,保证导航可控。
  6. 产物落在 graphify-out/:交互式 HTML 图谱、Obsidian 仓库、可选的 Wikipedia 风格 wiki、包含 god 节点与建议问题的 GRAPH_REPORT.md、持久化 graph.json,以及只处理变更文件的 SHA256 缓存。
  7. 用 `graphify query "..."`、`graphify path "DigestAuth" "Response"`、`graphify explain "SwinTransformer"` 等命令查询图谱,它们都读取 graph.json,而不会重读原始目录。

架构解读:流水线、模块与抽取面

README 与 changelog 描述了一条 detect、extract、build、cluster、analyze、report、export 的流水线,0.1.5 增加了一个端到端集成测试来覆盖每个阶段。检测逻辑位于 detect.py,并显式使用 `os.walk(..., followlinks=False)` 以避免符号链接穿越。

抽取分为面向代码的 AST 解析和面向文档、图片的语义抽取。0.1.5 把语义抽取的吞吐从每块 12-15 个文件提升到 20-25 个文件,减少了子 Agent 的往返;而纯代码语料现在会整段跳过语义分发,因为 AST 已能胜任。

社区检测使用 graspologic 的 Leiden 实现并对超大社区拆分,其结果同时驱动 HTML 渲染器的社区过滤器和可选 wiki 的社区文章。0.1.7 新增了专门的 `graphify/wiki.py` 模块,其 `to_wiki()` 会输出跨社区 wiki 链接、内聚分数、审计轨迹和导航页脚。

HTML 渲染器在 0.1.4 被替换:移除 pyvis,改用自定义的 vis.js 渲染器,按度数决定节点大小,并提供点击检查面板、可点击邻居、搜索框、社区过滤和物理聚类。这是一个重要的架构细节,既移除了一个重型依赖,又让项目直接掌控面向用户的产物。

试用路径:30 分钟内安装、运行并查询

  • 前置条件:Claude Code 与 Python 3.10+,pyproject.toml 通过 `requires-python = ">=3.10"` 确认。
  • 安装命令:`pip install graphifyy && graphify install`;在 macOS 上若 pip 报 externally-managed-environment,改用 `pipx install graphifyy`。
  • 在 Windows 上,如果安装后无法识别 `graphify`,需把 `%APPDATA%\Python\Python3xx\Scripts` 加入 PATH,或直接用会自动处理 PATH 的 pipx。
  • 在任意目录运行 `/graphify .`,然后查看 `graphify-out/graph.html` 的交互视图和 `graphify-out/GRAPH_REPORT.md` 的 god 节点与建议问题。
  • 运行 `/graphify ./raw --update`,只重新抽取变更文件并并入现有图谱,其背后是 `graphify-out/cache/` 里的 SHA256 缓存。
  • 执行 `graphify query "what connects attention to the optimizer?"`,确认后续问题会瞬间从 graph.json 返回,而不再重新遍历目录。

维护风险:版本、打包与依赖态势

项目处于 0.1.x,pyproject.toml 列出的版本为 0.1.14;SECURITY.md 明确只支持 0.1.x,低于 0.1 不受支持。PyPI 包名临时为 graphifyy,README 警告 graphify 正名正在被收回,这对固定包名的 CI 流水线是一个真实风险。

依赖以主库级别固定,而不是精确版本:networkx、graspologic、tree-sitter 以及每种支持语言对应的 tree-sitter 语法。optional-dependencies 暴露了 `mcp`、`neo4j`、`pdf`、`watch` 和 `all` 分组,让默认安装保持精简,但使用 `graphify ./raw --neo4j` 或 `graphify ./raw --mcp` 时需显式开启。

changelog 显示迭代速度很快且修复具体,例如 0.1.4 通过静默跳过标准库和外部边把每次运行 292 条边告警消掉,0.1.6 把原本 25 次工具调用的后续问题改成对 graph.json 的瞬时查询。这令人安心,但 0.1.x 主版本号加上包名变动意味着任何采用 graphify 的团队都应该在工具链里固定已安装的确切版本。

谁适合关注

适合关注

  • 每天都在用 Claude Code,并希望获得跨会话、持久的代码库或研究语料知识的开发者
  • 要处理代码、PDF、Markdown 和截图混合语料,并需要一张横跨所有内容的图谱的团队
  • 维护一个 Karpathy 式 `/raw` 文件夹(论文、推文、笔记),希望不用向量库就能获得可查询结构的研究者
  • 需要把 GraphRAG 产物导出为多种格式(HTML、Obsidian、给 Gephi 用的 GraphML、给 Neo4j 用的 Cypher)的任何场景

可以先跳过

  • 无法使用 Claude Code 或无法把文件内容发送给 LLM 供应商做抽取的项目
  • 在采用工具前需要稳定 semver-major 打包保证的团队,因为项目仍是 0.1.x 且 PyPI 名为临时
  • 无法安装 13 种语言 tree-sitter 语法或无法提供 Python 3.10+ 的环境
  • 需要对外暴露网络端口的知识图谱服务而不是仅 stdio 的本地 MCP 服务的场景

风险与注意事项

工具工程质量高、安全意识强,但它仍是 0.1.x,使用临时 PyPI 包名,且多模态抽取依赖 Claude Code 和 LLM 供应商。

  • PyPI 包名是 graphifyy 而非 graphify,正名尚在收回,安装脚本与 CI 固定必须考虑到这点。
  • SECURITY.md 明确仅支持 0.1.x,次版本之间可能出现破坏性变更。
  • 多模态抽取依赖 Claude 视觉,意味着除非限制为本地格式,否则在抽取阶段文件内容会离开本地机器。
  • 默认安装会拉取 13 种语言的 tree-sitter 语法,对通用场景合理,但对单语言团队偏重。
  • SECURITY.md 声明 graphify 在图谱分析期间不做任何网络调用,唯一的网络调用发生在用户显式 `ingest` 抓取 URL 时。
  • SSRF 防护由 `security.validate_url()` 强制执行,只允许 http 与 https 协议,`_NoFileRedirectHandler` 会阻止重定向到 file://。
  • 下载有大小上限:`safe_fetch()` 以流式读取并在 50 MB 处中止,`safe_fetch_text()` 在 10 MB 处中止;非 2xx 响应会抛出 HTTPError,而不会被当作内容。
  • MCP 服务中的路径穿越由 `security.validate_graph_path()` 阻断,它会解析路径并要求其位于 `graphify-out/` 内。
  • 图谱 HTML 输出中的 XSS 由 `security.sanitize_label()` 缓解,它会剥离控制字符、把标签截到 256 字符,并对所有节点标签和边标题做 HTML 转义。
  • 节点标签的提示注入也由 sanitize_label 在 MCP 文本输出上同样处理,因此源文件控制的标签无法破坏返回给 Agent 的文本格式。
  • 工具不会执行源码:tree-sitter 只解析 AST,不调用 eval 或 exec;任何子进程调用都不使用 shell=True。
  • 符号链接穿越被防范,因为 detect.py 显式使用 `os.walk(..., followlinks=False)`。

替代方案比较

方案适用场景代价
LlamaIndex
需要一个可编程的 GraphRAG 与 RAG 框架,对索引和检索有细粒度控制Apache 2.0
LangChain
需要跨众多供应商的文档加载器、embedding 与图存储的通用编排层MIT
Neo4j
已经运行 Neo4j,并希望以图数据库为后端而不是一个本地 skillGPLv3 / 商业
Obsidian
只想要一个手动的笔记图谱仓库而不需要抽取流水线个人使用免费

这个趋势说明了什么

面向编程助手的持久化 GraphRAG

Graphify 的 graph.json 被设计成跨会话持久、可在数周后查询而无需重读原始文件,这正面回应了 AI 编程助手的失忆问题。README 给出的 71.5 倍 token 节省数字如果在你自己的语料上站得住,就是值得采用的理由。

在一个真实的 10,000 文件代码库上运行 `/graphify .`,先测量初次构建的 token 消耗,再测量基于 graph.json 的五次后续查询与重读原始文件之间的 token 差距。

作为 Agent 导航层的 wiki 输出

0.1.7 新增的专用 wiki 模块会生成带跨社区 wiki 链接、内聚分数和导航页脚的 Agent 可爬取 wiki。这是一个独特的角度,因为它面向的是 Agent 导航而非人类导航,有可能成为助手爬取自身上下文的默认接口。

用 `graphify ./raw --wiki` 生成 wiki,再把第二个 Agent 指向 `graphify-out/wiki/index.md`,衡量它是否比原始 HTML 图谱更准确地回答语料问题。

安全优先的本地 GraphRAG

对于一个 0.1.x 项目,SECURITY.md 的威胁模型异常明确,逐一列举 SSRF、超大下载、路径穿越、XSS、提示注入、YAML 注入、编码崩溃、符号链接穿越和 graph.json 损坏恢复。这种具体程度与不发布威胁模型的通用 RAG 工具相比是可信的差异化。

在 `graphify add` 时尝试重定向到 file://、提交一个超大 URL、注入包含 HTML script 标签的节点标签,然后确认每种情况都被文档所述的缓解机制阻断。

下一步建议

安装、在真实文件夹上运行,并验证 token 声明

评估 graphify 最快的方式是在 Claude Code 里安装它,把它指向一个你真正在意的文件夹,并检查 HTML 图谱和 graph.json 是否把后续查询的成本降到足以让你愿意保留这个 skill。

  1. 确认已安装 Python 3.10+ 与 Claude Code。
  2. 运行 `pipx install graphifyy`,以避开 macOS 的 externally-managed 报错和 Windows 的 PATH 问题。
  3. 在一个真实的代码与文档文件夹上运行 `/graphify .`。
  4. 打开 `graphify-out/graph.html`,点击一个高度数节点,用社区过滤器检查聚类是否符合你的心智模型。
  5. 对一个后续问题运行 `graphify query "..."`,确认它会从 graph.json 瞬时返回,而不是重新遍历目录。
  6. 在你的 dotfiles 或团队安装脚本里固定确切已安装版本,因为项目仍是 0.1.x 且 PyPI 名为临时。

RepoDaily 判断

Graphify 是当前浪潮里定位最用心的 Claude Code skill 之一:多模态抽取、持久化 graph.json、多格式导出,外加一份覆盖 SSRF、路径穿越、XSS 与提示注入的威胁模型。风险真实但有限,安装命令没有错、也没缺失,只是项目暂时住在 graphifyy 这个名字下。

信息来源