AI для команды
Travelmart
Что мы уже запустили в проде, как дать всей команде доступ из России, и что меняется в работе аналитика, разработчика, продакта и QA.
У нас уже работает Claude в продакшене
vipzal-chat.govori.io — production AI-чат, отвечает посетителям сайта о ВИП-залах, fast-track, бизнес-залах. Сегодня. Без нашего участия.
- Ищет услугу по описанию (e5-base embeddings)
- Достаёт актуальные цены через
get_price - Проверяет доступность на дату через
check_availability - Генерирует кнопку «Заказать» в нужный модуль виджета
Мы уже умеем: ставить Claude в production-цикл, давать ему tools, индексировать свою базу знаний, кешировать промпт.
Это не «попробуем когда-нибудь». Это инженерная база, на которую ляжет всё дальше.
Где AI вписывается в наш стек
Цвет персиковый — где Claude уже работает или встанет в ближайших итерациях.
Frontend / виджеты
vipzal-admin · Vue 3.5 Pinia · Tailwind v4 Reka UI · Shadow DOM vipzal-chat widget.js vipzal-order-widgetBackend / API
vipzal · PHP / Yii2 MySQL · Redis widgets-api / v3 vipzal-chat · FastAPI tools: search, price, availabilityЗнания / индексы
pgvector · e5-base service_doc index Notion · Tracker README / CLAUDE.md codebase index (план)Большинство «новых» AI-сценариев в команде — это переиспользование того, что уже стоит: тот же pgvector, та же модель эмбеддингов, тот же tool-use паттерн. Меняются только индексы и инструменты.
Anthropic API напрямую из РФ — не работает
Региональные ограничения, банки, IP-фильтры. Каждый разработчик решает сам — VPN, чужой ключ, не пользуется вовсе. Это и небезопасно, и неуправляемо.
Что ломается
- Подписка / биллинг с российской карты
- Console.anthropic.com по российскому IP
- Веб-чат claude.ai
Что обычно делают
- VPN на каждое подключение
- Один общий ключ на чате коллег
- Используют OpenRouter / прокси-сервисы
Чем это плохо
- Нет контроля над тем, что и куда уходит
- Нет учёта расходов по командам
- Утечка ключа = утечка лимита всей компании
Решение — один gateway на всю компанию
VPS вне РФ → один корпоративный API-ключ → у каждого разработчика локальный клиент, который ходит через нас.
Клиент
Claude Code / IDE / CLI / browser-app
Gateway
VPS · Caddy/Traefik · auth · audit · rate limit
Anthropic
Один корпоративный ключ, биллинг сводится
Что это даёт
- Каждому — свой персональный токен в личном кабинете
- Учёт: кто, сколько, на каких задачах
- Аудит запросов (метаданные, не контент)
- Ротация и отзыв доступа за минуту
Что для этого надо
- VPS вне санкционного периметра (он у нас уже есть — там стоит vipzal-chat)
- Reverse-proxy и SSL (Traefik уже работает)
- Тонкая прослойка: 200 строк Python — не стартап
Что внутри gateway
Не «давайте напишем proxy». Минимальный набор, который должен быть с первого дня.
Auth
SSO через корп. почту → персональный API-токен. Сотрудник уволился — токен мгновенно отзываем.
Audit log
Кто, когда, какая модель, сколько токенов. Тело сообщения по умолчанию НЕ пишем — только метаданные.
Rate limit + budget
Per-user квота в день, hard-cap на месяц. Алерт если кто-то «застрял в цикле» и съел дневную норму за час.
Routing
Один endpoint, под капотом — Sonnet/Opus/Haiku в зависимости от задачи и бюджета. Команды не выбирают модель руками.
# Что увидит ваш Claude Code export ANTHROPIC_BASE_URL=https://ai.travelmart.tech export ANTHROPIC_API_KEY=tm_personal_xxx... # Дальше — обычный claude code, обычный SDK, всё одинаково
Поиск по своей же документации перед тикетом
Что больно сейчас
- Прежде чем заводить задачу — ищешь, не делалось ли уже
- Документация размазана: Notion, Tracker, README, личные заметки
- Поиск Notion не понимает синонимы и переформулировки
- В итоге дублируешь требования или просишь дев — «глянь, ты помнишь?»
Что меняет AI
- Один индекс: Notion + Tracker + README + код (тот же pgvector, что в vipzal-chat)
- Семантический поиск: «фастпасс с приоритетным проходом» = «fast-track» = «ускоренный проход»
- Агент не отдаёт ссылки — он отвечает кратко и даёт ссылки в конце как пруф
- Сразу видишь: «такая задача уже была в VIP-7124, статус Released»
«Партнёр просит, чтобы fast-track можно было купить за 30 минут до вылета.»
Агент находит: ограничение в check_availability уже учитывает advance_booking_minutes. В Tracker была задача VIP-6982, мы этот параметр сделали настраиваемым. Аналитику — оформить запрос на настройку у конкретного партнёра, а не на разработку.
Письмо партнёра → структурированная постановка
Что больно сейчас
- Партнёр присылает 4 абзаца текста с 5 разными хотелками
- Часть — уже есть, часть про другой модуль, часть нерелевантна
- Чтобы развести их по тикетам, надо уметь читать между строк
Что меняет AI
- Вставил письмо → агент даёт черновик: 3 задачи, для каждой — модуль, тип, acceptance criteria
- Сверяется с индексом: «вот это уже сделали в VIP-6741»
- Спрашивает, чего не хватает — не угадывает
- На выходе — готовый текст для Tracker, не «творчество»
// Что агент возвращает аналитику { "requests": [ { "summary": "Оплата Tinkoff Junior", "module": "order3/payment", "existing": "VIP-7041 (отказали)", "action": "уточнить у партнёра" }, /* …ещё 2 задачи */ ], "questions_to_partner": ["Какой банк выпустил карту?"] }
Codebase Q&A: задаёшь вопрос — агент сам ходит по коду
Что больно сейчас
- vipzal — 10 лет PHP/Yii2, десятки модулей, миграции, behaviors, components
- Чтобы починить баг в цене — надо знать про
calculation3,order3,bookkeeping - «Откуда берётся скидка для groupticket?» — ищется час по grep'у
Что меняет AI
- Claude Code в агентном режиме: читает файлы, идёт по вызовам, грепает сам
- Отвечает: «Скидка приходит из
PriceModifier::groupDiscount, вызывается изCalcService::buildBreakdown, активируется приpassenger_count >= 5. Покрытие тестами — нет» - Ссылается на конкретные строки. Можно проверить.
- Работает и с Vue 3 / TypeScript, не только PHP
> Где в vipzal формируется цена для group-ticket? # Claude читает 7 файлов, отвечает за 12с: # calculation3/services/CalcService::buildBreakdown() # → PriceModifier::groupDiscount() при passenger_count ≥ 5. # Конфиг: modules.calc.groupDiscount в main-local.php
PR-review агент и генерация тестов из спеки
Делает за нас
- Читает diff + контекст файлов целиком (не «по 200 строк»)
- Проверяет: безопасность, краевые случаи, согласованность с соседними модулями
- Не комментит «надо добавить точку с запятой» — это линтер
- Пишет ровно то, что обычно пишет тимлид первой проходкой
Из чего
- SPEC.md или acceptance criteria из тикета
- + существующий код компонента
- + примеры тестов из соседних файлов (стиль команды)
vipzal-admin уже на Playwright + Vitest. Стек поддерживается — агент пишет в вашем стиле, не «как умеет».
// vipzal-admin/tests/orders.spec.ts — сгенерил Claude из SPEC.md test('фильтр по дате прилёта показывает только orders type=arrival', async ({ page }) => { await page.goto('/admin/orders'); await page.getByRole('tab', { name: 'Прилёт' }).click(); const rows = page.locator('[data-test="order-row"]'); await expect(rows).toHaveCount(12); await expect(rows.first()).toContainText('arrival'); });
Discovery из Slack/тикетов и черновик SPEC
Что больно сейчас
- 200 сообщений из корпоративного Slack про «надо бы добавить...»
- 30 тикетов в Tracker про «не работает что-то»
- Кластеризовать руками — полдня. К следующему планированию полдня нет
Что меняет AI
- Загрузил пачку сообщений и тикетов — агент кластеризует по темам
- «5 жалоб на медленный поиск услуги, 3 на ошибку даты, 8 на цены не сходятся»
- Помогает сделать черновик SPEC: что входит / не входит, риски, открытые вопросы
- Не подменяет продакта — ускоряет первый проход в 3-5 раз
SPEC writer = промпт + структура: Goal · Out-of-scope · Open questions · Acceptance · Risks. Продакт даёт freeform, агент возвращает заполненный шаблон. Дальше — только редактирование.
«Если выпилим X — кого ломаем?»
Самое страшное продактовое решение — что-то удалить. У нас 800k строк PHP, виджеты на партнёрских сайтах, публичный API v3. Просто так выпилить нельзя.
Назвать кандидат на удаление
«Хотим удалить старый order2-flow»
Агент находит все вызовы
контроллеры, виджеты, миграции, конфиги, тесты, документация
Отчёт
«партнёр X использует endpoint, у партнёра Y запросы за последние 30 дней»
Это не «AI принимает решение». Это AI собирает фактуру за 5 минут, чтобы продакт смог принять решение, не дёргая инфру и двух разработчиков.
Текстовый сценарий → готовый Playwright-тест
Что больно сейчас
- Сценарий написан в тикете как «1. зайти 2. нажать»
- Превратить в стабильный тест — это селекторы, ожидания, mock'и
- Долго и скучно. Поэтому многие сценарии остаются ручными
Что меняет AI
- Агент берёт сценарий + DOM нужной страницы (или Storybook)
- Сразу пишет в стиле существующих тестов — использует
data-testатрибуты - Добавляет нужные
expectна границах - QA редактирует, а не пишет с нуля
vipzal-admin построен правильно — data-test атрибуты везде где надо. Это значит, агент не галлюцинирует селекторы, а берёт реальные. Это огромная разница в качестве сгенерированного теста.
Bug triage и регрессионные обзоры PR
Дубликат, regression, новое?
Агент сравнивает свежий тикет с историей в Tracker через тот же индекс, что у аналитиков. Возвращает: «похож на VIP-6920, сейчас Released» или «новый, не находится дубликатов».
Что мог сломать этот diff?
До прогона E2E-сьюта — агент даёт первое мнение: «изменили PriceModifier, прогоните регресс по модулям order3, calc, bookkeeping».
Не заменяет тестов. Уменьшает время «между PR и первой проверкой» с часов до минут.
Figma Make — насмотренность за 10 минут
AI-режим прямо внутри Figma. Описываешь словами — получаешь интерактивный прототип. Под капотом тот же Claude, что у нас в vipzal-chat.
Exploration / lookbook
- 5 вариантов лендинга за время одного кофе
- «Как мог бы выглядеть новый чекаут?» — до звонка с партнёром
- Замена FigJam-вайрфреймов рабочими прототипами
Дизайн-ревью
- Ставим А/B-варианты рядом, обсуждаем
- Партнёр трогает прототип на своём ноуте
- Дальше — в Figma как обычно: компоненты, variants
Коммит в прод-код
- Это НЕ production code
- Нет наших Tailwind-токенов и Reka UI
- Vue 3.5 + Pinia — тоже не его профиль
Figma Make — инструмент дизайнера для насмотренности и ранних концептов. Оттуда переходим в нормальную Figma с Variables и Auto Layout, и уже её отдаём разработчику через MCP — это следующий слайд.
MCP Figma: макет → код без «на глаз»
Figma Dev Mode + MCP-сервер. Claude Code видит Figma как источник контекста — берёт реальные имена компонентов, токены, размеры — а не угадывает.
Дизайнер
Выделяет компонент в Figma, шерит ссылку на selection
Claude Code
Через MCP вызывает get_metadata → get_design_context → get_screenshot
Разработчик
Получает Vue/TS-черновик с нашими классами Tailwind и именами Reka UI
Чем это лучше «дизайнер кинул PNG»
- Точные spacing/colors из Figma Variables, не «похожий синий»
- Auto Layout → корректный flex/grid, без ручной интерпретации
- Variants в Figma → variants в коде с тем же именем
- Аннотации дизайнера про поведение — тоже в контексте
Главное оружие — Code Connect
Привязываем Figma-компонент к реальному Vue-компоненту в vipzal-admin. После этого MCP отдаёт LLM не «сделай похожее», а «импортни <OrderTable> с такими props».
Это разница между «первым черновиком» и «готовым PR'ом».
Как сделать так, чтобы AI не косячил
Готовь под агента
- Auto Layout везде, где responsive
- Variables для color, spacing, radius, typography
- Семантичные имена —
CardContainer, неGroup 5 - Components + Variants для повторяемого
- Annotations для поведения, которое не видно по визуалу
Сужай контекст
- Указывай конкретный фрейм, не весь файл
- Дай code-conventions: «Vue 3.5 + TS + Tailwind v4 + Reka UI»
- Используй Code Connect — главный анти-галлюцинатор
- Project-level instructions внутри MCP — «как онбординг для джуна»
Anti-patterns
- Генерить целый экран в один пас
- Доверять цветам без Variables — придумает палитру
- Коммитить без ревью — это всё ещё черновик
- Figma Make → прод. Это для exploration
Эффект на vipzal-admin: меньше итераций «это другой синий», меньше тикетов «дизайн не совпадает», и первый PR по новому компоненту часто зелёный в первом же ревью. MCP делает get_metadata → get_design_context → get_screenshot сам.
Что я строю — один gateway, агенты по ролям
Если каждый разработчик настраивает свой Claude как умеет — мы получим 12 разных решений и ноль накопления знаний. Делаем одно общее.
Gateway
Один endpoint, SSO, audit, billing-учёт по командам
Knowledge index
pgvector с Notion + Tracker + кодом + README
Role agents
аналитик · dev · product · qa — разные tools, общий индекс
Surfaces
Claude Code, Slack-бот, веб-консоль, виджет в Tracker
Главное в этой схеме — L2 Knowledge index. Это та же технология, что у нас уже работает в vipzal-chat, только источники и tools другие.
Documentation indexer: один источник правды
Notion + Yandex.Tracker + GitHub README + наши CLAUDE.md + ADR — всё в один pgvector. Обновление инкрементальное.
Что индексируем
- Notion-страницы команд (с фильтром по разрешениям)
- Tracker: title + description + comments
- README, CLAUDE.md, ADR, SPEC.md из каждого репо
- Slack-treады из каналов «product», «backend», «frontend»
Что НЕ индексируем
- Личные DM
- HR-документы, контракты, финансы
- Production secrets, env-файлы
- Любые персональные данные пассажиров
# Похоже на то, что уже есть в vipzal-chat/app/indexer.py async def reindex(): async with sources.notion(), sources.tracker(), sources.github(): async for doc in stream_docs(): chunks = chunk_with_overlap(doc, max_tokens=512) embeddings = await embed(chunks, model="e5-base") await db.upsert_chunks(doc.id, chunks, embeddings)
От фидбека к задаче за 3 шага
Тот самый сценарий, ради которого аналитики запросят AI первыми.
Capture
Письмо/Slack/звонок партнёра — как есть. Никакого «оформи правильно»
Resolve
Агент ищет в индексе: дубликат? уже сделано? в другом модуле?
Draft
Готовый черновик задачи в Tracker с ссылками на контекст. Аналитик доводит и нажимает Submit
Сейчас «оформить нормальный тикет» — это 30-60 минут (поиск контекста, ссылок, схожих задач). С агентом — 5-10 минут плюс редактирование. На команде из 5 аналитиков и 10 тикетов в неделю это ~25 часов в неделю.
Что Claude никогда не увидит
Перед запуском в команду — полный список «не уходит за периметр».
Никогда
- Production БД vipzal
- Persdata пассажиров (паспорт, телефон)
- Платёжная информация
.env, ключи, секреты
С опаской
- Privatne репо (через корп. ключ)
- Внутренние ADR (доступ по ролям)
- Контент Slack-каналов (только тех, что разрешены)
Свободно
- Открытый код (vipzal-admin OSS-бандл)
- Публичная документация
- Tracker (с фильтром по permissions)
- Корпоративный Notion
Anthropic не использует данные через API для обучения по умолчанию — это в DPA. Но это не освобождает нас от санитарии: всё чувствительное — санитизировать на уровне gateway, а не надеяться на другую сторону.
Что меняется в 2026
1 млн токенов
Весь репо vipzal с документацией влезает в один промпт. Не надо больше «выбирать релевантные файлы» — модель сама.
Скриншоты, PDF, видео
QA скидывает запись бага — агент описывает что увидел. Аналитик скидывает PDF договора — агент извлекает условия в структурированный вид.
Voice-агенты
Партнёр звонит — агент собирает структурированную заявку, продакт получает уже черновик. Голос → structured data сегодня уже работает.
Не всё это нужно «прямо сейчас». Но стоит закладывать в архитектуру — чтобы не переделывать gateway каждые 3 месяца, когда вышла новая способность.
Куда мы движемся
AI как помощник
Зовут Claude вручную, когда нужно. Получают ответ, используют.
AI в цикле
Триггеры: новый PR → авто-ревью, новый тикет → авто-классификация.
Автономные пайплайны
Регрессии, миграции, обновления зависимостей — без человека. Человек на аппрув.
Self-healing продукт
Сайт сам замечает падение конверсии, открывает черновик задачи с данными.
Сейчас мы ровно на уровне 1. Между уровнями 2 и 3 — ближайшие 18 месяцев работы. Уровень 4 — скорее визия, чем план.
Спросите Claude прямо сейчас
У этой презентации внутри — тот же Claude, что в vipzal-chat. Он знает наш стек.
Кнопка «? Ask Claude» снизу — работает с любого слайда. Спрашивайте на ходу.
Как начать пользоваться завтра
Я уже выдаю персональные доступы — подходите после встречи. Дальше — один из трёх путей.
Claude Code
- Установить
claude-codeCLI - Прописать
ANTHROPIC_BASE_URLна корп. gateway - Открыть свой проект, спросить «расскажи, что тут»
Веб-консоль gateway
- Логин по корп. почте
- Чат с индексом Notion + Tracker
- Готовые шаблоны: «черновик задачи», «парсинг письма»
Slack-бот
- Тегаешь
@aiв своём канале - «Сгенери тест по этой спеке» — получаешь PR с драфтом
- Не надо переключать контекст
Вопросы? — нажмите ? или кнопку Ask Claude снизу справа.
Самое важное под конец
/\_/\ ( o.o ) > ^ < ~~~~~
В 2026 году Claude делает code-review,
Cursor пишет первый черновик,
CI катит миграции сам.
Кот по-прежнему спит на клавиатуре
и иногда жмёт git push --force --no-verify.
Кот — последний компонент продакшна,
который AI не может заменить.
Открыть на своём телефоне: persona.govori.io · листать дальше можно прямо там, любой слайд — по ссылке #02, #15 и т. д.