TOOLING — агенты, скиллы, MCP¶
Справочник для Claude Code по инструментам, настроенным в этом проекте.
Контекст решения — docs/DECISIONS.md (ADR-0011, ADR-0012).
Структура — группа GitLab mybit, отдельный репозиторий на сервис (не
монорепо, см. ADR-0012). Локально сервисы — соседние директории под этой же
рабочей папкой (mybit/platform), каждая со своим .git.
Субагенты (.claude/agents/)¶
Каждый скоупнут на свою директорию/репозиторий, читает свой CLAUDE.md +
релевантный раздел docs/SERVICES.md перед началом работы. Независимые
сервисы можно запускать параллельно через Agent tool. Коммитить/пушить
агент должен внутри своей директории — это отдельный git-репозиторий со своим
remote, а не часть platform.
| Агент | Скоуп (репозиторий mybit/…) |
|---|---|
core-service-go |
core-service/, proto/ |
telegram-bot-py |
telegram-bot/ |
miniapp-frontend |
miniapp-frontend/ (+ Playwright MCP для E2E) |
sync-workers-go |
wger-sync-worker/, google-health-sync/, applehealth-import/ |
inbody-parser-py |
inbody-parser/ |
wger-fork |
wger/ |
infra-devops |
platform/docker-compose.yml, .gitlab-ci.yml каждого репо, GitLab MCP |
Scoping — на уровне system prompt, не sandbox: агент физически может выйти за пределы своей директории через Bash, но проинструктирован этого не делать.
Скиллы (.claude/skills/, проектные)¶
task-to-issue— анализ задачи → определение сервиса(ов) → создание/обновление issue в GitLab через MCP.deploy— триггер и мониторинг GitLab CI pipeline через MCP. Пайплайнов пока нет ни у одного сервиса — появятся по мере кода.
Глобальный (~/.claude/skills/):
council(tsenart/council-skill) — многоперспективный разбор сложных решений/тредеофов, автоматически триггерится по описанию задачи.
MCP-серверы¶
gitlab(@zereight/mcp-gitlab, local scope) — issues/MR/pipelines/ milestones/wiki для группыmybit(10 репозиториев) наhttp://gitlab.local.playwright(.mcp.json, project scope) — headless Playwright для будущих E2E-тестовminiapp-frontend.playwright-extension(local scope) — водит реальный Chrome пользователя через Playwright MCP Bridge extension, для ad hoc браузерных задач вне автотестов.- Context7 — уже подключён на уровне claude.ai-коннектора
(
mcp__claude_ai_Context7__*). Использовать для актуальной документации внешних библиотек (Django/DRF, gRPC-go, python-telegram-bot/aiogram и т.д.) вместо памяти модели.
LSP¶
Официальные плагины Anthropic (anthropics/claude-plugins-official):
gopls-lsp, pyright-lsp, typescript-lsp. Бинарники: gopls (~/go/bin),
pyright-langserver (~/.local/bin), typescript-language-server
(homebrew/npm global).
CI/CD¶
Пайплайн есть в каждом репозитории: lint → test → build → deploy.
- Все джобы обязаны нести
tags: [pet]. У group-раннераmybitrun_untagged=false, поэтому джоба без тега уедет на instance-раннер VMgitlab, где нет доступа к docker.sock. - Потребители
protoставятGIT_SUBMODULE_STRATEGY: recursive. Новый потребитель должен быть добавлен в job-token allowlist проектаproto, иначе submodule не склонируется (LESSONS-0007). deploy— ручной, только сmain.- Смотреть результаты через
mcp__gitlab__list_pipelines/get_pipeline_job_output, а не открывать UI руками.
Учётная запись автоматизации¶
Всё, что делает Claude Code в GitLab, идёт от отдельного пользователя claudeBot
(claude@arvberezin.online), а не от владельца. Смысл простой: по журналу видно, что
сделал человек, а что — автоматика, и апрув владельца остаётся единственным действием,
которое нельзя списать на бота.
| Роль | Maintainer в группе mybit |
| Токен | api + write_repository, больше ничего |
| Хранится | homelab-infra: secrets/homelab.sops.yaml → services.gitlab.users.claudeBot |
| Используется | GitLab MCP, git push (keychain), работа с доской |
Maintainer — не «на всякий случай», а минимум для мержа: main защищён как
push = никто, merge = Maintainer+. С ролью Developer апрув владельца было бы нечем
применить.
Локально настроено: git-идентичность во всех десяти репозиториях, креды для
gitlab.local в keychain, токен в MCP-конфиге (--scope local, вне git).
Проверено сквозняком: комментарий на доске, коммит и git push — все атрибутированы
claudeBot, мерж в защищённый main доступен.
Открытый вопрос. Учётка сейчас is_admin: true — это заметно больше, чем нужно:
админ читает чужие приватные репозитории, меняет настройки инстанса и выпускает
impersonation-токены. Для всего перечисленного выше хватает Maintainer в одной группе.
Снятие админки ждёт решения владельца.
Известные ограничения¶
playwright-extensionиgitlabMCP зарегистрированы с--scope local— требуют перезапуска сессии Claude Code, чтобы подключиться.- GitLab-инстанс доступен только в домашней сети (
gitlab.local, LAN) — вне сети MCP не сработает. - Локальные
*.local— это mDNS: из контейнеров они не резолвятся, нуженextra_hosts(LESSONS-0008). - Инфраструктура (
~/infra/homelab-infra) — отдельный репозиторий со своим контрактом: check-режим, подтверждение перед apply, обновление доков и CHANGELOG. Прогоны по mybit — только--limit pet.