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.
 
 
I Luk Kim e98f91036c proactive: circuit-breaker for blocked engines, track blocks separately
Google Jobs anti-bot wall fired on every query from Korea, flooding the
summary with errors. Now an engine that raises EngineBlockedError is
skipped for the rest of the run (one attempt total), and blocks are
counted separately instead of polluting the error list.
4 weeks ago
gimme_job proactive: circuit-breaker for blocked engines, track blocks separately 4 weeks ago
sites proactive: require job signal for ACTIVE, filter school/program pages 4 weeks ago
tests proactive: require job signal for ACTIVE, filter school/program pages 4 weeks ago
.env.example Add Google Jobs & HospitalRecruiting adapters; LinkedIn Volunteer filter; aaoinfo fixes 6 months ago
.gitignore Initial implementation of gimme-job CLI 6 months ago
CLAUDE.md Initial implementation of gimme-job CLI 6 months ago
README.md proactive: deliver report via configured notifier (telegram per global.yaml) 4 weeks ago
pyproject.toml Add 8 site adapters, early stop, Telegram notifications, and list command 6 months ago
uv.lock Add 8 site adapters, early stop, Telegram notifications, and list command 6 months ago

README.md

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 — 학습 리포트