The Jerusalem PostSpanish PM Pedro Sanchez calls snap November election as far-right looms and polling lagsPunchICYMI: Brain surgery affected my penis, says Julius AgwuESPN DeportesPortugal da cuenta de Noruega, tras polémica de CristianoESPNTransfer rumors, news: Bayern brace for tough contract talks with Olise한겨레“인공지능 일부 위험 감수할만” 오픈AI 최고경영자, 앤트로픽과 입장차InquirerMarcos accepts resignation of Marina chief Sonia MalaluanDaily MaverickUS removes bombers from UK base at centre of suspected Iranian plotZDF heuteEntdecken Sie das ZDF-NachrichtenstudioNMEJohnny Marr blind-ranks five of his songs – see where The Smiths classics landWirtualna PolskaBrawa w pandemii, dziś ataki. Gorzkie słowa wicerzeczniczki NILMintUS-Iran war: Is Tehran losing Strait of Hormuz ‘psychological leverage’? Expert decodes where Tehran stays strongBBC عربيهل تستطيع التمييز بين ما يكتبه الإنسان وما ينتجه الذكاء الاصطناعي؟
The Daily Newsstand · Free, Always
Monday, October 5, 2026

Как я перестал быть прокладкой между ИИ-агентами: ИТ-суперагент для Claude Code сотрудников

Translate

Сейчас у нас, как и почти везде, идёт переход на ИИ: каждому сотруднику пытаются выдать своего ИИ-агента. Очень быстро выяснилось, что раздать агентов — полдела. Дальше начинается управление ими: кто агенту говорит, что ему можно, откуда он знает, как устроена компания, и кто отвечает на его вопросы, когда он упирается в стену.

У нас на этом месте оказался я — единственный администратор примерно на 60 сотрудников. Агенты сотрудников писали мне письма, я пересылал их своему агенту и отправлял ответ обратно. Пользователи шутят, что мы стали прокладками между несколькими ИИ.

В статье — как мы пришли к профильному ИТ-суперагенту, как он устроен внутри (MCP, два RAG-источника, права, проверки на серверах, эскалация в мессенджер) и на какие грабли наступили. Это не продукт и не реклама — рабочий прототип, который сейчас крутится в пилоте.

Что пробовали до этого

Сначала делали агентов под конкретные задачи. Каждый раз оказывалось, что не учтены нюансы, о которых знает только конкретный исполнитель. Допиливание растягивалось надолго.

Потом решили, что сотрудники будут собирать агентов сами. Взяли Paperclip — платформу в духе «компания из агентов»: агент-аналитик помогает создавать других агентов, у него инструкции и доступ к базе знаний компании, а над всеми — агент-«гендиректор». Не взлетело по двум причинам. Создание агента — трудоёмкая штука: я на своих потратил кучу времени и до сих пор их доделываю, а сотрудники просто не понимали, как это делать. И сам Paperclip оказался для меня слишком непрозрачным: что-то происходит за кулисами, агенты зацикливаются, уходят решать задачи, не связанные с исходной. Токены уходят, результата часто нет.

Claude Code сотрудникам и две проблемы

Дальше пошли проще. У нас было несколько сотрудников, которые давно и грамотно работали с ИИ в вебе. Им выдали Claude Code с преднастроенными инструкциями и доступом к инфраструктуре на чтение: аналитика и задачи, 1С, CRM, сайты, почта.

Сначала всё жило на виндовом терминальном сервере. Я как администратор видел их профили и мог своим Claude поправить им инструкции, разрешения, режимы — фактически управлял их агентами. Но два-три человека с несколькими сессиями Claude быстро съели всю оперативку терминала. Выделять каждому виртуалку мы не стали: всё давно ушло в веб, люди работают с домашних машин через VPN. Агенты переехали туда же.

И появились две проблемы:

  1. Централизованное управление пропало. Доступа к их md-файлам и конфигам Claude на домашних компьютерах у меня нет.

  2. Админ-прокладка. Агент сотрудника не находит что-то в инфраструктуре или ему не хватает прав — он пишет мне письмо. Я отдаю письмо своему Claude, который знает, как всё устроено, он готовит ответ для агента сотрудника, я пересылаю.

Идея: профильный суперагент

Сеть агентов — идея не новая. Но в мультиагентных платформах всё замкнуто в одной программе. Мне хотелось наоборот: у каждого сотрудника свой агент, любой, а в компании есть профильный суперагент, к которому эти агенты обращаются.

Почему именно профильный. ИИ учился на теории — на том, что нашёл в интернете. Он применяет лучшие практики без практики. В реальной работе лучшие практики всегда идут с добавками реальности: особенностями конкретной инфраструктуры, историей, договорённостями. Поэтому, когда непрофильный человек решает задачу с ИИ, часто получается «всё по учебнику, а результат не тот». Суперагент — это место, где на лучшие практики накладывается опыт конкретной компании. Суперагенты, по идее, должны быть по направлениям: ИТ, юристы, маркетинг. Начал я, понятно, с ИТ.

Как устроено

Прототип — около 4 тысяч строк на Python, FastAPI + MCP, SQLite в режиме WAL. Собирал несколько дней, в паре с Claude Code. Крутится на внутреннем сервере за nginx, снаружи доступен только через VPN.

Подключение: MCP поверх HTTP

Суперагент — обычный HTTP-сервис, а для агентов сотрудников он выглядит как MCP-сервер (streamable HTTP). Сотрудник подключает его одной командой с личным токеном:

claude mcp add --transport http superagent https://<внутренний-адрес>/superagent/mcp \
  --header "Authorization: Bearer <личный-токен>"

После этого у агента появляются инструменты:

Инструмент

Зачем

ask

детали инфраструктуры: серверы, адреса, службы, базы

get_instructions

правила работы и права сотрудника на задачу

inspect

проверка факта на сервере: диск, службы, журнал, размеры баз

consult

беседа, когда нужно решение администратора

check

забрать ответ администратора

Агенту без разницы, что внутри, а суперагенту без разницы, какой у сотрудника агент. Сейчас это Claude Code, но MCP понимают и другие клиенты.

Централизованное управление — одним файлом

Это решило первую проблему. Правила для агентов лежат в одном markdown-файле на стороне суперагента. MCP-сервер отдаёт их в instructions при подключении, и они же приходят в каждом ответе. Поправил файл, перезапустил сервис — поменялось поведение всех подключённых агентов, где бы они ни работали.

Со стороны сотрудника в его CLAUDE.md достаточно пары строк вроде:

Факты по инфраструктуре — superagent.ask, права на задачу — superagent.get_instructions. Если нужно спросить администратора (нет данных, нужен доступ, решение) — superagent.consult. Изменения в пределах прав выполняй сам.

Знания: два RAG-источника

Суперагент отвечает не «из головы» модели, а из двух баз знаний.

Первая — административная: каталог серверов, который я веду для своего Codex/Claude. По папке на сервер, внутри meta, os, software, configs, network, changes, notes. Каталог синхронизируется через GitLab, суперагент держит зеркало и раскладывает его в отдельную векторную таблицу: около 570 файлов, порядка 940 фрагментов, разбиение по заголовкам с перекрытием. Полная индексация на CPU — минут девять, дальше инкрементально по хешам файлов, раз в 10 минут.

Отдельная таблица — не случайность. Админские знания живут своим циклом (меняются каждый день вместе с инфраструктурой) и фильтруются по правам до фрагмента: сотрудник никогда не получит кусок описания сервера, которого он не видит.

Вторая — общая корпоративная база знаний компании на pgvector: регламенты, описания процессов, инструкции. Суперагент берёт из неё ИТ-область и добавляет к ответу вместе с источниками. Доступна она тоже не всем, а только ролям с широкой видимостью.

Поиск по админской части гибридный: SQLite FTS5 плюс эмбеддинги (локальная Ollama), результаты сливаются через RRF. На каждый вопрос агент сотрудника получает отобранные фрагменты с указанием, откуда они взяты, — так ответ можно проверить, а не верить на слово.

Файл с доступами (access.md) в индекс не попадает вообще. Из него суперагент берёт только хост и порт. Логины и ключи он не выдаёт и не хранит: у каждого сотрудника свои учётки, и всё, что он делает, записывается на него.

На обычные вопросы — без LLM

Неочевидная, но очень полезная вещь. На ask и get_instructions суперагент модель не вызывает. Код проверяет права, отбирает из реестра только то, что сотруднику видно, и отдаёт агенту контекст плюс правила. Формулирует ответ уже агент сотрудника — на своей подписке.

У каждого сотрудника своя подписка Claude. LLM на стороне суперагента нужна только там, где надо подумать: беседа consult и разбор ответов администратора. Так быстрее и не съедает общий лимит.

Права проверяет код

Сотрудники в группах, у групп — гранты на серверы (имя, IP или маска вроде 1c-*):

Уровень

Что можно

0

сервер невидим — нет ни в ответах, ни в поиске

1 read

чтение, диагностика

2 operate

перезапуск

3 change

конфиги, установка

4 admin

firewall, удаление

Плюс личные гранты со сроком — «дежурство на неделю». Модель в проверке прав не участвует, поэтому уговорить её бесполезно. Нет прав — агент получает «доступ запрещён, обратитесь к администратору». Сразу оговорюсь про слабое место: тип действия в запросе пока определяется по ключевым словам. Для пилота это терпимо, потому что у сотрудников только чтение, а всё, что они меняют, они меняют сами под своими учётками.

LLM без рук

Модель на стороне суперагента запускается вообще без инструментов: claude -p с пустым списком tools, без MCP, в отдельном рабочем каталоге с запретом всего. Зайти на сервер или выполнить команду она не может.

Если в беседе ей нужно что-то проверить, она возвращает в JSON-ответе просьбу вида {"inspect": [{"server": "...", "check": "disk"}]}. Выполняет код — с правами того сотрудника, который ведёт беседу, не больше трёх проверок за ответ и не больше двух раундов. Результат возвращается модели следующим сообщением.

Сами проверки ограничены ещё и на серверах. Там заведена учётка без sudo, а её ключ привязан к одной команде:

command="/usr/local/bin/sa-inspect",no-port-forwarding,no-pty,no-agent-forwarding,from="<IP суперагента>" ssh-ed25519 AAAA...

sa-inspect понимает только имена проверок из белого списка: disk, mem, svc, journal, pg-dbs, pg-activity, my-processlist и т. п., с валидацией аргументов и ограничением вывода. Роли в БД — pg_monitor в PostgreSQL и PROCESS без SELECT в MariaDB: статистика есть, данных нет. Даже если ключ утечёт, выполнить произвольную команду с ним не выйдет.

Администратор — одной кнопкой

Это решило вторую проблему. consult — многоходовая беседа агента сотрудника с суперагентом. Каждый ответ модели — один из статусов: answered, need_info, escalate, resolved. В большинстве случаев они договариваются сами.

При escalate мне в Яндекс Мессенджер приходит готовый вопрос: что просят, зачем, что суперагент предлагает, и кнопки ✅ / ❌. Нажал — решение ушло в беседу, агент сотрудника забирает его через check. Если отвечаю текстом, его разбирает отдельный LLM-помощник и превращает в решение или сообщение агенту. Обо всём, что решилось без меня, в 19:00 приходит дайджест.

Безопасность и журнал

Прозрачность — то, чего мне не хватило в Paperclip, — закладывал с первого дня:

  • журнал всех вызовов: кто, что спросил, что получил, какие проверки, решения администратора; хранится 90 дней;

  • аудит всех изменений прав (кто, когда, через что: CLI, админка или бот) — в той же транзакции, что и изменение;

  • маскирование секретов в контексте, ответах и журнале;

  • детектор ПДн: телефоны, email, ИНН и СНИЛС с проверкой контрольных сумм, карты по Луну, паспорт рядом со словом «паспорт». Больше 10 записей в ответе — маскирование, больше 50 или любые карты/паспорта — сигнал мне;

  • сигналы: всплеск запросов относительно обычного поведения сотрудника, серия отказов по правам, «выгрузи всех клиентов» / pg_dump / SELECT * без WHERE, просьбы паролей, попытки prompt injection, ночные обращения к проду;

  • квоты на сотрудника и на сам суперагент; если не удалось проверить лимит — отказ, а не «авось».

Почему так строго: агент сотрудника работает на домашнем компьютере, а «только чтение» базы — это тоже возможность всё слить. Заодно, пока внедряли, нашли у себя несколько старых дыр в инфраструктуре. Часть закрыли, часть в плане.

Где я ошибся в идее

Главной фишкой я считал проверку планов: агент сотрудника готовит план, суперагент правит его с учётом реальности, агент выполняет — как будто им руководит профильный специалист. Метод review_plan был готов в первый же день.

В пилоте его убрали из MCP. У сотрудников права только на чтение — проверять нечего. А мне ревьюить собственные планы своим же агентом бессмысленно. Метод остался в REST как «второе мнение по запросу». Подозреваю, что для юристов и маркетинга он вернётся, но пока это открытый вопрос.

Что пригодится, если будете делать похожее

Несколько вещей, на которые я потратил время и которые можно не повторять.

Длинные ответы — асинхронно, и поднимите таймаут клиента

Ответ суперагента с LLM может идти до двух минут, а у Claude Code таймаут на вызов MCP-инструмента короче. Клиент обрывает вызов, сервер ответ дописывает и сохраняет, но агент сотрудника его уже не получит. Снаружи это выглядит как «суперагент молчит».

Два вывода. Первый — таймаут на клиенте поднимается переменной окружения в ~/.claude/settings.json:

{
  "env": {
    "MCP_TOOL_TIMEOUT": "330000"
  }
}

Второй, важнее: всё долгое лучше сразу делать асинхронно. У меня так устроена пара consult / check: беседа живёт на сервере, и даже если вызов оборвался или ответ ждёт решения администратора, агент заберёт его следующим check. Ничего не теряется.

Внутренний сервис по HTTPS: Claude Code не доверяет самоподписанному сертификату

Claude Code — это Node.js, и самоподписанный сертификат сервера он не примет. Правильный путь — выпустить сертификат от корпоративного CA и сказать клиенту, что этому CA можно доверять:

{
  "env": {
    "NODE_EXTRA_CA_CERTS": "/Users/you/.claude/company-ca.crt"
  }
}

Если своего CA в компании нет, его можно поднять за пару минут — для внутреннего сервиса этого достаточно:

# корневой CA (ключ храните отдельно и с правами 600)
openssl req -x509 -new -nodes -newkey rsa:4096 -days 3650 \
  -keyout ca.key -out ca.crt -subj "/CN=Company Internal CA"

# сертификат сервиса, подписанный этим CA
openssl req -new -nodes -newkey rsa:2048 \
  -keyout server.key -out server.csr -subj "/CN=ai.company.local"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -days 825 -out server.crt \
  -extfile <(printf "subjectAltName=DNS:ai.company.local")

server.crt и server.key — в nginx, ca.crt — сотрудникам (заодно отпечаток, чтобы они могли сверить). Обратите внимание на subjectAltName: без него современные клиенты сертификат не примут, даже если имя в CN совпадает.

LLM на сервисе — общий ресурс, ставьте предохранитель

У подписки есть лимит в скользящем окне. Если сервис может упереться в него вместе с другими потребителями той же подписки, рано или поздно упрётся — и откажет всем сразу. Что помогло:

  • не звать LLM там, где хватает кода: у меня ask и get_instructions вообще без модели;

  • один вызов LLM за раз, очередь с таймаутом, потолки в час и в сутки;

  • перед каждым вызовом — проверка общего расхода, и fail-closed: если проверить не получилось, лучше честный отказ, чем внезапный 429 у всех.

Эмбеддинги и русский язык

Популярные англоязычные модели эмбеддингов плохо ищут по русскому тексту вперемешку с именами серверов, IP и аббревиатурами вроде 1С. Помогли две вещи: многоязычная модель (bge-m3 через Ollama) и гибридный поиск с FTS5, где точные совпадения по именам и адресам добирает полнотекстовый индекс. Качество поиска меряю небольшим набором эталонных вопросов — без этого любые «стало лучше» на глаз ничего не значат.

Бот на long-poll и шумный httpx

Бот администратора опрашивает Яндекс Мессенджер long-poll запросами через httpx. А httpx по умолчанию пишет в лог на уровне INFO каждый HTTP-запрос — то есть каждый пустой getUpdates. У меня это около 8 тысяч строк в сутки, за которыми не видно ничего полезного. Если делаете бота на long-poll — сразу приглушите логгер:

import logging
logging.getLogger("httpx").setLevel(logging.WARNING)

Что есть на рынке

Я не первый, кто думает о сети агентов. Есть Paperclip, CrewAI, LangGraph. Есть протокол A2A для общения агентов разных производителей — он под Linux Foundation и, если понадобится общение между компаниями, его можно поднять поверх. Есть корпоративные инструменты управления агентами у самих вендоров.

А вот профильного суперагента, который знает практику конкретной компании и через которого идут и знания, и права, и решения администратора, я в готовом виде не нашёл. Если вы видели — напишите в комментариях, правда интересно.

Что получилось и что дальше

Пилот: группа аналитики продаж, четыре человека, чтение баз 1С и CRM. Подключение нового сотрудника по инструкции — минут десять. Письма мне больше не пишут: агенты договариваются с суперагентом сами, а я отвечаю кнопкой, когда нужно решение. Правила для всех агентов меняются в одном месте.

Открытых вопросов больше, чем закрытых:

  • как заставить агента сотрудника идти к суперагенту, а не изобретать своё (MCP не принуждает, сейчас это держится на инструкциях);

  • как масштабировать на всю компанию и не упереться в лимиты;

  • как наполнять базу знаний не только документацией, но и живым опытом.

По последнему пункту уже работаем. RAG есть и используется — дальше вопрос, чем его наполнять. Задача от руководителя: общая база должна пополняться из того, как сотрудники обучают своих агентов, из транскрибаций конференций, общения с клиентами и записей звонков. По сути — источник того самого человеческого опыта для суперагентов. Плюс через неделю-другую пилота будут цифры: сколько вопросов закрывается без меня и сколько доходит до кнопки. Расскажу в следующей части.

Напоследок мысль, ради которой всё это затевалось. Когда ИИ только появился, нам говорили: это экзоскелет, который усиливает человека. Сейчас, по-моему, всё наоборот: ИИ нужен человеческий опыт, чтобы становиться умнее. Не зря даже роботов сейчас учат по видео с камер на головах обычных рабочих. С агентами в компании то же самое.

Забавно: 13 лет назад я писал здесь про машину Больцмана и задачу коммивояжёра на нейросети. Теперь — про агентов, которые разбираются в инфраструктуре компании. Кажется, всё только начинается.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.