Команда codex review в Codex CLI: проверка кода и практические примеры

Команда codex review в Codex CLI служит для автоматизированной проверки изменений в Git-репозитории: она передаёт Codex сведения о выбранном наборе изменений и просит найти потенциальные дефекты, регрессии, ошибки в логике и другие проблемы, которые стоит обсудить до слияния кода или публикации. Это не просто просмотр diff в терминале: модель анализирует изменения в контексте проекта, может сопоставлять их с окружающим кодом и формулировать замечания с объяснением риска.

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

У команды есть несколько режимов работы: можно проверить все незакоммиченные изменения, сравнить текущую разработку с базовой веткой или проанализировать конкретный коммит. Ниже разберём актуальный синтаксис codex review, назначение каждого аргумента, практические сценарии запуска и способы интерпретации результата. При этом важно помнить: Codex помогает расширить покрытие ревью, но не заменяет автоматические тесты, статический анализ и внимательную проверку человеком.

Содержание
  1. Обзор команды codex review
  2. Синтаксис команды
  3. Аргумент --uncommitted
  4. Практический пример: проверка всех незакоммиченных изменений
  5. Практический пример: проверка с фокусом на безопасности
  6. Аргумент --base <BRANCH>
  7. Практический пример: сравнение feature-ветки с main
  8. Практический пример: проверка изменений после конкретного релиза
  9. Аргумент --commit <COMMIT>
  10. Практический пример: ревью последнего коммита
  11. Практический пример: ревью конкретного коммита по SHA
  12. Аргумент --title <TITLE>
  13. Практический пример: именованная проверка для CI
  14. Дополнительный позиционный промпт
  15. Режимы ревью и выбор подходящего сравнения
  16. Как подготовить репозиторий к проверке
  17. Практический пример: предварительная проверка состояния
  18. Практический пример: разделение двух независимых задач
  19. Практические сценарии проверки
  20. Практический пример: проверка исправления ошибки
  21. Практический пример: ревью изменения схемы данных
  22. Практический пример: проверка публичного API
  23. Практический пример: проверка конкурентного кода
  24. Практический пример: проверка тестового покрытия изменения
  25. Практический пример: ревью большого коммита с фокусом на регрессии
  26. Как читать результат ревью
  27. Практический пример: разбор одного замечания
  28. Практический пример: когда замечание является ложной тревогой
  29. Связь с тестами, линтерами и человеческим ревью
  30. Практический пример: последовательная проверка перед коммитом
  31. Практический пример: проверка после исправления замечаний
  32. Ограничения и типичные ошибки
  33. Практический пример: слишком большой diff
  34. Практический пример: выбор между коммитом и базовой веткой
  35. Рекомендуемый рабочий процесс

Обзор команды codex review

Команда codex review предназначена для поиска проблем в изменениях, находящихся под контролем Git. Она не является универсальным аудитором всего проекта: в первую очередь Codex получает diff или набор изменений, выбранный параметрами запуска, а затем формирует ревью по этому материалу.

Чем точнее выбран набор изменений и чем понятнее дополнительный контекст, тем полезнее результат: Codex проще отличить реальную регрессию от обычного рефакторинга или намеренного изменения поведения.

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

Сценарий Что проверяется Подходящая форма запуска
Есть локальные изменения, но коммита ещё нет Рабочее дерево и индекс Git codex review --uncommitted
Нужно оценить изменения относительно ветки Разница текущего состояния с базовой веткой codex review --base main
Нужно проверить конкретный коммит Изменения, внесённые указанным коммитом codex review --commit abc1234
Нужно задать особый фокус Выбранный diff с дополнительным указанием для модели codex review --uncommitted "Проверь обработку ошибок"

Перед запуском убедитесь, что вы находитесь в нужном репозитории, Git видит ожидаемые изменения, а Codex CLI установлен и авторизован. Если diff пуст, ревью либо не даст содержательного результата, либо завершится с сообщением о том, что анализировать нечего.

Проверка состояния репозитория:

$ git status
$ git diff
$ git diff --cached

Запуск ревью локальных изменений:

$ codex review --uncommitted

Синтаксис команды

Базовая форма команды выглядит так:

$ codex review [ОПЦИИ] [ПРОМПТ]

Квадратные скобки означают необязательные элементы. Обычно выбирают один основной режим определения изменений: --uncommitted, --base или --commit. Дополнительный текст в конце команды можно использовать как инструкцию, задающую фокус проверки.

Элемент Обязателен Назначение
codex review Да Запускает режим ревью изменений
OPTIONS Нет, но обычно нужен режим Определяет, какой diff анализировать
PROMPT Нет Передаёт дополнительную задачу или критерии проверки

Аргумент --uncommitted

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

--uncommitted проверяет состояние до коммита, поэтому такой запуск особенно полезен перед git commit, а не только после него.

Состояние файла Попадает в проверку Что учитывать
Изменённый отслеживаемый файл Да Изменение видно через обычный git diff
Изменение, добавленное в staging Да Его можно дополнительно увидеть через git diff --cached
Новый неотслеживаемый файл Не всегда попадает в обычный diff Добавьте его в индекс или убедитесь, что CLI учитывает его в текущем сценарии
Уже закоммиченный файл Нет Для него используйте --commit или --base

Практический пример: проверка всех незакоммиченных изменений

Такой запуск подходит, если в рабочем дереве изменено несколько файлов и требуется получить общий обзор рисков перед фиксацией результата.

$ git status
$ codex review --uncommitted

Практический пример: проверка с фокусом на безопасности

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

$ codex review --uncommitted "Особенно проверь авторизацию, обработку пользовательского ввода и возможность утечки персональных данных."

Аргумент --base <BRANCH>

Опция --base задаёт базовую ветку, относительно которой нужно оценить текущие изменения. На практике это часто main или master, но можно указать любую доступную локальную или разрешаемую Git-ссылку.

Такой режим полезен, когда ветка содержит несколько коммитов и нужно посмотреть изменения целиком, а не разбирать каждый коммит отдельно. Он близок к задаче ревью pull request: «что изменилось в моей ветке по сравнению с базовой линией?»

$ git fetch origin
$ codex review --base main
Вариант базовой ссылки Когда использовать Пример
Локальная ветка Базовая ветка уже обновлена локально --base main
Удалённая ссылка Нужно сравнить с удалённым состоянием --base origin/main
Тег Проверяется набор изменений после релиза --base v2.4.0
Имя конкретной точки Git Нужна воспроизводимая база --base abc1234

Практический пример: сравнение feature-ветки с main

Перед таким запуском желательно обновить сведения о ветках и убедиться, что текущая ветка действительно содержит нужную разработку.

$ git switch feature/payment-retry
$ git fetch origin
$ codex review --base origin/main

Практический пример: проверка изменений после конкретного релиза

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

$ codex review --base v1.8.0 "Проверь, не нарушили ли изменения обратную совместимость публичного API."

Аргумент --commit <COMMIT>

Опция --commit выбирает конкретный коммит для анализа. В качестве значения можно указывать полный или короткий идентификатор коммита, если Git однозначно его распознаёт.

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

Что передаётся Пример Преимущество
Короткий SHA --commit 7f3a9c1 Удобно для интерактивной работы
Полный SHA --commit 7f3a9c1e... Меньше риска неоднозначности
Коммит текущей ветки --commit HEAD Быстрая проверка последнего коммита

Практический пример: ревью последнего коммита

Используйте HEAD, если нужно проверить последний зафиксированный набор изменений, не копируя его идентификатор вручную.

$ git log -1 --oneline
$ codex review --commit HEAD

Практический пример: ревью конкретного коммита по SHA

Такой вариант применим, когда идентификатор пришёл из CI, issue или сообщения коллеги.

$ codex review --commit 7f3a9c1 "Проверь корректность миграции базы данных и возможность потери существующих данных."

Аргумент --title <TITLE>

Опция --title задаёт заголовок проверки. Она полезна, когда результаты нужно отличать друг от друга в журнале, автоматизации или интерфейсе, который отображает отчёты Codex.

Заголовок не изменяет сам diff и не превращает ревью в тест. Это поясняющая метка, помогающая понять, какую задачу выполнял конкретный запуск.

$ codex review --uncommitted --title "Проверка платежного модуля"

Практический пример: именованная проверка для CI

Если в проекте выполняются несколько видов анализа, осмысленный заголовок помогает отличить ревью безопасности от проверки миграций или API.

$ codex review --base origin/main --title "AI review: API и обратная совместимость" "Проверь публичные эндпоинты, схемы ответов и обработку ошибок."

Дополнительный позиционный промпт

Текст без отдельного флага в конце команды можно использовать как дополнительное задание для Codex. Это один из самых практичных способов сделать ревью точнее: вместо общего «посмотри код» можно попросить проверить конкретные инварианты, сценарии отказа или ограничения проекта.

Фокус промпта Пример формулировки Что можно получить
Надёжность «Проверь таймауты и повторные попытки» Замечания о зависаниях и повторной обработке
Безопасность «Проверь авторизацию и утечки секретов» Риски доступа и раскрытия данных
Совместимость «Проверь публичный API» Нарушения контрактов клиентов
Производительность «Ищи лишние запросы к базе» Потенциальные N+1 и дорогие операции
Тестируемость «Укажи отсутствующие сценарии тестов» Пробелы в проверках поведения

Режимы ревью и выбор подходящего сравнения

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

Сначала определите границу изменений, затем задавайте вопрос. Ревью последнего коммита и ревью всей feature-ветки могут дать совершенно разные результаты.

Режим Объект анализа Лучшее применение Главное ограничение
--uncommitted Незакоммиченные изменения Локальная работа перед коммитом Не показывает уже зафиксированные коммиты
--base <BRANCH> Изменения относительно базы Проверка feature-ветки или будущего PR Нужно корректно выбрать и обновить базу
--commit <COMMIT> Изменения одного коммита Точечный анализ и расследование Не охватывает другие коммиты ветки

Если разработчик только что написал код и ещё не сделал коммит, естественный выбор — --uncommitted. Если ветка уже накопила историю и готовится к слиянию, чаще подходит --base origin/main. Если требуется понять, что именно изменил конкретный автор в конкретной точке истории, используйте --commit.

Быстрый выбор режима:

Локальные правки:
$ codex review --uncommitted

Вся ветка относительно main:
$ codex review --base origin/main

Один коммит:
$ codex review --commit HEAD

Как подготовить репозиторий к проверке

Качество ревью зависит не только от модели, но и от состояния репозитория. До запуска полезно проверить текущую ветку, наличие незапланированных файлов, актуальность базовой ветки и размер diff. Codex не может надёжно интерпретировать намерения, если в рабочем дереве смешаны несколько независимых задач.

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

  1. Проверьте текущую ветку командой git branch --show-current.
  2. Посмотрите краткий статус через git status --short.
  3. Изучите обычные и подготовленные изменения командами git diff и git diff --cached.
  4. Если сравниваете с удалённой веткой, обновите ссылки через git fetch.
  5. Убедитесь, что в diff нет временных файлов, отладочного кода и случайных изменений форматирования.
Проверка перед ревью Команда Зачем нужна
Текущая ветка git branch --show-current Не перепутать рабочую ветку
Краткий статус git status --short Увидеть staged, unstaged и неотслеживаемые файлы
Незакоммиченный diff git diff Понять содержание рабочих изменений
Staged diff git diff --cached Проверить подготовленную к коммиту версию
История git log --oneline -n 5 Найти нужный коммит или понять контекст

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

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

$ git branch --show-current
$ git status --short
$ git diff --stat
$ git diff --cached --stat

Практический пример: разделение двух независимых задач

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

Сначала сохраните текущую работу:

$ git stash push -m "Временная незавершённая работа"

Затем оставьте только нужные изменения и запустите:

$ codex review --uncommitted

Команда git stash требует аккуратности: перед применением сохранённых изменений убедитесь, что понимаете, какие файлы были убраны. Это рекомендация по организации diff, а не обязательная часть работы Codex.

Практические сценарии проверки

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

Практический пример: проверка исправления ошибки

В этом случае полезно попросить Codex проверить не только изменённые строки, но и исходный сценарий, который должен был быть исправлен.

$ codex review --uncommitted "Проверь, действительно ли исправлена ошибка с повторной обработкой заказа. Особое внимание удели идемпотентности и сценарию сетевого таймаута."

Практический пример: ревью изменения схемы данных

Миграции требуют отдельного внимания: проблема может проявиться не в самом SQL, а при запуске на базе, где уже есть реальные данные.

$ codex review --commit HEAD "Проверь миграцию: безопасна ли она для существующих записей, поддерживает ли откат и не блокирует ли таблицу на длительное время."

Практический пример: проверка публичного API

При изменении API стоит явно указать, что нужно оценить совместимость клиентов, форматы ответов и коды ошибок.

$ codex review --base origin/main "Проанализируй изменения публичного API. Ищи несовместимые изменения схем, статусов ответа, обязательных полей и поведения при ошибках."

Практический пример: проверка конкурентного кода

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

$ codex review --uncommitted "Проверь конкурентный доступ к общему состоянию, гонки, дедлоки, повторный запуск задач и корректное завершение фоновых операций."

Практический пример: проверка тестового покрытия изменения

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

$ codex review --base main "Определи, какие новые или изменённые ветви поведения не покрыты тестами. Предложи конкретные граничные сценарии, но не считай отсутствие замечаний доказательством корректности."

Практический пример: ревью большого коммита с фокусом на регрессии

Если коммит объединяет рефакторинг и изменение поведения, полезно попросить отделить безопасное переименование или перестройку кода от возможных функциональных регрессий.

$ codex review --commit HEAD --title "Регрессионное ревью" "Ищи изменения поведения, которые могли появиться случайно. Не трать основное внимание на стиль и форматирование."

Как читать результат ревью

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

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

Признак сильного замечания Почему он важен Что сделать
Указан конкретный файл и участок Проще быстро проверить утверждение Открыть контекст и соседние вызовы
Описано условие возникновения Понятно, является ли проблема реальной Смоделировать сценарий
Названо последствие Можно оценить приоритет Сопоставить с требованиями проекта
Предложен способ исправления Замечание превращается в действие Проверить, не нарушит ли исправление другой контракт
Есть сомнение или оговорка Модель признаёт неполноту контекста Не принимать вывод без ручной проверки

Удобно классифицировать найденные проблемы по уровню риска:

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

Не стоит автоматически исправлять каждое замечание. Иногда Codex предполагает поведение, которое в проекте намеренно, не видит внешний контракт или не знает о гарантии, обеспечиваемой другим слоем системы.

Практический пример: разбор одного замечания

Предположим, Codex сообщает, что повторный запрос может создать дубль заказа. Проверка должна идти от утверждения к фактам, а не от желания поскорее поставить галочку.

1. Найдите указанный вызов в коде.
2. Проверьте, может ли операция быть запущена повторно.
3. Посмотрите, есть ли уникальный ключ или идемпотентный токен.
4. Воспроизведите сетевой таймаут или повтор запроса.
5. Добавьте тест, если сценарий действительно не покрыт.

Итог:
Подтверждено — исправить код и добавить тест.
Не подтверждено — записать причину и закрыть замечание с объяснением.

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

Модель может не увидеть, что проверка выполняется на уровне middleware или что входные данные уже очищены библиотекой. В таком случае важно зафиксировать контекст, а не менять код без необходимости.

Замечание: «Параметр не проверяется перед использованием».

Проверка:
$ grep -R "validateRequest" src/
$ grep -R "authMiddleware" src/

Если в вызывающем слое гарантируется валидация:
Решение: не менять текущую строку, а добавить комментарий или тест на контракт middleware.

Связь с тестами, линтерами и человеческим ревью

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

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

Инструмент Что он проверяет лучше всего Чего от него не стоит ожидать
codex review Логические риски, контекстные дефекты, пропущенные сценарии Гарантированного доказательства корректности
Юнит-тесты Известное поведение отдельных компонентов Поиска всех неизвестных сценариев
Интеграционные тесты Взаимодействие компонентов и внешних систем Полного покрытия редких условий
Линтер Стиль, типовые ошибки, соглашения Понимания бизнес-намерения
Статический анализатор Типы, потоки данных, отдельные классы дефектов Оценки удобства решения для пользователя
Человек Требования, архитектурный смысл, продуктовый контекст Безошибочной проверки без времени и внимания

Минимальный разумный процесс после ревью выглядит так:

  1. Изучить diff самостоятельно.
  2. Запустить codex review в подходящем режиме.
  3. Проверить каждое существенное замечание вручную.
  4. Добавить или обновить тесты для подтверждённых сценариев.
  5. Запустить линтер, типизацию и тестовый набор проекта.
  6. Попросить человека проверить требования, архитектуру и пользовательское поведение.

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

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

$ git diff --check
$ npm test
$ npm run lint
$ codex review --uncommitted "Найди логические дефекты и пропущенные граничные сценарии."
$ git diff

Практический пример: проверка после исправления замечаний

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

$ git diff
$ npm test -- --runInBand
$ codex review --uncommitted "Повторно проверь ранее найденный риск и убедись, что исправление не создало новую регрессию."

Ограничения и типичные ошибки

Даже правильно введённая команда не может компенсировать неясную границу сравнения, отсутствующий контекст или слишком большой смешанный diff. Ошибки обычно возникают не из-за самого флага, а из-за неверного ожидания от режима.

Ошибка Почему это плохо Как исправить
Проверять --commit HEAD, ожидая ревью всей ветки Анализируется только один коммит Использовать --base origin/main
Сравнивать с устаревшим main В diff отсутствуют свежие изменения базы Выполнить git fetch и выбрать актуальную ссылку
Смешивать несколько задач Сложно понять намерение и приоритет замечаний Разделить изменения на тематические коммиты
Принимать каждое замечание без проверки Можно внести ненужные или вредные изменения Подтверждать риск тестом или анализом контекста
Считать отсутствие замечаний гарантией качества Модель могла не увидеть дефект Продолжать тестирование и человеческое ревью

Следует также учитывать конфиденциальность. Перед использованием AI-инструмента в рабочем проекте проверьте правила организации, настройки доступа и допустимость передачи исходного кода или сведений, содержащихся в diff. Не помещайте секреты в промпт и не добавляйте в изменения ключи, токены или пароли «временно» — временные секреты имеют неприятную привычку становиться историей Git.

Практический пример: слишком большой diff

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

$ git diff --stat
$ git diff --name-only

Если изменены несвязанные области:
$ git add src/payment
$ codex review --uncommitted "Проверь только платёжный сценарий и связанные тесты."

Практический пример: выбор между коммитом и базовой веткой

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

Итог ветки перед pull request:
$ codex review --base origin/main

Точечный анализ коммита с изменением API:
$ codex review --commit 91ab42e

Рекомендуемый рабочий процесс

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

  1. После первых значимых правок — запустите codex review --uncommitted, чтобы проверить идею до накопления лишнего кода.
  2. Перед коммитом — проверьте локальный diff и попросите Codex обратить внимание на известные риски.
  3. После создания нескольких коммитов — выполните проверку через --base, чтобы оценить итог ветки целиком.
  4. Перед публикацией или слиянием — запустите тесты, линтеры и финальное ревью человеком.
  5. После исправления замечаний — повторите анализ и проверьте, что исправление подтверждено тестом.
Этап Команда Цель
Локальная итерация codex review --uncommitted Рано найти очевидные логические риски
Проверка отдельного коммита codex review --commit HEAD Оценить конкретный законченный шаг
Подготовка PR codex review --base origin/main Проверить весь набор изменений ветки
Специализированный анализ Команда с дополнительным промптом Сфокусироваться на безопасности, API или миграциях
Пример полного локального цикла:

$ git status --short
$ git diff --check
$ codex review --uncommitted "Проверь ошибки обработки, граничные случаи и обратную совместимость."
$ npm test
$ npm run lint
$ git diff
$ git commit -m "Fix payment retry handling"

После накопления изменений в ветке:

$ git fetch origin
$ codex review --base origin/main --title "Final branch review"

Итак, codex review — это удобный дополнительный слой контроля, который помогает посмотреть на изменения свежим взглядом и сформулировать вопросы, легко пропустить в спешке. Для незакоммиченной работы используйте --uncommitted, для сравнения ветки — --base <BRANCH>, для точечного анализа — --commit <COMMIT>, а дополнительным промптом задавайте конкретный фокус. Но окончательная уверенность появляется только тогда, когда замечания проверены человеком, подтверждены тестами и сопоставлены с реальными требованиями проекта.

CIO-NAVIGATOR