6.1 KiB
gimme-job
로컬 구인공고 수집기(macOS). 여러 채용 사이트를 순회하며 채용 공고를 수집·정규화해 SQLite에 저장하고, 새 공고를 Telegram(또는 KakaoTalk/로컬 Markdown)으로 알려준다.
AI-assisted learning, non-AI runtime 크롤링 실행(runtime)은 순수 Python + Playwright만 사용한다. AI(Claude Code, Ollama)는 신규 사이트 학습과 깨진 어댑터 복구, 그리고 수집 결과 요약에만 사용된다.
기능
- 커스텀 어댑터 또는
sites/*.yaml매니페스트만으로 사이트 지원 - Chrome 영속 프로필(
JobAgent) 기반 세션 유지(로그인 불필요 반복) - 카드 수집 → 정규화 → 후처리 필터 → fingerprint 중복 제거 → DB 저장
- 이미 수집된 페이지 연속 2회 감지 시 조기 종료(불필요한 페이지네이션 방지)
- Ollama(
qwen3.5:9b)를 통한 일일 요약 - Telegram 알림 + 실패 시 로컬 Markdown 폴백
요구 사항
- Python >= 3.12
- uv (권장) —
pip사용 시pyproject.toml의 의존성 설치 - Playwright 브라우저:
chromium - (선택) Ollama — 요약 기능용
- (선택) Claude Code CLI —
learn/repair명령용 - (선택) Telegram 봇 토큰 — 알림용
설치
uv sync # 의존성 설치
uv run playwright install chromium # Chromium 설치
cp .env.example .env # 토큰 설정 (알림/LLM)
uv run gimme-job init # 디렉터리·DB 초기화 및 사전 점검
.env 주요 항목:
| 변수 | 설명 |
|---|---|
TELEGRAM_BOT_TOKEN |
Telegram 봇 토큰 |
TELEGRAM_CHAT_ID |
수신 chat ID (쉼표로 여러 개) |
KAKAO_* |
KakaoTalk self-memo 설정 (선택) |
OLLAMA_BASE_URL |
Ollama 주소 (기본 http://127.0.0.1:11434) |
GIMME_JOB_DB_PATH |
DB 경로 (기본 gimme_job.db) |
LOG_LEVEL |
로그 레벨 |
최초 로그인
사이트에 따라 로그인이 필요한 경우(LinkedIn, Indeed, Google 등) JobAgent 프로필에 한 번 로그인해 두면 이후 실행에 재사용된다.
uv run gimme-job login
브라우저가 열리면 필요한 사이트에 로그인한 뒤 터미널에서 Enter를 눌러 종료한다.
실행
1회 실행 (전체 사이트)
uv run gimme-job run
특정 사이트만
uv run gimme-job run --site usajobs
테스트 모드 (저장/알림 없이 추출만)
uv run gimme-job run --dry-run
정기 실행 (기본 1시간 간격)
uv run gimme-job auto --hour 2
능동 검색 (proactive)
수집 시스템(고정 사이트 긁기)과 별개로, 검색엔진 쿼리 매트릭스(전 50주 + 준주 + OCONUS)로
공고를 발견하고, 발견된 URL을 열어 ATS/지원 경로를 휴리스틱으로 검증해 원장에 저장한다.
런타임에 AI 호출 없음. 계획은 sites/proactive.yaml에서 관리.
uv run gimme-job proactive run # 1회 실행 (발견+검증+저장+보고)
uv run gimme-job proactive run --mode weekly # 주간 deep scan (ATS 도메인 site: 쿼리)
uv run gimme-job proactive run --dry-run --limit 2 --max-verify 3 # 빠른 테스트
uv run gimme-job proactive auto --at 06:00 # 매일 06:00 자동 (일요일 weekly 포함, Ctrl+C 종료)
uv run gimme-job proactive report # 오늘 보고서 재생성·재알림 (--summary: Ollama 요약)
uv run gimme-job proactive list [--status NEW] # 리드 원장 조회
보고서는 workspace/reports/proactive-YYYY-MM-DD.md에 저장되고 설정된 알림
프로바이더(sites/global.yaml의 notification.provider — Telegram 또는 KakaoTalk)로
전송된다(실패 시 markdown 폴백). 상태: NEW / REOPENED / STILL OPEN /
VERIFY(외부 보드 잔존분·리뷰 대상) / CLOSED / STALE.
알림만 다시 보내기
uv run gimme-job notify --today
조회 / 상태 확인
uv run gimme-job list # 수집된 공고 목록
uv run gimme-job list --site usajobs # 사이트별 필터
uv run gimme-job list --today # 오늘 새 공고만
uv run gimme-job status # 사이트별 활성/복구/실패 현황
신규 사이트 학습 / 깨진 어댑터 복구
# 새 사이트 학습 (Claude Code가 사이트를 분석해 어댑터+매니페스트 생성)
uv run gimme-job learn --site-id <site_id> --url "<검색결과 URL>"
# 깨진 어댑터 복구
uv run gimme-job repair <site_id> # 특정 사이트
uv run gimme-job repair --all # repair_needed 전체
어댑터 스모크 테스트
uv run gimme-job test <site_id>
# 또는
uv run pytest tests/adapters/test_<site_id>.py -v
프로젝트 구조
gimme_job/
cli.py # CLI 진입점
config.py # 전역/사이트 설정 로더
adapters/ # 사이트별 어댑터 (+ base.py, registry.py)
proactive/ # 능동 검색: plan(쿼리 매트릭스), engines(SERP), verifier(ATS 검증), engine(오케스트레이터), report, scheduler, deepscan
models/ # Pydantic(dto/manifest) + SQLAlchemy(db) 모델
runtime/ # orchestrator, browser, extractor, notifier 등
db/ # engine, repo, migrations
prompts/ # learn/repair용 프롬프트
templates/ # 알림 다이제스트 템플릿
sites/
global.yaml # 전역 설정(검색 키워드, 런타임 등)
proactive.yaml # 능동 검색 계획(용어·주·예산·denylist·검증 규칙)
<site_id>.yaml # 사이트별 매니페스트
tests/adapters/ # 어댑터 스모크 테스트
tests/proactive/ # 능동 검색 단위 테스트
workspace/ # Chrome 프로필, 캡처, 학습 리포트 등 산출물
새 사이트를 추가하려면 다음 4개 파일이 필요하다:
sites/{site_id}.yaml— 매니페스트gimme_job/adapters/{site_id}.py— 어댑터 (BaseJobSiteAdapter프로토콜 구현)tests/adapters/test_{site_id}.py— 스모크 테스트workspace/manifests/{site_id}.learning-report.md— 학습 리포트