Об этом проекте

Context (supa-media/context) представляет собой MCP-шлюз, который предоставляет AI-клиентам — ChatGPT, Claude, Codex, Notion AI и другим — единую конечную точку для чтения и записи персональной базы знаний. База знаний состоит из обычных Markdown-файлов, хранящихся в аккаунте, который контролирует пользователь: Dropbox, Cloudflare R2, AWS S3, Backblaze B2 или любом другом S3-совместимом хранилище. В README описываются три взаимосвязанных единицы: **brain** (персональный контекст, привязанный к вашему имени), **workspace** (контекст, общий с другими пользователями) и **context** как объединение вашего brain, общих с вами brain и ваших workspace. Подключение одной конечной точки призвано избавить каждого нового ассистента от необходимости заново изучать ваши проекты, решения и историю. ## Два уровня (planes) Архитектура разделяет уровень управления (control plane) и уровень данных (data plane), и в README это разделение рассматривается как основа проекта. - **Control plane** (`apps/convex`) — аккаунты, рабочие пространства, OAuth-разрешения и привязки к хранилищам. Заявлено, что здесь хранятся только метаданные: никаких заметок, никаких вторых копий. - **Data plane** — папка Dropbox пользователя или корзина объектного хранилища. Удаление аккаунта Context очищает control plane, в то время как data plane остается нетронутым. MCP-шлюз (`apps/mcp`) описывается как автономный Cloudflare Worker, который пользователь может развернуть самостоятельно, если хостинг-сервис перестанет работать, при этом корзина с данными продолжит функционировать. ## Хранение и переносимость - Обычные файлы являются каноническими: Markdown читаем в Obsidian, доступен для поиска через `grep` или может быть перенесен с помощью `rclone`; проприетарная база данных не является единственной копией. - Хранилище сохраняет свою нативную структуру — обычная папка в Dropbox или tenancy на уровне корзины в объектном хранилище, без перезаписи ключей или создания пространств имен в путях. Заявляется, что существующий brain подключается без миграции. - Индексы (кэши поиска, эмбеддинги) описываются как одноразовые производные, которые можно восстановить из файлов. ## Инструменты и соглашения **`orient`** — это первый инструмент, который должны вызвать подключенные клиенты. Он возвращает главную страницу, недавно измененные заметки и карту папок с количеством заметок. Большая часть его вывода извлекается из корзины и пересобирается при каждом вызове. В README отмечается, что эта инструкция находится в соединении, а не в клиенте, поэтому для обеспечения постоянства рекомендуется использовать пользовательскую инструкцию на стороне клиента, системный промпт или файл правил. **`index.md`** — обычный Markdown-файл в корне корзины, принадлежащий пользователю. При настройке создается начальная версия; агентам рекомендуется дополнять его, а не заменять, и сначала сообщать об изменениях. Рядом может находиться необязательный файл `index-private.md` для контента, предназначенного только для персонального подключения. Подключение корзины, в которой уже есть заметки, ничего не перезаписывает, поэтому импортированный brain может не иметь `index.md`, о чем сообщит `orient`. **`save_context`** — инструмент, вызываемый агентом в конце сессии. Его поведение определяется пользователем через раздел `## Save context` в `index.md` со строкой `destination:` и любой процедурой, которой пользователь хочет следовать. **Session-end hook** — команда `npx -y @supa-media/context-hook install` один раз выполняет вход в систему и добавляет хук `SessionEnd` в Claude Code, чтобы видимые пользователю сообщения сессии автоматически попадали в `0-inbox/`. В README указано, что хук запрашивает только доступ к захвату данных, не может читать заметки, отображается в Connections и может быть отозван отдельно. Исходный код находится в `packages/hook`. ## Организация При настройке создается структура в стиле PARA — `0-inbox/`, `1-projects/`, `2-areas/`, `3-resources/`, `4-archive/` — которая представлена как предложение, а не как жесткая схема. Инструменты работают с путями, поэтому любая структура, предоставленная пользователем, будет работать так же. ## Конфиденциальность Каждая заметка имеет статус `private` (приватная) или `team` (командная). Настройки папок по умолчанию объявляются в манифесте `privacy.md` в корне корзины, который виден владельцу и соблюдается на стороне сервера перед возвратом контента; при этом отдельные заметки могут переопределять настройки своей папки в любом направлении. `team` определяется как именованные люди, а не открытый интернет; анонимного уровня не предусмотрено. ## Структура репозитория | Путь | Назначение | | --- | --- | | `apps/convex/` | Control plane — аккаунты, рабочие пространства, привязки к хранилищам, разрешения | | `apps/mobile/` | Expo-приложение (iOS, Android, web) — онбординг и панель управления | | `apps/mcp/` | MCP-шлюз Worker — инструменты, движок конфиденциальности, адаптер хранилища | | `packages/shared/` | Типы и константы, общие для всех приложений | | `packages/hook/` | Хук завершения сессии, устанавливаемый через `npx` | ## Разработка ```sh pnpm install npx convex dev # создает ваше развертывание Convex pnpm dev # Convex + Expo вместе cd apps/mcp && pnpm test # в README упоминается 442 проверки, без зависимостей, без сети ``` Заявлено, что проект построен на базе supa-framework.