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 (выполнена)

Что сделано:

  1. Добавлена команда /version которая отвечает текущей версией из package.json и датой последнего обновления через git log

    • Формат ответа: “ClaudeClaw\n\nВерсия: 1.0.0\nОбновлено: DD.MM.YYYY HH:MM”
    • Доступна как напрямую в чате, так и через меню ”📋 Команды” → ”📌 Версия”
  2. Исправлены пути /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
  3. Добавлен модуль 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 --version2.25.7, npm view n8n version2.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>/statusGroups: 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-auth forwardAuth middleware → jarvis-web /api/auth/verify (тот же SSO, что и jarvis-web), не Cloudflare Zero Trust
    • Подробности: services