exo
Exo
Персональный контекстный слой для агентных жизненных систем.
Exo — сокращение от экзокортекс, той части вашего мышления, которая живёт вне вашей головы, — это единая запись жизни в форме, которой владеете вы. Всё, что вы потребляете, всё, что вы пишете, и всё, что машина заключила из первых двух, — в одном месте с единым 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 потребление | что мир записал о вас — скробблы, оценки, сохранения | только загрузчики |
T1 авторское | ваши слова: заметки, посты, вердикты, рецепты, задачи | вы, вручную |
T2 производное | что машина заключила: атомы, векторы, аффинности | только деривация |
Деривация читает T0 и T1 и физически не может видеть T2 — профиль, через который она читает, вообще не имеет представлений T2. Поэтому T2 всегда регенерируется из эталонных данных, и exo verify доказывает это, выполняя деривацию дважды и сравнивая дайджесты. Машинный вывод никогда не становится машинным входом.
Поверхность публикует физически отдельную копию, содержащую только строки, которые вы объявили публикуемыми. Удерживаемый материал отсутствует в опубликованных файлах, а не отфильтровывается во время чтения, поэтому ни ошибка ниже по потоку, ни внедрённая инструкция не могут до него добраться. Политика 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/ — это Cloudflare Worker, говорящий на MCP через HTTP — постоянно только для чтения, обслуживающий только публикационный пакет, — а 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) и добавьте URL Worker'а и этот токен на poke.com/integrations/new. Любой MCP-клиент работает так же — Poke просто тот, кто достучится до вас по текстовому сообщению.
Затем прочитайте CONTEXT.md — это словарь, и остальная часть репозитория предполагает его.
Честные ограничения
Стоимость старта реальна. Это инструмент для того, кто уже ведёт заметки, уже экспортирует свои данные и уже хотел этого. Он не создаст эту привычку за вас.
Загрузчики ломаются. Они читают чужие форматы экспорта и скрейпят чужие страницы. Каждый из них сохраняет свой последний удачный файл, а не перезаписывает его при сбое, но прогнивший загрузчик — лишь вопрос времени.
Под капотом это второй мозг. Личная вики, загрузчики для данных потребления и архивов, некоторая дистилляция сверху. Новизна не в какой-то одной из этих частей; а в том, что они разделяют одну запись с одной границей публикации.
Загрузчик экспорта чатов — это складной нож. Он нормализует экспорты Claude и ChatGPT в единую форму, что полезно независимо от того, хотите ли вы остальное из этого.
Решения
Каждое неочевидное решение имеет ADR в docs/adr. Несущие из них:
каталог DuckDB поверх файлов, родных для уровней, и стена | |
разделите ETL: ноутбук загружает, облако пересобирает | |
удалённая поверхность чтения постоянно только для чтения | |
ограничьте радиус поражения внедрённого чтения | |
код публичен, инстанс приватный | |
процедура — это ресурс, а не инструмент |
Участие
Сначала прочитайте CONTRIBUTING.md — особенно часть о том, чтобы никогда не помещать личные данные в этот репозиторий, включая ваши собственные, и список изменений, которые выглядят мелкими, но пересоздают каждый id в работающем инстансе.
MIT.
This server cannot be deployed
Maintenance
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Person-owned AI memory that learns, not just stores — portable context for any MCP client.
Agent-native MCP server over 49M+ US public and government records, privacy-first, always current.
Read-only MCP server: let AI agents read your ORANO saved-video library, tasks, and memory.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceModel Context Protocol (MCP) server that gives AI assistants a safe, correct data-analyst capability over business metrics - without raw SQL improvisation.-
- AlicenseAqualityBmaintenanceRead-only MCP server for querying PostgreSQL, MySQL, and SQLite from AI agents — multi-database, safe by default.49 npm1ISC
- AlicenseAqualityAmaintenanceA read-only MCP server that exposes SQL database access to LLMs, supporting multiple database types, compact columnar results, pagination, and file export.728 npmMIT
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server that exposes Garmin Connect health data from a local SQLite database to AI assistants, enabling queries for recent days, sleep, weekly trends, and a guarded SQL query surface.MIT