OpenLore

官方

面向智能体的知识服务器。通过SSH和MCP向AI代理提供文档,支持身份范围视图、受控写入和结构化元数据。单一二进制,零配置。

你可以用 OpenLore MCP 做什么?

  • 通过 SSH 探索文档 — 让您的助手通过 ssh 进入 OpenLore,并使用熟悉的命令(如 lscatgrep)来搜索和阅读 Markdown 文档。

  • 查询文档元数据 — 使用 lore meta 命令将 frontmatter 作为 NDJSON 检查,并通过 jq 过滤结果,实现结构化知识检索。

  • 经批准后发布内容 — 让您的助手使用 publishpatchsed -i 编写或更新 Markdown 文件,支持原子替换,并对敏感路径提供可选的人工审核。

  • 管理身份范围访问 — 配置 docsets、角色和授权,使每个代理或用户只能看到其被授权访问的知识库和路径。

  • 验证知识包 — 运行 lore validate 检查是否符合 Google 开放知识格式(OKF),并在提交前捕获格式错误的 frontmatter。

文档

📜 OpenLore

Release Go Reference

Oiya 赞助

通过 SSH 将你的文档提供给 AI 代理。

OpenLore 是一个极简、可扩展、面向代理的原生知识库,让共享上下文保持最新且可检查。


关于

AI 编码代理已经知道如何使用 lscatgrepfind、管道和 shell 循环来探索文件。OpenLore 通过 SSH 为它们提供相同的接口, 底层由你的文档而非真实机器支撑。

Agent ──SSH or MCP──▶ OpenLore ──▶ docs, knowledge, and artifacts

它最初是一个单二进制、零配置、只读的文档服务器。当 你需要一个实时知识库时,可以添加身份范围访问、受控 发布、原子写入、验证和人工审批,而无需改变代理读取或导航内容的方式。

存储和检索 Markdown

将文档、运行手册、项目上下文或代理撰写的笔记放入 普通 Markdown 文件中。没有摄取管道:将 OpenLore 指向一个 目录,它就直接提供现有层级结构。使用文件夹组织文档, 用标准 Markdown 链接连接它们,并在不同人员或代理需要不同访问权限时将其分组为 文档集。OpenLore 默认是只读的;当你希望代理也能创建和更新 Markdown 时,可以启用写入。

OpenLore Skills import demo

快速开始

最快的路径是让你的代理设置 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 视图提供 同一个虚拟文件系统。
  • 实时、受治理的知识 — 保持内容只读,允许范围发布, 或按文档集启用完整写入。写入是原子的、冲突感知的,并且可以 要求人工审批。
  • 身份范围视图 — 只给每个人或代理它需要的文档集, 并带有基于角色的 ropublishrw 授权、路径别名和 私有主目录。
  • 构造上安全 — 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 传输。连接完全针对虚拟文件系统处理:

  1. 认证 — 无密钥连接或解析 SSH 密钥、证书、 通行密钥或 OAuth 登录到身份。
  2. 组合视图 — 只挂载授予该身份的文档集和路径。
  3. 探索 — 在该视图上运行实现为纯 Go 函数的 shell 命令, 或使用等效的 MCP shell 工具。
  4. 安全贡献 — 如果启用了写入,在原子提交或路由审批之前授权并验证 整个文件更改。

OAuth 客户端使用委派身份,因此持久的写入来源区分 adil 的直接工作和作为 adil/claude@claude.ai 执行的工作。委派者 继承的权限不能超过其主体,并且可以通过 文档集和能力拒绝列表进行收窄。CIMD 客户端还可以使用供应商托管的元数据和 private_key_jwt 进行认证;参见 已认证的 OAuth 客户端

普通 shell 不能调用 bashexeccurl 或任意主机 进程。嵌入式文档始终是只读的。明确受信任的 身份可以通过 spawn 能力被授予范围狭窄的异步处理。

受治理的写入

OpenLore 默认是只读的。可写部署保持单一、 策略控制的写入路径,用于重定向、追加、teepatchsed -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.ymllore.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;发布版本还发布 VERSIONvVERSION、主版本和次版本镜像标签。

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-IdX-OpenLore-Signature 的精确正文 HMAC。OAuth 访问令牌仅用于 POST/GET /inbox/tokensDELETE /inbox/tokens/{id};收件箱 凭据是独立的且可撤销。参见 配置和身份

文档

指南内容
使用 OpenLore 的方式SSH、MCP、Web、SSHFS、嵌入式二进制文件、GitHub Action、MCPB 和库使用
命令参考完整的 shell、内省、发布、语法、CLI 命令和标志参考
配置与身份openlore.yml、认证、角色、文档集、别名、主目录和主机验证
工作负载身份联合使用短期外部身份令牌对 CI 和代理进行认证
编写与发布写入模式、收件箱、冲突处理、审批和作业
插件与知识格式插件安装、接口、OKF 验证、lore validatelore 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 提供。