PunchSoldiers rescue three abducted victims in KebbiThe Jerusalem PostWith two days until election: Eisenkot leads over Netanyahu, but neither can reach majority - pollInquirerLacson: Use ‘savings’ from Senate budget cuts for El Niño preparationsCNN TürkTütün ürünü kullanımına yeni düzenleme: Açık alanlarda sınırlanacak한겨레아파트서 부부싸움 중 방화 50대…긴급체포20 MinutenLindt-Präsident: «Tut weh, die Produkte im Ausverkauf zu sehen»ZDF heuteEntdecken Sie das ZDF-Nachrichtenstudioالنهارالجيش الإيراني يسقط مسيّرة أميركية في بندر عباس... عراقجي: الهجوم مجدّداً علينا لن يُحقّق نتائج مختلفةCapital FMRuto Praises Kalonzo for Recognising Govt Development Record in Ukambani경향신문트럼프 행정부, ‘알래스카 결과 확정 보류’ 소송···선거 막판 ‘부패 스캔들’ 변수될까Het Laatste Nieuws“Hij moet zijn tijd nemen”: ook collega-trainers leven mee met Vincent KompanyMintFrom France to Italy, what protests mean for Europe’s $187 bn winter tourism industry ahead of Christmas-New Year season
The Daily Newsstand · Free, Always
Sunday, October 25, 2026

ИИ-агент — сотрудник без права на последний клик. Как мы организовали разработку на ELMA 365 с ИИ-агентами

Translate

Мы делаем бизнес-модули на ELMA 365: договоры, контрагенты, корреспонденция, доверенности, облигации. Всё больше этой работы делают ИИ-агенты. Они правят формы и скрипты, гоняют проверки, пишут документацию и отчёты.

Звучит как реклама. Но первые недели выглядели иначе. Два агента одновременно работали в одной папке проекта. Один часами гонял браузер, второй тихо делал свою задачу. А коммит любого из них мог подхватить мусор, оставленный соседом.

Это первая статья из семи. В ней я расскажу, как мы перестроили работу, чтобы агенты приносили пользу и не ломали чужое. Спойлер: главное оказалось не в моделях и не в промптах. А в правилах, которые мы писали, наступая на грабли.

Исходная точка: агент делает много, но не всё

Я двадцать с лишним лет руковожу ИТ. Привык, что у каждого сотрудника есть зона ответственности, права доступа и понятный порядок сдачи работы. С агентами я сначала про это забыл.

Кажется, что агент — это просто быстрый разработчик. Дал задачу, получил результат. Но у агента нет памяти о вчерашнем разговоре. Он не знает, что соседняя сессия сейчас редактирует ту же форму. Он уверенно путает серверы, если переменные в настройках названы неудачно.

У нас ровно так и вышло. Есть два сервера разработки. Имена переменных в конфигурации исторически перепутаны: переменная с «очевидным» названием указывает на другой сервер. Агент несколько раз подряд делал задачу не там. В одном случае он собрал и проверил исправление целиком, а потом выяснилось, что сервер не тот. Я написал ему что-то вроде «ты опять всё путаешь». Работу переделали с нуля, и на правильном сервере виджет оказался устроен совсем иначе.

После этого в инструкции для агентов появилась отдельная строка: читай адрес, а не имя переменной. И общий вывод: агенту нужна не свобода, а рамка. Чёткая, записанная, проверяемая.

Правило первое: одна задача — своя копия проекта и свой журнал

Первая рамка — изоляция. С октября каждая задача живёт в собственной ветке и собственной рабочей копии проекта (git worktree). Все рабочие копии лежат в одной служебной папке внутри проекта. Работать в основной копии нельзя, только смотреть.

Это решает проблему соседей по папке. Два агента больше не делят черновики, временные скрипты и выгрузки. Каждый коммит содержит только своё.

Но есть нюанс, который мы записали отдельно. Рабочая копия изолирует файлы. Живые объекты на сервере она не изолирует. Если два агента правят один и тот же процесс в ELMA 365, отдельные папки им не помогут. Поэтому перед правкой на сервере агент фиксирует, какой объект он «занимает», и проверяет, не поменял ли его кто-то другой.

Вторая половина правила — журнал задачи. В нём записан каждый изменённый объект: форма, виджет, процесс, файл, тестовая запись, временный доступ. И не только «что поменял», а как именно:

  • состояние до правки и версия объекта;

  • каким способом шла правка: через интерфейс, API или утилиту;

  • результат и то, что реально легло на сервер после;

  • что создано временно и как это убрано.

Скриншот сам по себе доказательством не считается. Нужна выгрузка или ответ сервера. Неудачные и частичные записи тоже попадают в журнал. Особенно они.

Зачем столько бюрократии? Потому что через две недели никто не помнит, кто и зачем поменял кнопку на форме согласования. Ни человек, ни агент. А журнал помнит.

Правило второе: прод только для чтения

15 октября я записал распоряжение без вариантов. Рабочая система только для чтения. Агенты не сохраняют, не публикуют, не создают и не удаляют там ничего. Никогда. Даже «просто проверить».

Читать при этом можно и нужно. Пользователи жалуются на документы, которые живут именно в рабочей системе. Агент открывает запись, задачу, историю процесса и видит то же, что видит человек.

Чтобы «только чтение» было не обещанием, а техникой, сессия браузера в рабочей системе ставит фильтр запросов. Он пропускает только чтение, вход и поиск, а всё остальное обрывает ещё до того, как страница что-то отправит. После работы сохранённая сессия удаляется.

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

Это медленнее, чем «быстренько поправить в проде». Зато у прода остаётся один ответственный путь изменений.

Правило третье: «опубликовано» — это ещё не «работает»

Здесь мы наступили на самые болезненные грабли.

Мы добавили в процессы согласования договоров и доверенностей защиту от повторного согласования. Если человек уже согласовал документ на одном шаге, второй раз его не дёргают. Всё скомпилировалось, тесты на заглушках прошли, публикация прошла успешно.

А потом выяснилось, что новый договор падает на первом же шаге согласования. Любой новый договор. Причина оказалась в поведении платформы, которого не было в тестах. Список версий файла возвращает только вытесненные версии. У файла, загруженного один раз, этот список пуст. Код на это не рассчитывал.

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

Теперь после публикации изменение имеет статус «опубликовано, проверка не завершена». Чтобы его снять, нужно:

  1. Перечитать с сервера всё, что изменилось, ровно в той версии, которая опубликована.

  2. Сравнить это с тем, что принимали до публикации.

  3. Пройти затронутый процесс заново, на свежих тестовых данных и реальными кнопками форм.

  4. Убедиться, что всё временное убрано.

И отдельная строка, которую я повторяю чаще всего: проверка «сервер отвечает» — не доказательство. Код завершения импорта — не доказательство. Завершившийся дочерний процесс — тоже. «Собрано», «импортировано», «опубликовано» и «проверено» — четыре разных слова, и агент обязан их различать в отчёте.

Для процессов у нас есть обязательная матрица случаев. Нормальное завершение. Пустой список участников. Повторные участники. Возврат на доработку и повторная отправка. Отмена. Если задача трогает файлы или пользователей, к этому добавляются замена файла, переназначение, замещение. «Не применимо» без объяснения не принимается.

Правило четвёртое: проверяет не тот, кто сделал

Агент, который написал код, плохо видит свои ошибки. Как и человек. Только агент ещё и очень убедительно пишет, что всё готово.

Поэтому работа не принимается, пока её не подтвердит независимый проверяющий. Это отдельный агент, который эту работу не делал. Он получает точную версию результата и проверяет её сам. Не перечитывает отчёт автора, а пишет свои проверки.

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

У нас даже слияние в основную ветку идёт без меня. Но только если точную версию изменений подтвердил независимый проверяющий и прошла автоматическая сборка. Изменился код после проверки — проверка недействительна.

Это не про недоверие к агентам. Это про то, что подтверждение должно быть привязано к конкретному результату, а не к ощущению «вроде готово».

Эпизод: агент остановился перед последним кликом

Теперь две истории, ради которых я, честно говоря, и затеял серию.

Первая. Мы долго разбирались, можно ли вносить изменения в конфигурацию через файлы, а не только через визуальный конструктор. Агент выгружал решение, правил, пытался загрузить обратно. Утилита загрузки падала на одной и той же ошибке. Агент сузил её до минимального запроса и подготовил письмо в поддержку вендора с точными шагами воспроизведения. Это, кстати, полезно всем, кто работает с той же платформой: находка, а не жалоба.

Оставался ещё один путь. Тот же пакет можно было провести через мастер обновления конфигурации в админке. Агент дошёл в нём до шага, после которого начинается настоящее применение. И остановился. Сработал защитный механизм самой сессии, и агент не стал его обходить.

В его отчёте осталась запись: оставлено человеку, не агенту. Если хотите ответ на этот вопрос, кнопку должен нажать человек.

Похожая история случилась с привязкой серверов для штатной выкладки. Агент сам открыл нужный диалог и прошёл всё вокруг. На поле с токеном доступа сработала защита: агенту нельзя самому класть секрет в хранилище другой системы. Обходить её он не стал. Закрыл диалог без сохранения и проверил, что после него ничего не осталось. В отчёте честно написал: это поле должен заполнить человек, остальное я доделаю.

Я сначала раздражался. Потом понял, что это ровно то поведение, которое я хочу. Агент может довести меня до кнопки. Но кнопку, после которой меняется настоящая система или в чужом месте остаётся секрет, нажимаю я.

Эпизод: агент сверил задание с реальностью

Вторая история мне нравится ещё больше.

Мы планировали перейти на штатный механизм выкладки ELMA 365 между серверами. Я написал подробное задание. Его основа: основной сервер разработки — источник правды, оттуда изменения переносятся на тестовый. В задании прямо было сказано, что основной сервер недавно обновили и он новее.

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

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

Агент написал отчёт с заголовком «противоречит исходному заданию». Предложил два честных варианта: сначала выровнять версии или развернуть направление переноса. И попросил меня решить, какой сервер считать источником правды. Сам решать не стал.

После этого я добавил ещё одно жёсткое правило про тот сервер. Но главное здесь другое. Задание пишет человек, и человек ошибается. Хороший исполнитель сначала сверяет вводные с реальностью. От агента я теперь жду того же, что от сильного инженера: проверь, на что опираешься, прежде чем что-то двигать.

Как агент докладывает: «Что нужно от вас»

Отчёты агентов поначалу были ужасны. Таблицы, пути к файлам, идентификаторы версий, выдержки из логов. Я читал их подолгу и в конце не понимал главного: от меня что-то нужно или нет?

В начале октября я ввёл формат, который мы оставили навсегда. Отчёт короткий, на простом русском. Первый блок — «Что нужно от вас»: только реальные решения или действия, по строке на каждое. Если ничего не нужно, так и написано. Второй блок — «Что сделано», две-четыре короткие строки. Без таблиц, путей и внутренних названий.

Вместе с форматом пришло правило про распределение работы. Всю техническую работу агент делает сам: коммиты, уборку, повторные выгрузки, проверки, документацию. Он не присылает мне команду «выполните, пожалуйста». Не спрашивает «закоммитить?». Спрашивает только о настоящих решениях: архитектура, бизнес-выбор, всё необратимое и всё, что касается рабочей системы.

Подробности при этом никуда не исчезают. Они уходят в документацию проекта и журнал задачи. В чат идут выводы.

Лучший эффект оказался неожиданным. Когда агенту нельзя спрятать проблему в таблицу, он вынужден её сформулировать. «Это поле должен заполнить человек» — одна строка, и сразу ясно, что делать.

«Доделай, убери за собой, объясни суть»

Это правило появилось одновременно с форматом отчёта. Каждая задача заканчивается тремя вещами, а не одной.

Доделай. Не останавливайся на плане или половине результата. Если оставшиеся шаги можно сделать самому, делай.

Убери за собой. Всё, что задача создала и что не является результатом. Временные файлы, тестовые решения и записи на серверах, сохранённые сессии браузера, выгрузки. Если что-то на сервере меняли только ради теста, верни как было и докажи это повторной выгрузкой, совпадающей с исходной байт в байт. Если удалить что-то невозможно, скажи об этом прямо.

Последнее важнее, чем кажется. Например, в ELMA 365 нельзя удалить бизнес-процесс. Это ограничение платформы, а не лень агента. Брошенный черновик процесса агент переименовал с пометкой «не используется» и записал это в отчёт. Честно оставленный след лучше тихого.

Объясни суть. Человеку нужен смысл. Что теперь можно делать, чего нельзя и почему, что осталось.

Конституция для агентов

Вокруг ELMA 365 у нас уже несколько проектов. Чтобы правила не расползались, общее мы вынесли в отдельный документ, который внутри называем конституцией. Каждый проект ссылается на неё и может добавлять свои правила, только более строгие, не мягче.

Если пересказать её простыми словами, получится примерно так.

Кто владелец и что решает только он. Есть короткий список вещей, которые агент не делает без меня. Запись в общий сервер разработки, который мы делим с партнёром. Любые действия в рабочей системе. Выбор, куда и когда выпускать изменения. Доступы и учётные записи. Распоряжение владельца разрешает ровно то действие, которое в нём названо, и ничего сверх.

Всё остальное агент доводит до конца сам. В октябре я прямо сказал: заканчивайте работу, не дожидаясь меня. На нашем дополнительном сервере для экспериментов агенты могут устанавливать и проверять что угодно в рамках задачи, без отдельного разрешения каждый раз. При этом агент никогда не открывает файл с секретами и не держит в руках значения токенов.

Утверждение без доказательства не считается. Нельзя написать «проверено», если проверка не наблюдалась. Нельзя задним числом нарисовать «прошло» для старой работы, у которой не было исходного состояния. Чего не было, записывается как «не было».

Проверяет не автор. Об этом я уже писал выше.

Остановки разложены по классам. Это моя любимая часть. Без неё агенты останавливаются и спрашивают по любому поводу. Поэтому у каждой типичной остановки есть класс и способ обработки:

  • сбой сети или лимиты сервиса — подожди и повтори, меня не спрашивай;

  • упавшие тесты, конфликт слияния, устаревшая ветка — исправь сам, это не повод для остановки;

  • нет внешнего доказательства — запиши, что пытался сделать, держи этот пункт открытым и продолжай остальную работу;

  • действие требует моего решения — назови, какое именно правило сработало, и работай дальше над тем, что можно;

  • если решение уже понятно и остался только шаг человека — скажи, какой именно шаг;

  • инцидент — эскалация сразу.

Это сильно сократило число вопросов «можно я…?». Агент больше не спрашивает разрешения починить упавший тест. И не стесняется остановиться у кнопки, которая меняет живую систему.

Что из этого можно забрать себе

Не обязательно строить такую же систему целиком. Вот что я бы внедрил в первую очередь, если вы только начинаете работать с агентами в low-code или в обычной разработке.

Отдельная рабочая копия на каждую задачу. Это дёшево и сразу убирает целый класс странных коммитов.

Рабочая система только для чтения. Не договорённостью, а техникой: фильтром запросов или ролью без прав записи.

Различайте «опубликовано» и «работает». Пусть отчёт говорит, какая именно проверка прошла и что она доказывает.

Независимая проверка. Второй агент, который не писал код, ловит удивительно много.

Формат отчёта, который начинается с «Что нужно от вас». Вы удивитесь, сколько времени он экономит.

И правило последнего клика. Решите заранее, какие кнопки нажимает только человек. Запишите это. И радуйтесь, когда агент у такой кнопки останавливается.

Дальше в серии будет конкретика: как мы правим виджеты из файлов, как проверяем процессы согласования, где платформа нас удивила и что из этого вышло.

А у вас есть кнопки, которые вы никогда не отдадите агенту? Какие?

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.