🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

知识森林导航 JimmyWesley/MonkeyLLM

MCP
JimmyWesley47 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

把文档变成可导航的图谱,让智能体精准取用知识

37.5/100
综合分
9
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/JimmyWesley/MonkeyLLM.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
暂无时间戳·判据 →
装得上吗[实装验证]—
该类项目不使用 dsh plugin add 安装,静态安装检查不适用
L4 · 真实安装等级说明 →
数据截至 2026/10/22·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 47 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包MonkeyLLM(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 06:18:50

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 30 处,展示前 29 条)
  • 发起网络请求
    apps/clipper/api.js:56
    res = await fetch(origin + path, {
  • 发起网络请求
    apps/clipper/background.js:585
    const blob = await (await fetch(dataUrl)).blob();
  • 发起网络请求
    apps/clipper/background.js:742
    const res = await fetch(srcUrl);
  • 发起网络请求
    apps/clipper/background.js:810
    return createImageBitmap(await (await fetch(dataUrl)).blob());
  • 发起网络请求
    apps/clipper/background.js:1001
    const blob = await (await fetch(
  • 发起网络请求
    apps/clipper/clip.js:103
    const res = await fetch(yt.captionUrl + '&fmt=json3');
  • 发起网络请求
    apps/clipper/popup.js:115
    const granted = await chrome.permissions.request({
  • 读取本地文件
    apps/studio/check-ask-window.mjs:30
    const src = readFileSync(askPath, 'utf8')
  • 读取本地文件
    apps/studio/check-ask-window.mjs:32
    readFileSync(join(here, `src/locales/ask/${lang}.json`), 'utf8'))
  • 读取本地文件
    apps/studio/check-classes.mjs:32
    const css = readFileSync(join(here, 'src/index.css'), 'utf8')
  • 读取本地文件
    apps/studio/check-classes.mjs:35
    return readdirSync(dir).flatMap((name) => {
  • 读取本地文件
    apps/studio/check-classes.mjs:37
    if (statSync(path).isDirectory()) return walk(path)
  • 读取本地文件
    apps/studio/check-classes.mjs:60
    const text = readFileSync(file, 'utf8')
  • 读取本地文件
    apps/studio/check-consoles.mjs:29
    const shell = readFileSync(shellPath, 'utf8')
  • 读取本地文件
    apps/studio/check-consoles.mjs:30
    const icons = readFileSync(join(here, 'src/design/icons.jsx'), 'utf8')
  • 读取本地文件
    apps/studio/check-consoles.mjs:31
    const app = readFileSync(join(here, 'src/App.jsx'), 'utf8')
  • 读取本地文件
    apps/studio/check-consoles.mjs:33
    readFileSync(join(here, `src/locales/nav/${lang}.json`), 'utf8'))
  • 读取本地文件
    apps/studio/check-hands.mjs:37
    const read = (p) => readFileSync(new URL(p, import.meta.url), 'utf8')
  • 读取本地文件
    apps/studio/check-tags.mjs:46
    const read = (p) => readFileSync(new URL(p, import.meta.url), 'utf8')
  • 读取本地文件
    apps/studio/check-usable.mjs:29
    const read = (name) => readFileSync(join(views, name), 'utf8')
  • 读取本地文件
    apps/studio/check-window.mjs:24
    const src = readFileSync(graphPath, 'utf8')
  • 读取本地文件
    apps/studio/check-window.mjs:25
    const css = readFileSync(join(here, 'src/index.css'), 'utf8')
  • 读取本地文件
    apps/studio/check-window.mjs:27
    readFileSync(join(here, `src/locales/graph/${lang}.json`), 'utf8'))
  • 发起网络请求
    apps/studio/src/api.js:66
    const res = await fetch(path, {
  • 发起网络请求
    apps/studio/src/api.js:145
    const res = await fetch(
  • 发起网络请求
    apps/studio/src/api.js:201
    const res = await fetch(path, {
  • 发起网络请求
    apps/studio/src/api.js:227
    const res = await fetch(path, {
  • 发起网络请求
    apps/studio/src/api.js:260
    const res = await fetch(`/v1/share/${encodeURIComponent(token)}`)
  • 发起网络请求
    apps/studio/src/api.js:421
    const res = await fetch(
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

5 张 · 点击查看大图

功能亮点

  • 文档转为知识图谱
  • 智能体MCP导航
  • 表格上执行SQL
展开完整介绍(164 字)↓

给智能体用的知识引擎:你的文档变成 git 版本管理的 markdown 知识图谱,智能体通过 MCP 在上面导航。精选摘要、带类型的边、带引用的回答、直接在表格上跑 SQL,不做分块。同一个 12B 本地模型:做 top-k RAG 时多跳问题 0/11,做导航器时 11/11。Python,Apache-2.0,可自托管。

README

由 DeepSeek 最新模型翻译生成
MonkeyLLM 面向 AI 智能体的知识引擎:一种查询数据的新方式。 你的文档会变成一个由 git 版本管理的 markdown 知识图谱,智能体通过 MCP 在其上导航:经过整理的摘要、带类型的边、带引用的答案、对电子表格执行 SQL,没有任何内容被切分成匿名片段。 这个仓库不是应用程序。知识存在于一片森林中:一棵由 git 版本管理的 markdown 节点树,每个节点都携带一份经过整理、带有气味线索的护照。AI 不会拿到一份检索转储。它会导航:通过搜索进入,沿着带类型的边前进,只读取它需要的那个节点,并种下它学到的东西。成功的搜寻会留下信息素并铸造快捷链接,因此语料库本身会从使用中学习。 一片真实的森林:49 个分支中的 1,877 个节点。每个簇都是一个分支,每个点都是一个节点;实线是经过整理的小径,虚线是某次搜寻发现的快捷路径,光晕是使用留下的信息素。 让我们把它写下来的那个数字:在一个每个问题都需要 ≥3 次链式跳转的基准上,同一个 12B 本地模型作为经典 top-k RAG 阅读器得分为 0 / 11,而作为森林导航者得分为 11 / 11(100%),每个正确答案的 token 成本是迭代式 RAG 基线的 0.66×,并且运行在单张消费级 GPU 上。如果你的第一反应是“我需要测试它是否真的适用于我的场景”,很好。
展开完整文档(README 剩余 1 节)
MonkeyLLM

面向 AI 智能体的知识引擎:一种查询数据的新方式。 你的文档会变成一个由 git 版本管理的 markdown 知识图谱,智能体通过 MCP 在其上导航:经过整理的摘要、带类型的边、带引用的答案、对电子表格执行 SQL,没有任何内容被切分成匿名片段。

这个仓库不是应用程序。知识存在于一片森林中:一棵由 git 版本管理的 markdown 节点树,每个节点都携带一份经过整理、带有气味线索的护照。AI 不会拿到一份检索转储。它会导航:通过搜索进入,沿着带类型的边前进,只读取它需要的那个节点,并种下它学到的东西。成功的搜寻会留下信息素并铸造快捷链接,因此语料库本身会从使用中学习。

一片真实的森林:49 个分支中的 1,877 个节点。每个簇都是一个分支,每个点都是一个节点;实线是经过整理的小径,虚线是某次搜寻发现的快捷路径,光晕是使用留下的信息素。

让我们把它写下来的那个数字:在一个每个问题都需要 ≥3 次链式跳转的基准上,同一个 12B 本地模型作为经典 top-k RAG 阅读器得分为 0 / 11,而作为森林导航者得分为 11 / 11(100%),每个正确答案的 token 成本是迭代式 RAG 基线的 0.66×,并且运行在单张消费级 GPU 上。如果你的第一反应是“我需要测试它是否真的适用于我的场景”,很好。每个数字都可以通过已提交的脚本复现,整个设计都写在论文中。

这个仓库中的其他一切,都是围绕那个引擎存在的。你在截图中看到的 Studio 控制台不是产品。它是管理层:人们观察、治理和教授引擎所服务内容的地方。

规范就是真相:最新的 docs/monkeyllm-spec-v.md 是规范性的;代码遵循它,而不是反过来。

引擎,在你自己的代码中

这个引擎是一个普通的 Python 包(Apache-2.0),不附带宿主、服务器或 UI。把它指向一个文件夹,你就拥有了一片森林;在你自己的 Python 中操作它:

pip install monkeyllm # the monkeyllm package + vine CLIbash
vine init --forest ./brain --title "My brain" # 一片空森林,git 等一应俱全

直接从源码安装,无需等待发布:
pip install "git+https://github.com/JimmyWesley/MonkeyLLM.git"。需要 Python
3.11+;G 部分的文件转换器是额外组件(pip install "monkeyllm[ingest]"),贡献者则需要更下方的可编辑安装方式。
python
from monkeyllm import Vine
from monkeyllm.harvest import harvest

vine = Vine("./brain")
vine.plant({"id": "inbox/_index", "type": "branch", "parent": "_index",
"title": "Inbox", "summary": "Loose notes before they find a branch."})
vine.plant({"id": "inbox/first-note", "type": "note", "parent": "inbox/_index",
"title": "First note", "summary": "Where this brain begins.",
"body": "Planted from my own code."})

vine.locate("where does this brain begin?") # ranked entry points, BM25, zero embeddings
harvest(vine, "first note") # one-shot retrieval: evidence + snippets, zero LLM

智能体使用的每一个原语都依托同一个对象(locate、look、 move、pick、scan、sniff、query、plant、graft、tend),每一个都有 token 预算,每一次截断都明确可见。园丁(vine adopt / vine sync)将现有的文档树镜像为一片森林,而护林员(vine ranger)则长期维护它的健康。

而且同一片森林可以直接从 CLI 以 MCP 与任何智能体对话: bash vine serve --forest ./brain # stdio MCP server vine serve --forest ./brain --transport http # or over HTTP

Claude Code,或任何支持 MCP 的运行时,随后便掌握了这片森林的工具:没有主机,没有账户,你的机器,你的生态系统。

你喂给它的任何东西都变得可导航

你不需要为引擎准备文件。你只需把它们交出去,园丁便会转换、总结并提交每一个文件,无论它从命令行(vine adopt)、从控制台,还是从你的浏览器运行,都走同一条流水线:

| 你放入的内容 | 它变成什么 |
| .md、.markdown、.txt | 一个 note;文本本身即是正文 |
| .docx | 一个 document:标题和段落转为 markdown |
| .pdf | 一个 document,通过一行转换器钩子,使用你信任的任何 CLI 提取器(方法) |
| .csv | 一个数据集:一张真正的 SQLite 表,用只读 SQL 查询 |
| .json | 若是扁平表格则为数据集,否则为承载 JSON 的 document |
| .xlsx、.xls | 每个工作表一个数据集,类型自动推断 |
| .db、.sqlite、.sqlite3 | 整体收养:数据库本身成为载荷,附带生成的查询手册和示例行 |
| .png、.jpg、.jpeg、.gif、.webp | 一个 media 节点;在绑定了 vision 模型的 Station 上,它还会获得一段可被搜索找到的文字描述 |
| .mp3、.wav、.m4a、.ogg、.flac | 一个携带其护照的 media 节点 |
| 其他任何内容 | 在报告中按名称列为 unsupported,这样你就能确切看到哪些内容没有落地 |

表格文件不再是文档:电子表格变成智能体用 SQL 查询的表,其护照中写有 ## Query manual 和示例行,这样模型在查询之前就知道存在哪些表和列。它们意味着什么,是机器唯一无法推断的东西,所以由人在 ## Notes 部分中写下来,该部分随数据集在所有被读取的地方一同传递。

.docx、.xlsx 和 .xls 需要可选的 ingest 附加项(pip install -e ".[ingest]")。PDF 需要转换器钩子,因为好的提取器是重量级(通常是 copyleft)依赖,本项目不会强加给你:在 _meta/gardener.yaml 中指定工具,它就会加入流水线。表中的其他所有内容开箱即用。

从 Ingest 控制台将文件送入森林

拖入文件、镜像主机可读取的整个文件夹,或就地编写文档:每一个都会带着精心整理的护照到达,而一批就是一个你可以观看的任务。没有任何内容被分块后遗忘。每个文档都会变成一个节点,带有名称、摘要和边。

以及来自浏览器

Clipper(apps/clipper/)是一个 Chrome/Edge/Brave 扩展,可将你正在阅读的页面变成一片森林:可读文章或仅你的选择作为 markdown,截图或拖拽区域作为 media 节点。拖拽区域,通过其手柄调整,进行标注(箭头、方框、笔、文本标签),并为 Gardener 留下备注,可键入或口述。剪辑落地时会附带页面地址,因此始终可以追溯。

一键:剪辑、捕获、编写,或向森林提问。
拖拽一个区域,标注它,留下备注,然后捕获。

它持有自己的一对配对密钥,绝不是你的密码,而 Station 在 /clipper.zip 提供构建产物,并在控制台自己的侧栏中提供:一个只能缩小你访问权限的密钥是自助的,所以获取扩展也是如此。

快速开始(开发) bash
pip install -e ".[dev]" && pip install -e apps/station
python -m pytest -q
python forests/scripts/build_fixture.py
python -m monkeyllm.cli validate --forest forests/forest-fixture

管理层(Station + Studio)当一片森林必须是共享的、受治理的资产,而非个人目录时,Station(规范 Part J)会以身份、按森林策略、审计和模型绑定来包装未经改动的引擎,在 /v1 下提供 REST 服务,在 /mcp 下提供 MCP 服务。它还提供 Studio,即 Web 控制台:

提出自带来源的问题,以活图的形式遍历树,用 SQL 查询数据集,通过上传和浏览器 Clipper 为森林提供内容,授予限定范围的访问权限,并把你自己的 AI 交给那项让森林成为其持久记忆的技能。控制台是引擎的可能性变得可见的地方,但无论它显示什么,持有同一密钥的 API 客户端也能获取:不存在特权路径。

文档

The MonkeyLLM Handbook:安装它,首次登录,使用并喂养森林,通过 MCP 连接你自己的 AI(包括 Studio 生成的 Claude Code 技能),并治理部署。提供英语、葡萄牙语和西班牙语版本,并附有截图。

论文

MonkeyLLM: Stigmergic Navigation of Knowledge Forests,用小型语言模型的智能体觅食取代检索增强生成。森林、气味契约、十个有预算的原语、信息素经济,以及森林原则(把智能花在环境上,这样你就能在模型上花得更少),每一个基准数字都可从本仓库复现。

路线图

引擎、Station、Studio 和 Clipper 已经构建并经过测量;下面的阶段是接下来要做的事。完整计划及各阶段的退出标准见 docs/monkeyllm-roadmap.md;当前工作待办见 tasks/。

| 下一步 | 含义 | 当前进展 |
| 正式发布 Monkey Bench | 发布完整基准运行及其轨迹,对照 top-k 和迭代式 RAG 基线 | 4 项退出标准中已满足 3 项;第 4 项按每正确 token 数重新测量(0.66×) |
| 收敛曲线 | 证明随着森林被使用,回答所需跳数会下降*:信息素经济开始见效,也是论文的标志性图表 | 已测量一次;标准尚未满足,而发现本身(地板效应、信息素串扰)就是结果 |
| The Troop | 带评判者的并行觅食者:目前是准确率放大器,还不是速度放大器 | 两组均为 8/8 准确率;墙钟时间标准需要更深的语料库 |
| 摄取时的实体和类型化边 | Gardener 提取人物、地点和关系,超越当前的摘要和 related-to 提议 | 已设计(Part G),需要规范升级 |
| Station 加固 | OIDC 登录、按主体配额 | Part J 的其余部分今天发布 |
| 发表 | 论文以 DOI 存入(Zenodo / arXiv) | 已撰写;存入待定 |
| 阶段 3:更快的核心(有条件) | 在相同契约背后用 Rust 实现 Catalog + Canopy,仅当遥测证明瓶颈时 | 有意未开始;目前 SLM 主导成本 |

项目对自身坚持的规则:在前一阶段通过其退出标准之前,任何阶段都不得开始;没有测量证明其合理性,就不进行任何优化。 基准是裁判,而不是直觉,这就是为什么未通过的标准被写在上方,而不是被悄悄丢弃。

布局

| 路径 | 其中内容 |
| src/monkeyllm/ | 引擎:vine CLI、10 个原语、harvest、Gardener(摄取)、Ranger(维护)、catalog、Canopy |
| apps/station/ | 可部署主机:REST /v1、MCP /mcp,为 Studio 提供服务 |
| apps/studio/ | Web 控制台(React/Vite,构建进 Station 镜像) |
| apps/clipper/ | 浏览器扩展:将你正在阅读的页面剪藏进森林 |
| paper/ | 论文:设计、词汇、基准、作者身份 |
| forests/ | 生成的森林(除 forests/scripts/ 外被 gitignore);重建,绝不编辑 |
| bench/ | Monkey Bench:chunker、RAG 基线、runner |
| scripts/ | 基础设施 + 测量(本地模型、bench、策展指标) |
| docs/ | 规范、手册(docs/guide/)和设计笔记 |
| tasks/ | 待办事项,每个任务一个文件 |

运行整个环境(Docker)

一个容器同时服务前端和后端;数据持久化在命名卷中: bash
cp .env.example .env # fill in what you use
docker compose up --build -d

完整演练请参见 deploy/README.md,包括 Dokploy 和可选的本地 llama.cpp 推理。

许可证

两个许可证,沿架构已经划定的界线拆分:

- 引擎(src/monkeyllm/、规范、基准、工具): Apache-2.0。MCP 契约旨在传播。
- 主机(apps/station/、apps/studio/、apps/clipper/): AGPL-3.0-only。自托管免费且不受限制;将其作为托管服务提供意味着开放你的技术栈。

完整地图、商业选项和贡献的 DCO 要求请参见 LICENSING.md。
预览分享卡片长什么样 ↓JimmyWesley/MonkeyLLM
分享 · DeepSeek Harness Hub
JimmyWesley/MonkeyLLM

把文档变成可导航的图谱,让智能体精准取用知识

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部