OpenLore
官方面向智能体的知识服务器。通过SSH和MCP向AI代理提供文档,支持身份范围视图、受控写入和结构化元数据。单一二进制,零配置。
你可以用 OpenLore MCP 做什么?
-
通过 SSH 探索文档 — 让您的助手通过
ssh进入 OpenLore,并使用熟悉的命令(如ls、cat或grep)来搜索和阅读 Markdown 文档。 -
查询文档元数据 — 使用
lore meta命令将 frontmatter 作为 NDJSON 检查,并通过jq过滤结果,实现结构化知识检索。 -
经批准后发布内容 — 让您的助手使用
publish、patch或sed -i编写或更新 Markdown 文件,支持原子替换,并对敏感路径提供可选的人工审核。 -
管理身份范围访问 — 配置 docsets、角色和授权,使每个代理或用户只能看到其被授权访问的知识库和路径。
-
验证知识包 — 运行
lore validate检查是否符合 Google 开放知识格式(OKF),并在提交前捕获格式错误的 frontmatter。
文档
📜 OpenLore
通过 SSH 将你的文档提供给 AI 代理。
OpenLore 是一个极简、可扩展、面向代理的原生知识库,让共享上下文保持最新且可检查。
关于
AI 编码代理已经知道如何使用 ls、cat、grep、
find、管道和 shell 循环来探索文件。OpenLore 通过 SSH 为它们提供相同的接口,
底层由你的文档而非真实机器支撑。
Agent ──SSH or MCP──▶ OpenLore ──▶ docs, knowledge, and artifacts
它最初是一个单二进制、零配置、只读的文档服务器。当 你需要一个实时知识库时,可以添加身份范围访问、受控 发布、原子写入、验证和人工审批,而无需改变代理读取或导航内容的方式。
存储和检索 Markdown
将文档、运行手册、项目上下文或代理撰写的笔记放入 普通 Markdown 文件中。没有摄取管道:将 OpenLore 指向一个 目录,它就直接提供现有层级结构。使用文件夹组织文档, 用标准 Markdown 链接连接它们,并在不同人员或代理需要不同访问权限时将其分组为 文档集。OpenLore 默认是只读的;当你希望代理也能创建和更新 Markdown 时,可以启用写入。
快速开始
最快的路径是让你的代理设置 OpenLore:
# Teach your agent how to install, configure, and bundle OpenLore
ssh openlore.sh teach | your-agent-cli
# Add documentation access instructions to AGENTS.md
ssh openlore.sh agents >> AGENTS.md
或者直接安装并运行:
go install github.com/aakarim/go-openlore/cmd/openlore@latest
openlore ./docs
ssh -p 2222 localhost
ssh -p 2222 localhost "grep -r 'authentication' /docs"
默认情况下,这会启动:
- 在
localhost:2222上的 SSH - 在
http://localhost:8080上面向人类的 Web 视图 - 在
http://localhost:8080/mcp上的 MCP over HTTP
参见 安装 了解安装和打包 OpenLore 的更多方式。
特性
- 面向代理的原生检索 — 代理使用它们已经熟悉的 shell 工具和组合 模式,而不是学习一套定制的检索 API。
- 一个知识表面,多种传输方式 — 通过 SSH、SFTP/SSHFS、MCP 和面向人类的 Web 视图提供 同一个虚拟文件系统。
- 实时、受治理的知识 — 保持内容只读,允许范围发布, 或按文档集启用完整写入。写入是原子的、冲突感知的,并且可以 要求人工审批。
- 身份范围视图 — 只给每个人或代理它需要的文档集,
并带有基于角色的
ro、publish和rw授权、路径别名和 私有主目录。 - 构造上安全 — shell 是一个内存中的 Go 解释器,而不是 真正的操作系统 shell。在正常会话中没有 shell 逃逸、任意进程 执行或环境网络访问。
- 可移植知识包 — 将文档嵌入自包含的二进制文件, 使用 GitHub Action 构建跨平台包,或将它们打包为 桌面 MCP 扩展。
- 无需新查询语言的结构化知识 — 使用
lore meta将 frontmatter 检查为 NDJSON,使用jq查询它,并验证 Google 的 开放知识格式 (OKF) 包和 Agent Skills,靠近写入路径。 - 可扩展的策略和处理 — 插件可以添加验证、授权、 读/写中间件、元数据和提交后处理,同时保留 相同的文件系统接口。
使用场景
- 持续学习仓库 — 在一个共享服务器中存储会话和学习成果。添加指标以便优化。允许代理在保持用户隔离的同时相互分享学习成果。
- 团队工件仓库 — 在维护访问控制的同时分享你创建的 markdown、HTML、JSON、Excel 等文档。比 git 更自然,比 Confluence/Notion 更面向代理。
- 编码代理的文档 — 将内部 API 文档、运行手册、产品 上下文和架构笔记放在一个熟悉的、可 grep 的接口后面。
- 代理团队的共享实时记忆 — 给代理独立或共享的 文档集,以便它们发布发现、交接工作并在会话之间积累持久 上下文。
- 公共文档站点 — 将任何文件添加到你的公共文档集,启用公共访问,任何偶然发现你站点的代理都会看到它。无需编辑现有文档即可改善 AEO/GEO。
- 技能共享 — 将 Agent Skills 发布到共享集合中,以便每个 授权代理都能发现并使用相同的受治理程序。
- 代理插件仓库 — 从 GitHub 版本固定 Agent Plugins 仓库,并服务于你团队的代理。以开放标准打包的技能会自动保持最新。
- 受治理的知识贡献 — 让贡献者发布到收件箱, 同时为审批者保留敏感路径并防止意外 覆盖。
- 代理工件的远程审查 — 通过浏览器或 SSH 暴露报告、日志、截图和 生成的文件,而无需构建自定义工件查看器或授予对代理机器的访问权限。
- 身份特定工作区 — 为每个代理挂载私有主目录,加上 共享团队知识,全部通过一个服务器和一个授权模型。
- 可移植的客户或项目知识 — 发布带有嵌入相关文档的版本化可执行文件, 或将相同的知识作为 MCPB 桌面扩展分发。
- 经过验证的知识目录 — 强制 frontmatter 和包约定, 廉价地检查元数据,并在准入时阻止格式错误的知识。
工作原理
OpenLore 基于 Wish 构建,用于 SSH 传输。连接完全针对虚拟文件系统处理:
- 认证 — 无密钥连接或解析 SSH 密钥、证书、 通行密钥或 OAuth 登录到身份。
- 组合视图 — 只挂载授予该身份的文档集和路径。
- 探索 — 在该视图上运行实现为纯 Go 函数的 shell 命令,
或使用等效的 MCP
shell工具。 - 安全贡献 — 如果启用了写入,在原子提交或路由审批之前授权并验证 整个文件更改。
OAuth 客户端使用委派身份,因此持久的写入来源区分
adil 的直接工作和作为 adil/claude@claude.ai 执行的工作。委派者
继承的权限不能超过其主体,并且可以通过
文档集和能力拒绝列表进行收窄。CIMD 客户端还可以使用供应商托管的元数据和 private_key_jwt 进行认证;参见
已认证的 OAuth 客户端。
普通 shell 不能调用 bash、exec、curl 或任意主机
进程。嵌入式文档始终是只读的。明确受信任的
身份可以通过 spawn 能力被授予范围狭窄的异步处理。
受治理的写入
OpenLore 默认是只读的。可写部署保持单一、
策略控制的写入路径,用于重定向、追加、tee、patch、sed -i、
文件移动、发布和批准的作业。
echo "# Research" | publish backend findings.md
cat change.diff | patch /backend/api.md
sed -i 's/old/new/g' /backend/runbook.md
写入是整体对象的原子交换。比较并交换保护默认拒绝
过期编辑,文档集授权约束目标,选定的路径可以
在 /requests 下生成可审查的变更集,而不是直接提交。
参见 写入和发布 了解面向用户的设置, 写入系统内部 了解实现模型。
安装
使用 Go 安装
需要 Go 1.26 或更高版本:
go install github.com/aakarim/go-openlore/cmd/openlore@latest
从源码构建
git clone https://github.com/aakarim/go-openlore.git
cd go-openlore
go build -o openlore ./cmd/openlore
在二进制文件中嵌入文档
将文档放在 assets/lore/ 中并构建。生成的二进制文件包含
文档,并在没有目录参数运行时在 /docs 以只读方式提供它们:
go build -o my-docs ./cmd/openlore
使用 GitHub Action 构建
生成带有嵌入文档的跨平台二进制文件:
- uses: aakarim/openlore@v1
with:
docs-dir: ./docs
config: ./openlore.yml
参见 使用 OpenLore 的方式 了解 MCP stdio、MCPB 桌面 打包、SSHFS 和 Go 库用法。
创建定制部署
使用捆绑的 setup 技能创建 <team>-lore,一个小的客户拥有的
仓库,包含 openlore.yml、一个固定到
官方 OpenLore 版本的薄 Containerfile 以及部署工件。它构建一个可工作的本地
服务器,并在部署前验证 HTTP、MCP、认证 SSH、写入和持久性:
ssh openlore.sh setup | amp
生成的仓库将初始 lore.json 策略和 SSH 可见文件
放在 gitignored 的 .local/ 下。第一次部署从该状态初始化一个空的持久
卷。根 openlore.yml 仍然是 Git/IaC 权威,并单独部署到 /var/lib/openlore/config/openlore.yml;它不会
被烘焙到镜像中。之后服务器上的 lore.json 和文件系统编辑是
权威的,永远不会被镜像更新覆盖。
额外的指令命令支持完整生命周期:
onboarding在本地添加初始身份、角色、主目录和文件夹;deploy选择 Fly.io、Railway、AWS、Google Cloud、Azure、DigitalOcean 或 自定义部署,并验证共享的持久性/网络契约;upgrade只准备固定的基础镜像版本更改,以便现有 CD 可以部署它。
提供商部署需要 HTTPS/MCP、认证的 OpenLore SSH、
管理 shell 访问和持久的 /var/lib/openlore 卷。在
提供商支持的情况下,部署配置公共端口 22 转发到
OpenLore 端口 2222。否则,它报告分配的端口并推荐
外部 TCP 转发系统。
发布的容器只包含 OpenLore。它故意不包含
引导策略或服务器配置。在服务启动之前,
部署必须将 openlore.yml 和 lore.json 放入持久配置
目录并运行:
./out --config /var/lib/openlore/config/openlore.yml
这使配置可以独立部署:简单部署可以复制
openlore.yml 到卷上,而 Kubernetes 可以从 ConfigMap 投影同一个文件。使用 deploy 技能用于 Fly.io、Railway、AWS、Google Cloud、
Azure、DigitalOcean 或自定义基础设施。仓库的 Railpack 和
Fly 文件提供镜像、持久卷和端口接线;它们不会在进程启动时
播种或修改配置。
Railway 为其 SSH TCP 代理分配一个公共主机名和端口。标准 SSH 端口 22 需要外部原始 TCP 负载均衡器。Fly.io 可以将公共端口 22 映射到 OpenLore 的内部端口 2222,使用专用地址。原始 SSH 没有主机名 或 SNI 路由,因此一个监听器不能在端口 22 上路由多个域。
容器工作流从 main 发布 latest;发布版本还发布
VERSION、vVERSION、主版本和次版本镜像标签。
HTTP 收件箱上传
配置一个文档集 inbox 和一个具有其 publish 授权的角色,然后为
现有身份创建凭据(服务器配置必须命名
auth_file,以便 CLI 可以验证它):
openlore inbox token create --identity alice --label webhook --config openlore.yml
curl -H 'Authorization: Bearer olin_ID_SECRET' -H 'Content-Type: text/markdown' \
--data-binary @note.md 'https://docs.example.com/inbox/docs?name=note.md'
POST /inbox/{docset} 接受 bearer 凭据或使用
X-OpenLore-Token-Id 和 X-OpenLore-Signature 的精确正文 HMAC。OAuth 访问令牌仅用于
POST/GET /inbox/tokens 和 DELETE /inbox/tokens/{id};收件箱
凭据是独立的且可撤销。参见
配置和身份。
文档
| 指南 | 内容 |
|---|---|
| 使用 OpenLore 的方式 | SSH、MCP、Web、SSHFS、嵌入式二进制文件、GitHub Action、MCPB 和库使用 |
| 命令参考 | 完整的 shell、内省、发布、语法、CLI 命令和标志参考 |
| 配置与身份 | openlore.yml、认证、角色、文档集、别名、主目录和主机验证 |
| 工作负载身份联合 | 使用短期外部身份令牌对 CI 和代理进行认证 |
| 编写与发布 | 写入模式、收件箱、冲突处理、审批和作业 |
| 插件与知识格式 | 插件安装、接口、OKF 验证、lore validate 和 lore meta |
| 写入系统内部机制 | 文件系统分层、写入接缝、变更集、钩子和异步作业 |
| 安全评估 | 威胁模型和安全属性 |
安全
- 命令在纯 Go 解释器中运行,而非通过
os/exec。 - 虚拟文件系统会清理路径并强制执行文档集边界。
- 允许的文件模式和忽略的目录可防止机密信息进入视图。
- RBAC 控制读取、发布、写入、审批和受信任的功能。
- Web 端点可以通过 TLS 发布 SSH 主机密钥,以避免首次使用时的盲目信任;同时支持 SSH 用户证书和主机证书。
有关完整的安全评估,请参阅 SECURITY.md。
许可证
MIT — Adil Karim
OpenLore 捆绑了第三方开源组件。其许可证和所需声明列于
assets/legal/THIRD_PARTY_NOTICES.md 中,
完整许可证文本位于 assets/legal/licenses/。这些内容已嵌入二进制文件,并由运行中的服务在 /legal 提供。
