Харнес для 1С: ставим Claude Code под разработку одним установщиком

Всем привет, с вами Низамов Илья. Это вторая часть серии про Harness 1С. В первой мы поставили MCP-сервер, сегодня разворачиваем сам харнес для 1С: обвязку, которая настраивает Claude Code под разработку конфигурации. Обычно установка Claude Code для 1С растягивается на вечер: нужно скопировать базу, выгрузить конфигурацию в XML, прописать MCP-серверы, разложить скиллы и хуки. Здесь всё это делает один мастер NS_Harness-Setup.exe. В ролике установка на демо-базе «Управление торговлей 11.5» заняла около трёх с половиной минут.

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

Что такое харнес и зачем он Claude Code в 1С?

Харнес — это всё, что окружает модель в кодовом агенте: правила проекта, инструменты, проверки, роли субагентов, ограничения. Формула простая: агент = модель + харнес. Модель одна и та же, а результат зависит от обвязки.

Без обвязки Claude Code в 1С ведёт себя предсказуемо плохо. Выдумывает методы платформы, правит XML выгрузки руками и ломает её формат, пишет «готово», ничего не запустив. Почему нейросети спотыкаются именно на 1С, я подробно разбирал в статье про вайбкодинг в 1С, а как агент вообще работает с выгрузкой конфигурации — в статье Claude Code для 1С.

Harness 1С закрывает эти дыры набором из 943 файлов:

  • Правила. CLAUDE.md и docs/harness/ описывают контуры (что агенту можно трогать, а что нет), порядок планов и приёмки, обязательное использование MCP.
  • Знания о 1С из MCP, а не из памяти модели. Справка платформы и метаданные конфигурации — из NS_MCP, живая база — через расширение BaseMCP.
  • Скиллы. 83 скилла для объектов метаданных, форм, СКД, макетов, ролей, расширений и баз. Основа — открытый набор cc-1c-skills Николая Широкова, поверх него мои правки. Агент не пишет XML выгрузки руками, а вызывает скилл, после правки идёт валидатор.
  • Хуки-стражи. Правила вида «перед коммитом прогнать проверки» держит код, а не текст промпта. О них отдельный раздел ниже.
  • Роли. Исполнитель, разведчик и документатор со своими наборами инструментов.

Как устроена вся система целиком, с оркестратором и трекером задач, описано в обзоре Harness 1С: автономный AI-агент для разработки. Здесь — только установка.

Что нужно до установки?

Мастер первым делом проверяет машину и показывает, чего не хватает. У меня всё было на месте, поэтому сразу «Далее». Что он ищет:

  • Python 3.10+ и Git. Установщик написан на стандартной библиотеке Python, недостающий pyyaml доставит сам. Git нужен для репозитория проекта. Если в git config --global user.name не задано имя, мастер предупредит, что коммиты будут пропущены.
  • Claude Code. Сам харнес — это настройки и файлы для него.
  • Платформа 1С. Мастер находит установленные версии и подбирает ту, что открывает выбранную базу.
  • Apache с модулем 1С. Через публикацию на Apache агент ходит в живую базу. Без Apache установка пройдёт, но публикация BaseMCP будет пропущена.
  • NS_MCP — по желанию. Если вы прошли первую часть серии, мастер найдёт подключение сам. Нет сервера — шаг можно пропустить и подключить позже.
  • Место на диске. В проект копируется база и полностью выгружается конфигурация. На типовой это гигабайты, закладывайте запас.

Шаблон проверен на Windows. На macOS и Linux его пока не переносил.

Установка: страницы мастера

NS_Harness-Setup.exe лежит в комплекте рядом с папкой templates/. Запускаем, и дальше мастер идёт по страницам.

Проверка системы. Python, шаблоны, git, платформа, Apache, NS_MCP. Кнопка «Проверить снова» нужна, если что-то доставили, не закрывая мастер.

Шаблон и папка проекта. Шаблон пока один — профиль 1С, версия 0.3.2. Папку я выбрал на диске E, проект назвал «Касса». Если папка не пустая, мастер спросит, разворачивать ли шаблон поверх.

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

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

Расширения. Мастер получает список расширений базы. Отмеченные будут выгружены в src/cfe/<имя>, их и дорабатываем. В моей базе расширений нет: новое агент создаст скиллом /cfe-init, а индекс ConfigMCP будет обновляться, пока мы его разрабатываем.

NS_MCP. Подключить к серверу, к которому уже подключён компьютер, выпустить приглашение локальному NS_MCP в Docker, вставить приглашение администратора или пропустить. Галочка «Отправить конфигурацию и расширения на индексацию в ConfigMCP» — ставлю сразу, чтобы потом не делать это руками.

Дальше «Установить», и мастер выполняет план по шагам. Выберите свои ответы в виджете — он покажет, какие шаги выполнятся именно у вас и сколько примерно это займёт.

Пароль базы мастер передаёт в процесс установки через переменную окружения, а не аргументом командной строки: командную строку видно в списке процессов и в журнале. В проекте пароль оседает в .env.dev, который в git не попадает.

Копия базы или работа прямо в ней?

Рекомендую копию. Мастер положит её в base/<имя> внутри проекта, и агент будет работать с ней, а оригинал останется нетронутым. В манифесте проекта появятся две записи: тестовый контур, куда агенту можно писать, и мастер-контур, который он только читает.

"onec": {
  "bases": [
    { "name": "kassa", "contour": "test", "agent": "rw", "master": "kassa_master",
      "mcp": "base_mcp_kassa", "ib": "base/kassa", "publication": "kassa", "source": "src/cf" },
    { "name": "kassa_master", "contour": "master", "ib": "<путь к исходной базе>" }
  ]
}

Файловая база копируется быстро, это копия 1Cv8.1CD. С клиент-серверной дольше: мастер создаёт пустую файловую базу, выгружает исходную в .dt и загружает её. На большой базе это десятки минут, и мастер честно об этом предупредит.

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

Режим «без базы» ставит только харнес. Базу подключите позже, сказав в Claude Code «подключи базу» — это делают скиллы db-* и configmcp.

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

Ещё одна ловушка — версия платформы у Apache. Модуль 1С у Apache один на все публикации. Если Apache грузит wsap24.dll другой ветки, чем та, которой открывается база, мастер предупредит: публикация BaseMCP без смены модуля в httpd.conf не заработает. Как устроена публикация базы на Apache, я разбирал в статье про публикацию 1С на веб-сервере.

Как подключить проект к NS_MCP и проиндексировать конфигурацию?

У агента в проекте три MCP-сервера, и мастер подключает все три.

BaseMCP — инструменты разработчика внутри самой базы. Мастер загружает расширение, обновляет конфигурацию базы данных, снимает безопасный режим, проверяет модули, заводит служебного пользователя и публикует базу на Apache. Через BaseMCP агент запускает написанный код в живой тестовой базе и сам видит ошибку: не та скобка, пропущенная точка с запятой, метод недоступен на клиенте. Сервер прописывается в ~/.claude.json в локальную область этого проекта, учётка служебного пользователя уходит в заголовок прокси:

"base_mcp_kassa": {
  "type": "stdio",
  "command": "<python.exe>",
  "args": ["E:/Kassa/tools/mcp_proxy.py", "--name", "base_mcp_kassa",
           "--url", "http://localhost:<порт Apache>/kassa/hs/basemcp"]
}

devmcp — справка платформы из NS_MCP. Запись попадает в .mcp.json проекта, токен берётся из переменной окружения, поэтому файл можно спокойно хранить в git:

"devmcp": {
  "type": "http",
  "url": "https://<сервер NS_MCP>/dev/mcp",
  "headers": { "Authorization": "Bearer ${CONFIGMCP_TOKEN}" }
}

configmcp — метаданные именно этой конфигурации. Мастер ставит клиент ConfigMCP, заводит на сервере проект вида <проект>-<пользователь>, привязывает к нему слот в .mcp.json и отправляет выгрузку на индексацию. Индексация идёт на сервере, мастер её не ждёт: большая конфигурация индексируется до часа. Статус потом можно спросить у агента: «статус индексации».

Подробно про сами серверы, карточки объектов и граф влияния — в статье про готовый MCP-сервер для 1С. Если пропустили шаг NS_MCP в мастере, ничего страшного: тот же результат даёт скилл /configmcp и команда python tools/harness_install.py mcp-adopt --target ..

В конце мастер прогоняет проверки (basemcp.py verify, check_env.py) и делает первый коммит: «chore(setup): база 1С, расширения и серверы MCP подключены мастером». Проект начинается с зелёного состояния, а не с «вроде настроил».

Одна практическая деталь. После мастера откройте новый терминал в папке проекта и только в нём запускайте claude. Переменные окружения с токеном NS_MCP видны только новым процессам, в старом окне часть проверок будет красной.

Что лежит в проекте после установки?

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

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

manifest/project.json — единственный источник правды проекта: базы, проверки по сервисам, серверы MCP, команды, запрещённые субагенту. Его читают и хуки, и precommit.py, и check_env.py, второго списка в коде нет.

CLAUDE.md после установки содержит заглушки <…>: одним абзацем описать проект, что агент читает в данных. Их заполняет человек или сам агент в первой сессии. Мастер выводит список оставшихся заглушек.

manifest/installed.json — паспорт установки: версия шаблона и sha256 каждого файла харнеса. По нему обновление отличает нетронутые файлы от тех, что вы поправили под проект.

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

python T\tools\harness_install.py probe   --target E:\Kassa              # что будет, ничего не пишет
python T\tools\harness_install.py install --target E:\Kassa --name Kassa

Здесь T — каталог templates\ones комплекта. Или в пустой папке проекта запустить claude "/harness-new 1c": скилл задаст те же вопросы диалогом и вызовет установщик.

Если хотите разобраться, как собирать такие системы под свои проекты — контекст, MCP-серверы, скиллы, роли агентов, — приходите на курс «ИИ для 1С». Там же лежат установщики NS_MCP и Harness из этой серии.

Хуки-стражи: правила, которые держит код

Это главное отличие харнеса от хорошего CLAUDE.md. Принцип такой: правило, которое называет событие («перед коммитом», «в начале сессии», «правил — проверь»), переносится в хук. Правило, которое требует суждения, остаётся текстом.

Основание — исследование Agentic Harness Engineering (arXiv 2604.25850). На Terminal-Bench 2 правка системного промпта опустила результат с 69,7 % до 67,4 %, а правка хуков подняла до 71,9 %. Модель может проигнорировать абзац текста, а код-страж проигнорировать не получится.

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

Что делают основные стражи:

  • commit_gate на git commit сам прогоняет проверки задетых коммитом сервисов. Красная проверка — отказ с выводом ошибки. Зелёная — коммит проходит.
  • verify_gate на конце хода смотрит, был ли прогон проверки после последней правки. Поправил модуль и пишет «готово», ничего не запустив — ход не закроется, агент получит команду, которую нужно выполнить.
  • subagent_bounds не даёт субагенту коммитить, трогать индекс git и запускать фоновые задачи. Исполнитель делает правку и отчитывается, а принимает работу главная сессия прогоном, а не чтением отчёта.
  • runcode_traps ловит типовые ошибки во фрагменте кода для BaseMCP. Фрагмент исполняется вне процедуры, поэтому Возврат или объявление функции в нём — отказ с номерами строк.
  • onec_keys_bash запрещает запускать 1cv8 с ключами /X из Git Bash. MSYS переписывает такие ключи в пути, платформа возвращает код 1 и не пишет лог.
  • testbed_refresh на обновление тестовой базы задаёт вопрос человеку. Действие законное, но затирает данные прогонов.

Каждое решение стража пишется в журнал .tmp/hooks/journal.jsonl. Посмотреть его можно командой python tools/hookctl.py journal. Если правило мешает в конкретном случае, у большинства стражей есть явный обход с причиной, например hookctl.py skip-precommit "<причина>" на один коммит. Обход тоже попадает в журнал.

Если установка прервалась и как обновлять харнес

Мастер сохраняет состояние после каждого шага в .tmp/harness-setup/state.json. Нажали «Отмена», упала выгрузка, перезагрузился компьютер — запускаете мастер снова на ту же папку с теми же параметрами. Готовые шаги он пропустит с пометкой «уже сделано в прошлый запуск» и продолжит с прерванного.

Обновление шаблона на уже установленный проект делается из Claude Code фразой «обнови харнес» или командой:

python T\tools\harness_install.py update --target E:\Kassa --dry-run   # план
python T\tools\harness_install.py update --target E:\Kassa --commit

Нетронутые файлы харнеса заменяются новой версией. Файлы, которые вы поправили под проект, остаются, новая версия кладётся рядом в .tmp/harness-update/<метка>/conflicts/. В manifest/project.json дописываются только новые ключи. Если после обновления проверка красная, происходит автооткат к снимку. Повторный запуск мастера на установленный проект откажет и подскажет как раз эту фразу.

Можно ли работать в харнесе на Kimi K3?

Разрабатывать в харнесе можно не только на моделях Claude. Для запуска я сделал небольшую утилиту в контекстное меню папки: «Claude Code», «Claude Code с моделью Kimi K3» и запуск от администратора. Как её поставить и как подключать другие модели, покажу в отдельном видео. Принцип тот же, что я описывал в статье про Claude Code на локальной модели: Claude Code обращается к другому провайдеру по его адресу и ключу.

Запускаю проект с Kimi K3. При первом старте Claude Code предупреждает, на каком размере окна сработает автоматическое сжатие контекста. Модель подключилась с окном в 1 млн токенов и работает в проекте со всеми скиллами, хуками и MCP.

Теперь про деньги. Я купил подписку Kimi за $40, в ней можно выпустить отдельный ключ для кодового агента. Точно лимиты не замерял, но по ощущениям упирался в них очень быстро — примерно как на подписке Claude за $20. Тариф Kimi за $100 брать не стал: непонятно, сколько там дают и как быстро он кончится. За те же $100 мне проще взять Claude и в лимиты не упираться. Так что Kimi для меня остался экспериментом. Работает, но экономии я не увидел.

Харнес от модели не зависит: правила, стражи и MCP одинаковы для любой модели. Поэтому сравнивать модели на нём честно — меняется только модель, обвязка та же.

Что дальше в серии Harness 1С

Серия из трёх роликов:

  1. Установка NS_MCP — справка платформы, метаданные конфигурации и граф связей для агента.
  2. Установка Harness — эта статья.
  3. Большой проект на развёрнутом харнесе: что и как будем разрабатывать, и разбор журнала вызовов MCP.

Как агент дописал по такому процессу интеграцию 1С с сайтом за 2,5 часа, я показывал в статье про обмен 1С с сайтом. А если хотите управлять агентом в харнесе с телефона, пока он работает, пригодится статья про Claude Code с телефона.

Вопросы по установке пишите в комментариях под роликом или в Telegram-канале. Исходники харнеса и установщики из серии я выкладываю на курсе «ИИ для 1С» — там же разбираем, как строить разработку в 1С с ИИ системой, а не набором промптов.

Курс по теме статьи

Курс ИИ для 1С — разработка ИИ-агентов, RAG и MCP-серверов

Для программистов и аналитиков 1С: на курсе пишете код и собираете 4 проекта — ИИ-агента, RAG по базе знаний и MCP-сервер к своей 1С. Рассрочка, бесплатный вебинар.

150 000 ₽

Перейти к курсу «Курс ИИ для 1С — разработка ИИ-агентов, RAG и MCP-серверов»

Частые вопросы