ClaudeClaw (@myiahelprobot)
Status: 🟢 Active (systemd service)
Latest commit: 6314775 (2026-06-29)
Repository: github.com/Kobalt695/claudeclaw
Location: /home/claude/claudeclaw
Версия и обновления
- Текущая версия: 1.0.0
- Последнее обновление: 29.06.2026
- Последний коммит: “feat: add /version command, update paths to /home/claude, add forge task management”
Последние изменения (2026-06-29)
✅ Добавлена команда /version
Задача: a39b79d4 (выполнена)
Что сделано:
-
Добавлена команда
/versionкоторая отвечает текущей версией из package.json и датой последнего обновления через git log- Формат ответа: “ClaudeClaw\n\nВерсия: 1.0.0\nОбновлено: DD.MM.YYYY HH:MM”
- Доступна как напрямую в чате, так и через меню ”📋 Команды” → ”📌 Версия”
-
Исправлены пути
/root/→/home/claude/в нескольких местах:- Claude Code path:
/home/claude/.local/bin/claude - Excalidraw skill:
/home/claude/.claude/skills/excalidraw-diagram/ - Remotion:
/home/claude/.claude/skills/remotion/scripts/create_video.py - TODO.md:
/home/claude/TODO.md
- Claude Code path:
-
Добавлен модуль
src/forge.tsдля управления Claude Forge tasks:- Сканирует локальные git repos
- Детект тестов (npm test / pytest)
- Создание/управление worktrees для задач
Статус пуша: ✅ Успешно отправлено на GitHub (коммит 6314775)
Команды бота
Основные команды:
/start— меню и инструкции/version— версия ClaudeClaw (🆕)/health— статус сервиса/update— проверка обновлений Claude Code/n8nupdate— обновление n8n/newchat— новая сессия/memory— сохранённые воспоминания/recall— поиск в памяти/weather— прогноз погоды/schedule— расписание задач/checkpoint— сохранить состояние/todo— управление TODO листом/upload— загрузка файлов/mail— отправка писем/limits— лимиты контекста/task— управление Forge tasks (🆕)/tasks— список Forge tasks (🆕)
Инфраструктура
- Telegram: @myiahelprobot
- Token: исправлен 2026-06-17 (путь пересчитан)
- Запуск: systemd сервис (systemctl —user)
- Health check: curl http://localhost:8765/healthz
✅ Статус (2026-06-29 22:38)
- ✅ Node.js v22.22.3 установлен и работает
- ✅ systemd сервис
claudeclaw.serviceактивен и запущен - ✅ Команда
/versionдобавлена, тестирована и работает - ✅ Все команды меню функциональны
Заключение: ClaudeClaw полностью функционален. Статус может быть обновлён с ⬜ на ✅
2026-07-11: fix /n8nupdate — сломан после переезда на новый сервер
Сергей заметил: /n8nupdate в ClaudeClaw выдавал ошибку. Причина — два хардкода со старого сервера:
docker exec n8n-n8n-1 ...— контейнер теперь называется простоn8n(container_name: n8nв compose)cd /opt/n8n && docker compose ...— реальный путь compose-файла теперь/home/claude/n8n,/opt/n8nне существует
Похожая миграция путей /root/ → /home/claude/ уже делалась 2026-06-29 (коммит 6314775), но это место пропустили.
Fix: src/bot.ts строки ~1075 и ~1104, коммит 82e4eff (после rebase на удалённый Forge-тестовый коммит fdcc93e, который создавал FORGE_TEST5.md). Пересобрано (npm run build), сервис перезапущен, проверено — docker exec n8n n8n --version возвращает 2.25.7.
Вывод на будущее: при переезде серверов проверять не только пути /root/→/home/claude/, но и docker container_name/compose-путь везде, где боты дергают docker exec/docker compose напрямую (grep docker exec\|docker compose\|/opt/ по каждому боту).
Продолжение — та же ошибка после фикса. Сергей сообщил, что /n8nupdate всё ещё выдаёт “Не удалось получить версию.” Причина оказалась второй, независимой: npm view n8n version (получение последней версии n8n) падал с npm: not found — не путь к контейнеру, а PATH процесса. /home/claude/.config/systemd/user/claudeclaw.service (юнит вне git-репозитория, руками не синкается с кодом) не задавал PATH, systemd user-сервис получал голый дефолтный PATH без nvm-директории (npm живёт в /home/claude/.nvm/versions/node/v22.22.3/bin/, не в /usr/bin). docker exec при этом работал (docker в /usr/bin) — поэтому первый баг (контейнер/путь) был реальным, но не единственным.
Fix: добавлена строка Environment=PATH=/home/claude/.nvm/versions/node/v22.22.3/bin:... (полный дефолтный PATH + nvm-bin в начале) в сам unit-файл, daemon-reload + restart. Проверено — npm view n8n version и docker exec n8n n8n --version оба отработали с симулированным PATH процесса.
Важно на будущее: у ClaudeClaw как минимум один systemd-юнит с nvm-путями без явного PATH — если появятся новые exec()-вызовы shell-инструментов (не docker/git/curl, которые есть в /usr/bin), они будут ловить command not found, если инструмент стоит через nvm/pip user/cargo и т.п. Стоит на будущее аудитить ~/.config/systemd/user/*.service у всех ботов на PATH, не только код.
Третий заход — реальная причина обоих “фиксов” не срабатывавших. Сергей написал “Опять — не удалось получить версию” после PATH-фикса. Проверил живой процесс — сервис перезапущен, PATH в /proc/<pid>/environ правильный, docker exec n8n n8n --version и npm view n8n version руками работают. Но бот всё равно падал.
Причина: dist/bot.js (то, что реально исполняет node dist/index.js под systemd) содержал старый код — n8n-n8n-1 / /opt/n8n. При первом фиксе (коммит 82e4eff) я запускал npm run build, но при разборе rebase-конфликта откатил именно dist/bot.js командой git restore dist/bot.js, приняв его локальную пересборку за шум от чужого коммита — и не пересобрал заново после rebase. В итоге src/bot.ts был правильный и закоммичен, а реально запущенный dist/bot.js — всё ещё старый. Оба предыдущих “фикса” (контейнер/путь и PATH) были правильными по существу, но бот их не видел вообще.
Fix: npm run build (сверил grep’ом, что в dist/bot.js появился новый код), systemctl --user restart claudeclaw.service, закоммичен пересобранный dist/bot.js отдельным коммитом 3baff65 (dist в .gitignore, но файл трекается с давних времён — добавлял через git add -u). Проверено вручную: docker exec n8n n8n --version → 2.25.7, npm view n8n version → 2.29.10.
Важно на будущее: dist/ в claudeclaw трекается в git несмотря на .gitignore (legacy) — при любом конфликте/rebase, затрагивающем dist/*.js, нельзя слепо git restore, нужно после разрешения конфликта всегда npm run build заново и сверить grep’ом, что скомпилированный код соответствует src, прежде чем считать фикс закрытым. Голое “закоммитил src, запушил” не гарантирует, что запущенный процесс видит изменения.
Четвёртый заход — настоящий корневой корень. После пересборки dist всё равно “Опять то же самое”. И код, и PATH были правильные — но docker exec n8n n8n --version внутри процесса бота падал с permission denied на /var/run/docker.sock (владелец root:docker, соединяться может только член группы docker), а 2>/dev/null в коде глушил ошибку → currentRaw пустой → “неизвестно” → “Не удалось получить версию.”
Причина: cat /proc/<pid>/status | grep Groups у реального процесса ноды показывал 27 100 1000 — без 990 (docker), хотя у пользователя claude группа docker есть в /etc/group. Юзера добавили в группу docker после того как стартовал systemd --user менеджер для этой сессии — а он не перечитывает группы для уже запущенных/новых сервисов без полного рестарта самого менеджера (user@1000.service, требует root) или ре-логина/ребута. SupplementaryGroups=docker в самом unit-файле не помог — user-level systemd без root не может менять group credentials (Changing group credentials failed: Operation not permitted, exit 216/GROUP).
Fix (без root, без перезапуска сессии): обернул ExecStart через sg:
ExecStart=/usr/bin/sg docker -c '/home/claude/.nvm/versions/node/v22.22.3/bin/node dist/index.js'
sg — setgid-хелпер, сам проверяет /etc/group и не требует, чтобы у вызывающего процесса уже была нужная группа в credential-set. daemon-reload + restart. MainPID теперь sg (не node напрямую) — health-check ([[projects/coreclaw]]/src/health.ts checkPidFile) не страдает, он проверяет только существование pid-файла, не сам процесс. Реальный node — процесс-внук sg; /proc/<node-pid>/status → Groups: 27 100 990 1000 — docker появился. (/proc/<pid>/environ для этого процесса стал недоступен даже тому же uid — Linux помечает процесс non-dumpable при смене group credentials через setgid-путь, это ожидаемо и не влияет на функциональность, просто нельзя дебажить environ так же просто как раньше.)
Общий вывод по этому баг-раунду: три независимые, наложившиеся друг на друга причины (контейнер/путь в коде → PATH в systemd-юните → несинхронизированный dist → отсутствие группы docker у сервиса) — каждая маскировала следующую за одинаковым текстом ошибки. На будущее при “чинил-то же самое” сразу проверять весь стек: 1) src соответствует dist (grep), 2) сервис реально перезапущен на новом dist, 3) /proc/<real-child-pid>/status groups включают всё нужное (не просто PATH), 4) сама команда руками работает под той же группой/uid, что и сервис (не просто в своём интерактивном шелле).
2026-07-11: подтверждено — /n8nupdate работает. Сергей проверил в Telegram, всё отработало. Баг-раунд закрыт (4 причины, см. выше).
Незакрытые задачи
- Glif MCP — установлен в
/home/claude/.claude.jsonдля проектаclaudeclaw, ноGLIF_API_TOKEN="REPLACE_WITH_TOKEN". Нужен реальный токен с https://glif.app → Settings → API.
Планы
- ✅ CloudCLI веб-панель для Claude Code — реализовано и работает
@cloudcli-ai/cloudcli, systemd сервисcloudcli.service(Restart=always), порт 3001- Домен
code.08317.ru, Traefik роут + TLS (cloudflare certResolver) - Авторизация:
telegram-authforwardAuth middleware →jarvis-web/api/auth/verify(тот же SSO, что и jarvis-web), не Cloudflare Zero Trust - Подробности: services