Post
Repo Deep Dive: MadsLorentzen/ai-job-search — 채용 공고 탐색부터 지원서 검토까지
2026년 10월 20일 07:10 KST에 확인한 GitHub Trending 일간 전체 언어 목록에서 MadsLorentzen/ai-job-search는 1위였다. 이 순위는 저장소 선정 시점의 스냅샷이며, 글 발행 시점이나 이후의 실시간 순위를 의미하지 않는다.
1. 프로젝트 소개
ai-job-search는 구직자가 자신의 경력 자료를 바탕으로 채용 공고를 찾고, 적합도를 검토하고, 공고별 이력서와 자기소개서를 작성하도록 돕는 오픈소스 작업 틀이다. 저장소 작성자 Mads Lorentzen이 자신의 구직 과정에서 만든 것을 공개했으며, Anthropic이 운영하는 공식 Claude Code 제품이나 공식 플러그인은 아니다. 핵심 사용 환경은 로컬 저장소에서 실행하는 Claude Code다. 검색 도구 일부는 다른 에이전트 도구에서도 활용할 수 있지만, 전체 지원서 작성 절차까지 다른 도구에서 그대로 동작한다고 문서는 약속하지 않는다.
일반적인 이력서 생성 서비스와 달리 사용자가 자신의 경력 자료와 결과물을 로컬 작업 공간에서 관리하도록 설계했다. 초기 설정에서 CV, LinkedIn 내보내기 자료, 학위·추천서 등을 읽거나, 이력서 한 건을 가져오거나, 문답으로 경력을 입력할 수 있다. 그 정보가 이후 공고 평가와 문서 작성의 기준이 된다. 단, 로컬에서 실행한다는 표현은 외부 통신이 전혀 없다는 뜻이 아니다. Claude Code 사용에는 Anthropic 구독 또는 API 크레딧이 필요하고, 공고 검색·회사 조사에는 외부 사이트 접속이 포함된다.
2. 해결하려는 문제
구직 과정에서는 공고마다 요구 역량을 다시 읽고, 기존 경력 중 어떤 사실을 앞세울지 판단하고, 이력서와 자기소개서의 문구를 손봐야 한다. 여러 포털에서 찾은 같은 공고를 중복 검토하거나, 검색 결과만 보고 이미 마감된 자리에 시간을 쓰는 일도 생긴다. 한 번 생성한 PDF가 보기에는 멀쩡해도 텍스트 추출 순서가 엉켜 채용 시스템에서 읽히기 어려운 문제 역시 별개로 남는다.
이 프로젝트는 그 작업을 /setup → /scrape → 필요하면 /rank → /apply라는 단계로 묶는다. 먼저 지원자의 사실 자료를 정리하고, 설치된 포털 검색 도구로 공고를 모으며, 이미 본 공고와 지원 기록을 대조한다. 이후 적합도를 따져 선택한 공고에 대해 이력서·자기소개서 초안을 만든다. 특히 /apply는 평가 결과를 먼저 보여주고 사용자에게 문서 작성 진행 여부를 묻는다. 생성한 문서를 곧바로 채용 사이트에 제출하는 자동 지원 프로그램이 아니다. 초안 작성과 실제 지원 결정을 구분한 흐름이다.
포털 검색 기능의 기본 사례는 덴마크 채용 시장에 무게가 실려 있다. Jobindex, Jobnet, Jobdanmark, Akademikernes Jobbank용 도구가 들어 있고, LinkedIn 공개 채용 목록과 freehire.me를 쓰는 다국가용 도구도 포함된다. 따라서 다른 국가의 사용자가 /scrape만 실행한다고 현지 구인 사이트가 모두 검색되는 것은 아니다. 저장소는 /add-portal로 현지 포털용 검색 도구를 추가하는 절차를 제공한다.
3. 주요 기능
경력 프로필 구성. /setup의 입력은 여러 경력 문서, CV 한 건, 또는 사용자와의 인터뷰 중 하나다. 결과는 이후 명령이 읽는 지원자 프로필과 공고 검색 질의다. 문서 여러 건을 쓰는 경로는 날짜·직함·학위 정보의 충돌을 확인하고, 충돌이 있으면 사용자의 판단을 받도록 명시한다. 이는 생성된 문장이 사실인지 검토할 출처를 먼저 만드는 과정이다.
공고 탐색과 중복 제거. /scrape는 활성화된 포털 검색 도구를 발견해 프로필에 맞는 질의로 검색한다. 결과에 회사, 직무, 위치, 게시일, URL을 붙이고, 이미 본 URL이나 같은 회사·직무 조합, 기존 지원 기록과 대조한다. 포털 도구가 실패하거나 없는 경우 웹 검색으로 대체할 수 있지만, 그 결과는 도구에서 직접 얻은 결과와 출처가 다르게 기록된다. 결과 목록은 지원 후보를 고르는 자료이지, 공고의 실존·진행 상태를 무조건 보증하는 목록이 아니다.
대량 후보의 순위화. /rank는 여러 새 공고를 볼 때 기술·경험·행동 특성·진로 정합성 기준으로 점수를 매겨 짧은 후보 목록을 만든다. 점수만으로 결론을 내지 않고, 위치나 요구 언어 같은 배제 조건, 마감일, 읽을 수 없는 공고를 별도로 처리하도록 명령이 작성되어 있다. 사용자는 단순한 순번 외에 어떤 강점과 공백 때문에 해당 순위가 나왔는지도 읽을 수 있다. 이 평가 기준은 사용자가 설정한 프로필에 의존하므로 객관적 채용 성공 확률로 해석해서는 안 된다.
공고별 지원서 작성과 검토. /apply에는 공고 URL 또는 공고 전문을 입력한다. URL을 읽지 못하는 포털이라면 본문을 붙여 넣는 경로가 있다. 명령은 먼저 공고의 숨겨진 텍스트와 지시 형태의 내용을 점검하고, 지원자 프로필과 요구사항의 적합도를 보여준다. 사용자가 계속 진행하기로 하면 이력서와 자기소개서 초안을 작성하고 별도의 검토 역할에서 내용과 근거를 비평한 뒤 수정한다. 기본 템플릿은 이력서에 lualatex, 자기소개서에 xelatex를 사용하며, 최종 PDF의 페이지 구성과 추출 가능한 텍스트도 확인하도록 설계됐다. pypdf 또는 pdftotext가 없으면 기계적 텍스트 검사는 시각적 검토로 낮아진다. 검증 절차가 있다고 해서 모든 채용 시스템에서의 판독이나 채용 결과가 보장되는 것은 아니다.
지원 이후의 기록 활용. /outcome은 지원·면접·제안·거절 등 경과를 기록하고 제출 자료와 당시 공고를 보관한다. /interview는 그 기록을 바탕으로 면접 단계에 맞는 질문과 STAR 사례를 준비하며, /html-report는 기록된 지원 현황을 오프라인 HTML 대시보드로 만든다. 검색, 문서 작성, 면접 준비가 각각 별도의 입력과 결과물을 갖는다는 점이 이 작업 틀의 중요한 특징이다.
4. 사용 방법과 동작 흐름
사전 조건은 Claude Code CLI, Python 3.10 이상, 채용 포털 CLI를 실행할 Bun, 그리고 기본 PDF 문서를 컴파일할 LaTeX 배포판이다. Claude Code에는 유료 구독 또는 API 크레딧이 필요하다. 저장소를 시험할 때는 원본을 복제한 뒤 다음 순서로 시작할 수 있다.
git clone https://github.com/MadsLorentzen/ai-job-search.git
cd ai-job-search
python3 tools/install_portal_clis.py
claude
Claude Code 대화 안에서 /setup을 실행해 경력 자료를 제공한다. 그런 다음 /scrape로 공고를 찾는다. 반환된 후보가 많다면 /rank로 우선순위를 정하고, 관심 있는 공고에는 /apply https://example.com/jobs/123 형식으로 URL을 전달한다. URL 접근이 막힌 경우 /apply에 공고 전문을 붙여 넣을 수 있다. /apply가 먼저 제시하는 적합도와 확인되지 않은 출처 경고를 읽고, 작성 진행 여부를 결정한다. 작성이 끝나면 초안과 컴파일된 PDF, 텍스트 추출 검사 결과를 직접 확인한다. 실제 제출 후에는 /outcome으로 상태를 기록하고, 면접이 잡히면 /interview를 이용한다.
이때 /setup은 이름·연락처·경력 같은 개인정보를 Git에서 추적하는 파일에 쓴다. 공개 저장소를 포크하면 그 포크도 공개되므로, 개인 구직용이라면 공개 포크에 변경 사항을 푸시하지 말고 문서가 안내하는 비공개 저장소 구성을 택해야 한다. 위 복제 예시는 명령 흐름을 보여주는 최소 예시이며, 개인 정보가 입력된 후 원본 공개 저장소로 푸시하라는 뜻이 아니다. 포털별 이용 조건과 접근 제한도 확인해야 한다. 특히 README는 LinkedIn 공개 엔드포인트 이용을 개인용으로 설명하면서 자동화 접근이 LinkedIn 약관에 어긋난다고 명시한다.
5. 활용 사례
덴마크 채용 공고를 주기적으로 검토하는 경우. /setup에서 직무 선호와 경력을 정리한 뒤 /scrape로 기본 제공 포털을 검색한다. 같은 공고가 다른 검색 실행에 다시 나타나도 이전 조회 기록과 지원 기록을 기준으로 중복을 걸러낸다. 후보가 여럿이면 /rank에서 강점·공백과 마감일을 확인하고 특정 공고를 선택한다. 이 흐름은 저장소의 기본 포털 구성과 검색 스킬의 중복 처리 절차에 근거한다.
공고 한 건에 맞는 문서를 준비하는 경우. 검색 없이 URL 또는 공고 전문으로 /apply를 시작할 수 있다. 먼저 직무 요구와 프로필의 차이를 평가받고, 작성에 동의한 뒤 초안을 검토한다. 공고에 없는 역량을 경험한 것처럼 채워 넣는 방식이 아니라, 프로필로 입증되는 사실만 사용하고 실제 부족한 역량은 부족한 상태로 남기도록 작성 명령이 규정한다. PDF 확인 결과는 읽을 수 있는 텍스트와 지면 배치에 관한 점검 결과이지, 서류 통과 여부의 예측이 아니다.
지원 이력을 다음 면접에 연결하는 경우. /outcome으로 제출 당시 자료와 결과를 기록해 두면 /interview가 그 지원 건의 공고, 제출한 이력서·자기소개서, 앞선 면접 피드백을 참고할 수 있다. 따라서 일반적인 예상 질문 목록 대신 실제 제출 문서의 주장과 면접 답변이 일치하는지 확인하는 준비 자료를 만들 수 있다. 지원 파이프라인의 숫자와 상태를 보고 싶다면 /html-report로 로컬 HTML 파일을 생성한다. 메일이나 채용 사이트로 지원서를 대신 보내는 사례는 문서에서 확인되지 않는다.
댓글