Agent-Reach는 AI 에이전트(Claude Code, Cursor, Windsurf 등)에게 인터넷 접근 능력을 부여하는 오픈소스 CLI 도구입니다. 트위터·유튜브·레딧·GitHub·빌리빌리·샤오홍슈 등 15개 이상의 플랫폼을 API 키 없이(또는 최소 설정으로) 검색하고 읽을 수 있게 해줍니다. 핵심 철학은 "글루 레이어(Glue Layer)" — 자체 구현 없이 이미 검증된 오픈소스 도구들(yt-dlp, bird CLI, gh CLI)을 조합해줍니다.
지금까지 Claude Code 같은 AI 에이전트는 코드와 파일은 잘 다루지만, 인터넷은 "볼 수 없었습니다." Agent-Reach는 AI 에이전트에게 실제 인터넷 창문을 열어주는 안테나를 설치합니다.
중요한 것은 Agent-Reach 자신이 YouTube나 Twitter를 직접 구현하지 않는다는 점입니다. 대신 이미 148k 스타를 받은 yt-dlp, bird CLI 같은 검증된 도구들을 설치·설정해주고, 에이전트가 그 도구들을 직접 호출하게 합니다.
Claude Code, Cursor 등으로 코딩하는 개발자가 폭증했지만, AI 에이전트가 실제 인터넷 콘텐츠에 접근하려면 플랫폼마다 별도 API 키를 발급받고, 각기 다른 SDK를 설치하고, 인증 로직을 직접 짜야 합니다. 중국 플랫폼(샤오홍슈, 빌리빌리 등)은 서구 도구로는 거의 접근이 불가능합니다.
pip install agent-reach 하나면 됩니다. 이후 agent-reach doctor로 각 채널 상태를 진단하고, Tier 0(제로 설정) 채널부터 즉시 사용할 수 있습니다. 중국 플랫폼까지 지원하는 유일한 무료 오픈소스 도구입니다.
| 비교 항목 | Agent-Reach | 일반 웹 스크래핑 | 플랫폼별 API 직접 |
|---|---|---|---|
| 설정 난이도 | 원커맨드 설치 | 플랫폼별 개별 설정 | API 키 발급/관리 필요 |
| 비용 | 무료 (대부분) | 도구마다 다름 | API 과금 가능 |
| 플랫폼 수 | 15+ | 범용이지만 제한적 | 1개씩 개별 연동 |
| AI 에이전트 통합 | 네이티브 지원 | 추가 작업 필요 | 추가 작업 필요 |
| 중국 플랫폼 | 샤오홍슈·빌리빌리·더우인 | 어렵거나 불가 | 사실상 불가 |
| GitHub 스타 | ⭐ 20,873 | 도구마다 다름 | N/A |
| 기술 | 역할 | 비고 |
|---|---|---|
| Python 3.10+ | 메인 언어 | 타입힌트 적극 활용 |
| argparse | CLI 인터페이스 | 10+ 서브커맨드 |
| Rich | 터미널 출력 포맷팅 | 컬러·테이블·프로그레스 |
| loguru | 로깅 | 구조화된 로그 |
| PyYAML | 설정 파일 관리 | ~/.agent-reach/config.yaml |
| python-dotenv | 환경변수 관리 | .env 파일 지원 |
| Hatchling | 빌드 시스템 | pyproject.toml 기반 |
| Ruff | 린팅 + 포맷팅 | 100자 라인 제한 |
| MyPy | 정적 타입 체크 | strict 모드 |
| 도구 | GitHub 스타 | 담당 플랫폼 | 설치 방식 |
|---|---|---|---|
| Jina Reader | 9.8k | 모든 웹페이지 | curl 기반 (설치 불필요) |
| yt-dlp | 148k | YouTube | pip |
| bili-cli | — | Bilibili | pip |
| twitter-cli | — | Twitter/X | npm |
| bird CLI | — | Twitter/X (레거시) | npm |
| GitHub CLI (gh) | — | GitHub | 시스템 패키지 |
| feedparser | 2.3k | RSS/Atom 피드 | pip |
| xiaohongshu-mcp | 9k | 샤오홍슈 | Docker + MCP |
| Exa AI | — | 시맨틱 검색 | MCP via mcporter |
from abc import ABC, abstractmethod
from typing import Tuple, List
class Channel(ABC):
name: str = ""
description: str = ""
backends: List[str] = []
tier: int = 0 # 0=무설정, 1=API키 필요, 2=고급 설정
@abstractmethod
def can_handle(self, url: str) -> bool:
"""이 채널이 해당 URL을 처리할 수 있는지 판단"""
...
def check(self, config=None) -> Tuple[str, str]:
"""채널 가용성 확인 (기본 구현 제공, 오버라이드 가능)"""
backend = ", ".join(self.backends) if self.backends else "내장"
return ("ok", f"{backend}")
can_handle()은 abstract(반드시 구현) — URL 기반 라우팅으로 어떤 채널이 어떤 URL을 담당하는지 자동 판별합니다. check()는 기본 구현 제공(오버라이드 가능) — 템플릿 메서드 패턴으로 채널별 커스텀 가용성 확인이 가능합니다.| Tier | 의미 | 예시 채널 |
|---|---|---|
| 0 | 설치 즉시 사용 (제로 설정) | Jina Reader, YouTube, RSS, GitHub, V2EX, 雪球(xueqiu) |
| 1 | 무료 API 키, 쿠키 또는 로그인 필요 | Twitter(쿠키), Reddit, Exa(무료 키), 샤오홍슈 |
| 2 | 프록시 또는 고급 설정 필요 | LinkedIn(브라우저 자동화) |
| 파일 | 줄 수(추정) | 핵심 역할 |
|---|---|---|
| cli.py | ~1,500 | 전체 CLI의 두뇌. 설치·설정·진단 모든 것 |
| core.py | ~30 | 의외로 작음. doctor 모듈에 위임만 함 |
| doctor.py | ~100 | 15+ 채널 상태를 Rich 포맷으로 보고 |
| config.py | ~200 | YAML 설정 읽기/쓰기, 보안(600 퍼미션) |
| base.py | ~30 | ABC 패턴의 Channel 클래스 정의 |
argparse로 10개 이상의 서브커맨드를 구조화하는 방법을 배울 수 있습니다. setup, install, configure, doctor, uninstall, check-update 등 풍부한 서브커맨드 패턴은 CLI 도구 개발의 모범 사례입니다.
추상 베이스 클래스(ABC)로 채널 인터페이스를 정의하고, 구체 구현을 자유롭게 추가하는 플러그인 시스템을 배울 수 있습니다. 새 플랫폼을 지원하려면 Channel을 상속하고 can_handle()만 구현하면 됩니다.
시스템 헬스체크를 구조화하는 방법입니다. brew doctor, flutter doctor와 같은 패턴으로, 모든 채널의 상태를 한 번에 점검하고 티어별로 그룹핑하여 Rich 컬러 보고서를 생성합니다.
API 키 없이 쿠키로 플랫폼에 접근하는 방법을 배울 수 있습니다. browser_cookie3로 Chrome/Firefox 쿠키를 프로그래밍 방식으로 추출하고, 파일 퍼미션 600으로 안전하게 저장합니다.
샤오홍슈, 더우인, LinkedIn 같은 플랫폼을 MCP 서비스로 연동하는 방법을 배울 수 있습니다. AI 에이전트-도구 통신 표준인 MCP가 실제 어떻게 쓰이는지 구체적 사례를 통해 이해할 수 있습니다.
"프레임워크를 만들지 않는" 접근법 — 업스트림 도구가 업데이트되면 자동으로 최신 기능을 사용할 수 있고, 디버깅 시 Agent-Reach 코드 없이 업스트림 문서만 참고하면 됩니다. 벤더 락인이 없는 설계 철학입니다.
| 요구사항 | 최소 | 권장 |
|---|---|---|
| OS | macOS / Linux | macOS (쿠키 추출 최적) |
| Python | 3.10+ | 3.11+ |
| Node.js | 18+ | 20+ (bird CLI용) |
| Docker | — | Docker Desktop (MCP 서비스용) |
| 메모리 | 2GB | 4GB (Whisper 음성변환 시) |
| 디스크 | 500MB | 2GB (yt-dlp 캐시 포함) |
| 네트워크 | 필수 | 프록시 지원 (해외 플랫폼용) |
| 기능 | 필요 사항 | 비용 |
|---|---|---|
| 트위터 접근 | 트위터 계정 + 브라우저 쿠키 | 무료 |
| 레딧 접근 | Reddit 계정 + 쿠키 또는 로그인 | 무료 |
| 샤오홍슈 | Docker + 쿠키 | 무료 |
| MCP 서버 + 브라우저 자동화 | 무료 | |
| 시맨틱 검색 | Exa AI 계정 | 무료 티어 |
# 1. 설치
pip install agent-reach
# 2. 진단 실행
agent-reach doctor
# 3. Tier 0 기능 테스트 (설치 없이 즉시)
curl https://r.jina.ai/https://github.com
목표: CLI 도구의 설치-진단 워크플로우 이해
# channels/hackernews.py
from .base import Channel
class HackerNewsChannel(Channel):
name = "hackernews"
description = "Hacker News 글 읽기"
backends = ["requests"]
tier = 0
def can_handle(self, url: str) -> bool:
return "news.ycombinator.com" in url
def check(self, config=None):
try:
import requests
r = requests.get(
"https://hacker-news.firebaseio.com/v0/topstories.json",
timeout=5
)
return ("ok", f"Top {len(r.json())} stories")
except Exception as e:
return ("error", str(e))
목표: ABC 패턴으로 플러그인 시스템 확장하기
Agent-Reach의 doctor 시스템을 참고하여, 자신의 개발 환경을 진단하는 도구를 만들어봅니다.
checks = [
("Python", "python3 --version"),
("Node.js", "node --version"),
("Docker", "docker --version"),
("Git", "git --version"),
("gh CLI", "gh --version"),
]
# 각 커맨드 실행 → ok/warn/error 분류 → Rich 테이블로 출력
목표: 시스템 명령 실행·Rich 포맷팅·구조화된 보고서 생성
Agent-Reach의 MCP 통합을 참고하여, 자신만의 MCP 서비스를 만들어봅니다. mcp[cli]를 설치하고, 간단한 MCP 서버(예: RSS 피드 읽기)를 작성한 뒤 Claude Code에서 연결 테스트를 합니다.
목표: MCP 프로토콜 이해, AI 에이전트-도구 통합
browser_cookie3를 사용하여 브라우저 쿠키를 자동 추출하고 안전하게 저장하는 시스템을 구축합니다. 쿠키 갱신·만료 감지 로직과 파일 퍼미션 600 보안 저장까지 구현합니다.
목표: 브라우저 자동화, 보안 설계, 인증 관리
| 주차 | 주제 | 핵심 학습 내용 |
|---|---|---|
| 1주차 | Python CLI 마스터 | argparse 심화 / Rich 라이브러리 / Click vs argparse vs Typer 비교 / PyYAML 설정 관리 |
| 2주차 | 플러거블 아키텍처 | ABC·Protocol·인터페이스 / 팩토리+레지스트리 패턴 / 의존성 주입 기초 |
| 3주차 | 웹 스크래핑 & API | Jina Reader 동작 원리 / yt-dlp 심화 / 쿠키·세션 인증 / 프록시 라우팅 |
| 4주차 | MCP & AI 에이전트 통합 | MCP 프로토콜 스펙 / Claude Code + MCP 연동 / Docker MCP 서비스 배포 / CLAUDE.md 작성법 |
| 키워드 | 설명 |
|---|---|
| 글루 레이어 | 여러 도구를 연결만 해주고 자체 로직은 최소화하는 아키텍처 패턴. Agent-Reach의 핵심 철학 |
| MCP | Model Context Protocol. Anthropic 주도 AI 에이전트-도구 통신 프로토콜. JSON-RPC 기반 |
| Channel | Agent-Reach에서 하나의 플랫폼(Twitter, YouTube 등)을 추상화한 단위. ABC로 정의 |
| Tier | 채널의 설정 복잡도 등급. 0(제로 설정) → 1(API 키/쿠키) → 2(프록시/고급 설정) |
| bird CLI | 트위터/X 접근용 커맨드라인 도구. 현재는 레거시(3순위) 백엔드 — 기본은 twitter-cli, 그 다음 OpenCLI, bird CLI 순 |
| Jina Reader | URL 앞에 r.jina.ai/를 붙이면 해당 웹페이지를 마크다운으로 변환해주는 무료 서비스 |
| yt-dlp | youtube-dl의 포크. 1,800+ 플랫폼에서 동영상/자막을 다운로드하는 도구 (⭐ 148k) |
| feedparser | RSS/Atom 피드를 파싱하는 서드파티 Python 라이브러리 (pip install feedparser) |
| Exa AI | 시맨틱(의미 기반) 웹 검색 엔진. 키워드가 아니라 의미로 검색 |
| Camoufox | 안티봇 감지를 우회하는 헤드리스 브라우저. WeChat 접근에 사용 |
| browser_cookie3 | Python에서 Chrome/Firefox 쿠키를 프로그래밍 방식으로 추출하는 라이브러리 |
| Rich | Python 터미널 출력을 아름답게 포맷팅하는 라이브러리. 테이블·컬러·프로그레스바 |
| loguru | Python logging 모듈 대체 간편 로깅 라이브러리. from loguru import logger 한 줄로 시작 |
| doctor 패턴 | 시스템 전체 상태를 진단·보고하는 CLI 명령어 패턴. brew doctor, flutter doctor와 같은 패턴 |
| Hatchling | 현대적인 Python 빌드 시스템. pyproject.toml 기반 |
| Ruff | Rust로 작성된 초고속 Python 린터+포맷터. Black + isort + Flake8을 하나로 |