You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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개 파일이 필요하다:

  1. sites/{site_id}.yaml — 매니페스트
  2. gimme_job/adapters/{site_id}.py — 어댑터 (BaseJobSiteAdapter 프로토콜 구현)
  3. tests/adapters/test_{site_id}.py — 스모크 테스트
  4. workspace/manifests/{site_id}.learning-report.md — 학습 리포트