Публикация в X (Twitter)
Публикует текст, изображения, видео и длинные статьи в X через реальный браузер Chrome.
В Codex не следует путать следующие варианты работы с браузером:
- Плагин Codex Chrome /
@chrome/ Chrome Extension: используйте встроенный навыкchrome:Chromeи его браузерный клиент Node REPL. Это необходимо, когда пользователь говорит "плагин Codex Chrome", "Codex 自带的 Chrome 插件",@chromeили подобное. - Chrome Computer Use: используйте
mcp__computer_use__.*для управления видимым интерфейсом Google Chrome, только когда пользователь запрашивает Computer Use или не указано предпочтение плагина Chrome, и доступен Computer Use. - Режим CDP-скриптов: используйте только как запасной вариант, когда выбранный режим недоступен или пользователь явно запрашивает режим CDP/скриптов.
Каталог скриптов
Важно: Все скрипты находятся в подкаталоге scripts/ этого навыка.
Инструкции по выполнению для агента:
- Определите путь к файлу SKILL.md как
{baseDir} - Путь к скрипту =
{baseDir}/scripts/<имя-скрипта>.ts - Замените все
{baseDir}в этом документе на фактический путь - Определите среду выполнения
${BUN_X}: еслиbunустановлен →bun; если доступенnpx→npx -y bun; иначе предложите установить bun
Справочник скриптов:
| Скрипт | Назначение |
|---|---|
scripts/x-browser.ts | Обычные посты (текст + изображения), аварийный CDP |
scripts/x-video.ts | Видеопосты (текст + видео), аварийный CDP |
scripts/x-quote.ts | Цитирование твита с комментарием, аварийный CDP |
scripts/x-article.ts | Публикация длинных статей (Markdown), аварийный CDP |
scripts/md-to-html.ts | Преобразование Markdown → HTML |
scripts/copy-to-clipboard.ts | Копирование содержимого в буфер обмена |
scripts/paste-from-clipboard.ts | Отправка реального нажатия клавиш вставки |
scripts/check-paste-permissions.ts | Проверка окружения и разрешений |
Выбор режима выполнения (обязательно)
Выберите ровно один режим перед взаимодействием с X:
- Если пользователь явно запрашивает плагин Codex Chrome,
@chrome, Chrome extension или "Codex 自带的 Chrome 插件", используйте Режим плагина Codex Chrome. Не вызывайте сначала Computer Use. - Если пользователь явно запрашивает Chrome Computer Use, используйте Режим Chrome Computer Use. Не переключайтесь на CDP, Playwright, встроенный браузер или плагин Chrome без уведомления пользователя и получения разрешения.
- Если пользователь явно запрашивает режим CDP/скриптов, используйте Режим CDP-скриптов.
- В противном случае предпочитайте Режим Chrome Computer Use. Для статей X в формате Markdown с локальными изображениями используйте проверенный рабочий процесс редактора X: вставляйте каждое изображение в теле статьи с панели инструментов (
Вставка->Медиа-> кнопка значка диалогаДобавить фото или видео) на место соответствующего плейсхолдера, затем удалите текст плейсхолдера. Используйте режим CDP-скриптов только когда выбранный режим управления браузером недоступен или когда процесс загрузки/выбора через интерфейс ненадежен.
Никогда не используйте встроенный браузер для рабочих процессов публикации в X.
Режим плагина Codex Chrome
Используйте этот режим всякий раз, когда пользователь запрашивает плагин Codex Chrome, @chrome или путь Chrome Extension. При этом используется настоящий профиль пользователя и вход в X через встроенный плагин Chrome, а не Computer Use и не CDP.
Настройка
- Загрузите навык
chrome:Chromeперед работой с браузером. - Используйте
tool_searchдля поискаnode_repl js, если инструмент Node REPLjsеще не виден. - Инициализируйте клиент браузера Chrome в точности так, как указано в навыке Chrome, затем выполните легкий вызов, например
browser.user.openTabs(), чтобы проверить соединение с расширением. - Если первый легкий вызов завершился неудачей, подождите 2 секунды и повторите один раз. Если он по-прежнему не работает, выполните проверки расширения из навыка Chrome и шаги восстановления. Если проверки пройдены, но связь все равно не устанавливается, запросите у пользователя разрешение на открытие нового окна Chrome. Не переключайтесь на Computer Use или CDP без предупреждения.
Общие правила
- Используйте API плагина Chrome
browser.tabs.*,tab.playwright.*,tab.cua.*и файловые менеджеры для действий в интерфейсе X. - Команды оболочки разрешены для предварительной обработки Markdown и подготовки буфера обмена с богатым HTML. Для изображений в теле статьи X не полагайтесь на вставку изображений из буфера обмена; используйте поток загрузки
Вставка->Медиав редакторе. - Если загрузка файла не удается с ошибкой
Not allowed, сообщите пользователю:Чтобы разрешить загрузку файлов, перейдите в chrome://extensions в Chrome, нажмите 'Подробнее' под расширением Codex и включите 'Разрешить доступ к URL-адресам файлов'. Подробнее см. https://developers.openai.com/codex/app/chrome-extension#upload-files. - Если плагин Chrome сообщает
native pipe is closed, повторите легкий вызов браузера один раз через 2 секунды, затем выполните проверки работоспособности навыка Chrome. Если Chrome запущен, расширение включено и манифест собственного хоста корректен, запросите разрешение открыть новое окно Chrome и повторите. Не продолжайте отправлять действия браузера через разорванный канал. - Никогда не нажимайте
Опубликовать,Твитнутьили любое внешне видимое действие отправки без явного окончательного подтверждения пользователя в текущем разговоре.
X Статьи
- Конвертируйте Markdown и сохраните карту изображений:
${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json - Прочитайте вывод JSON для получения
title,coverImageиcontentImages(placeholder→localPath). - Откройте или создайте черновик статьи по адресу
https://x.com/compose/articles. - Загрузите обложку с помощью потока выбора файлов плагина Chrome. Если загрузка заблокирована разрешениями расширения, остановитесь и сообщите точное исправление разрешений, указанное выше.
- Заполните заголовок, затем скопируйте богатый HTML:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html - Вставьте в тело статьи с помощью реального нажатия клавиш вставки через плагин Chrome. На macOS используйте
Meta+V. - Проверьте, что текст редактора содержит тело статьи и плейсхолдеры
XIMGPH_. Не полагайтесь наtab.clipboard.readText()как на доказательство системного буфера обмена после записи из оболочки; на macOS проверьте с помощьюpbpaste, если необходимо. - Для каждого элемента
contentImagesв порядке плейсхолдеров:- Найдите видимый текст плейсхолдера (
XIMGPH_N) и щелкните по нему, чтобы установить каретку. - Откройте меню панели инструментов
Вставка->Медиа. - В модальном окне щелкните иконку с
aria-label="Добавить фото или видео"; не нажимайте на текст/область перетаскивания или скрытый файловый ввод. - Используйте выбор файлов для загрузки
localPathэтого изображения. - После появления изображения, если
XIMGPH_Nостался над ним, выделите точно этот плейсхолдер и сначала нажмитеDelete. ИспользуйтеBackspaceтолько еслиDeleteне сработал и выделенный текст точно соответствует плейсхолдеру. - Проверьте, что количество плейсхолдера
XIMGPH_Nравно0.
- Найдите видимый текст плейсхолдера (
- Откройте предварительный просмотр и проверьте заголовок, обложку, тело, ссылки и изображения.
- Запросите явное подтверждение перед нажатием
Опубликовать.
Предпочтения (EXTEND.md)
Проверьте EXTEND.md в порядке приоритета — первый найденный выигрывает:
| Приоритет | Путь | Область |
|---|---|---|
| 1 | .baoyu-skills/baoyu-post-to-x/EXTEND.md | Проект |
| 2 | ${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-x/EXTEND.md | XDG |
| 3 | $HOME/.baoyu-skills/baoyu-post-to-x/EXTEND.md | Домашний каталог пользователя |
Если ничего не найдено, используйте значения по умолчанию.
EXTEND.md поддерживает: Профиль Chrome по умолчанию
Предварительные требования
- Google Chrome или Chromium
- Среда выполнения
bun - Первый запуск: войдите в X вручную (сессия сохранится)
Предполетная проверка (опционально)
Перед первым использованием предложите запустить проверку окружения. Пользователь может пропустить, если хочет.
${BUN_X} {baseDir}/scripts/check-paste-permissions.ts
Проверки: Chrome, изоляция профиля, Bun, Специальные возможности, буфер обмена, нажатие клавиш вставки, конфликты Chrome.
Если какая-либо проверка не пройдена, предоставьте руководство по исправлению для каждого пункта:
| Проверка | Исправление |
|---|---|
| Chrome | Установите Chrome или установите переменную окружения X_BROWSER_CHROME_PATH |
| Каталог профиля | Общий профиль в baoyu-skills/chrome-profile (см. раздел Chrome Profile в CLAUDE.md) |
| Среда выполнения Bun | brew install oven-sh/bun/bun (macOS) или npm install -g bun |
| Специальные возможности (macOS) | Системные настройки → Конфиденциальность и безопасность → Специальные возможности → включите приложение терминала |
| Копирование в буфер обмена | Убедитесь, что доступен Swift/AppKit (инструменты командной строки Xcode для macOS: xcode-select --install) |
| Нажатие клавиш вставки (macOS) | То же исправление, что и для Специальных возможностей выше |
| Нажатие клавиш вставки (Linux) | Установите xdotool (X11) или ydotool (Wayland) |
Ссылки
- Обычные посты: См.
references/regular-posts.mdдля ручного рабочего процесса, устранения неполадок и технических деталей - X Статьи: См.
references/articles.mdдля руководства по публикации длинных статей
Режим Chrome Computer Use
Используйте этот режим, когда пользователь явно запрашивает Chrome Computer Use или когда предпочтение плагина Chrome не указано, и Codex может управлять Google Chrome с помощью Computer Use. При этом используется существующее окно Chrome пользователя, файлы cookie, логин, расширения и сессия X.
Общие правила:
- Начинайте каждый ход помощника, управляющий Chrome, с вызова
get_app_stateдляGoogle Chrome. - Предпочитайте действия по индексу элемента, когда они доступны; используйте координаты только для выделения текста в редакторе или выделения перетаскиванием.
- Не используйте встроенный браузер, плагин Chrome, Playwright или CDP для действий в интерфейсе X в этом режиме, если пользователь не одобрит смену режима.
- Никогда не нажимайте
Опубликовать,Твитнутьили любое внешне видимое действие отправки без явного окончательного подтверждения пользователя в текущем разговоре.
Обычные посты:
- Откройте или перейдите в Chrome по адресу
https://x.com/compose/post. - Введите текст поста в композер с помощью Computer Use.
- Для каждого изображения выполните:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts image /absolute/path/to/image.png - Вставьте с помощью Computer Use (
super+vна macOS,control+vна Windows/Linux), затем подождите, пока X завершит загрузку медиа. - Запросите подтверждение перед нажатием
Твитнуть.
Видеопосты:
- Откройте или перейдите в Chrome по адресу
https://x.com/compose/post. - Введите текст поста в композер.
- Используйте видимый интерфейс загрузки медиа/выбора файла для прикрепления видео.
- Подождите завершения загрузки и обработки.
- Запросите подтверждение перед нажатием
Твитнуть.
Цитирование твитов:
- Откройте URL твита в Chrome.
- Используйте видимый интерфейс цитирования/ретвита, чтобы выбрать Цитировать.
- Введите комментарий.
- Запросите подтверждение перед нажатием
Твитнуть.
X Статьи:
- Конвертируйте Markdown и сохраните карту изображений:
${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json - Прочитайте вывод JSON для получения
title,coverImageиcontentImages(placeholder→localPath). - В Chrome откройте
https://x.com/compose/articles, создайте или откройте черновик, загрузите обложку, если она есть, и заполните заголовок. - Скопируйте богатый HTML в буфер обмена:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html - Вставьте в тело статьи с помощью Computer Use.
- Для каждого элемента
contentImagesв порядке плейсхолдеров:- Найдите точно видимый текст плейсхолдера, например
XIMGPH_3, и щелкните по нему, чтобы установить точку вставки. - Откройте выпадающее меню панели инструментов
Вставка, выберитеМедиа, затем нажмите кнопку значка модального окна с надписьюДобавить фото или видео. - Используйте родной выбор файлов, чтобы выбрать
localPathизображения. - Подождите, пока не появится блок изображения и завершится любая активность загрузки.
- Если плейсхолдер остается над вставленным изображением, снова выделите точно этот текст плейсхолдера и сначала нажмите
Delete. ИспользуйтеBackspaceтолько еслиDeleteне сработал и выделенный текст точно соответствует плейсхолдеру.
- Найдите точно видимый текст плейсхолдера, например
- Убедитесь, что не осталось плейсхолдеров
XIMGPH_и ожидаемые изображения отображаются. - Откройте предварительный просмотр и проверьте заголовок, обложку, тело, ссылки и изображения.
- Запросите явное подтверждение перед нажатием
Опубликовать.
Если управление выделением, загрузкой с панели инструментов или выбором файлов через Computer Use становится ненадежным, остановитесь и сообщите о препятствии, вместо того чтобы без предупреждения переключаться на плагин Chrome или CDP.
Режим CDP-скриптов (Запасной)
Используйте следующие разделы скриптов только в случае, когда выбранный режим управления браузером недоступен, ненадежен или явно не запрошен. Эти скрипты запускают или повторно используют реальный экземпляр Chrome через CDP и оставляют браузер открытым для проверки.
Не используйте режим CDP-скриптов, когда пользователь явно требует плагин Codex Chrome или Chrome Computer Use, если пользователь не одобрит запасной вариант после того, как вы объясните препятствие.
Выбор типа поста
Если пользователь явно не указывает тип поста:
- Обычный текст + в пределах 10 000 символов → Обычный пост (участники Premium поддерживают до 10 000 символов, не-Premium: 280)
- Markdown файл (.md) → X Статья
Обычные посты
${BUN_X} {baseDir}/scripts/x-browser.ts "Привет!" --image ./photo.png
Параметры:
| Параметр | Описание |
|---|---|
<text> | Содержание поста (позиционный) |
--image <path> | Файл изображения (можно повторять, макс. 4) |
--profile <dir> | Пользовательский профиль Chrome |
Примечание: Скрипт открывает браузер с предварительно заполненным содержимым. Пользователь проверяет и публикует вручную.
Примечание по режиму Codex: Если пользователь явно запросил плагин Codex Chrome, используйте Режим плагина Codex Chrome. В противном случае, если доступен Chrome Computer Use, используйте Режим Chrome Computer Use вместо запуска x-browser.ts.
Видеопосты
Текст + видеофайл.
${BUN_X} {baseDir}/scripts/x-video.ts "Только посмотри!" --video ./clip.mp4
Параметры:
| Параметр | Описание |
|---|---|
<text> | Содержание поста (позиционный) |
--video <path> | Видеофайл (MP4, MOV, WebM) |
--profile <dir> | Пользовательский профиль Chrome |
Примечание: Скрипт открывает браузер с предварительно заполненным содержимым. Пользователь проверяет и публикует вручную.
Примечание по режиму Codex: Если пользователь явно запросил плагин Codex Chrome, используйте Режим плагина Codex Chrome. В противном случае, если доступен Chrome Computer Use, используйте Режим Chrome Computer Use вместо запуска x-video.ts.
Лимиты: Обычные максимум 140 секунд, Premium максимум 60 минут. Обработка: 30-60 секунд.
Цитирование твитов
Цитирование существующего твита с комментарием.
${BUN_X} {baseDir}/scripts/x-quote.ts https://x.com/user/status/123 "Отличная мысль!"
Параметры:
| Параметр | Описание |
|---|---|
<tweet-url> | URL для цитирования (позиционный) |
<comment> | Текст комментария (позиционный, опционально) |
--profile <dir> | Пользовательский профиль Chrome |
Примечание: Скрипт открывает браузер с предварительно заполненным содержимым. Пользователь проверяет и публикует вручную.
Примечание по режиму Codex: Если пользователь явно запросил плагин Codex Chrome, используйте Режим плагина Codex Chrome. В противном случае, если доступен Chrome Computer Use, используйте Режим Chrome Computer Use вместо запуска x-quote.ts.
X Статьи
Длинные статьи в формате Markdown (требуется X Premium).
${BUN_X} {baseDir}/scripts/x-article.ts article.md
${BUN_X} {baseDir}/scripts/x-article.ts article.md --cover ./cover.jpg
Параметры:
| Параметр | Описание |
|---|---|
<markdown> | Markdown файл (позиционный) |
--cover <path> | Изображение обложки |
--title <text> | Переопределить заголовок |
Передняя часть: title, cover_image поддерживаются в YAML front matter.
Примечание по режиму Codex: Если пользователь явно запросил плагин Codex Chrome, следуйте Режиму плагина Codex Chrome выше. Если пользователь явно запросил Chrome Computer Use, следуйте Режиму Chrome Computer Use. В противном случае предпочитайте Chrome Computer Use; для статей Markdown с локальными изображениями используйте рабочий процесс загрузки изображений через панель инструментов Вставка -> Медиа, прежде чем возвращаться к x-article.ts в Режиме CDP-скриптов.
Примечание по CDP-запасному варианту: Скрипт открывает браузер с заполненной статьей. Пользователь проверяет и публикует вручную, если не используется --submit.
Безопасность публикации: Не используйте --submit и не нажимайте Опубликовать, если пользователь явно не подтвердит окончательное действие публичной публикации.
Проверка после составления: Скрипт автоматически проверяет после вставки всех изображений:
- Оставшиеся плейсхолдеры
XIMGPH_в содержимом редактора - Ожидаемое и фактическое количество изображений
Если проверка не пройдена (предупреждения в выводе), предупредите пользователя о конкретных проблемах перед публикацией.
Устранение неполадок
Порт отладки Chrome не готов
Только для запасного варианта CDP: если скрипт завершается с ошибкой Chrome debug port not ready или Unable to connect, сначала завершите существующие экземпляры Chrome CDP, затем повторите попытку:
pkill -f "Chrome.*remote-debugging-port" 2>/dev/null; pkill -f "Chromium.*remote-debugging-port" 2>/dev/null; sleep 2
Важно: Это должно быть сделано автоматически — при возникновении этой ошибки завершите экземпляры Chrome CDP и повторите команду, не спрашивая пользователя.
Примечания
- Первый запуск: требуется ручной вход (сессия сохраняется)
- В режиме плагина Codex Chrome и режиме Chrome Computer Use используйте существующую сессию Chrome пользователя и не запускайте отдельный профиль CDP
- Скрипты CDP по умолчанию только заполняют контент в браузере; пользователь должен проверить и опубликовать вручную, если явно не используется
--submit - Кроссплатформенность: macOS, Linux, Windows
Поддержка расширений
Пользовательские конфигурации через EXTEND.md. См. раздел Предпочтения для путей и поддерживаемых опций.


