StewardAI

Eunice · StewardAI

· 18분 읽기

ai-job-search: Claude Code로 만든 인디 해커의 구직 앱

레이오프 후 덴마크 출신 지구물리학자가 Claude Code로 만든 구직 자동화 도구 ai-job-search가 10개월 만에 GitHub 스타 57,165개, 이슈·PR 거의 700건을 기록했습니다.

Claude Code로 인디 해커 구직 앱 ai-job-search를 만든 덴마크 지구물리학자 Mads Lorentzen의 GitHub 아바타

덴마크의 한 지구물리학자가 2025년 말 일자리를 잃었습니다. 그는 구직 공고에 손으로 하나씩 지원하는 대신, 구직 활동 자체를 자동화하는 Claude Code 프레임워크를 만드는 데 시간을 썼고, 이후 이를 오픈소스로 공개했습니다. 10개월이 지난 지금 그 저장소 ai-job-search는 57,165개의 스타와 18.2k개의 포크를 기록하고 있으며, GitHub 트렌딩 페이지에서 하루 만에 3,856개의 스타를 얻었습니다.

이는 이 시리즈가 계속 돌아오는 바로 그 패턴을 보여주는 깔끔한 사례입니다: 실제 빌드 로그와 실제 수치를 갖추고, 성과뿐 아니라 거친 부분까지도 공개할 의지가 있는 메인테이너가 만든 인디 해커 구직 앱이라는 것이죠 — 같은 하룻밤 트렌딩 패턴을 저희는 앞서 ECC에서도 다룬 적이 있습니다. ECC 역시 Claude Code로 만들어져 GitHub 리더보드를 급상승한 또 다른 1인 메인테이너 프로젝트입니다.

이 인디 해커 구직 앱이 실제로 하는 일

프로젝트 자체의 GitHub 설명은 분명하게 말합니다: "The job search that runs on your machine."(당신의 머신에서 돌아가는 구직 활동.) 이건 SaaS가 아닙니다 — 당신이 직접 실행해서 자신의 구직 활동에 적용하는 MIT 라이선스 Claude Code 커맨드 모음입니다.

핵심 루프는 README에 따르면 세 개의 슬래시 커맨드로 이뤄집니다:

  • **/setup**은 당신의 문서, 붙여넣은 CV, 또는 짧은 인터뷰를 바탕으로 후보자 프로필을 만듭니다.
  • **/scrape**는 채용 포털을 검색하고, 중복된 공고를 제거하고, 적합도에 따라 매칭 결과를 순위화합니다.
  • **/apply <url 또는 텍스트>**는 당신의 프로필과 대비해 적합도를 평가하고, 맞춤형 LaTeX CV와 커버레터를 작성한 뒤, PDF로 컴파일하기 전에 검토를 위한 두 번째 단계로 넘깁니다.

이 검토 단계는 장식이 아닙니다. README는 명시적인 2-에이전트 패턴을 설명합니다: "The drafter writes; a second Claude agent, spawned with a fresh context, researches the company and critiques the drafts."(드래프터가 글을 쓰고, 새로운 컨텍스트로 생성된 두 번째 Claude 에이전트가 회사를 조사하고 드래프트를 비평합니다.) 하나의 에이전트가 자기 숙제를 스스로 채점하는 게 아니라, 신선한 컨텍스트를 가진 비평자가 드래프터의 작업을 확인하는 것은 말하기는 쉽지만 실제로 구현하기는 어려운 디테일입니다 — 그리고 이는 직접 읽어볼 수 있는 저장소 안에 문서화되어 있습니다.

핵심 루프 외에도 /interview 준비, /outcome 추적, Gmail 상태 동기화, 배치 /rank 매칭, 스킬 갭을 짚어주는 /upskill 커맨드, HTML 대시보드, Notion 동기화까지 있습니다 — "커버레터 하나 써줘" 수준보다 훨씬 더 완전한 지원 파이프라인입니다.

이야기 뒤에 숨은 수치들

README에 적힌 메인테이너 본인의 설명은 모호하지 않고 구체적입니다: "Sixty-nine tailored applications, twenty first interviews, and one signed contract later"(맞춤 지원서 69건, 1차 면접 20건, 그리고 계약서 서명 1건을 거쳐)라고 쓴 뒤, "I started as an AI engineer in June 2026"(2026년 6월에 AI 엔지니어로 일을 시작했습니다)라고 덧붙입니다. 이 수치들은 본인 발표 기준이며 독립적으로 검증되지는 않았습니다 — 69건의 지원서나 20건의 면접을 확인해주는 제3자 트래커는 없습니다 — 하지만 이는 익명의 후기가 아니라 실명, 실제 GitHub 프로필, 그리고 README에 링크된 LinkedIn 프로필에 붙어 있는 설명입니다.

그 프로필은 Mads Lorentzen을 박사 학위를 가진 지구물리학자로, 코펜하겐 광역권(Greater Copenhagen Area)에 거주하며, 팔로워 1.2k명과 그보다 훨씬 작은 규모의 다른 아홉 개 저장소를 가진 사람으로 소개합니다 — 대부분 박사 과정 시절의 지진파·암석물리 시각화 도구들로, 스타 수가 한 자릿수에서 두 자릿수 초반에 머물러 있습니다. ai-job-search는 그의 프로필에서 압도적인 차이로 유일하게 돌파한 프로젝트입니다.

태그된 릴리스 1개에서 3개월 안에 거의 700건에 이른 이슈·PR까지

CHANGELOG와 릴리스 페이지는 "First tagged release"(첫 태그된 릴리스)로 표시된 v1.0.0의 날짜를 2026년 7월 22일로 기록하고 있습니다. 그 이후 프로젝트는 대략 1~3주 간격으로 꾸준히 릴리스를 냈습니다: v1.1.0(7월 30일)에서는 Typst 템플릿 지원과 freehire-search 포털용 더 완전한 채용공고 스크래핑이, v1.3.0(8월 3일)에서는 언어 게이트와 ATS에 안전한 날짜 포맷팅이, v1.4.0(8월 7일)에서는 드래프트 추적과 robots.txt 기반 재시도 제한이, v1.7.0(8월 29일)에서는 마감된 공고 감지 기능이, v1.7.2(9월 29일)에서는 PDF 레이아웃 검증 기능이 추가됐습니다. 가장 최근 태그된 릴리스인 v1.7.3(2026년 10월 19일) — 이 글이 나온 바로 전날입니다 — 에서는 모든 포털 CLI를 위한 크로스플랫폼 설치 스크립트와, 가져오기에 실패한 공고에 대한 재시도 로직이 추가됐습니다.

커밋 히스토리를 보면 가장 최근 커밋 역시 10월 19일에 올라왔으며, 거의 모든 커밋에 Mads Lorentzen의 이름과 함께 AI 보조 공동 저자 표기, 그리고 간간이 이름이 적힌 외부 기여자들이 함께 등장합니다. 이슈 페이지에는 열린 이슈가 단 4개, 열린 풀 리퀘스트가 22개뿐인 것으로 나오지만 — GitHub는 이슈와 PR 번호를 하나의 공유 시퀀스로 매기는데, 가장 최근 항목들의 번호가 #669~#686 사이에 있다는 것은 7월 이후 이 저장소에 거의 700건에 가까운 이슈와 PR이 올라왔다는 뜻입니다. 이는 지구물리학자 출신 메인테이너 한 명이 혼자서 처리하기에는 상당한 양의 인바운드 트래픽입니다 — GitHub 일간 리더보드에 오른 이후 i-have-adhd가 겪었던 것과 비슷한 수준의 트리아지 부담입니다.

단순히 인기 저장소가 아니라 실제로 스마트한 아이디어인 부분

ai-job-search를 흔한 "AI가 내 구직을 대신해준다"는 식의 피칭과 구분 짓는 것은 CONTRIBUTING.md에 명시된 거버넌스 선택입니다: 이 프로젝트는 국가별·시장별 채용 포털 연동을 메인 저장소에 머지하는 것을 아예 거부합니다. 메인테이너는 자신의 말로 그 이유를 이렇게 설명합니다: "One country's portal opens the door to every country's portal; there is no principled stopping point"(한 나라의 포털을 받아들이면 모든 나라의 포털로 문이 열리는 것이고, 거기에는 원칙적인 멈출 지점이 없습니다) — 그래서 저장소 안에 포함된 포털 스킬은 국가에 무관한 범용 LinkedIn 검색이거나, 그 자신의 덴마크 데모 인스턴스로만 유지됩니다.

대신, 자신의 나라 채용 게시판을 위한 포털이 필요한 사람은 누구나 함께 제공되는 /add-portal 커맨드를 써서 자신의 포크 안에 그 포털을 스캐폴딩할 수 있습니다 — 정해진 계약(contract)에 맞춰 만들면 /scrape가 자동으로 그것을 인식합니다 — 그리고 그 포크를 상류(upstream)에 PR로 올리는 대신 고정된 "Community forks" 디스커션에 공지합니다. 이는 의도적인 트레이드오프입니다: 정식 저장소의 기능 성장은 느려지지만, 190개가 넘는 나라들의 스크래퍼 유지보수 부담이 메인테이너 한 명에게 쏠려 파편화되는 일은 막아줍니다.

같은 문서는 버그 수정 PR에 대해서도 이례적으로 엄격한 기준을 둡니다: master에서 실패하고 수정 후에는 통과하는 테스트는 "necessary but not sufficient"(필요하지만 충분하지는 않다)고 밝힙니다 — 실패하는 입력값 또한 테스트가 직접 손으로 만들어낸 것이 아니라 워크플로우가 실제로 만들어내는 것이어야 합니다. 테스트 통과만으로는 안 되고, 재현이 필수입니다.

비용은 얼마이고, 무엇으로부터는 보호해주지 않는가

ai-job-search 자체는 무료이고 MIT 라이선스이며, 선택적인 Ko-fi 후원 링크가 있을 뿐 — 유료 티어는 없습니다. 하지만 실행 자체가 무료는 아닙니다: README는 "Claude Code has no free tier: you need a Claude Pro/Max/Team subscription or Anthropic API credits"(Claude Code에는 무료 티어가 없습니다. Claude Pro/Max/Team 구독이나 Anthropic API 크레딧이 필요합니다)라고 직접 명시합니다. 이 도구는 프레임워크일 뿐이고, 그 아래에서 쓰이는 AI 사용량은 사용자가 직접 부담해야 하는 반복 비용입니다.

README는 실제 한계에 대해서도 솔직합니다: 채용 공고는 신뢰할 수 없는 입력으로 취급되지만, 악의적이거나 잘못된 형식의 공고에 대한 방어는 샌드박스가 아니라 "instruction-level"(지시문 수준)에 머물러 있습니다 — 그리고 낯선 채용 게시판을 쓸 때는 전송 버튼을 누르기 전에 가져온 내용과 작성된 내용을 훑어보라고 사용자에게 안내합니다. 열린 웹을 읽고 그걸 바탕으로 당신을 대신해 문서를 작성하는 에이전트가 완전히 통제된 프로세스는 아니라는 솔직한 인정입니다.

그대로 옮겨 적을 만한 직접적인 사기 방지 고지도 있습니다 — 이 정도 스타 수를 가진 프로젝트는 사칭 계정을 끌어들이기 마련이기 때문입니다: "This is an independent open-source project and is not affiliated with, endorsed by, sponsored by, or maintained by Anthropic"(이는 독립적인 오픈소스 프로젝트이며 Anthropic과 제휴·보증·후원·운영 관계가 없습니다)라고 밝히며, 연계된 암호화폐나 토큰도 없고, Ko-fi와 GitHub만이 유일하게 정당한 후원 채널이라고 명시합니다.

하이라이트 영상에는 담기지 않는 부분

열린 이슈들은 트렌딩 페이지의 스타 수를 걸러서 봐야 할 유용한 현실 점검입니다. 최근 리포트에는 job_key가 덴마크어 Æ/Ø/Å 문자를 누락시켜 덴마크식 이름들이 서로 충돌하는 키로 뭉개지는 문제, 워크플로우 스펙에 python3가 하드코딩되어 있어 표준 Windows 설치 환경에서 조용히 실패할 수 있는 문제, 그리고 포털 CLI에 넘겨주려는 검색 쿼리 문자열이 실제로는 작동하지 않는 문제가 포함되어 있습니다. 어느 것도 치명적이진 않지만, 한 사람이 모든 경로를 꼼꼼히 테스트하는 속도보다 빠르게 0에서 57,000개의 스타까지 간 프로젝트에서 흔히 볼 수 있는 종류의 거친 디테일입니다.

그리고 메인테이너 본인의 성과 — 지원서 69건, 면접 20건, 계약 1건, 본인 발표 기준 — 는 이 도구의 전제를 이해하는 데 유용한 맥락이지만, 표본 수는 1명이며, 모든 사용자가 똑같이 재현할 수 있을 거라 기대할 만한 수치는 아닙니다.

이것이 일반화되는 지점

ai-job-search는 사이드 프로젝트가 회사로 성장한 이야기가 아닙니다 — 매출도 없고, 가격 페이지도 없이, MIT 라이선스와 Ko-fi 링크만 있을 뿐이며, 투자받은 SaaS보다는 의도적으로 무료를 유지하는 openGym에 더 가깝습니다. 대신 이 프로젝트가 보여주는 것은, 1인 메인테이너가 운영하는 AI 에이전트 프로젝트를 한 사람이 모든 기여를 직접 리뷰할 수 있는 한계 너머로 확장시키는, 구체적이고 읽기 쉬운 패턴입니다: 어떤 종류의 기여는 절대 머지하지 않을지를 커밋된 파일에 정확히 적어두고 — 그 거절이 사람들을 그냥 막아버리는 게 아니라 여전히 작동하는 다른 경로로 안내하도록 탈출구(여기서는 /add-portal과 포크)를 만들어두는 것입니다. 하나의 에이전트가 자기 결과물을 스스로 채점하는 대신 드래프터/비평자 2-에이전트 패턴을 결합한 것까지 더하면, 채용 게시판을 전혀 쓰지 않더라도 읽어볼 가치가 있는 빌드 로그입니다.

출처

아래 링크는 발행 전 직접 확인했습니다.

  1. 1.GitHub — MadsLorentzen/ai-job-search (저장소: 스타, 포크, About 설명, 토픽, 라이선스) · 확인일
  2. 2.GitHub — ai-job-search README(raw): 태그라인, 비용/무료 티어 없음 문구, Anthropic 고지, 드래프터/리뷰어 에이전트 설명, 본인 발표 기준 성과 · 확인일
  3. 3.GitHub — MadsLorentzen 프로필 (소개, 위치, 팔로워, 고정 저장소) · 확인일
  4. 4.GitHub — ai-job-search LICENSE(raw): MIT, 저작권 표기 · 확인일
  5. 5.GitHub — ai-job-search CHANGELOG.md(raw): 버전 히스토리와 날짜 · 확인일
  6. 6.GitHub — ai-job-search 릴리스, 1페이지(v1.7.3~v1.1.0, 날짜 포함) · 확인일
  7. 7.GitHub — ai-job-search 릴리스, 2페이지(v1.0.0, 'First tagged release', 7월 22일) · 확인일
  8. 8.GitHub — ai-job-search 커밋 히스토리(master 브랜치): 작성자 패턴, 최신 커밋 · 확인일
  9. 9.GitHub — ai-job-search 이슈(열린 이슈 수, 최고 이슈 번호, 최근 버그 리포트) · 확인일
  10. 10.GitHub — ai-job-search CONTRIBUTING.md(raw): 포크 후 수정 정책, 거절 기준, 리뷰 프로세스 · 확인일
  11. 11.GitHub 트렌딩 — 일간(ai-job-search 순위, 전체 스타, 오늘 획득한 스타) · 확인일

Read in English →