X(트위터)에 게시
실제 Chrome 브라우저를 통해 텍스트, 이미지, 비디오 및 장문 기사를 X에 게시합니다.
Codex에서는 다음 브라우저 경로를 혼동하지 마십시오:
- Codex Chrome 플러그인 /
@chrome/ Chrome 확장 프로그램: 번들된chrome:Chrome기술과 Node REPL 브라우저 클라이언트를 사용합니다. 사용자가 "Codex Chrome 플러그인", "Codex 내장 Chrome 플러그인",@chrome또는 유사한 말을 할 때마다 필요합니다. - Chrome Computer Use: 사용자가 Computer Use를 요청하거나 Chrome 플러그인 선호도가 명시되지 않고 Computer Use를 사용할 수 있는 경우에만 표시되는 Google Chrome UI에 대해
mcp__computer_use__.*를 사용합니다. - CDP 스크립트 모드: 선택한 모드를 사용할 수 없거나 사용자가 명시적으로 CDP/스크립트 모드를 요청할 때만 대체 수단으로 사용합니다.
스크립트 디렉터리
중요: 모든 스크립트는 이 기술의 scripts/ 하위 디렉터리에 있습니다.
에이전트 실행 지침:
- 이 SKILL.md 파일의 디렉터리 경로를
{baseDir}로 확인합니다. - 스크립트 경로 =
{baseDir}/scripts/<script-name>.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 확장 프로그램 또는 "Codex 내장 Chrome 플러그인"을 명시적으로 요청하는 경우 Codex Chrome Plugin Mode를 사용합니다. 먼저 Computer Use를 호출하지 마십시오. - 사용자가 Chrome Computer Use를 명시적으로 요청하는 경우 Chrome Computer Use Mode를 사용합니다. 사용자에게 알리고 승인을 받지 않은 상태에서 CDP, Playwright, 인앱 브라우저 또는 Chrome 플러그인으로 대체하지 마십시오.
- 사용자가 CDP/스크립트 모드를 명시적으로 요청하는 경우 CDP Script Mode를 사용합니다.
- 그렇지 않으면 Chrome Computer Use Mode를 선호합니다. 로컬 콘텐츠 이미지가 포함된 Markdown X 기사의 경우, 검증된 X 편집기 흐름을 사용합니다: 각 본문 이미지를 해당 자리 표시자에 툴바에서 (
삽입->미디어-> 대화 상자 아이콘 버튼사진 또는 비디오 추가) 삽입한 다음 자리 표시자 텍스트를 삭제합니다. 선택한 브라우저 제어 모드를 사용할 수 없거나 UI 업로드/선택 흐름이 신뢰할 수 없는 경우에만 CDP Script Mode를 사용합니다.
X 게시 워크플로에 인앱 브라우저를 사용하지 마십시오.
Codex Chrome Plugin Mode
사용자가 Codex Chrome 플러그인, @chrome 또는 Chrome 확장 프로그램 경로를 요청할 때마다 이 모드를 사용합니다. 이 모드는 번들된 Chrome 플러그인을 통해 사용자의 실제 Chrome 프로필과 X 로그인을 사용하며, Computer Use나 CDP를 사용하지 않습니다.
설정
- 브라우저 작업 전에
chrome:Chrome기술을 로드합니다. - Node REPL
js도구가 보이지 않으면tool_search를 사용하여node_repl js를 검색합니다. - Chrome 기술에서 지정한 대로 Chrome 브라우저 클라이언트를 정확히 초기화한 다음
browser.user.openTabs()와 같은 가벼운 호출을 실행하여 확장 프로그램 연결을 확인합니다. - 첫 번째 가벼운 호출이 실패하면 2초간 기다렸다가 한 번 재시도합니다. 여전히 실패하면 Chrome 기술의 확장 프로그램 검사 및 복구 단계를 따릅니다. 검사를 통과했지만 통신이 여전히 실패하면 새 Chrome 창을 열기 전에 사용자에게 문의하십시오. 조용히 Computer Use 또는 CDP로 전환하지 마십시오.
일반 규칙
- X UI 작업에 Chrome 플러그인의
browser.tabs.*,tab.playwright.*,tab.cua.*및 파일 선택기 API를 사용합니다. - Markdown 전처리 및 리치 HTML 클립보드 준비를 위해 셸 명령이 허용됩니다. X 기사 본문 이미지의 경우 이미지 클립보드 붙여넣기에 의존하지 말고 편집기의
삽입->미디어업로드 흐름을 사용하십시오. - 파일 업로드가
Not allowed와 함께 실패하면 사용자에게 다음을 알립니다:파일 업로드를 활성화하려면 Chrome에서 chrome://extensions로 이동하여 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 title,coverImage, 및contentImages(placeholder→localPath)에 대한 JSON 출력을 읽습니다.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키를 누릅니다.Delete가 실패하고 선택한 텍스트가 정확히 자리 표시자임이 확인된 경우에만Backspace를 사용하십시오. - 해당
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의 공유 프로필 (CLAUDE.md Chrome 프로필 섹션 참조) |
| Bun 런타임 | brew install oven-sh/bun/bun (macOS) 또는 npm install -g bun |
| 접근성 (macOS) | 시스템 설정 → 개인정보 보호 및 보안 → 손쉬운 사용 → 터미널 앱 활성화 |
| 클립보드 복사 | Swift/AppKit 사용 가능 확인 (macOS Xcode CLI 도구: xcode-select --install) |
| 붙여넣기 키 입력 (macOS) | 위의 접근성 수정과 동일 |
| 붙여넣기 키 입력 (Linux) | xdotool (X11) 또는 ydotool (Wayland) 설치 |
참조
- 일반 게시물: 수동 워크플로, 문제 해결 및 기술 세부 정보는
references/regular-posts.md를 참조하십시오 - X 기사: 장문 기사 게시 가이드는
references/articles.md를 참조하십시오
Chrome Computer Use Mode
사용자가 Chrome Computer Use를 명시적으로 요청하거나 Chrome 플러그인 선호도가 명시되지 않고 Codex가 Computer Use로 Google Chrome을 제어할 수 있는 경우 이 모드를 사용합니다. 이 모드는 사용자의 기존 Chrome 창, 쿠키, 로그인, 확장 프로그램 및 X 세션을 사용합니다.
일반 규칙:
- Chrome을 제어하는 각 어시스턴트 턴을 시작할 때
Google Chrome에 대해get_app_state를 호출하십시오. - 사용 가능한 경우 요소 인덱스 작업을 선호합니다. 좌표는 편집기 텍스트 선택 또는 드래그 선택에만 사용하십시오.
- 사용자가 모드 변경을 승인하지 않는 한 이 모드에서 X UI 작업에 인앱 브라우저, Chrome 플러그인, Playwright 또는 CDP를 사용하지 마십시오.
- 현재 대화에서 사용자의 명시적인 최종 확인 없이
게시,게시또는 외부에 표시되는 제출 작업을 클릭하지 마십시오.
일반 게시물:
- Chrome에서
https://x.com/compose/post를 열거나 이동합니다. - Computer Use를 사용하여 작성기에 게시물 텍스트를 입력합니다.
- 각 이미지에 대해 실행:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts image /absolute/path/to/image.png - Computer Use로 붙여넣고 (macOS에서는
super+v, Windows/Linux에서는control+v), X가 미디어 업로드를 마칠 때까지 기다립니다. 게시를 클릭하기 전에 확인을 요청합니다.
비디오 게시물:
- Chrome에서
https://x.com/compose/post를 열거나 이동합니다. - 작성기에 게시물 텍스트를 입력합니다.
- 보이는 미디어 업로드/파일 선택기 UI를 사용하여 비디오를 첨부합니다.
- 업로드 및 처리가 완료될 때까지 기다립니다.
게시를 클릭하기 전에 확인을 요청합니다.
인용 트윗:
- Chrome에서 트윗 URL을 엽니다.
- 보이는 인용/재게시 UI를 사용하여 인용을 선택합니다.
- 댓글을 입력합니다.
게시를 클릭하기 전에 확인을 요청합니다.
X 기사:
- Markdown을 변환하고 이미지 맵을 유지합니다:
${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json title,coverImage, 및contentImages(placeholder→localPath)에 대한 JSON 출력을 읽습니다.- 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키를 누릅니다.Delete가 실패하고 선택한 텍스트가 정확히 자리 표시자임이 확인된 경우에만Backspace를 사용하십시오.
XIMGPH_자리 표시자가 남아 있지 않고 예상 이미지가 나타나는지 확인합니다.- 미리보기를 열고 제목, 커버, 본문, 링크 및 이미지를 확인합니다.
게시를 클릭하기 전에 명시적인 확인을 요청합니다.
Computer Use 선택, 툴바 업로드 또는 파일 선택기 제어가 신뢰할 수 없게 되면 조용히 Chrome 플러그인이나 CDP로 전환하는 대신 중지하고 차단 요소를 보고하십시오.
CDP Script Mode (대체 수단)
선택한 브라우저 제어 모드를 사용할 수 없거나 신뢰할 수 없거나 명시적으로 요청되지 않은 경우에만 아래 스크립트 섹션을 사용하십시오. 이 스크립트는 CDP를 통해 실제 Chrome 인스턴스를 시작하거나 재사용하고 검토를 위해 브라우저를 열어 둡니다.
사용자가 Codex Chrome 플러그인 또는 Chrome Computer Use를 명시적으로 요구하는 경우 차단 요소를 설명한 후 사용자가 대체 수단을 승인하지 않는 한 CDP Script Mode를 사용하지 마십시오.
게시물 유형 선택
사용자가 게시물 유형을 명시적으로 지정하지 않는 한:
- 플레인 텍스트 + 10,000자 이내 → 일반 게시물 (프리미엄 회원은 최대 10,000자 지원, 비프리미엄: 280자)
- Markdown 파일 (.md) → X 기사
일반 게시물
${BUN_X} {baseDir}/scripts/x-browser.ts "Hello!" --image ./photo.png
매개변수:
| 매개변수 | 설명 |
|---|---|
<text> | 게시물 콘텐츠 (위치 인수) |
--image <path> | 이미지 파일 (반복 가능, 최대 4개) |
--profile <dir> | 사용자 정의 Chrome 프로필 |
참고: 스크립트는 콘텐츠가 채워진 상태로 브라우저를 엽니다. 사용자가 검토하고 수동으로 게시합니다.
Codex 모드 참고: 사용자가 Codex Chrome 플러그인을 명시적으로 요청한 경우 Codex Chrome Plugin Mode를 사용합니다. 그렇지 않고 Chrome Computer Use가 활성화된 경우 x-browser.ts를 실행하는 대신 Chrome Computer Use Mode를 사용합니다.
비디오 게시물
텍스트 + 비디오 파일.
${BUN_X} {baseDir}/scripts/x-video.ts "Check this out!" --video ./clip.mp4
매개변수:
| 매개변수 | 설명 |
|---|---|
<text> | 게시물 콘텐츠 (위치 인수) |
--video <path> | 비디오 파일 (MP4, MOV, WebM) |
--profile <dir> | 사용자 정의 Chrome 프로필 |
참고: 스크립트는 콘텐츠가 채워진 상태로 브라우저를 엽니다. 사용자가 검토하고 수동으로 게시합니다.
Codex 모드 참고: 사용자가 Codex Chrome 플러그인을 명시적으로 요청한 경우 Codex Chrome Plugin Mode를 사용합니다. 그렇지 않고 Chrome Computer Use가 활성화된 경우 x-video.ts를 실행하는 대신 Chrome Computer Use Mode를 사용합니다.
제한: 일반 140초 최대, 프리미엄 60분. 처리: 30-60초.
인용 트윗
댓글과 함께 기존 트윗을 인용합니다.
${BUN_X} {baseDir}/scripts/x-quote.ts https://x.com/user/status/123 "Great insight!"
매개변수:
| 매개변수 | 설명 |
|---|---|
<tweet-url> | 인용할 URL (위치 인수) |
<comment> | 댓글 텍스트 (위치 인수, 선택 사항) |
--profile <dir> | 사용자 정의 Chrome 프로필 |
참고: 스크립트는 콘텐츠가 채워진 상태로 브라우저를 엽니다. 사용자가 검토하고 수동으로 게시합니다.
Codex 모드 참고: 사용자가 Codex Chrome 플러그인을 명시적으로 요청한 경우 Codex Chrome Plugin Mode를 사용합니다. 그렇지 않고 Chrome Computer Use가 활성화된 경우 x-quote.ts를 실행하는 대신 Chrome Computer Use Mode를 사용합니다.
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> | 제목 재정의 |
프론트매터: YAML 프론트매터에서 title, cover_image 지원.
Codex 모드 참고: 사용자가 Codex Chrome 플러그인을 명시적으로 요청한 경우 위의 Codex Chrome Plugin Mode를 따릅니다. 사용자가 Chrome Computer Use를 명시적으로 요청한 경우 Chrome Computer Use Mode를 따릅니다. 그렇지 않으면 Chrome Computer Use를 선호합니다. 로컬 콘텐츠 이미지가 포함된 Markdown 기사의 경우 CDP Script Mode에서 x-article.ts로 대체하기 전에 툴바 삽입 -> 미디어 이미지 업로드 워크플로를 사용합니다.
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 Plugin Mode 및 Chrome Computer Use Mode에서는 사용자의 기존 Chrome 세션을 사용하고 별도의 CDP 프로필을 시작하지 마십시오
- CDP 스크립트는 기본적으로 브라우저에 콘텐츠만 채웁니다. 사용자가 명시적으로
--submit을 사용하지 않는 한 검토하고 수동으로 게시해야 합니다 - 크로스 플랫폼: macOS, Linux, Windows
확장 지원
EXTEND.md를 통한 사용자 정의 구성. 경로 및 지원 옵션은 환경설정 섹션을 참조하십시오.


