CoreClaw — Telegram + Claude Code bridge
Обзор
Основной Telegram-бот для работы с Claude Code. Bridging между Telegram-топиками и tmux-сессиями Claude Code.
Технические детали
- Username: @coreclawrobot (display name в Telegram: “Босс Ассистент”)
- Расположение: forge (82.39.215.94)
- URL: — (только Telegram)
- Auth: bot-based (не Telegram Login Widget/OAuth — виджет
telegram.org/js/telegram-widget.jsблокировался ISP Proxima Ltd на десктопе). Юзер жмёт кнопку →/api/auth/init→ UUID +t.me/coreclawrobot?start=auth_<uuid>→ бот ловит payload вbot.start()→ POSTjarvis-web:3000/api/auth/from-botсx-bot-secret(общийJARVIS_BOT_AUTH_SECRET) → frontend поллит/api/auth/poll→ JWT-cookie. Файлы:app/lib/auth-store.ts(in-memory Map, TTL 5 мин, не переживает ребут — TODO перенести в Redis),app/api/auth/{init,from-bot,poll}/route.ts,app/login/page.tsx.
Архитектура
- 1 Telegram-топик = 1 tmux-окно = 1 Claude Code сессия
- Telegram Forum topics → tmux sessions
- SessionStart hook пишет session_map.json
- MonitorState отслеживает JSONL-файлы сессий
Jarvis
- Web dashboard для инфры: https://jarvis.08317.ru
- Next.js frontend
- Auth: bot-based (Telegram Login Widget работает с Jarvis)
- Инфра-граф: ReactFlow с сервисами и серверами
Карта и управление комнатами (сессия 2026-07-02)
- MapRoom —
app/rooms/rooms/MapRoom.tsx, react-leaflet v5, 3 слоя: Карта (OSM) / Спутник (Esri) / Гибрид.app/api/map/geocode/route.ts— GET?q=Исландия→ Nominatim →{lat,lon,zoom,display_name}. Автозум:place_rankдля административных объектов, bbox-span для природных (озёра, острова).MapController— прямой доступ к Leaflet-инстансу для flyTo + zoom. - Event store:
app/rooms/mapQueryStore.ts(dispatch(cmd)/subscribe(listener)/registerOpener(fn)),app/rooms/roomOpener.ts(open(key)/register(fn)— для открытия любой комнаты). Оба регистрируются вRoomLayer.tsxчерезuseRooms().open. - CoreClaw-тулы:
show_map(открыть карту + перелететь),map_control(zoom_in/zoom_out/pan_to),open_room(открыть любую комнату Jarvis). Файлы:coreclaw/src/tools/builtin/{map,map_control,open_room}.ts. Конфиг:config/tools.yaml, описание вconfig/prompts/system.md. - Доступные комнаты (
registry.tsx):infra,map,goals(OKR),settings. - Голосовой поток: голос → STT →
sendMessage()→ CoreClaw вызывает тул → SSE{type:'artifact', value:{kind:'map_control',...}}→page.tsxдиспатчит вmapQueryStore/roomOpener→ MapRoom подписан, выполняет команду. /api/map/добавлен вPUBLIC_PREFIXES(без JWT).- Паттерны для будущего голосового слоя в комнатах (proactive check-in, silent language memory) — см. markxlix-features.
История
- 2026-06-06: восстановлены после потери сервера
- Было до: другой сервер (потерян)
- CoreClaw = @coreclawrobot, Jarvis = jarvis.08317.ru
Связанные сервисы
- Postgres: coreclaw-postgres (БД coreclaw + inventory + tg_secretary)
- Qdrant: coreclaw-qdrant (shared, также используется RAG dbrain)
Восстановление 2026-06-06 (после потери старого сервера)
DNS в Cloudflare 08317.ru: jarvis.08317.ru, secretary.08317.ru, tg.08317.ru → 82.39.215.94 (DNS only).
Подключённые тулы на тот момент: 23 builtin + 154 MCP = 177. google_workspace MCP (114 тулов, gwmcp:8888) — OAuth авторизован в тот же день, credentials в docker volume gwmcp_credentials (не терять при docker volume rm).
Оставшийся TODO с той сессии (проверить актуальность при следующей работе с голосом): Silero TTS голоса звучали плохо на русском — рассматривался переход на Gemini TTS (единый API для бота и Jarvis voice). См. также инцидент 2026-07-06 про утечки памяти выше — voice сейчас работает через jarvis-voice-bridge (socat) → coreclaw/src/voice/bridge.ts → Gemini Live API (gemini-2.5-flash-native-audio-latest, голос “Charon”).
Инциденты
2026-07-06: зависания докер-контейнера coreclaw (2 раза подряд)
Симптом у пользователя: в Jarvis-web браузере карта не находила объекты (открывалась пустая карта), голос вообще не распознавал — при этом с телефона (Telegram) всё работало. Причина: контейнер coreclaw — единая точка входа и для /api/chat (карта, через тул show_map), и для /ws/voice — подвисал (процесс жив, но перестаёт принимать соединения), оба симптома появлялись вместе.
- Зависание №1: обнаружено с простоем логов ~2 часа. Fix:
docker restart coreclaw. - Зависание №2: найдено сразу же при повторной проверке после фикса — контейнер зависал повторно примерно раз в 6-9 часов uptime.
- Реальная причина обоих: не баг в coreclaw, а нехватка памяти на хосте (см. filesystem-mcp) — своп был забит на 100%, RAM на 95%+. Под таким давлением node-процесс не крашится, а подвисает вместо ответа на новые сокеты. Утечки в gwmcp и filesystem-mcp исправлены в коде (не просто рестартом) — session timeout’ы добавлены в обоих, дальше расти не должны. Если подвисание coreclaw повторится — смотреть память хоста в первую очередь, а не сам coreclaw.
2026-07-06: отключён legacy systemd coreclaw.service
Обнаружен параллельный bare-metal systemd юнит ~/.config/systemd/user/coreclaw.service (создан 2026-05-27), крашлупился каждые ~10-13 сек с EAI_AGAIN coreclaw-postgres (сотни тысяч рестартов) — не мог резолвить докеровское DNS-имя с голого хоста.
Таймлайн: CoreClaw жил как systemd-сервис с 27 мая; в докер переехал только 2026-07-05 ~15:57 (created timestamp контейнера). Старый юнит после переезда забыли остановить — 1.5 месяца крашлупа впустую (жрал CPU на постоянных рестартах node).
Fix: systemctl --user disable --now coreclaw.service. Проверено — на реальную работу не повлияло, докер-контейнер как был единственным обработчиком трафика, так и остался.
2026-07-10: пилотная установка Graphify (граф кодовой базы для AI-агентов)
По инициативе Сергея (“Graphify найди на гитхабе”) найден и проверен репо Graphify-Labs/graphify (изначально известен как safishamsi/graphify, default branch v8). Перед установкой сделан security review исходников (tree-sitter AST-парсинг, без eval/exec/shell=True, SSRF-защита на ingest, hash-стамп untrusted-контента против prompt injection) — легитимный проект, накрутки звёзд не найдено (в отличие от другого репо с тем же названием, см. feedback-check-before-code.md в auto-memory).
Coreclaw выбран как пилотный проект (активная разработка, реальная архитектурная сложность, не критичный по деньгам как vpnbot-v3).
Установлено на /home/claude (не в докер-контейнер):
uv tool install graphifyy— CLIgraphify/graphify-mcp, изолированноgraphify install --project --platform claude, запущено из/home/claude/coreclaw
Что создано/изменено в coreclaw (ничего не закоммичено):
.claude/skills/graphify/SKILL.md+references/— новый skill.claude/settings.json— PreToolUse хуки:graphify hook-guard searchна Bash,graphify hook-guard readна Read/Glob (перехватывают вопросы по кодовой базе, направляют через граф)CLAUDE.mdв корне репо — новый файл, туда записана секция graphify
Пред-существующие незакоммиченные правки в coreclaw (config/prompts/system.md, src/bot/handlers.ts, src/tools/builtin/map.ts, .serena/) — не мои, не тронуты.
2026-07-10: граф построен. Пайплайн выполнен вручную (Python API напрямую, SKILL.md оказался повреждён апстрим-компрессией контекста — сверял каждую сигнатуру через inspect перед вызовом).
Результат: 668 узлов, 1406 рёбер, 34 community, 10 god nodes, 5 surprising connections. Источники: AST (634 узла/1545 рёбер, tree-sitter, бесплатно) + семантика по 25 doc-файлам (34 узла/54 рёбра/3 hyperedges, через собственный dispatched subagent — ключей GEMINI_API_KEY/GOOGLE_API_KEY нет).
Health-check (diagnose_extraction): 181 dangling_endpoint_edges (рёбра на несуществующие узлы — вероятно из-за 4 пропущенных .sql-файлов, нет tree_sitter_sql) и 10 groups схлопнутых дублей (в основном повторные imports_from рёбра — норма). Не блокирует, но если понадобится точность — доставить tree-sitter-sql в venv графайфа и пересобрать.
Файлы (не закоммичены, живут вне git):
graphify-out/graph.json— основной граф (655KB)graphify-out/graph.html— интерактивный D3-вьюер (582KB)graphify-out/GRAPH_REPORT.md— читаемый отчёт с god nodes/communities/surprises/suggested questionsgraphify-out/manifest.json— для инкрементальногоgraphify update .graphify-out/.graphify_python,.graphify_root— служебные маркеры (нужны для CLI)- Промежуточные
.graphify_*(ast/semantic/detect/state/labels) удалены после сборки — их можно перегенерить, в git всё равно не идут
Проверено: graphify query "как работает auth" — BFS от auth.ts/AuthContext/authority.ts, 159 узлов, работает.
Закоммичено и запушено 2026-07-11 (коммит f90cfb1, ветка main, origin/main в актуальном состоянии): .claude/skills/graphify/, .claude/settings.json, CLAUDE.md, .gitignore (добавлена строка graphify-out/ — артефакты графа в git не идут, пересобираются через graphify update .). В коммит не попали чужие незакоммиченные правки (config/prompts/system.md, src/bot/handlers.ts, src/tools/builtin/map.ts) и .serena/ — они не мои, остались нетронуты и по-прежнему не в git.