惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
C
Cisco Blogs
P
Privacy & Cybersecurity Law Blog
T
Tor Project blog
Google Online Security Blog
Google Online Security Blog
Scott Helme
Scott Helme
C
Cyber Attacks, Cyber Crime and Cyber Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News and Events Feed by Topic
The Register - Security
The Register - Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
SecWiki News
SecWiki News
T
True Tiger Recordings
T
The Exploit Database - CXSecurity.com
L
LINUX DO - 最新话题
Attack and Defense Labs
Attack and Defense Labs
S
Security @ Cisco Blogs
T
Troy Hunt's Blog
P
Palo Alto Networks Blog
T
Threat Research - Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
L
Lohrmann on Cybersecurity
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
J
Java Code Geeks
Hugging Face - Blog
Hugging Face - Blog
The Hacker News
The Hacker News
Jina AI
Jina AI
S
Secure Thoughts
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
月光博客
月光博客
S
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
Know Your Adversary
Know Your Adversary
PCI Perspectives
PCI Perspectives
罗磊的独立博客
A
Arctic Wolf
雷峰网
雷峰网
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Latest news
Latest news

Все публикации подряд на Хабре

Формула интегрирования по частям с точки зрения дифференциальной геометрии Динозавры в проде: сколько лет языкам программирования и кто до сих пор зарабатывает на «мёртвых» Как стать postgres в чужом облаке: краш-тест безопасности управляемых БД Погружение в новый проект: как не потерять месяц жизни Простой гайд по Kling Motion Control от А до Я Семантический слой: архитектура, подходы и роль в эпоху AI-аналитики Гоняться за оптовиками и чуть не закрыться, придумать «стартовый набор новичка» и удвоить выручку НЕкурс про разработку безопасного программного обеспечения (РБПО) Теология возможных миров. Есть ли боги в мультивселенной, или мультивселенная и есть Бог? Что делать, если не прошли переаккредитацию ИТ-компании в 2026 году: пошаговый план действий Нейросеть для работы с текстом — как генерировать чистый и уникальный текст для студентов Прокачать SQLite и сократить векторы в видеоформате — открытые инструменты для работы с эмбеддингами Киберзадачи в сеттинге Minecraft. Школьники в финале ВсоШ по инфобезу Windows 11 будет работать быстрее на всех компьютерах. Теперь официально Кэширование в Symfony: как мы сломали авторизацию и починили ее через Lock Стажеры uAcademy*. Опыт кураторства дипломов: почему стажировок недостаточно Команда выросла, методы — остались «Ошибка выжившего» на примере спортсменов Испытание временем — как тестировать цифровой двойник, если физического объекта ещё не существует Как обычный кухонный таймер на ESP32 превратился в домашний центр уведомлений Как мы научили СХД TATLIN.OBJECT мигрировать данные из S3-хранилища MinIO Онлайн-приключение для IT-команд, как альтернатива корпоративу в Zoom Экскурсия по «зоопарку» сетевого трафика: топ-10 аномалий внутри вашего периметра Книга: «System Design. Проектирование мобильных систем. Подготовка к сложному интервью» Критическое мышление руководителя: как один красивый слайд может привести к дорогой ошибке Ecommerce на Laravel, или как мы собрали headless-слой для фронтов (6 часть) Обновление macOS для инженеров поддержки Делаем ностальгический фильмоскоп на Raspberry Pi Zero 2 W От баз данных до инструментов для ИИ-экосистем: проекты, которые получили гранты Yandex Open Source Больше, чем просто безопасность, или Зачем контролировать зависимости Тот неловкий момент, когда письмо от Джованни из Швейцарии не оказалось обманом Почему AAA-игры проваливаются? Разбираем примеры Как запустить 3D-приложение на сервере без GPU: от SwiftShader до WARP Благоустраиваем Firefox: встроенный VPN Современный Angular: Заменяем жизненные циклы на сигналы HR-бот на базе RAG: архитектура корпоративной базы знаний для ресторанного холдинга Почему ИИ не заменит аналитика при подготовке технического задания InSales без пушей: как бесплатно перенести уведомления о заказах в Telegram на Yandex Cloud Serverless Александрийская библиотека: краткая история античной системы хранения Почему японские компании занимаются всем подряд Откуда берутся молнии? Ответ на этот вопрос становится всё интереснее 1C Code Bench — бенчмарк для оценки способности LLM писать код на 1С ЭЛТ-монитор разгонял электроны до 30% скорости света. Это был ускоритель частиц на 25 кВ Как мы укротили сложный процесс с помощью CQRS и стейт-машин Сокращение ручной работы на примере Spring Boot-проекта: OpenAPI generator, QueryDsl, OpenAI Ubuntu Core 26: snap-компоненты, Livepatch на ARM и новый подход к сборке Нагрузочное тестирование без нагрузки и тестов: используем k6 для мониторинга API ПМК и Кастанеда. Часть 3.4 Бросивший вызов смерти Через тернии к солнцу: запускаем 30-летний Sun SPARCstation 5 в 2026 году Мобильный Vivaldi 8.0 — Лучший браузер для лета Онлайн-переезд EVPN-VXLAN-фабрики между дата-центрами: euNetworks → QupraDC без остановки сервиса Закрытый контур + локальная LLM: как мы запустили AI-агента без интернета Про обучение роботов Как я спас продакшен (n8n 1.41+ и Python-парсеры) от сетевых аномалий в мае 2026 года Азиатский финансовый кризис в 90-е: как это было и как повлияло на IT AI API ключ нейросетей: +300 нейросетей по одному ключу и оплата рублями Архитектура автоматизации частного дома: KNX, Modbus, Node-RED и Sprut.Hub Разработка на Python: когда много думать = вредить проекту Пишем Java-скрипт, который собирает проект в один файл для контекста в чат DeepSeek или другие LLM Самодельный elgato-like макропад. Часть 2, софтовая Гайд: как системному аналитику построить доменную модель для Java-микросервисов Балансировка входящего трафика на железе: как надёжно вывести K8s наружу с MetalLB, BGP и L2 (подход от Deckhouse) «Мементо»: как фильм Нолана 2000 года удивительно точно иллюстрирует работу ИИ- агентов ИИ в работе с данными: как аналитики используют нейросети и почему без человека пока никак ИИ в работе с данными: как аналитики используют нейросети и почему без человека пока никак Шахматные программы VI. Структура поиска Stockfish Blockstor: Kubernetes-native альтернатива LINSTOR, которую мы готовим как отдельный CNCF-проект Эксперименты с WAP в 2026 году Мышление техно-бро: почему умные технари ведут себя глупо, а общество это НЕ кусок кода Шестнадцатеричная запись чисел с плавающей точкой в C++, Java, Go Архитекторы в ИТ — кто все эти люди на созвонах и почему без них современный бизнес начинает страдать Пишем Third Person Controller на MonoGame. Часть I Загрузка PocketHandyBox Linux с помощью TinyPXE Server, iPXE и WinNFSd Гараж стоит десятилетиями, а твой софт всего несколько лет. Стоит ли он твоих усилий? Как я 8 дней ловил утечку памяти в Nuxt 3 SSR, и несколько раз думал, что починил Почему советские программисты не сделали GTA Последовательное иерархическое распределение сумм. Создание БД. Распределение сумм по правилам средствами PostgreSQL Язык программирования T Может ли большая языковая модель обладать сознанием? Ключ к вычислимости ℵ₋₁ Как подсадить разработку на ИИ Кодировка: почему « ё » оказалось не моё? Использование SNMP Trap/Inform сообщений в мониторинге сети Как я не нашёл нормальную альтернативу WinSSHTerm на macOS, психанул и написал свою UUID мертв? Да здравствует Smart ID! Почему ваш проект заслуживает лучшего «Слепой прогон»: почему ваш IPS начинает стрелять по своим в первый же день Из жизни провайдеров: история одного факапа Линии влияния в многопролётных шарнирных балках: бесплатный веб-инструмент для проверки расчётов Я перевёл 200K строк JS на TS с Claude Code. Что прошло, что сломалось Telegram-бот, который молча скачивает видео по ссылкам в групповых чатах: как это сделать, не ломая приватность Три попытки обогнать в бенче базовую Gemma 4 дообучением — и все три мимо Создал свой генератор случайных чисел на потоках Как уйти в тень: Полный гайд по анонимным платежам от рублей до виртуальной карты в 2026 Реверс-инжиниринг, цифровой двойник и ESP32 — что эти трое забыли на производстве? Задачка со звездочкой Как я создал систему, которая знает меня лучше чем я сам Root в контейнере — это root на хосте? Разбираю особенности прав доступов в контейнерах Docker/Podman Ультимативный гид по Codex CLI: от первой установки до воркфлоу io_uring без розовых очков: 5 граблей, которые сожгли мне неделю, и где он реально быстрее epoll Я протестировал 8 VPN-сервисов в России в 2026 году. Вот честный результат Улучшаем поисковые подсказки — от retrieval к генерации
Plan-tango: как я перестал гонять план между Claude Code и Codex руками
egorsokolov · 2026-05-28 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение4 мин

Охват и читатели176

Кейс

Codex стабильно находит в моих планах разработки вещи, которые Claude в своём же плане не видит. Я заметил это в первые несколько дней после покупки GPT Pro — и с тех пор стараюсь не садиться писать код, пока план не пройдёт хотя бы один раунд cross-review.

GPT Pro я брал в основном из-за Pro-модели, Codex в комплекте был приятным бонусом — плюс в мае OpenAI давали двойные лимиты на Codex для Pro-подписок. Но не совру, если скажу, что идея немного ослабить vendor lock-in и свою зависимость от Антропика мне также грела душу.

К моему удивлению, пока самым полезным и часто используемым сценарием стал cross-review планов разработки. Берёшь готовый PLAN.md, который Claude Code пишет в фазе планирования, кидаешь в Codex, просишь: «найди дыры, не пиши код». Получаешь список замечаний, несешь обратно в Claude Code. Смыть и повторить.

Почему вторая модель находит то, чего автор плана не видит

Это известный паттерн LLM-as-judge: одна модель оценивает выход другой. Даже свежая Claude-сессия на той же модели уже что-то находит. Но ревью с помощью другой модели работает заметно мощнее. У Codex другие фокусы внимания, другая интуиция про edge-кейсы, другие опасения. Если Claude писал план на оптимистичной волне («сейчас быстренько добавим вот этот хук»), Codex как правило настроения автора не разделяет.

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

Чего я не ожидал: ревьюер хочет переписать план в код

Один план я как-то гонял аж 15 итераций. В какой-то момент я вчитался поглубже в то, что Codex пишет в очередном review, — и увидел, откуда эти 15 итераций берутся.

Если спрашивать LLM «что не так с этим планом?», она по дефолту дрейфует в сторону «давай я просто перепишу твой план так, как он должен выглядеть». И «как он должен выглядеть» в её представлении — максимально похоже на готовый код. Псевдокод, готовые блоки кода прямо в плане, иногда детальные пошаговые инструкции уровня «и вот эту проверку добавь сюда». По мере итераций план переходит из «вот примерный маршрут и три развилки, где надо подумать» до «вот построчная спецификация, агенту-исполнителю остаётся только распарсить».

Звучит как улучшение — пока не задумаешься, что это значит дальше.

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

Какое-то время я добавлял ручной промпт «не превращай в код, оставляй решения за writer-агентом» и переклеивал его в Codex каждую итерацию. Работает, но это становится отдельным ритуалом. На третьей-четвёртой итерации забываешь — и план снова дрейфует в псевдокод.

Что сломалось окончательно: вкладки

Есть ещё одна неприятная штука в ручном режиме — потерянный контекст между раундами. План обычно сходится за 4–6 итераций, но не подряд: между ними отвлекаешься на другие дела. А у Codex в интерфейсе рядом с сообщениями нет времени отправки.

Возвращаешься к плану через час-другой и не помнишь: уже скопировал последний фидбек Codex в Claude или ещё нет? Версия плана у тебя в Claude — это уже после прошлой итерации Codex или до?

Возня со вкладками — главное, что хотелось убрать. Стало понятно: проще автоматизировать.

Откуда взялся plan-tango

Идея напрашивалась сама: пусть Claude Code сам дёргает Codex по команде столько раз, сколько нужно.

Официальный Codex-плагин для Claude Code — полезная штука, но ревью плана с автоматическими итерациями он из коробки делать не умеет. Он может выполнить за тебя задачу, может сделать code review только что написанного кода, ещё какие-то полезные вещи. Цикла «отправить план → собрать замечания → внести правки → отправить снова, и так пока не сойдётся» в нём нет.

Первую версию plan-tango я написал поверх этого плагина — просто чтобы получить нужную мне петлю. Базовые сценарии работали. А дальше я уперся в одну штуку: я хотел гонять Codex в fast mode (в полтора раза быстрее обычного, но жжёт ощутимо больше лимитов, доступно в рамках обычной подписки). Через плагин этот параметр пробросить было нельзя.

2 минуты в fast mode против трёх в обычном режиме — кажется, мелочь. Но за 4–6 итераций разница набегает. К тому же в недельный лимит ChatGPT я пока всё равно не упираюсь — так почему бы не получить бесплатное ускорение?

Так что я переделал plan-tango: вместо вызовов через Codex-плагин он теперь дёргает Codex CLI напрямую. Одной зависимостью меньше, а контроля над тем, как вызывается Codex, больше.

Как это сейчас работает

Plan-tango живёт в одном окне Claude Code и запускается командой /plan-tango:tango на текущем плане. Дальше петля автоматическая: Codex review → правки в плане → Codex review → правки → пока план не сойдётся (или пока не упрётся в hard cap).

Стандартно откручивается до 6 итераций, hard cap 12 — это sanity-ограничитель, Codex всегда найдёт что покритиковать, и без ограничения петля может быть бесконечной. Более того, по умолчанию плагин сейчас считает план согласованным, если нет находок уровня critical и major (minor и nit считаются проходными). Количество итераций и проходной балл легко настраиваются.

Fast mode включается флагом --fast и просто меняет скорость работы Codex — priority service tier, в полтора раза быстрее. В моём конфиге он включён всегда.

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

Остальное (severity-aware auto-stop, снапшоты на каждом раунде, защита от того, что файл плана поменяют параллельно) — есть, но описывать здесь не буду. Кому интересно — в README на GitHub.

Плагин и инструкции по установке: github.com/egsok/plan-tango.

Лицензия MIT — берите, форкайте, кастомизируйте под себя. Буду благодарен за звезды!

Резюме

Кросс-модельное ревью плана у меня осело в постоянном workflow. Сама по себе идея простая — на полстраницы кода: одна модель пишет план, другая его рвёт.

Я и так всегда предпочитал больше времени на планирование, чем потом ловить баги и переделывать. Plan-tango просто позволяет полностью отдать эту часть для задач средней сложности и не участвовать руками: сформулировал ТЗ, запустил, ушёл по делам, вернулся к готовому плану.

Сам паттерн при этом прекрасно работает и без плагина. Сначала попробуйте руками в соседнем окне. А если зайдёт — забирайте plan-tango.


Оригинал в моем блоге: egorsokolov.ru/ai/plan-tango

Ещё пишу про AI-инструменты и нейросетевой workflow в своём ТГ-канале: Нейросеть не виновата