Skip to main content
Glama

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. Несущие из них:

0001

каталог DuckDB поверх файлов, родных для уровней, и стена

0005

разделите ETL: ноутбук загружает, облако пересобирает

0006

удалённая поверхность чтения постоянно только для чтения

0007

ограничьте радиус поражения внедрённого чтения

0014

код публичен, инстанс приватный

0016

процедура — это ресурс, а не инструмент

Участие

Сначала прочитайте CONTRIBUTING.md — особенно часть о том, чтобы никогда не помещать личные данные в этот репозиторий, включая ваши собственные, и список изменений, которые выглядят мелкими, но пересоздают каждый id в работающем инстансе.

MIT.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    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
    B
    maintenance
    Read-only MCP server for querying PostgreSQL, MySQL, and SQLite from AI agents — multi-database, safe by default.
    4
    9 npm
    1
    ISC
  • 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.
    7
    28 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-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