TRENDSHIFT 일간 #7 · 2026-06-09

boss-agent-cli 딥다이브
— AI 에이전트가 대신 구직하는 JSON-네이티브 CLI

boss-agent-cli는 중국 최대 채용 플랫폼 BOSS 直聘(즈핀)AI 에이전트가 명령어로 조작하도록 만든 파이썬 CLI입니다. 핵심 철학은 단 하나 — 모든 출력은 사람이 읽는 표가 아니라 기계가 파싱하는 JSON입니다. 직무 검색·복지 필터·개인화 추천·자동 인사·구직 파이프라인·증분 모니터링·데이터 내보내기를 전부 boss <명령> 한 줄로 처리하고, 결과를 정해진 JSON "봉투(envelope)"에 담아 돌려줍니다. 에이전트는 boss schema 한 번 호출로 전체 능력을 학습하고, 에러가 나면 응답에 박힌 recovery_action대로 스스로 복구합니다. (can4hou6joeng4/boss-agent-cli · Python 3.10+ · MIT · v1.11.0 · ~17,600줄)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

한 문장으로 — 이게 뭐 하는 물건인가

"사람용 채용 사이트를 AI 에이전트가 API처럼 쓸 수 있게 바꿔 주는 번역기"입니다. BOSS 直聘은 본래 사람이 브라우저로 클릭하며 쓰는 사이트입니다. boss-agent-cli는 그 사이트의 내부 API를 역공학(reverse engineering)해서, boss search "Golang" --city 광저우 같은 명령으로 검색하고, 결과를 사람이 아니라 LLM이 읽기 좋은 구조화 JSON으로 뱉습니다.

이름 그대로 boss(BOSS 즈핀) + agent(AI 에이전트) + cli(명령줄 도구)입니다. Claude Code·Cursor·Gemini CLI 같은 에이전트 호스트가 Bash로 이 도구를 호출하면, "구직 비서"가 한 명 생기는 셈입니다. 라이선스는 MIT, 2026년에 등장해 TrendShift 일간 7위에 올랐습니다. 코드는 약 17,600줄의 파이썬으로, README가 중국어·영어 모두 제공됩니다.

핵심 비유

"말로 하는 채용 사이트를, 기계가 알아듣는 자판기로 바꾼 어댑터"

보통 채용 사이트는 사람을 향해 디자인됩니다. 버튼·팝업·무한스크롤 — 눈과 손이 있어야 쓸 수 있죠. AI 에이전트에게 이건 미로입니다.

boss-agent-cli는 그 미로 앞에 자판기 패널을 붙입니다. 에이전트가 "B3 버튼(=검색)"을 누르면 항상 같은 모양의 캔(=JSON 봉투)이 떨어집니다. 캔에는 성공 여부(ok)·데이터·다음에 누를 버튼 힌트·고장 났을 때 복구법이 규격대로 들어 있습니다. 그래서 에이전트는 미로를 헤맬 필요 없이, 패널만 보고 정확히 조작합니다.

용어
AI 에이전트 / 에이전트 호스트
사람의 자연어 요청을 받아 스스로 도구(명령·API)를 골라 실행하는 LLM 시스템. Claude Code·Cursor·Gemini CLI 등이 "호스트"이고, 그 안에서 Bash로 boss 명령을 호출하면 boss-agent-cli가 "도구"가 된다. 이 레포의 모든 설계가 "사람이 아니라 에이전트가 쓴다"는 전제 위에 서 있다.
용어
BOSS 直聘 (BOSS 즈핀, Zhipin)
중국 최대 규모의 모바일 채용 플랫폼. 구직자와 채용 담당자가 채팅으로 직접 대화하는 방식이 특징이다(그래서 이름이 "직접 채용"). 이 도구는 즈핀의 비공식 내부 API(wapi)를 호출해 검색·인사·채팅·추천을 자동화한다. 智联(Zhilian)·前程无忧(Qiancheng) 같은 다른 중국 플랫폼도 일부 지원한다.

2왜 주목받는가

트렌딩 이유 · 경쟁 제품 대비 장점

2026년의 가장 뜨거운 흐름은 "에이전트가 쓰는 도구(agent-first tooling)"입니다. 사람이 쓰던 CLI를 그대로 에이전트에게 던지면, 색깔 표·진행바·이모지가 섞여 LLM이 파싱하다 헷갈립니다. boss-agent-cli는 이 문제를 정면으로 푼 교과서적 사례라서 주목받습니다. 채용 자동화라는 실용성보다, "에이전트 친화적 CLI를 어떻게 설계하는가"의 모범답안이라는 점이 본질입니다.

경쟁 방식과의 비교

항목브라우저 자동화(셀레니움류)일반 사람용 CLIboss-agent-cli
출력 형식HTML 스크래핑(불안정)색깔 표·진행바(파싱 난해)규격 JSON 봉투(파싱 1줄)
능력 자기설명✕ (--help 텍스트)○ (boss schema 자기서술)
에러 처리예외 던지고 멈춤사람이 읽는 메시지recovery_action으로 자가복구
로그인매번 수동 클릭쿠키→CDP→QR 3단계 자동 降级
봇 탐지 회피쉽게 탐지됨patchright 반검출 + 인간형 지연
설치/실행드라이버 관리 번거로움다양uv tool install / Skill 1줄

핵심 차별점 셋

차별점 ①

"표가 아니라 JSON 봉투" — 출력 계약(output contract)

모든 명령이 똑같은 모양의 JSON 봉투를 stdout에 찍습니다. ok(성공 여부)·schema_version·command·data·pagination·error·hints.next_actions. 로그·진행상황은 전부 stderr로 분리합니다. 덕분에 에이전트는 stdout을 통째로 JSON.parse 한 줄로 읽고, ok 필드만 보면 성패를 압니다. 사람용 도구와의 결정적 차이입니다.

차별점 ②

boss schema — 도구가 스스로를 설명한다

에이전트가 명령표를 외울 필요가 없습니다. 가장 먼저 boss schema를 호출하면 현재 사용 가능한 명령·인자·플랫폼·에러코드가 JSON으로 쏟아집니다. docs/agent-quickstart.md도 "명령을 하드코딩하지 말고 schema를 먼저 부르라"고 못 박습니다. 도구가 버전업되어 기능이 늘어도 에이전트 쪽 코드를 고칠 필요가 없는, 자기서술 프로토콜입니다.

차별점 ③

"에러에 복구법을 동봉한다" — 자가치유

실패 응답(ok=false)에는 error.code·error.recoverable·error.recovery_action이 함께 들어옵니다. AUTH_EXPIRED면 "boss login 실행", RATE_LIMITED면 "대기 후 재시도" 식으로 다음 행동을 기계가 읽도록 명시합니다. 에이전트는 에러 메시지를 해석하느라 추측할 필요 없이, 동봉된 지시를 그대로 따르면 됩니다.

한 줄 요약

일반 CLI가 "사람에게 친절한 도구"라면, boss-agent-cli는 "기계에게 친절한 도구"다. 색깔·표·이모지를 빼고 그 자리에 규격·자기서술·복구지시를 채워 넣은 게 핵심이다. 채용은 소재일 뿐, 진짜 배울 건 "에이전트용 CLI 설계법"이다.

3기술 스택 전체 지도

언어 · 의존성 · 배포를 각각 뜯어본다

boss-agent-cli는 화려한 ML 스택이 아니라, 잘 설계된 단일 파이썬 CLI입니다. 약 17,600줄의 소스가 commands/ · api/ · auth/ · platforms/ · cache/ · bridge/로 깔끔히 나뉩니다. 무거운 의존성 없이도 "반검출 로그인 + 역공학 API 호출 + 암호화 캐시 + JSON 출력"이라는 풀스택을 파이썬만으로 구현한 점이 인상적입니다.

언어 / 빌드 / 배포

항목내용
언어Python 3.10+ (3.10~3.13 지원), 소스의 97.6%가 파이썬
CLI 프레임워크click — 커스텀 BossCliGroup으로 사용법 에러까지 JSON 봉투로 변환
빌드 백엔드hatchling (src-layout), 의존성 관리 uv + uv.lock
엔트리포인트boss = "boss_agent_cli.main:cli", boss-mcp = "...mcp_server:run" (콘솔 2개)
배포PyPI(uv tool install·pipx·pip), npx skills add Skill 설치, Dockerfile 동봉

런타임 의존성 (핵심 8개)

패키지역할
clickCLI 명령·옵션 정의 (사람용 typer 대신 제어 폭이 넓은 click 선택)
httpxBOSS 즈핀 wapi 엔드포인트 호출 (동기/비동기 HTTP)
patchrightPlaywright 반검출 fork — 자동화 탐지를 이진(binary) 수준에서 패치
browser-cookie3로컬 브라우저(Chrome·Firefox·Edge 등 10여 종)에서 zhipin.com 쿠키 추출
cryptographyFernet 대칭암호화 + PBKDF2로 로그인 토큰을 머신 바인딩 암호화
rich(stderr 쪽) 진행 표시·로그 렌더링
pyyamlboss.yaml·recruiter.yaml로 API 엔드포인트를 코드 밖 설정으로 관리
websocketsbridge/ 데몬 — 브라우저 확장과 WebSocket으로 통신하는 통로
설계 포인트
엔드포인트를 코드가 아니라 YAML로 둔다

BOSS 즈핀의 내부 API 경로는 api/boss.yaml·api/recruiter.yaml에 분리돼 있고, endpoints_loader.py가 이를 읽어 들인다. 사이트가 API 경로를 바꿔도 파이썬 코드가 아니라 YAML만 고치면 된다. 자주 깨지는 역공학 대상의 변화를 데이터로 흡수하는 영리한 분리다.

용어
patchright (패치라이트)
Playwright(브라우저 자동화 라이브러리)의 반검출(anti-detection) fork. 사이트들은 "지금 자동화 봇이 접속했나"를 여러 단서(navigator.webdriver 플래그, CDP 흔적 등)로 탐지하는데, patchright는 그 단서를 binary 수준에서 지운다. boss-agent-cli는 QR 로그인·토큰 갱신에 진짜 사람 브라우저처럼 보이는 이 도구를 쓴다.
용어
wapi · 역공학(Reverse Engineering)
사이트가 내부적으로 쓰는 비공개 JSON API. 브라우저 개발자도구로 네트워크 요청을 관찰해 그 규격을 알아내는 작업이 "역공학"이다. 공식 문서가 없어 언제든 바뀔 수 있으므로, 이 레포는 엔드포인트를 YAML로 빼고, 응답 모델을 api/models.py로 추상화해 변화에 대비한다.
용어
CDP (Chrome DevTools Protocol)
크롬을 외부 프로그램이 원격 조종하게 해 주는 디버깅 프로토콜. --remote-debugging-port=9222로 크롬을 띄우면, boss-agent-cli가 그 실제 사용자 브라우저를 그대로 재사용해 로그인할 수 있다. 새 창을 띄워 QR을 다시 찍는 것보다 "진짜 사람 지문"이 유지돼 봇 탐지를 덜 받는다.

4아키텍처 심화 분석

시스템 구조도 + 핵심 설계 패턴

boss-agent-cli의 진짜 배울 점은 "계층 분리"입니다. 명령(commands/)은 비즈니스 로직만, 인증(auth/)은 로그인·토큰만, API(api/)는 HTTP·역공학만, 출력(output.py)은 JSON 봉투만 담당합니다. 한 번의 boss searchCLI → 인증 → API 클라이언트 → 캐시 → JSON 출력이라는 명확한 파이프라인을 통과합니다.

전체 처리 흐름도

$ boss search "Golang" --city 광저우 --welfare "双休" │ ▼ ┌──────────────────────┐ 사용법 에러도 JSON으로 (BossCliGroup) │ main.py (Click 그룹) │ commands/register.py 가 명령 등록 └──────────┬───────────┘ ▼ ┌──────────────────────┐ 1) 로컬 브라우저 쿠키 추출 │ AuthManager │ 2) CDP 재사용 │ (auth/manager.py) │ 3) patchright QR 스캔 ← 3단계 降级 │ Fernet 암호화 토큰 │ 토큰 만료 시 자동 갱신 └──────────┬───────────┘ │ 유효 세션 ▼ ┌──────────────────────┐ throttle.py: 가우시안 지연 + 지수 백오프 │ BossClient (httpx) │ endpoints_loader → boss.yaml 경로 │ → 즈핀 wapi 호출 │ models.py 로 응답 구조화 └──────────┬───────────┘ │ 원시 응답 ▼ ┌──────────────────────┐ 검색 100건 상한 + 24h TTL │ CacheStore │ SQLite WAL 모드 │ (cache/store.py) │ show <#> 가 이 캐시를 참조 └──────────┬───────────┘ ▼ ┌──────────────────────┐ compliance.py 가 위험 동작 차단 │ output.py → JSON 봉투 │ { ok, command, data, │ → stdout │ pagination, error, hints } │ (로그는 stderr 로) │ exit 0 = ok / exit 1 = 실패 └──────────────────────┘

설계 패턴 ① — 출력 봉투(Envelope) 단일화

모든 명령의 마지막은 output.pyemit_* 함수를 거칩니다. 성공이든 실패든, 검색이든 채팅이든 똑같은 7개 필드 봉투로 포장됩니다. 심지어 사용자가 명령을 잘못 입력한 Click 사용법 에러조차 BossCliGroup이 가로채 JSON으로 변환합니다. "이 도구가 내뱉는 stdout은 항상 유효한 JSON"이라는 불변식을 코드 전체가 지킵니다.

{
  "ok": true,
  "schema_version": "1.0",
  "command": "search",
  "data": [...],
  "pagination": {"page": 1, "has_more": true, "total": 15},
  "error": null,
  "hints": {"next_actions": ["boss detail <security_id>"]}
}
비유

택배 회사가 내용물이 무엇이든 똑같은 규격 상자에 담아 보내는 것과 같다. 받는 쪽(에이전트)은 상자 여는 법을 한 번만 익히면 된다. 안에 책이 왔든 옷이 왔든, 송장(ok·error·hints) 읽는 법은 동일하다.

설계 패턴 ② — 3단계 로그인 降级(폴백)

로그인은 "덜 귀찮은 것"부터 시도하고 실패하면 한 단계씩 내려갑니다. ① 로컬 브라우저에서 즈핀 쿠키를 그대로 추출(이미 로그인돼 있으면 무탐지·무클릭) → ② 디버깅 포트가 열린 크롬을 재사용(CDP) → ③ 최후의 보루로 patchright 크롬을 띄워 QR 스캔. 각 단계는 "사람 지문을 얼마나 유지하느냐"로 정렬돼 있어, 봇 탐지 위험이 가장 낮은 길을 우선합니다.

단계방법장점
1순위browser-cookie3 쿠키 추출클릭·스캔 없음, 기존 로그인 재활용
2순위CDP 브라우저 재사용실제 사용자 지문 유지
3순위patchright QR 스캔아무 사전조건 없이도 동작(최후수단)

설계 패턴 ③ — 인간 흉내 반(反)크롤링

봇처럼 보이지 않으려고 throttle.py가 요청 사이에 가우시안 분포 난수 지연(예: 1.5~3.0초)을 넣고, 실패하면 지수 백오프로 점점 더 길게 기다리며 재시도합니다. 배치 인사(batch-greet)는 상한 10건으로 막아 두고, stoken 같은 보안 토큰은 브라우저 환경에서 생성합니다. "빠르게 많이"가 아니라 "사람처럼 천천히"가 설계 원칙입니다.

설계 패턴 ④ — 컴플라이언스 게이트

이 레포가 가장 신경 쓰는 부분입니다. compliance.py가 위험한 동작(대량 자동 투척, 채용담당자 측 개인정보 쓰기 등)을 COMPLIANCE_BLOCKED·ACCOUNT_RISK 에러로 막습니다. docs/capability-matrix.md는 "기본은 저위험 모드 — 읽기 우선, 사용자 능동 트리거, 대량/자동 미접촉"이라고 명시하고, 로그인 폴백을 "풍문 회피 수단으로 쓰지 말라"고 경고합니다.

함정 주의
이건 "역공학 + 자동화" 도구다 — 계정 리스크가 실재한다

BOSS 즈핀의 비공식 API를 호출하므로, 과도하게 쓰면 계정 제한·차단 위험이 있다. 레포 스스로도 저위험 모드를 기본값으로 두고, 투척·인사·연락처 교환 같은 "쓰기" 동작은 가급적 공식 사이트에서 수동으로 하라고 권한다. 학습 목적이라면 검색·상세조회 같은 읽기 명령 위주로 만져 보는 게 안전하다.

5디렉토리 구조 해부

주요 폴더/파일의 역할
boss-agent-cli/ ├── pyproject.toml # hatchling 빌드 · 의존성 · boss/boss-mcp 엔트리포인트 ★ ├── uv.lock # 잠긴 의존성 트리(재현성) ├── Dockerfile # 컨테이너 실행 지원 ├── README.md / README.en.md# 중국어 / 영어 문서 ├── docs/ # agent-quickstart · agent-hosts · capability-matrix 등 에이전트 가이드 ★ ├── extension/ # 크롬 확장(background.js·manifest.json·popup.html) ├── mcp-server/ # 얇은 독립 MCP 서버 진입점(server.py) ├── tests/ # 테스트 스위트(CI에서 실행) └── src/boss_agent_cli/ ├── main.py # Click 그룹 BossCliGroup — 모든 명령의 뿌리 ├── mcp_server.py # 인패키지 MCP 서버 (1,234줄 ★최대 모듈) ├── output.py # JSON 봉투 생성 · emit_error/Logger ├── config.py / hooks.py# 설정 로딩 · 훅 버스 ├── compliance.py # 위험 동작 차단 게이트 ★ ├── commands/ # ▼ 명령 하나당 파일 하나 (search·greet·chat·watch…) │ ├── schema.py # 능력 자기서술 (1,102줄 ★에이전트 첫 호출) │ ├── register.py # 구직자/채용자 명령을 Click에 등록 │ └── recruiter/ # 채용담당자 측 명령(jobs·candidates·chat…) ├── api/ # ▼ 역공학 HTTP 계층 │ ├── client.py browser_client.py # httpx · 브라우저 경유 호출 │ ├── boss.yaml recruiter.yaml # 엔드포인트를 코드 밖 데이터로 ★ │ ├── throttle.py # 가우시안 지연 + 지수 백오프 │ └── models.py zhilian_client.py # 응답 모델 · 智联 플랫폼 ├── auth/ # ▼ 인증 계층 │ ├── manager.py # 3단계 로그인 오케스트레이터 │ ├── cookie_extract.py browser.py # 쿠키 추출 · patchright 브라우저 │ ├── qr_login.py token_store.py # QR 스캔 · 토큰 암호화 저장 │ └── health.py # 로그인 품질 진단(boss doctor) ├── platforms/ # ▼ 멀티플랫폼 추상화 │ ├── base.py # 공통 인터페이스 │ └── zhipin.py zhilian.py qiancheng.py # 즈핀·智联·前程无忧 ├── cache/store.py # SQLite WAL 캐시(검색 100건·24h TTL) ├── bridge/ # WebSocket 데몬 — 크롬 확장과 통신 ├── ai/ # AI 보조(채팅요약·매칭 점수) service·prompts·config └── resume/ # 이력서 모델·템플릿·내보내기

구조에서 읽어야 할 신호

두 가지가 핵심 인사이트입니다. 첫째, "명령 하나 = 파일 하나"(commands/)라는 규칙이 일관됩니다. 새 명령을 추가할 때 다른 파일을 건드릴 필요가 거의 없습니다. 둘째, 자주 바뀌는 것(엔드포인트·플랫폼)을 데이터·플러그인으로 분리했습니다. api/*.yaml에 경로를, platforms/에 사이트별 차이를 격리해, 즈핀이 바뀌거나 새 채용 사이트를 추가해도 충격이 한 폴더에 갇힙니다.

설계 포인트
MCP 서버를 "두 방식"으로 동봉

같은 기능을 ① 인패키지 mcp_server.py(1,234줄, 풀기능)와 ② 얇은 독립 mcp-server/server.py(~1KB) 두 가지로 제공한다. 에이전트 호스트가 MCP를 선호하면 boss-mcp로, Bash를 선호하면 boss CLI로 — 같은 능력을 두 인터페이스로 열어 둔 셈이다. 에이전트 생태계의 다양한 연결 방식을 모두 수용하려는 의도다.

6학습 포인트 (기술별)

각 기술에서 무엇을 배울 수 있나 + 실습 아이디어

① 에이전트 친화적 출력 계약 설계

output.py의 JSON 봉투는 "도구를 LLM이 쓰게 만드는 법"의 핵심입니다. stdout(데이터)과 stderr(로그)의 분리, ok/error.recovery_action/hints.next_actions 필드 설계를 배우세요. 실습: 아무 사람용 CLI 하나를 골라 출력을 똑같은 7필드 JSON 봉투로 감싸는 래퍼를 작성해 보기.

② 자기서술 프로토콜 (schema 명령)

commands/schema.py는 도구가 자기 능력을 JSON으로 설명하는 패턴입니다. 실습: 내 CLI에 schema 서브커맨드를 붙여, 사용 가능한 명령·인자·에러코드를 기계가 읽는 형태로 출력해 보기. MCP의 tool 정의와 어떻게 닮았는지 비교하기.

③ 역공학 API + 엔드포인트 외부화

api/boss.yaml처럼 잘 깨지는 비공식 API 경로를 코드에서 빼 데이터로 두는 설계를 배웁니다. 실습: 브라우저 개발자도구로 아무 공개 사이트의 JSON 요청을 관찰하고, 경로를 YAML로 빼서 httpx로 호출하는 미니 클라이언트 작성하기(공개·허용된 대상으로만).

④ 다단계 인증 폴백 + 토큰 암호화

auth/manager.py의 "쿠키→CDP→QR" 폴백과, token_store.py의 Fernet+PBKDF2 머신바인딩 암호화를 보세요. 실습: cryptography 라이브러리로 비밀 토큰을 머신 고유 키로 암호화해 파일에 저장·복호화하는 모듈 만들기.

⑤ 반크롤링 매너 (지연·백오프·상한)

throttle.py의 가우시안 지연 + 지수 백오프 + 배치 상한은 "남의 서버를 예의 있게 쓰는 법"입니다. 실습: asyncio로 요청 사이에 정규분포 지연을 넣고, 429(rate limit)를 만나면 지수적으로 대기 시간을 늘리는 재시도 데코레이터 작성하기.

⑥ Click 커스터마이징 (사용법 에러까지 JSON)

main.pyBossCliGroup(click.Group)은 Click의 표준 에러까지 가로채 일관된 봉투로 바꿉니다. 실습: click.Group을 상속해 main()standalone_mode=False로 호출하고, 예외를 잡아 JSON으로 변환하는 그룹 만들기.

7시스템 요구사항

설치·실행에 필요한 것
항목요구사항
Python3.10 이상 (3.10 / 3.11 / 3.12 / 3.13)
uv권장 — uv tool install boss-agent-cli로 초 단위 격리 설치
브라우저 내장patchright install chromium — QR 로그인용 Chromium 커널
OSLinux · macOS · Windows (브라우저 쿠키 추출은 OS별 경로 자동 처리)
네트워크BOSS 즈핀(zhipin.com) 접근 필요 — 중국 사이트라 지역 제약 있을 수 있음
데이터 디렉토리~/.boss-agent/ — config.json · 암호화 세션 · SQLite 캐시(쓰기 권한 필요)

설치 & 첫 1분 (docs/agent-quickstart.md 권장 순서)

# 설치
uv tool install boss-agent-cli
patchright install chromium   # QR 로그인 쓸 때만

# 첫 1분 — README를 다 읽지 않아도 됨
boss doctor    # 환경·의존성·로그인·네트워크 자가진단
boss schema    # 능력 자기서술 (에이전트가 가장 먼저 호출)
boss status    # 로그인 상태 확인
boss login     # status가 AUTH_REQUIRED일 때만

주요 명령어 한눈에

명령하는 일
boss schema전체 능력 자기서술 출력 (에이전트 첫 호출)
boss doctor환경·의존성·로그인·네트워크 진단
boss search "Golang" --welfare "双休"복지 필터를 건 직무 검색
boss detail <security_id>직무 상세 조회
boss recommend개인화 추천
boss greet / apply <sid> <jid>채용담당자에게 인사 / 투척(멱등)
boss pipeline / digest구직 진행 파이프라인 / 매일 요약
boss watch add/run검색 조건 저장 + 신규 직무 증분 모니터링
boss export "Golang" -o jobs.csv검색 결과 CSV/JSON 내보내기

8직접 해볼 수 있는 실습 과제

난이도별 — 손으로 만져봐야 는다
난이도 ★☆☆ 입문

출력 봉투 구조 관찰하기

도구를 설치하지 않고도, README의 출력 협약 예시 JSON을 보고 ok·data·pagination·error·hints.next_actions 각 필드가 왜 필요한지 정리한다. 사람용 CLI의 --help 텍스트와 무엇이 다른지 한 단락으로 비교하기.

난이도 ★☆☆ 입문

내 CLI에 schema 명령 붙이기

아무 파이썬 CLI(예: 할 일 관리기)를 만들고, schema 서브커맨드가 "명령·인자·에러코드"를 JSON으로 출력하게 한다. 그 JSON만 보고 다른 사람이 도구 전체를 쓸 수 있는지 친구에게 시켜 보기.

난이도 ★★☆ 중급

JSON 봉투 래퍼 만들기

output.py를 본떠, 어떤 함수의 반환값이든 {ok, command, data, error, hints} 봉투로 감싸고 성공 시 exit 0 / 실패 시 exit 1을 내는 데코레이터를 작성한다. 예외가 나면 error.recovery_action을 채워 넣게 하기.

난이도 ★★☆ 중급

예의 바른 수집기 작성

공개 API 하나를 골라(허용된 대상), 요청 사이에 가우시안 지연을 넣고 429를 만나면 지수 백오프로 재시도하는 클라이언트를 throttle.py를 참고해 구현한다. 요청 간격 로그를 찍어 분포를 그래프로 확인하기.

난이도 ★★★ 고급

토큰 암호화 저장소 구현

auth/token_store.py처럼, cryptography의 Fernet + PBKDF2로 비밀 토큰을 "이 머신에서만" 복호화되도록 암호화해 저장·로딩하는 모듈을 만든다. 다른 머신에 파일을 복사하면 복호화가 실패하는지 검증하기.

9관련 기술 심화 학습 로드맵

주차별 — 이 레포를 발판으로 더 멀리
주차학습 주제실천 목표
1주차에이전트 도구 설계 원리"사람용 vs 에이전트용 도구"의 차이를 출력·에러·자기서술 관점에서 정리
2주차Click 고급 CLI커스텀 Group·콜백·컨텍스트로 에러를 JSON으로 변환하는 CLI 완성
3주차httpx + 비공식 API개발자도구로 공개 사이트 요청 관찰 → YAML 외부화 클라이언트 작성
4주차브라우저 자동화 / patchright·PlaywrightPlaywright로 로그인 자동화, 반검출 개념과 한계 이해
5주차암호화 기초 (cryptography)Fernet·PBKDF2로 머신바인딩 비밀 저장소 구현
6주차SQLite WAL 캐싱TTL 캐시를 SQLite로 구현, WAL 모드의 동시성 이점 실험
7주차MCP 서버 만들기같은 기능을 CLI와 MCP 두 방식으로 노출하는 도구 설계
8주차윤리·컴플라이언스자동화의 ToS·계정 리스크·rate limit 매너를 가이드라인으로 문서화

10핵심 키워드 사전

이 프로젝트에 등장하는 주요 용어
용어
출력 봉투 (Output Envelope / JSON Envelope)
모든 명령이 똑같은 필드 구조(ok·schema_version·command·data·pagination·error·hints)로 결과를 감싸는 규약. 에이전트가 출력 형식을 한 번만 익히면 모든 명령을 다룰 수 있게 한다.
용어
자기서술 프로토콜 (Self-describing / schema)
도구가 boss schema로 자기 능력(명령·인자·에러코드)을 JSON으로 설명하는 것. 에이전트가 명령표를 하드코딩하지 않아도 되고, 도구가 업데이트돼도 자동으로 새 능력을 학습한다.
용어
recovery_action (복구 동작)
실패 응답에 동봉되는 "다음에 무엇을 하라"는 기계 판독용 지시. 예: AUTH_EXPIRED → boss login. 에이전트가 에러 메시지를 추측 해석하지 않고 그대로 따라 복구하게 한다.
용어
stdout / stderr 분리
데이터(JSON 봉투)는 stdout으로만, 로그·진행상황은 stderr로만 보내는 규칙. 에이전트가 stdout을 통째로 파싱해도 로그가 섞여 깨지지 않게 하는 핵심 장치.
용어
멱등성 (Idempotency)
boss apply가 같은 직무에 두 번 투척하지 않도록 "이미 한 동작은 다시 해도 결과가 같게" 만드는 성질. 에이전트가 실수로 명령을 반복해도 안전하게 한다.
용어
지수 백오프 (Exponential Backoff)
요청이 실패할 때 재시도 간격을 1초→2초→4초처럼 지수적으로 늘리는 기법. 서버 부하·rate limit를 악화시키지 않으면서 회복을 기다리는 표준 패턴.
용어
Fernet · PBKDF2
Fernet은 cryptography 라이브러리의 대칭암호화 방식, PBKDF2는 비밀번호/머신 식별자에서 암호키를 파생하는 함수. 둘을 합쳐 로그인 토큰을 "이 머신에서만" 복호화되게 묶는다(머신 바인딩).
용어
SQLite WAL 모드
SQLite의 Write-Ahead Logging 모드. 쓰기와 읽기가 서로를 막지 않아 동시성이 좋다. boss-agent-cli는 검색 결과를 100건·24시간 TTL로 이 캐시에 저장해 show <#> 같은 재조회를 빠르게 한다.
용어
MCP (Model Context Protocol)
에이전트(주로 Claude 계열)가 외부 도구·데이터에 연결하는 표준 프로토콜. 이 레포는 boss-mcp 콘솔 스크립트와 mcp_server.py로 CLI와 동일한 능력을 MCP 방식으로도 노출한다.

11참고 링크

더 깊이 파고들 때
링크설명
GitHub 저장소소스 전체. src/boss_agent_cli/·docs/가 핵심
capability-matrix.md에이전트용 능력 대조표 — 저위험 모드·CLI/MCP/Skill 대응·안전경계
TrendShift 페이지트렌딩 추이(일간 7위, 2026-06-09)
patchrightPlaywright 반검출 fork — 로그인 무탐지의 핵심
Clickboss-agent-cli CLI를 떠받치는 파이썬 CLI 프레임워크
httpx즈핀 wapi 호출에 쓰는 HTTP 클라이언트
cryptographyFernet·PBKDF2 토큰 암호화의 기반 라이브러리
Model Context Protocolboss-mcp가 따르는 에이전트 연결 표준
uvuv tool install 설치·격리 실행의 기반 도구