Skip to main content
Glama

Exo

一个用于智能体生活系统的个人上下文层。

Exo——exocortex(外脑皮层)的简称,即你思考中存在于大脑之外的那一部分——是一份人生记录,形态由你掌控。你所消费的一切、你所写的一切,以及机器从这两者推断出的一切,都集中在一个地方,并有一个统一的 SQL 查询层贯穿其中。

该记录的一份经过过滤的副本会发布到一个只读 MCP 服务器上,这样你面前不管是什么助手,都可以把它用作上下文——而不会让该助手的厂商拥有这份记录。

loaders ─────────▶   the record   ─────────▶   the surface
what reaches it    what it holds          what it exposes
(one per source,   (tier zones, one       (a fixed set of named
 each writes one    SQL surface, one        questions, read-only
 zone)              wall)                   by construction)

为什么

你应该尽可能拥有自己的个人上下文、操作知识和记忆。这正是它们可移植的根源,也是实现细粒度隐私的唯一途径。

  • 你拥有例行程序,而不必拥有调度器。 自托管一切值得称赞,但并非没有痛苦;有时候,使用别人的基础设施才是正确答案。不应该转移的是记录本身。

  • 没有平台锁定,也没有模型锁定。 记录以 parquet 和 markdown 形式存放在你的磁盘上。对外接口是 MCP,这是每个助手都懂的语言。

  • 在你工作的地方与你相遇。 通过 MCP 可访问的集中式存储,意味着同一份上下文可以到达你的终端代理、编辑器和手机。

这个东西之所以存在,是因为另一种选择是十几个孤岛,每个孤岛只知道你的一小部分,而没有一个会把数据还给你。

Related MCP server: mcp-multi-db

它实际做什么

加载器把困在孤岛中的数据拉出来:Last.fm、Letterboxd、Goodreads、Untappd、Trakt、Raindrop、你的 Claude 和 ChatGPT 导出、你的 markdown 笔记、你公开发表的文章、你的 git 仓库。每个加载器只写入一个区域,不碰其他任何东西。

记录谁可以写入来区分它们,而不是按数据是什么:

层级

内容

写入方

T0 消费

世界记录下的关于你的一切——scrobbles、评分、收藏

仅加载器

T1 创作

你的文字:笔记、帖子、评价、食谱、任务

你,手工

T2 派生

机器推断出的结果:原子、向量、亲和度

仅派生流程

派生流程读取 T0 和 T1,并且在物理上无法看到 T2——它读取时所用的配置文件完全没有 T2 视图。因此 T2 总是从基准真值重新生成,exo verify 通过两次派生并比较摘要来证明这一点。机器输出永远不会变成机器输入。

发布面发布一份物理上独立的副本,只包含你声明为可发布的行。被扣留的内容不会出现在发布的文件中,而不是在读取时过滤,因此下游的任何 bug 和注入的指令都无法触及它。该策略是失败即关闭(fail-closed):未声明的区域会导致构建失败,而不是默认放行或默认禁止。

引擎与你的实例

这个仓库是引擎。它不保存任何数据,也永远不会保存。

你的数据、配置和你自己的加载器位于实例中——一个独立、私有的目录(通常是一个独立的私有仓库),引擎通过 $EXO_HOME 找到它:

your-instance/
  exo.toml              who you are, where your inputs live
  serve-manifest.json    what may leave this machine
  raw/                   your exports and mirrors
  zones/                 the record itself
  plugins/               loaders only you could have
  items/                 your tasks, habits, slots
  procedures/            how you do a recurring thing, by hand

如果某个加载器的输入是一种格式——例如 Last.fm 导出、一个 markdown 文件夹、一个 git 仓库目录——那么它随引擎一起发布。任何人都能拥有这样的输入。如果某个加载器的输入是一个场所——你所在城市的场馆日历、你的兄弟仓库、你的博客——那么它属于你的实例。判断标准不是代码有多专门化,而是陌生人是否有可能拥有这种输入。

开始

uv sync
uv run exo init ~/my-exo        # scaffold an instance
export EXO_HOME=~/my-exo
# drop your exports into $EXO_HOME/raw/exports/, then:
uv run exo rebuild              # ingest -> index -> derive -> catalog
uv run exo query "SELECT artist, count(*) FROM t0_music GROUP BY 1 ORDER BY 2 DESC LIMIT 10"
uv run exo publish --dry-run    # what would leave, and what is held back

exo init 复制的模板位于 exo/templates/——在编辑副本之前,请先阅读它们。

从手机访问它

只读发布面的意义在于,当你远离持有记录的机器时,记录仍然可以应答。worker/ 是一个通过 HTTP 提供 MCP 服务的 Cloudflare Worker——永久只读,只提供发布包——worker/README.md 介绍了如何将其部署并连接到 Poke,这个 iMessage 助手:

cd worker
cp wrangler.example.toml wrangler.toml       # your database id, your buckets, your name
npx wrangler d1 create exo                   # + r2 bucket create exo-vectors
npx wrangler deploy
npx wrangler secret put AUTH_TOKEN           # openssl rand -hex 32

然后将一个发布包发布进去(exo publish --cf,然后 import.sh),并在 poke.com/integrations/new 添加 Worker 的 URL 和该令牌。任何 MCP 客户端都能以同样的方式工作——Poke 只是那个通过短信触达你的客户端。

然后阅读 CONTEXT.md——它是词汇表,仓库的其他部分都假定你已经读过。

坦诚的局限

  • 启动成本是真实存在的。 这个工具面向那些已经记笔记、已经导出数据、并且本来就想要这个东西的人。它不会替你建立起这个习惯。

  • 加载器会坏。 它们读取别人的导出格式,抓取别人的页面。每个加载器都会保留最后一次成功生成的文件,而不是用失败结果覆盖它;但加载器腐坏只是时间问题。

  • 底层是一个第二大脑。 一个个人 wiki、用于消费数据和档案的加载器,再加上一些蒸馏提炼。新颖之处不在于其中任何单一组件,而在于它们共享同一条记录和同一个发布边界。

  • 聊天导出加载器是一把口袋刀。 它将 Claude 和 ChatGPT 的导出标准化为一种格式,无论你是否需要本项目的其他部分,它都很有用。

决策

每一个不太显然的选择在 docs/adr 中都有一份 ADR。其中起支撑作用的有:

0001

层级原生文件之上的 DuckDB 目录,以及那堵墙

0005

拆分 ETL:笔记本摄取,云端重建

0006

远程只读发布面永久只读

0007

限制注入读取的爆炸半径

0014

代码公开,实例私有

0016

过程是资源,而非工具

贡献

请先阅读 CONTRIBUTING.md——尤其是关于绝不在本仓库中放入个人数据(包括你自己的数据)的部分,以及那些看似微小却会重新铸造运行中实例每个 id 的改动清单。

MIT.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Model Context Protocol (MCP) server that gives AI assistants a safe, correct data-analyst capability over business metrics - without raw SQL improvisation.
  • A
    license
    A
    quality
    A
    maintenance
    Read-only MCP server for querying PostgreSQL, MySQL, and SQLite from AI agents — multi-database, safe by default.
    4
    18
    1
    ISC
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server providing read-only access to SQL Server databases for AI assistants, enabling schema exploration, query execution, and foreign key inference with token-efficient TOON responses.
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    A read-only MCP server that exposes SQL database access to LLMs, supporting multiple database types, compact columnar results, pagination, and file export.
    6
    22
    MIT

View all related MCP servers

Related MCP Connectors

  • The personal context layer for AI: your profile and files, read by any MCP client over OAuth.

  • Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.

  • Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/reeswrites/exo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server