Communitygithub.com

soia-pkm-clip-x

X/Twitter의 유용한 콘텐츠를 Obsidian Vault에 보관하고 Telegram 저장된 메시지와 동기화하여 지식 관리를 자동화하는 에이전트 스킬입니다. Claude Code / Codex / Cursor와 호환됩니다.

soia-pkm-clip-x란 무엇인가요?

이 스킬은 X/Twitter의 트윗, 스레드, Article과 같은 가치 있는 콘텐츠를 Obsidian Vault에 구조화된 마크다운 파일로 자동 보관하여 검색 가능한 지식 자산으로 전환합니다. X의 기본 UI는 장기적인 정보 저장에 적합하지 않습니다. 이 스킬은 fxtwitter라는 무료 공개 API를 활용하여 별도의 X API 키 없이도 트윗 본문, 작성자 정보, 미디어, 메트릭스 등 모든 메타데이터를 수집하고, 스레드는 전체 unroll하여 저장합니다. 또한 Telegram 저장된 메시지를 JSON 파일로 내보내거나 MTProto API를 통해 동기화하여 자동으로 중복 제거하고 Vault에 통합합니다. AI는 보관된 파일에 대해 자동으로 짧은 요약(摘要), 관련 토픽 및 인물에 대한 위키링크를 추가하며, 비중국어 콘텐츠의 경우 의역 방식의 자연스러운 한국어 요약을 제공합니다. Claude Code, Cursor, Codex와 같은 AI 코딩 에이전트에서 자연어 명령으로 작동시킬 수 있습니다.

지원 대상✓Claude Code✓Codex CLI✓Cursor
npx skills add soia-team/soia-open-skills

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

soia-pkm-clip-x은(는) 무엇을 하나요?

X의 가치 있는 콘텐츠를 Obsidian Vault에 담아 검색 가능한 지식 자산으로 구축합니다.

개요

X의 기본 UI는 장기적인 검토에 적합하지 않습니다. 스레드는 타임라인에 흩어지고, Article은 레이아웃이 깨지고, 링크는 쉽게 사라지며, 검색 기능도 부족합니다. 이 스킬은 X의 고품질 긴 콘텐츠를 한 번에 Obsidian에 담아냅니다:

  • 스레드 전체 unroll
  • X Article의 전체 content.blocks 확보
  • 메타데이터 완벽 (작성자, 메트릭스, 미디어 직접 링크, created_at)
  • frontmatter 주제 양방향 링크로 MOC 집계 용이
  • 다국어 인식 (한국어 / 영어 / 일본어 / 중국어)

사전 요구사항

  • Obsidian vault (모든 구조 가능)

  • Python 3, 순수 stdlib만 사용 (서드파티 종속성 없음, 단일 트윗 보관용)

  • 선택 사항: pip install telethon (MTProto 동기화 전용)

  • 환경 변수 설정:

    export OBSIDIAN_VAULT=~/Documents/MyVault
    # 선택 사항: 보관 하위 디렉토리 (기본값 "Articles")
    export OBSIDIAN_ARTICLES="Articles"
    # 선택 사항: 섹션 제목 언어, 기본값 ko (한국어), en 설정 시 영어 제목 사용
    export X_ARCHIVE_LANG=ko
    

핵심 API: fxtwitter

X URL의 x.com을 api.fxtwitter.com으로 바꾸고 GET 요청으로 JSON을 직접 가져옵니다. X API 키, 로그인, 비용이 전혀 들지 않습니다.

주요 필드용도
tweet.text / tweet.raw_text.text트윗 본문
tweet.article.titleX Article 제목
tweet.article.content.blocks[]Article 본문 blocks
tweet.replying_to_status이전 트윗 (스레드 역추적)
tweet.quote인용 트윗
tweet.media[]미디어 (이미지/비디오 직접 링크)
tweet.created_timestampUNIX 타임스탬프
tweet.views / likes / bookmarks / retweets메트릭스

폴백: fxtwitter 실패 → cdn.syndication.twimg.com 공개 엔드포인트.

트리거 명령어

사용자 명령호출
"이 X 보관: URL" / "archive this: URL"archive_x.py <URL>, 비중국어 콘텐츠는 아래 워크플로 4단계에 따라 자동으로 한국어 요약 추가 (별도로 "번역"을 말할 필요 없음)
"이 스레드 정리: URL"위와 동일, 강제 스레드 역추적
"내 텔레그램 저장 메시지 동기화" + JSON 경로 제공sync_telegram_export.py <path> --dry-run 으로 미리 보고 확인 후 실제 실행
"API로 텔레그램 동기화" (이미 자격 증명 있음)sync_telegram_saved.py

워크플로 (기본 보관)

  1. URL 파싱 → handle + status_id
  2. 스크립트 archive_x.py <URL> 호출
  3. 스크립트가 vault에 이미 보관되었는지 확인 (frontmatter url: 필드 기준)
    • 이미 존재함 → SKIP 출력, 종료
    • 그렇지 않음 → fxtwitter 가져오기, vault에 쓰기
  4. AI가 이후에 추가:
    • 1문장 한국어 ## 요약
    • 1-3개의 topics 위키링크 + people 위키링크
    • 비한국어 콘텐츠 (language가 ko가 아닌 경우): ## 한국어 요약 섹션을 완전한 요약으로 자동 추가, 사용자가 별도로 "번역"을 요청할 필요 없음. 의역(paraphrasing) 방식으로 직역하지 않음——기계 번역 느낌이 아닌, 사람이 쓴 듯한 자연스러운 한국어가 되도록 함; 고유명사, 제품명, 코드/명령어/API 파라미터는 영문 원본을 유지하고, 서술적인 문장과 설명만 번역
  5. "내 생각" 섹션은 항상 사용자가 직접 작성하도록 비워 둠

Telegram 동기화 두 가지 방법

A. JSON 내보내기 (권장, 위험 없음)

Telegram Desktop
  → 설정 → 고급 → Telegram 데이터 내보내기
  → "비공개 채팅" 체크 + JSON 형식 선택
  → result.json 파일 획득
python3 sync_telegram_export.py <result.json> --dry-run   # 목록 확인
python3 sync_telegram_export.py <result.json>             # 실제 실행

URL 기준으로 자동 중복 제거, 이미 보관된 건 자동 건너뜀. 월 1회 내보내기로 증분 동기화 가능.

B. MTProto API (고급, 중국 사용자는 주의)

필요 사항:

  • https://my.telegram.org/auth에서 api_id / api_hash 신청
  • generate_telegram_session.py 실행하여 session_string 획득
  • 주거용 IP (중국 본토 사용자는 반드시 홍콩/일본의 주거용 IP 대역 사용, 데이터센터 IP는 ERROR 발생)

⚠️ 중국 사용자는 우선적으로 방법 A 사용. my.telegram.org에서 앱을 생성하는 것은 중국 본토에서 거의 확실히 IP 차단을 유발하며, 반복 시도 시 계정 수준의 24-72시간 동결이 발생할 수 있습니다.

파일명

<YYYY-MM-DD>-X-<handle>-<제목 앞 50자>.md

예시:

  • 2026-05-24-X-cyrilXBT-How-to-Organize-Your-Obsidian-Vault.md
  • 2026-05-29-X-ObsidianOtaku-保存版AIエージェントのためのObsidian活用術.md

같은 날 같은 작성자 여러 개 → 끝에 -<status_id 뒤 6자리> 추가.

출력 frontmatter

---
tags: [글발췌]
source: X
url: https://x.com/<handle>/status/<id>
author: <표시이름>
handle: "@<handle>"
published_at: YYYY-MM-DD HH:mm
captured_at: YYYY-MM-DD HH:mm
language: ko / en / ja / zh
type: tweet / thread / article
topics: ["[[xxx]]", ...]   # AI 작성
people: ["[[xxx]]", ...]   # AI 작성
media: [...] / 0
content_complete: true
metrics:
  views: N
  likes: N
  bookmarks: N
---

경계 및 예외 처리

상황처리
fxtwitter가 404 반환트윗 삭제/비공개, archive.org 확인 권장
fxtwitter 5xx1회 재시도, 실패 시 syndication 엔드포인트로 폴백
URL이 x.com / twitter.com 아님거부, Web Clipper 사용 권장
트윗 텍스트가 비어 있고 article도 media도 없음경고: "순수 리트윗/순수 답글, 독립 콘텐츠 없을 수 있음"
같은 날 같은 작성자 파일명 중복끝에 -<status_id 뒤 6자리> 추가
비디오 미디어frontmatter media[]에 mp4 직접 링크 기록, 내장하지 않음

명령줄 참조

# 단일 트윗 보관
python3 archive_x.py <URL>
python3 archive_x.py <URL> --force                  # 이미 보관된 항목 덮어쓰기
python3 archive_x.py <URL> --vault /path/to/vault   # 환경 변수 덮어쓰기

# Telegram JSON 내보내기 동기화
python3 sync_telegram_export.py <result.json>
python3 sync_telegram_export.py <result.json> --dry-run
python3 sync_telegram_export.py <result.json> --since 2026-06-01
python3 sync_telegram_export.py <result.json> --limit 30

# MTProto 동기화 (먼저 설정 필요)
python3 generate_telegram_session.py    # 일회성
python3 sync_telegram_saved.py --dry-run
python3 sync_telegram_saved.py --days 30
python3 sync_telegram_saved.py --all

관련 스킬