thecodacus/understory
understory — memory that grows. Self-wiring, plain-markdown memory for AI agents (MCP + local models + a living graph).
understory – 适用于LLM代理的自接线Markdown知识库
这是什么
- 一个轻量级、基于文件的“记忆”,代理可以读取、写入和查询。记忆以遵循 Open Knowledge Format (OKF) v0.1 的纯Markdown文件集合形式存在——每个概念都是一个带有小型YAML前置元数据块(
type等)的Markdown文件。 - 该仓库附带一个服务器,将此包封装为工具调用接口(MCP)、一个React Web UI和一个CLI。服务器可以在本地运行(Docker或从源代码),并与任何OpenAI兼容或Anthropic兼容的LLM端点通信。
关键理念
- 确定性包层 – 保证每次变更都生成有效的OKF包(前置元数据存在、索引文件重新生成、日志追加、路径沙盒化)的是代码而非LLM提示。
- 代理驱动更新 – 要求LLM决定更改内容,服务器安全地应用更改。
- 图形视图与追踪 – 概念以力导向图(Obsidian风格)可视化,并且每次代理交互都记录为可在图上重放的追踪。
- 配置文件 – 单个服务器可以托管多个隔离的记忆,每个记忆通过各自的API密钥选择。
- 维护工具 –
memory_maintain对图形进行lint检查,查找孤立概念或损坏的链接,并请求内部代理修复。
交互方式
| 接口 | 功能 |
|---|---|
MCP服务器 (/mcp 或 stdio) |
提供工具集 memory_query、memory_add、memory_update、memory_status、memory_maintain。调用是流式的,因此LLM可以实时看到工具结果。 |
Web UI (http://localhost:3800) |
浏览包树、查看实时图、查看更新日志并与同一代理聊天。工具调用内联显示;追踪可重放。 |
CLI (pnpm agent:query …、pnpm agent:mutate …) |
用于测试或脚本的快速命令行访问。 |
| 配置文件CLI (`profiles create | list |
快速开始(Docker)
services:
understory:
image: ghcr.io/thecodacus/understory:latest
ports: ["3800:3800"]
extra_hosts: ["host.docker.internal:host-gateway"]
volumes:
- understory-memory:/bundle # 您的markdown包存放在这里
environment:
BUNDLE_ROOT: /bundle
LLM_API_BASE_URL: ${LLM_API_BASE_URL}
LLM_API_KEY: ${LLM_API_KEY}
LLM_API_FORMAT: openai # 或 "anthropic"
LLM_MODEL: ${LLM_MODEL:-}
docker compose up -d # UI: http://localhost:3800, MCP: http://localhost:3800/mcp
您可以将服务器指向任何OKF包(本地文件夹、命名卷或绑定挂载)。LLM端点可以是OpenAI、DeepSeek、Anthropic、Groq或本地运行的llama.cpp服务器。
典型工作流程
- 启动会话 – 服务器将当前知识库的简要概述注入LLM的系统提示和
memory_query工具描述中。 - 向代理提问 – 例如
memory_query "What is our deployment schedule?"。 - 添加新事实 –
memory_add "We deploy on Fridays, never Mondays"。代理创建一个markdown概念,更新反向链接,UI立即显示新节点。 - 维护 – 定期(或计划)运行
memory_maintain以自动修复孤立节点和损坏的链接。 - 重放 – 在UI中打开一个追踪,查看交互期间读取/写入了哪些概念。
为什么使用它?
- 人类可读且版本可控 – 记忆以纯Markdown存储,可在Git中diff,因此您可以审计更改或回滚。
- 模型无关 – 适用于任何支持工具调用的LLM;服务器处理繁重工作。
- 自组织 – 内部代理保持图形整洁,减少知识库增长时的漂移。
- 多租户 – 配置文件允许您在同一主机上保留独立的知识图谱(工作、健康、副项目)。
限制 / 当前范围
- 搜索是简单的线性扫描;可扩展到数千个概念,但还不是全文索引或基于嵌入的检索。
- UI是单页React应用;除了Bearer令牌外没有身份验证(仅建议在LAN上使用)。
- 图级模式(类型化实体、更丰富的关系)已计划但未实现。
参与进来
- 使用
pnpm install && pnpm build从源代码运行仓库;monorepo包含core、server和web包。 - 测试(
pnpm test)涵盖包验证、并发和MCP往返。 - 通过GitHub上的问题/PR贡献;项目采用MIT许可,欢迎扩展(例如,FTS5/嵌入搜索、自定义页面类型模式)。
Understory 让您为LLM代理提供一个持久、可编辑且可视化的知识图谱,该图谱存在于纯Markdown中——一个“不断增长的记忆”,不会将您锁定在专有数据库中。
相关
- 项目
- 项目
- 项目
- 项目
- 项目