Francis1998/agentic-career-search: 자율적인 구직 활동을 위한 AI 에이전트 백엔드
요약
본 프로젝트는 자율적인 구직 활동을 위한 AI 에이전트 백엔드를 제공합니다. 기존 자동화 툴의 한계(설명 불가, 복구 어려움 등)를 극복하기 위해 근거 추적, 상태 머신, 영속 이벤트 로그 등의 명시적 에이전트 엔지니어링 프리미티브를 도입했습니다. 이를 통해 지원서 초안 작성, 면접 준비 브리핑, 채용 단계 추적기 등 구직 전 과정에 걸친 고도화된 기능을 구현합니다.
핵심 포인트
- 근거 추적(rationale traces)을 갖춘 결정론적 의사결정 엔진 제공
- 상태 머신 및 영속 이벤트 로그로 안정적인 운영 환경 구축
- 지원서 초안, 면접 준비 브리프 등 구직 전 과정 지원 기능 포함
- ATS 키워드 커버리지 분석 및 회사 조사 브리프 생성 가능
자율적인 직무 탐색, 설명 가능한 의사결정, 그리고 프로덕션급 운영을 위한 AI 에이전트 백엔드입니다.
대부분의 구직 자동화 데모가 실제 사용 환경에서 실패하는 이유는 다음과 같습니다:
- 어떤 이유로 특정 역할에 높은 순위가 매겨졌는지 설명할 수 없음,
- 제공업체(providers)가 실패했을 때 깔끔하게 복구할 수 없음,
- 디버깅을 위한 영속적인 이벤트 추적 기록이 없음,
- 기능이 성장함에 따라 유지보수가 어려워짐.
본 프로젝트는 명시적인 에이전트 엔지니어링 프리미티브(primitives)를 통해 이러한 문제들을 해결합니다:
- 근거 추적(rationale traces)을 갖춘 결정론적 의사결정 엔진,
- 상태 머신 실행 생명 주기 및 영속 이벤트 로그,
- 외부 통합을 위한 도구/어댑터 추상화,
- 안전 제어 (타임아웃, 경계 범위 설정, 취소),
- 여러 제공업체(providers)를 통한 선택적 LLM 강화(enrichment),
- 스킬-프로필 적합도 점수 산정 (
fit_score0–1 + 일치/누락 항목) —docs/guides/SKILLS_PROFILE_FIT_GUIDE.md참조, - 제목/위치 기반 휴리스틱을 이용한 지원 USD 급여 범위 추정 —
docs/guides/SALARY_BAND_ESTIMATOR_GUIDE.md참조, - 자동 제출 기능이 없는 HITL(Human-in-the-Loop) 지원 입사 지원 초안 (이력서 항목 + 커버 노트) —
docs/guides/APPLICATION_DRAFT_SERVICE_GUIDE.md참조, - CRM 경량 버전의 지원 단계 추적기 (
saved→applied→interview→offer) —docs/guides/APPLICATION_STAGE_TRACKER_GUIDE.md참조, - 면접 준비 브리프 (예상 질문 + STAR 프롬프트 + 집중 부족 영역) —
docs/guides/INTERVIEW_PREP_BRIEF_GUIDE.md참조, - 교차 소스 퍼지 중복 제거 (URL을 넘어선 제목+회사)
—docs/guides/CROSS_SOURCE_JOB_DEDUP_GUIDE.md참조, - ATS 키워드 커버리지 (이력서 텍스트 ↔ JD(Job Description) 키워드) —
docs/guides/ATS_KEYWORD_COVERAGE_GUIDE.md참조, - 회사 조사 브리프 (대화 포인트 + JD 신호, HITL) —
docs/guides/COMPANY_RESEARCH_BRIEF_GUIDE.md참조, - HITL 리크루터 아웃리치 초안 (이메일 + LinkedIn DM, 자동 전송 안 함) —
docs/guides/RECRUITER_OUTREACH_DRAFT_GUIDE.md참조, - HITL 추천 소개 초안 (따뜻한 이메일 + LinkedIn, 자동 전송 안 함) —
docs/guides/REFERRAL_INTRO_DRAFT_GUIDE.md참조
-, - 협상 논점(negotiation talking points) (총체적 보상 카운터, HITL) — docs/guides/NEGOTIATION_TALKING_POINTS_GUIDE.md 참조
-, - 면접 후 브리핑 자료(post-interview debrief briefs) (강점 + 부족한 점 + 후속 조치, HITL) — docs/guides/INTERVIEW_FEEDBACK_SYNTH_GUIDE.md 참조
-, - 오퍼 마감일 카운트다운 및 HITL 알림(절대 자동 거절 금지) — docs/guides/OFFER_DEADLINE_TRACKER_GUIDE.md 참조
-, - 포트폴리오 항목 ↔ 직무기술서(JD) 주제 매칭 (HITL 토큰 중복) — docs/guides/PORTFOLIO_PROJECT_MATCHER_GUIDE.md 참조
-, - 면접 일정 충돌 경고(지역적 중복 감지; 달력 작성 금지) — docs/guides/INTERVIEW_SCHEDULE_CONFLICT_GUARD_GUIDE.md 참조
-, - 오프라인 노트 기반 HITL 거절 패턴 주제 분석 (이력서 자동 수정 금지) — docs/guides/REJECTION_PATTERN_ANALYZER_GUIDE.md 참조
-, - 지원 후 팔로우업 주기(day offsets + 채널; 절대 자동 독려 금지) — docs/guides/APPLICATION_FOLLOWUP_CADENCE_GUIDE.md 참조
Provider 통합은 코드 경로에 내장되어 있습니다:
- Gemini API
- Kimi (Moonshot, OpenAI와 호환)
- Claude (Anthropic Messages API)
- OpenAI 스타일 엔드포인트 패턴을 통한 GPT 호환 API
프로바이더 강화 기능을 활성화하세요:
LLM_ENABLE_ENRICHMENT=true
LLM_PROVIDER=gemini # 또는 kimi / claude / gpt
그런 다음 .env 파일에 매칭되는 API 키를 설정합니다.
(참고: CONFIGURATION.md)
이 저장소는 요청된 표준을 따릅니다:
- 독립형 저장소 아키텍처 (소스 저장소 내부와 결합되지 않음),
- 결정론적 의사결정 추적을 갖춘 AI 에이전트 우선 설계,
- Claude/Gemini/Kimi 및 GPT 스타일 통합으로부터의 LLM 출력 소비,
- 프로덕션 지향 레이아웃 (
src,tests,scripts, CI, 환경 설정, 마이그레이션), - 고품질 문서화 (
README,QUICKSTART,CONFIGURATION,SAFETY,ARCHITECTURE),- - 통제된 통합을 위한 브랜치 기반 병합 워크플로우 (직접적이고 안전하지 않은 병합 금지),
- 최종 확정 전 lint/타입/테스트 검증,
- 표준 로컬 검증을 위한 Docker 요구 사항 없음,
- 개발 로드맵을 위한 단계별 브랜치 (
phase/01부터phase/10까지)
), - 빈번한 증분 푸시를 통한 커밋 전방(commit-forward) 워크플로우.
POST /source-configs
소스 어댑터 설정 생성 (create source adapter configs)
GET /source-configs
활성화된 소스 목록 조회 (list enabled sources)
POST /runs
자율 실행 요청 접수 (enqueue autonomous run)
GET /runs/{run_id}
실행 상태 검사 (inspect run state)
GET /runs/{run_id}/events
이벤트 타임라인 검사 (inspect event timeline)
POST /runs/{run_id}/cancel
취소 요청 (request cancellation)
GET /jobs
정규화되고, 점수화되며, 풍부해진 출력물 조회 (inspect normalized, scored, and enriched outputs)
GET /health/live
그리고 (and)
GET /health/ready
각 SourceConfig는 source_type을 통해 소스 어댑터를 선택합니다.
| catsone | CatsoneAdapter | /jobs/{id}, /job/{id}, /careers/{id}, /careers/job/{id}, 또는 /postings/{id} URL 형태를 통해 CATS 경력 공고 앵커 인식 | CATS (*.catsone.com) 채용 게시판 |
| :--- | :--- | :--- |
| adp | AdpAdapter | /jobs/{id}, /job/{id}, /careers/{id}, /careers/job/{id}, 또는 /requisitions/{id} URL 형태를 통해 ADP Recruiting 공고 앵커 인식 | ADP (*.adp.com) 채용 게시판 |
| jibe | JibeAdapter | /jobs/{id}, /job/{id}, /position/{id}, /positions/{id}, 또는 /requisition/{id} URL 형태를 통해 Jibe 공고 앵커 인식 | Jibe (*.jibe.com) 채용 게시판 |
| hirevue | HireVueAdapter | /jobs/{id}, /job/{id}, /careers/{id}, /careers/job/{id}, 또는 /requisition/{id} URL 형태를 통해 HireVue 공고 앵커 인식 | HireVue 공개 경력 게시판 |
| paycom | PaycomAdapter | /jobs/{id}, /job/{id}, /posting/{id}, /postings/{id}, 또는 /opportunity/{id} URL 형태를 통해 Paycom 공고 앵커 인식 | Paycom 공개 경력 게시판 |
| yello | YelloAdapter | /jobs/{id}, /job/{id}, /position/{id}, /positions/{id}, 또는 /opening/{id} URL 형태를 통해 Yello 공고 앵커 인식 | Yello 공개 경력 게시판 |
| wellfound | WellfoundAdapter | /jobs/{id}, /job/{id}, /role/{id}, /roles/{id}, 또는 /startup-jobs/{id} URL 형태를 통해 Wellfound 공고 앵커 인식 | |
URL 형태 | Wellfound (wellfound.com / angel.co) 채용 게시판 | otta
| OttaAdapter
| /jobs/{id},
| /job/{id},
| /roles/{id},
| /role/{id},
| /openings/{id}
URL 형태 | Otta (otta.com) 채용 게시판 | builtin
| BuiltinAdapter
| /job/{id},
| /jobs/{id},
| /company-jobs/{id},
| /careers/job/{id},
| /role/{id}
URL 형태 | Built In (builtin.com / builtinnyc.com / builtinchicago.com) 채용 게시판 | remoteok
| RemoteokAdapter
| /remote-jobs/{id},
| /remote-job/{id},
| /jobs/{id},
| /job/{id}
URL 형태 | RemoteOK (remoteok.com) 채용 게시판 | weworkremotely
| WeworkremotelyAdapter
| /remote-jobs/{id},
| /jobs/{id},
| /job/{id},
| /listings/{id},
| /listing/{id}
URL 형태 | WeWorkRemotely (weworkremotely.com) 채용 게시판 | welcometothejungle
| WelcometothejungleAdapter
| /jobs/{id},
| /job/{id},
| /companies/{slug}/jobs/{id},
| /offers/{id},
| /offer/{id}
URL 형태 | Welcome to the Jungle (welcometothejungle.com) 채용 게시판 | remotive
| RemotiveAdapter
| /remote-jobs/{id},
| /remote-job/{id},
| /jobs/{id},
| /job/{id},
| /positions/{id}
URL 형태 | Remotive (remotive.com) 채용 게시판 | himalayas
| HimalayasAdapter
| /jobs/{id},
| /job/{id},
| /companies/{slug}/jobs/{id},
| /remote-jobs/{id},
| /roles/{id}
URL 형태 | Himalayas (himalayas.app) 채용 게시판 | workingnomads
| WorkingnomadsAdapter
| /jobs/{id},
| /job/{id},
| /remote-jobs/{id},
| /positions/{id},
| /position/{id}
URL 형태 | Working Nomads 채용 게시판 | justremote
| JustremoteAdapter
| NodeskAdapter
| NoDesk의 게시물 앵커를 /jobs/{id}, /job/{id}, /remote/{id}, /positions/{id}, /careers/{id} URL 형태에서 인식합니다 | NoDesk (nodesk.co) 채용 보드 |
| jobspresso
| JobspressoAdapter
| Jobspresso의 게시물 앵커를 /jobs/{id}, /job/{id}, /remote-jobs/{id}, /postings/{id}, /openings/{id} URL 형태에서 인식합니다 | Jobspresso (jobspresso.co) 채용 보드 |
| remoteco
| RemotecoAdapter
| Remote.co의 게시물 앵커를 /remote-jobs/{id}, /jobs/{id}, /job/{id}, /positions/{id}, /careers/{id} URL 형태에서 인식합니다 | Remote.co (remote.co) 채용 보드 |
| dynamitejobs
| DynamitejobsAdapter
| Dynamite Jobs의 게시물 앵커를 /jobs/{id}, /job/{id}, /remote-jobs/{id}, /positions/{id}, /listings/{id} URL 형태에서 인식합니다 | Dynamite Jobs (dynamitejobs.com) 채용 보드 |
| arcdev
| ArcdevAdapter
| Arc.dev의 게시물 앵커를 /jobs/{id}, /job/{id}, /roles/{id}, /positions/{id}, /openings/{id} URL 형태에서 인식합니다 | Arc.dev (arc.dev) 채용 보드 |
| flexjobs
| FlexjobsAdapter
| FlexJobs의 게시물 앵커를 /search/{id}, /flex-jobs/{id}, /remote-job/{id}, /jobs/{id}, /job/{id} URL 형태에서 인식합니다 | FlexJobs (flexjobs.com) 채용 보드 |
| radancy
| RadancyAdapter
| Radancy의 게시물 앵커를 /jobs/{id},
, /job/{id}
, /search/job/{id}
, /careers/{id}
, 또는 /careers/job/{id} URL 형태에서 인식합니다 | Radancy (*.radancy.com
, *.jobs.net
) 채용 보드 |
| silkroad
| SilkRoadAdapter
| SilkRoad의 게시물 앵커를 /jobs/{id},
, /job/{id}
, /posting/{id}
, /postings/{id}
, 또는 /opportunity/{id} URL 형태에서 인식합니다 | SilkRoad (*.silkroad.com
) 채용 보드 |
| paradox
| ParadoxAdapter
| Paradox의 채용 게시물 앵커를 /jobs/{id},
, /job/{id}
, /careers/{id}
, /careers/job/{id}`
, 또는 /opportunities/{id}
URL 형태 | Paradox Olivia (*.paradox.ai)
커리어 보드 |
| applicantpro
| ApplicantProAdapter
| /jobs/{id}
, /job/{id}
, /careers/{id}
, /careers/job/{id}
, 또는 /openings/{id}
URL 형태 | ApplicantPro (*.applicantpro.com)
커리어 보드 |
| brassring
| BrassringAdapter
| /jobs/{id}
, /job/{id}
, /jobdetail/{id}
, /FgJobDetail/{id}
, 또는 /careers/{id}
URL 형태 | IBM Kenexa BrassRing (*.brassring.com)
커리어 보드 |
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기