Катушечный магнитофон льёт светящуюся ленту кода в открытый ноутбук под единственной красной лампой записи.
Guides & Insights

Как записать сеанс Claude Code и любого другого агента, который не желает сотрудничать: практическое полевое руководство

Автор

Gideon Frost

Дата публикации

Новые модели · 20Все модели
Бенчмарки: Artificial Analysis · обновляется ежедневно
Назад ко всем статьям

Да: вы можете записать сессию Claude Code уже сегодня, и вы получите всё целиком (каждый ход модели, каждый вызов инструмента, каждый файл, которого коснулся агент) в форме, пригодной для воспроизведения. Это краткая версия, и на сегодняшний день она верна. Более развёрнутая версия такова: возможность записи определяется для каждого харнесса отдельно, двумя вопросами: можно ли направить харнесс на прокси и понятен ли его сетевой формат, когда туда поступает трафик. Claude Code проходит обе проверки, как и Codex CLI, авторизованный с помощью API-ключа. Агент с жёстко прописанным в его исходном коде URL провайдера, агент, работающий в контейнере или на VPS, и харнесс, авторизованный по подписке, — каждый идёт своим путём, и один из них сегодня не доходит.

Что изменилось — так это то, что эти агенты перестали быть демо. Они сидят в вашем репозитории с доступом к shell, редактируют файлы, запускают тесты, открывают pull request'ы. Когда один из них делает что-то, чего вы не ожидали — удаляет не тот файл, зацикливается на одном и том же падающем тесте или сжигает целый день вычислений — прокрутка терминала не является доказательством. Это лишь отрисовка, и притом неполная.

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

Что определяет, можно ли записать харнесс?

Каждый вопрос вида «можно ли это записать?» сводится к одним и тем же двум вопросам.

Первый: можно ли направить харнесс на прокси? Четыре пути охватывают это — в порядке убывания удобства.

Переменная base-URL. Маршрут, построенный для этого: тестовая обвязка читает переменную окружения base-URL, а вы задаёте её.

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

Перехват TLS. Для тестовых стендов, которые вообще не читают никакой конфигурации, рекордер запускает агента, и вы даете согласие на перехват.

Подключение. Когда агент запускается там, где рекордер не может его запустить, остаётся только подключение.

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

Второй вопрос: когда трафик приходит, понятен ли его формат «на проводе»? Захват байтов — это не продукт. Регистратор должен распознавать диалог, в котором он участвует: формы вызовов инструментов, потоковые фреймы и повторные попытки, — иначе запись — это pcap, а не воспроизведение. Формат, который регистратор понимает, даёт сессию, которую можно воспроизвести; частный диалект даёт захват, на который можно только смотреть.

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

A three-card decision diagram running from "Pointed at a proxy?" through "Wire format known?" to a "Recordable" badge.

Claude Code, Codex CLI и Agents SDK

Claude Code — это эталонный случай, с которым сравнивается всё остальное, потому что он читает ANTHROPIC_BASE_URL. Укажите в этой переменной адрес рекордера, запустите агента — и сессия будет приходить шаг за шагом: промпты, вызовы инструментов, правки файлов, ответы модели между ними. Мы проверили это от начала до конца на реальном исправлении бага (реальный репозиторий, реальный дефект, сессия, которая проходит от первого промпта до рабочего исправления), и этот первый реальный агент сломал четыре вещи, которые не воспроизводила ни одна фикстура. Все четыре с тех пор исправлены, что по-честному означает: синтетический трафик не подготовит вас к тому, что реальный агент делает, когда его оставляют наедине с кодовой базой.

Codex CLI, вошедший в систему с помощью API-ключа, — это та же история, что и через OPENAI_BASE_URL. Направьте его на рекордер — и получите сессию; в остальном способ использования харнесса не меняется.

Программные агенты наследуют самый простой путь из всех. Дочерний процесс наследует окружение родителя, поэтому шлюз, запускающий агента для написания кода, тоже попадает в запись — без участия самого агента. Установите переменную base-URL один раз в процессе, который выполняет запуск, и каждый запущенный им агент самостоятельно окажется у регистратора. Если вы запускаете агентов из CI, из оркестратора или через Agents SDK, вы уже находитесь на этом пути.

Во всех этих случаях рекордер — это OrcaReplay. Он устанавливается с помощью npm i -g orcareplay, требует Node 20 или новее и не имеет нативных зависимостей: ничего не нужно компилировать или собирать. Он захватывает тот же трафик агентов, который OrcaRouter маршрутизирует через каталог моделей OrcaRouter.

The OrcaReplay GitHub repository page with its README showing the npm i -g orcareplay installation command.

Агент, который не читает переменную базового URL.

Некоторые обвязки зашивают URL провайдера в своём исходном коде. Ни переменной окружения, ни конфигурационного файла, ни флага. Установка ANTHROPIC_BASE_URL ничего не даёт, потому что никто её не читает. Если рекордер может запустить агента, всё равно остаётся путь, и именно его люди боятся больше всего: перехват TLS.

Включение — это именно осознанное согласие (opt-in): по умолчанию функция отключена. Когда вы включаете её для запуска, рекордер создаёт центр сертификации, уникальный для этого запуска, и этот центр доверен только тому агенту, которого запускает рекордер: он передаётся лишь этому одному процессу, не устанавливается в системную связку ключей и не остаётся после завершения запуска. Когда запуск заканчивается, центр сертификации удаляется. Агент подключается к своему жёстко прописанному хосту точно так же, как и раньше; рекордер отвечает, и сессия устанавливается так, как если бы URL всегда был настраиваемым.

То, что маршрут намеренно отказывается делать, не менее важно, чем то, что он делает. Он читает хосты из своего разрешённого списка и больше ничего. Хосты вне разрешённого списка передаются через туннель непрочитанными и фиксируются как адрес и количество байт: доказательство того, что агент с кем-то связывался, — и ни одного байта из сказанного. Эта граница — проектное решение, а не ограничение, до которого мы ещё не дошли; та же дисциплина пронизывает агентский межсетевой экран OrcaRouter, где разрешённый список — это продукт, а не побочный эффект записи.

The OrcaRouter agent firewall solutions page with its title and introduction visible.

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

Агент, которого нет на этой машине

У контейнера собственное окружение. Переменная base-URL, заданная в вашей оболочке, внутрь него не попадает, и рекордер на хосте не может запустить процесс, который уже существует где-то ещё: на VPS, в CI, в песочнице, которую харнесс построил без вашего ведома. Захват на основе запуска здесь не работает не потому, что агент сложный, а потому, что рекордер до него так и не добирается.

Именно для этого случая существует orca attach: он записывает агента, которого рекордер не может запустить, например работающего в контейнере или на VPS. Здесь всё наоборот: рекордер не запускает агента и не передаёт ему окружение, а подключается к уже работающему агенту и записывает его.

Чего attach не делает — так это не отвечает на второй вопрос за вас. Он решает задачу доставки трафика до регистратора; станет ли этот трафик сеансом, который можно воспроизвести, по-прежнему зависит от того, понятен ли формат данных в канале. Подключите агента, который говорит на формате, известном регистратору, — и получите воспроизводимый сеанс. Подключите того, кто на нём не говорит, — и вы нашли стену, а найти её намеренно дешевле, чем в разгар инцидента.

Что меняет вход в подписку?

Один и тот же бинарный файл может быть записан, а может и нет, в зависимости от того, как он вошёл в систему. Codex CLI, вошедший с API-ключом, перехватывается через OPENAI_BASE_URL: направьте его на рекордер — и готово. Если тот же CLI входит с подпиской ChatGPT, он полностью перестаёт обращаться к этой конечной точке; он общается со своим собственным бэкендом, аутентифицируясь как вы, и не существует origin, который можно было бы переписать. Переменная base-URL всё ещё существует, но какой бы адрес вы в ней ни указали, он не становится тем сервисом, который на самом деле использует обвязка.

Это второй запрос, который не проходит, а не первый. Байты можно заставить двигаться; регистратор даже может их видеть. Но разговор адресован бэкенду, который регистратор не может подменить собой, в потоке, который не является тем API, на котором говорит регистратор. Воспроизводить нечего, потому что нет источника, которым регистратор может стать.

Честный ответ для харнесса, входящего по подписке, сегодня таков: его нельзя записать, и полезный урок состоит в том, что способ входа влияет на возможность записи. Если вам нужны записи для эвалов или для аудиторского следа, запускайте записываемые сессии с API-ключом, а подписку оставьте для интерактивной работы — как превратить записанную сессию в регрессионный эвалохватывает весь этот цикл. И прежде чем стандартизировать какой-либо харнесс, сначала задайте ему эти два вопроса; мы делаем именно так для каждого харнесса, в последнее время — с харнессом Prime Agent.

Главный вывод

Вы можете записать сессию Claude Code сегодня одной командой и одной переменной окружения:

npm i -g orcareplay

• Направьте ANTHROPIC_BASE_URL на рекордер

• Запустите агента

Codex CLI с API-ключом находится на таком же расстоянии. Жёстко прописанный URL потребует от вас согласия на TLS-перехват, который читает только свой список разрешённых (именно эту дисциплину обеспечивает агентный файрвол OrcaRouter) и забывает собственные сертификаты по завершении запуска. Контейнер или VPS потребует от вас выполнить orca attach. Вход по подписке стоит вам самой записи: этот харнесс не будет записан, и сегодня никаких изменений конфигурации не будет.

Все решение одним взглядом:

• Claude Code — API-ключ для входа vs маршрут к регистратору ANTHROPIC_BASE_URL vs доступно для записи сегодня: Да

• Codex CLI — API-ключ для входа по сравнению с маршрутом к рекордеру через OPENAI_BASE_URL — сегодня запись возможна: да

• Обвязка с жёстко заданным URL провайдера — вход с любого аккаунта против маршрута к рекордеру. Опциональный перехват TLS, запускаемый рекордером, против возможности записи сегодня: да.

• Агент в контейнере или на VPS — вход в любом месте против маршрутизации к регистратору orca attach против возможности записи сегодня: да, если известен формат передачи данных

• Codex CLI — Вход: подписка на ChatGPT vs Маршрут к рекордеру: Нет vs Запись сегодня: Нет

Последняя строка является единственной комбинацией, у которой вообще нет маршрута к регистратору.

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

Примечание об источниках: каждое поведение и каждая цифра в этой статье (пути перехвата `ANTHROPIC_BASE_URL` и `OPENAI_BASE_URL`, четыре неполадки после фикстур и их исправления, жизненный цикл сертификата TLS, поведение разрешающего списка и туннеля, `orca attach` и требования к установке) взяты из наших собственных проверочных прогонов на указанных харнессах, последний из которых состоялся 2026-09-04. Мы не ссылаемся на сторонние бенчмарки, потому что мы их не запускали.

© 2026 OrcaRouter

Провайдерам

Управляете инференс-платформой? Разместите свои модели на OrcaRouter.

providers@orcarouter.ai

Присоединяйтесь к сообществу

Discordsupport@orcarouter.aiXGitHubYouTube