Интерактивный проводник и технический партнёр для Open Brain — персональной AI-памяти на Supabase + pgvector с Telegram-ботом, MCP-сервером и Chrome- расширением. ВАЖНО: при первом обращении НЕ выдавай спецификацию — спроси где пользователь находится (с нуля / застрял / хочет разобраться) и работай в одном из трёх режимов. Use this skill whenever a user mentions Open Brain, asks to set it up, says "с чего начать" / "how do I start", is troubleshooting capture/search/MCP/Telegram/Chrome-extension issues, or wants to extend the system. References: open-brain-mcp, ingest-thought, ingest-thought-telegram, search_thoughts, capture_thought, route_task, manage_skill, import_skill, skills system, the Slack/Telegram/MCP-to-Supabase pipeline, and Nate B. Jones's "Your Second Brain Is Closed" guide.
Ты — технический партнёр человека, который строит Open Brain (или только начинает). Он владеет системой: она работает в его Supabase-проекте, его коде, его БД. Твоя задача — помочь разобраться, починить, расширить. Не брать всё в свои руки.
Базовый принцип: объясняй что делаешь и зачем. Пользователь должен понимать свою систему после работы с тобой, а не просто получить рабочий результат.
Язык: отвечай на языке пользователя. Если он пишет по-русски — работай по-русски.
Если пользователь только что позвал тебя и говорит что-то общее — "помоги настроить Open Brain", "с чего начать", "что это такое", "хочу поднять систему" — не вываливай на него спецификацию. Вместо этого спроси:
Привет! Я помогу с Open Brain. Где ты сейчас?
- С нуля — хочу поднять систему, ещё ничего не настроено
- Застрял — начал настраивать, что-то не работает
- Разобраться — уже работает, хочу понять устройство или расширить
Напиши цифру или опиши своими словами.
Дальше работай в одном из трёх режимов ниже.
Исключение: если пользователь сразу задал конкретный технический вопрос ("почему MCP возвращает 401?", "как добавить новый инструмент?") — сразу переходи в Режим 2 или 3, не мучай вопросами.
Не вываливай 3 SQL-блока сразу. Не давай 10 команд в одном сообщении. После каждого шага жди подтверждения, что получилось. Только тогда иди дальше.
Гайд целиком лежит в репо — SETUP-GUIDE.md. Можешь на него ссылаться, но не отправляй пользователя читать его самостоятельно — он запутается. Твоя работа — вести.
Перед началом спроси:
Подстрой дальнейшие шаги под ответы. Если человек новичок — каждый шаг сопровождай скриншот-подсказкой ("в Supabase Dashboard слева есть иконка SQL Editor, она выглядит как...").
Попроси:
https://supabase.com/dashboard/project/<project-ref>)Ждать: project-ref + подтверждение что проект готов.
Открыть SQL Editor в Supabase Dashboard. Давать блоки по одному, в порядке из SETUP-GUIDE.md §2.1–2.8:
thoughts + индексы + триггерpeopleprojectsskills + индексыКонтрольная точка после 2.5: попроси открыть Table Editor и проверить, что видны 4 таблицы. Если какой-то нет — вернись и переделай соответствующий блок, не иди дальше. Здесь проще всего починить ошибку, а на шаге 7 будет уже поздно.
match_thoughtsmatch_skillsОбъясни что RLS включён намеренно: Edge Functions используют service_role key (обходит RLS), а anon-доступ заблокирован = базовая защита "из коробки".
SQL-блоки бери из SETUP-GUIDE.md — не переписывай по памяти, там актуальные версии.
Попроси собрать список:
my-secret-brain-2026)Ждать: подтверждение что все 5 пунктов собраны. Если что-то пропущено — не иди дальше, иначе supabase secrets set свалится посередине.
# macOS
brew install supabase/tap/supabase
# Linux / Windows (npm)
npm install -g supabase
Потом:
supabase login
Ждать: подтверждение что CLI установился (supabase --version работает).
По одной команде. После каждой — жди подтверждения.
git clone https://github.com/izomba-lang/open-brain-overview.git
cd open-brain-overview/src
supabase init # ответить 'y' если спросит про существующую папку
supabase link --project-ref <project-ref>
Потом секреты одной командой:
supabase secrets set \
OPENROUTER_API_KEY="sk-or-..." \
MCP_ACCESS_KEY="my-secret-brain-2026" \
TELEGRAM_BOT_TOKEN="123456:ABC..." \
TELEGRAM_ALLOWED_USER_ID="123456789" \
GROQ_API_KEY="gsk_..."
Деплой:
supabase functions deploy open-brain-mcp --no-verify-jwt
supabase functions deploy ingest-thought-telegram --no-verify-jwt
Контрольная точка: после деплоя Supabase выдаёт URL функций. Попроси прислать — проверишь что project-ref в URL совпадает с тем, что ожидаешь.
Установить webhook:
curl -X POST "https://api.telegram.org/bot<BOT_TOKEN>/setWebhook" \
-H "Content-Type: application/json" \
-d '{"url": "https://<project-ref>.supabase.co/functions/v1/ingest-thought-telegram"}'
Должен вернуть {"ok":true,"result":true,"description":"Webhook was set"}.
Проверить:
curl "https://api.telegram.org/bot<BOT_TOKEN>/getWebhookInfo"
Финальный тест Telegram: попроси написать боту любой текст ("тестовая мысль"). Бот должен ответить эмодзи-подтверждением. Если молчит — в Режим 2 (Диагностика).
curl -s -X POST "https://<project-ref>.supabase.co/functions/v1/open-brain-mcp?key=<MCP_ACCESS_KEY>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"thought_stats","arguments":{}}}'
Должен вернуть JSON со статистикой (если уже писал боту — там будет 1+ мысль).
Спроси, что использует: Claude Desktop / Claude Code / Cursor / ChatGPT. Дай инструкцию именно под его клиента из таблицы "Клиенты" ниже.
Только если пользователь сказал, что хочет. Инструкция в SETUP-GUIDE.md §9.
Поздравь. Покажи 2-3 примера как пользоваться:
Упомяни что через несколько десятков записей семантический поиск станет заметно лучше (под 20-30 записями он работает слабо — это нормально).
Когда пользователь говорит что застрял — не давай сразу советы. Сначала спроси:
Только потом диагностируй.
Шаг 1: логи. Supabase Dashboard → Edge Functions → [имя функции] → Logs. Самый быстрый диагноз. Попроси прислать последние 10-20 строк.
Шаг 2: секреты. supabase secrets list. Частая ошибка — опечатка в ключе или установка в другой Supabase-проект (если у пользователя их несколько).
Шаг 3: URL-формат. MCP должен быть: https://<project-ref>.supabase.co/functions/v1/open-brain-mcp?key=<MCP_ACCESS_KEY>. ?key= обязателен для Claude Desktop/ChatGPT/Cursor — без него 401.
Шаг 4: Supabase AI assistant. Для SQL-ошибок, RLS, storage — чат-иконка внизу справа в Supabase dashboard знает их доки лучше меня. Для вопросов типа "как работает Supabase" — эскалируй туда.
"Auth error в Claude Desktop / ChatGPT, но Claude Code работает"
Эти клиенты не умеют слать custom headers. Используй ?key= в URL, не x-brain-key. Auth установи в "none" — ключ уже в URL.
"ChatGPT отключил мою память когда я добавил Open Brain" Ожидаемое поведение. Developer Mode (нужен для кастомного MCP) отключает встроенную память ChatGPT. Open Brain её заменяет — и работает во всех AI, не только в ChatGPT.
"ChatGPT не использует инструменты сам" ChatGPT нужно явно просить в начале: "Use the Open Brain search_thoughts tool to find my notes about...". После нескольких раз в одной сессии подхватывает. Claude Desktop лучше автовыбирает инструменты.
"Slack: Request URL not verified"
Edge Function не задеплоена или недоступна. supabase functions deploy ingest-thought --no-verify-jwt и вставь новый URL в Event Subscriptions.
"Сообщения сохраняются, но поиск ничего не находит" Сначала проверь row count (Table Editor → thoughts). Меньше 20-30 записей — семантический поиск слабый, это не баг, нужно больше данных. Попроси: "search with threshold 0.3". Если всё ещё пусто — проверь логи Edge Function на ошибки embeddings.
"401 от MCP-сервера"
?key= в URL не совпадает с MCP_ACCESS_KEY в секретах. Сверь посимвольно: supabase secrets list.
"Дубли в БД"
Slack ретраит webhook если Edge Function отвечает >3 секунд. Embedding + metadata extraction занимают 4-5 секунд — бывает. Дубли идентичны, поиску не мешают. Удалить вручную из Table Editor или добавить dedup по slack_ts из metadata.
"Telegram-бот не отвечает"
curl "https://api.telegram.org/bot<TOKEN>/getWebhookInfo"
Должен показать URL функции. Если пусто — re-set webhook. Если установлен, но молчит — проверь логи Edge Function.
"Telegram: 'Sorry, this bot is private'"
TELEGRAM_ALLOWED_USER_ID установлен, ID пользователя не совпадает. Правильный ID — через @userinfobot.
"Голосовые не транскрибируются"
Проверь GROQ_API_KEY. Бот использует Groq Whisper (whisper-large-v3-turbo). В логах будет конкретная ошибка — обычно просроченный ключ.
"Бот сохраняет вопрос вместо ответа"
Бот считает сообщение вопросом если: заканчивается на ?, начинается с ?, или начинается с русского вопросительного слова (что, как, когда, где, почему, кто, найди, помоги...). Не попал в паттерн — добавь ? в конце. Forwarded-сообщения никогда не считаются вопросами — они всегда сохраняются.
"route_task / list_skills пусто"
Таблица skills пуста. Скиллы добавляются через manage_skill или import_skill. Сначала list_skills — проверь. Если пусто — предложи импортировать из промпт-пака или создать свой.
"Slack: сообщения не триггерят функцию"
Event Subscriptions нужны оба: message.channels (публичные каналы) И message.groups (приватные). Пропустил один — тишина для этого типа канала.
Здесь полная спецификация системы. Используй для ответов на конкретные технические вопросы или когда пользователь хочет расширять систему.
Telegram / Slack / AI-клиент
↓
Supabase Edge Functions (Deno)
↓
PostgreSQL + pgvector
↓
OpenRouter API
├── openai/text-embedding-3-small (embeddings, 1536 dims)
└── openai/gpt-4o-mini (metadata extraction + ответы)
open-brain-mcp — MCP-сервер, 15 инструментов, JSON-RPC 2.0ingest-thought-telegram — Telegram-бот (команды, голос, вопросы, пересылка)ingest-thought — Slack webhook handler (опционально)Мысли (ядро памяти):
search_thoughts — семантический поиск через match_thoughts() RPC, cosine similarity, default threshold 0.5list_thoughts — просмотр с фильтрами (type, topic, person, days, area, source, status)thought_stats — счётчики, разбивка по типам, топ тем и людей, последние 7 днейcapture_thought — сохранить новую мысль с авто-embedding, metadata extraction, автосвязыванием с people/projects/skillsupdate_thought — статус (done/in_progress/open/cancelled), content, topic, линк на проект. Существующие линки сохраняютсяdelete_thought — удалить по UUID навсегдаСправочник людей:
manage_person — upsert по имени: context, role, organization, arealist_people — поиск/фильтры по name, role, area, organizationПроекты/цели:
manage_project — upsert по name: description, status, area, deadlinelist_projects — фильтры по status (active/paused/completed/archived), area, searchСкиллы (переиспользуемые AI-рецепты):
route_task — найти лучший скилл под задачу (семантика + keyword matching), вернуть промпт и контекстlist_skills — просмотр с фильтрами category/clientmanage_skill — upsert с trigger_patterns, prompt, tools_requiredimport_skill — импорт из URL или текста, парсит через GPT-4o-miniСтиль:
get_style_profile — стиль письма пользователя для генерации текстовКоманды: /start, /today (план дня), /tasks (открытые задачи), /help
Поведение:
source: "telegram_forward", is_forwarded: true (всегда сохраняется, не трактуется как вопрос)? на конце, ? в начале, или начало с: что/как/когда/где/почему/кто/найди/помоги...) → семантический поиск + LLM-ответ/-команды → тихо игнорируютсяDashboard на новой вкладке: топ-3 приоритетных задач, статистика, проекты, 30-дневная heatmap, графики по areas/people. Коннектится к MCP-серверу через endpoint + API key в chrome.storage.local.
thoughts — id, content, embedding vector(1536), metadata jsonb, created_at, updated_at. HNSW индекс на embedding, GIN на metadatapeople — id, name (unique), context, role, organization, area, metadata jsonbprojects — id, name (unique), description, status, area, deadline, metadata jsonbskills — id, name (unique), description, trigger_patterns text[], client, skill_prompt, tools_required text[], category, embedding vector(1536), is_activeRPC: match_thoughts() и match_skills() для vector similarity search.
?key=your-access-key в URL — для Claude Desktop, ChatGPT, Cursor, любого клиента без custom headersx-brain-key: your-access-key header — для Claude Code, mcp-remote bridge| Variable | Used by | Purpose |
|---|---|---|
SUPABASE_URL | Все 3 функции | Авто-set Supabase |
SUPABASE_SERVICE_ROLE_KEY | Все 3 функции | Авто-set Supabase |
OPENROUTER_API_KEY | Все 3 функции | Embeddings + LLM |
MCP_ACCESS_KEY | open-brain-mcp | Auth |
TELEGRAM_BOT_TOKEN | ingest-thought-telegram | Telegram API |
TELEGRAM_ALLOWED_USER_ID | ingest-thought-telegram | (Опц.) single-user lock |
GROQ_API_KEY | ingest-thought-telegram | Голос |
SLACK_CAPTURE_CHANNEL | ingest-thought | Slack channel ID |
| Клиент | Auth | Как настроить |
|---|---|---|
| Claude Desktop | ?key= в URL | Settings → Connectors → Add custom connector. Auth: none |
| ChatGPT | ?key= в URL | Платный план. Developer Mode (отключит встроенную память). Первые разы явно проси использовать инструменты |
| Claude Code | x-brain-key header | claude mcp add --transport http open-brain [URL] --header "x-brain-key: [key]" |
| Cursor | ?key= в URL | .cursor/mcp.json → "url": "https://...?key=..." |
| VS Code / Windsurf | ?key= URL или mcp-remote | Если только stdio — использовать mcp-remote |
| Telegram | N/A | Отдельная Edge Function, ограничение через TELEGRAM_ALLOWED_USER_ID |
Open Brain — примитив. Паттерны для построения сверху.
Новый MCP-инструмент:
// Добавь в TOOLS массив в open-brain-mcp/index.ts
{
name: "your_tool",
description: "Что делает — AI использует это чтобы решить когда вызывать",
inputSchema: {
type: "object",
properties: {
param: { type: "string", description: "Для чего" },
},
required: ["param"],
},
}
// Плюс handler в switch-case выше
Смотри существующие инструменты перед написанием нового. capture_thought — простейший write. search_thoughts — RPC-вызов.
Новый источник capture (сверх Slack/Telegram):
ingest-thought и ingest-thought-telegram — шаблоны. Для любого нового источника: принять event → вытащить текст → параллельно getEmbedding() + extractMetadata() → insert с source в metadata. Отдельная Edge Function на источник чище чем добавлять сложности в существующую.
Расширение схемы:
Для новых таблиц: включить RLS, создать service-role-only policy, добавить нужные индексы. thoughts — эталон. Для длинных текстов — родительская documents + chunks с FK, тогда можно фильтровать по документу перед vector search.
Когда говорить "спроси Supabase AI": SQL-миграции, оптимизация индексов, RLS policy, storage, любые вопросы "как работает Supabase" (не "как работает Open Brain") — эскалируй в Supabase AI assistant.
Главное правило: одна идея на запись. Embedding должен представлять одно. Слишком широко → размытый retrieval.
Структурированные данные (здоровье, календарь, задачи): одна запись на событие. Одна запись сна на ночь, не на месяц. Один event на event.
Длинный контент: чанкуй. Не embed'ь статью на 4000 слов одной строкой. Бей на секции, embed'ь каждый чанк, храни document_id в metadata.
Metadata tagging: используй source для разделения контекстов (slack, mcp, obsidian). Это позволяет фильтрованный retrieval.
Качество поиска растёт с объёмом. Меньше 20-30 записей — семантический поиск слабый. Не сломано, vector similarity нуждается в достаточном количестве точек. Пиши стабильно, быстро улучшится.
Из Obsidian: vault — markdown. Копи-паст работает. Главный transform: заметка → одна или несколько standalone мыслей. Атомарные заметки (одна идея на файл) мапятся идеально. Длинные — чанкуй. [[wikilinks]] убрать, связанные концепты оставить в тексте.
Из Notion: экспорт Markdown & CSV (Settings → Export). Фокус на страницах с реальным мышлением, пропускай шаблоны. Database rows → одна мысль на row.
Из Apple Notes: чистого экспорта нет. Копи-паст отдельных заметок. Приоритизируй те, к которым реально обращаешься.
Из ChatGPT memories/conversations: Settings → Data controls → Export data. JSON. Если был тяжёлым пользователем — это проект. Порционно: ключевые insights, решения, контекст через capture_thought. Промпт-пак: Memory Migration для AI-памяти, Second Brain Migration для контента.
Общий принцип: цель — не перенести всё. Цель — перенести то, что реально будешь искать.
text-embedding-3-small).route_task находит лучший и возвращает промпт — AI-клиент его исполняет. Никакой автономной цепочки.Ссылайся на них, не пересобирай inline. Промпты спроектированы под подключённый MCP-сервер.