OpenSource-Hub

ai-job-search

CLI 도구

MadsLorentzen/ai-job-search

Claude Code 기반 AI 구직 프레임워크.

개요

Claude Code를 활용하여 구직 프로세스를 자동화하는 프레임워크. 사용자 프로필, 채용 공고 검색, 적합도 평가, 이력서 및 커버 레터 맞춤화, 면접 준비를 포함합니다.

README 미리보기

\n  \n\n\n# AI Job Search\n\nAn AI-powered job application framework built on [Claude Code](https://claude.com/claude-code). Fork it, fill in your profile, and let Claude evaluate job postings, tailor your CV, write cover letters, and prepare you for interviews.\n\n> Note: This is an independent open-source project and is not affiliated with, endorsed by, sponsored by, or maintained by Anthropic. Anthropic and Claude Code are referenced only to describe the toolchain this workflow uses.\n\n\n  \n    \n  \n\n\n## What this is\n\nA structured workflow that turns Claude Code into a full-stack job application assistant. The core workflow (self-profiling, fit evaluation, and the drafter-reviewer application pipeline) is **language- and country-agnostic**. The job portal search skills are built for the Danish market (Jobindex, Jobnet, Akademikernes Jobbank, etc.), but the pattern is designed to be swapped for your local job boards.\n\n```\n/setup          /scrape              /apply \n  |                |                     |\n  v                v                     v\nFill in        Search job           Evaluate fit\nyour profile   portals              Score & recommend\n  |                |                     |\n  v                v                     v\nProfile        Present matches      Draft CV + Cover Letter\nfiles ready    with fit ratings     (LaTeX, tailored)\n                   |                     |\n                   v                     v\n               Pick a match         Reviewer agent critiques\n               -> /apply            -> Revise -> Final output\n```\n\nThe framework encodes career guidance best practices, including structured evaluation criteria, forward-looking cover letter framing, and optional salary benchmarking.\n\n## Prerequisites\n\n- [Claude Code](https://claude.com/claude-code) (CLI)\n- Python 3.10+\n- [Bun](https://bun.sh) (for Danish job search CLI tools)\n- LaTeX distribution with `lualatex` and `xelatex`: [TeX Live](https

FAQ (5)

문제 해결
키릴 문자 또는 기타 비라틴 문자 제목이 변경될 때 동일한 Freehire URL에 대한 중복 작업 키를 어떻게 수정하나요?

중복이 발생하는 이유는 tools/job_key.py가 title + url을 해시하기 때문입니다. 라틴 문자가 아닌 제목은 untitled로 슬러그화되고, Freehire의 영숫자 슬러그는 6자리 _JOB_ID 패턴과 일치하지 않습니다. URL이 있을 때는 URL만 해시하도록 헬퍼를 수정하고, URL이 없는 경우에만 제목을 폴백으로 사용하세요. 그런 다음 모든 제목 변형이 하나의 키를 생성하는지 확인하세요:

U=https://freehire.me/jobs/inzhener-ooo-chen-hlk3qjfg
python3 tools/job_key.py --company "ООО Чен" --title "Инженер" --url "$U"
python3 tools/job_key.py --company "ООО Чен" --title "инженер" --url "$U"
python3 tools/job_key.py --company "ООО Чен" --title "Инженер-механик" --url "$U"
python3 tools/job_key.py --audit

세 명령 모두 동일한 키를 반환해야 하며, duplicate_urls는 더 이상 해당 게시물을 보고하지 않아야 합니다. 수정 사항을 적용한 후 seen_jobs.json을 재빌드하거나 중복 제거하여 이전 중복 키가 제외 집합에 남아 있지 않도록 하세요. 게시물이 재등록될 때 슬러그가 변경될 수 있으므로 제목 슬러그 정규화나 영숫자 슬러그 ID에 의존하지 마세요.

원본 Issue #501
문제 해결
Excel 행에 500명의 직원과 Count 및 Index 열이 모두 포함되어 있는데도 salary_lookup이 "too few employees to publish (privacy)"를 표시하는 이유는 무엇인가요?

이 문제는 convert_salary_excel.py가 Count + Index(또는 덴마크어 Antal + Lønindeks)와 같은 단독 헤더를 쌍으로 묶지 않기 때문에 발생합니다. 이들의 파생 카테고리 이름이 비어 있으므로, 하나의 all_employees 카테고리 대신 별도의 카테고리로 내보내집니다.

즉각적인 해결 방법: 두 헤더에 동일하고 비어 있지 않은 카테고리 접미사를 지정한 다음 JSON을 다시 생성하세요:

Count all | Index all

또는 덴마크어로:

Antal alle | Lønindeks alle

그런 다음 실행하세요:

python3 tools/convert_salary_excel.py acme.xlsx --output salary_data.json
python3 salary_lookup.py "Acme Corp"

그러면 조회 결과에 건수, 지수 및 기준 분산이 포함된 하나의 결합된 행이 표시됩니다.

영구적인 코드 수정: tools/convert_salary_excel.py에서 건수/지수 쌍 조건을 변경하여 빈 문자열을 포함한 동일한 파생 카테고리 이름을 허용하고, 빈 쌍에 기본 카테고리 이름 all_employees를 할당하세요. 일치하는 지수 열이 없는 단독 Count/Antal 열은 독립형 건수 열로 유지되어야 합니다.

원본 Issue #469
문제 해결
jobdanmark-search detail이 재시도하지 않고 첫 번째 HTTP 429 또는 5xx 응답에서 실패하는 문제를 수정하는 방법은?

detail 명령은 .agents/skills/jobdanmark-search/cli/src/commands/detail.ts에서 fetch()를 직접 호출하여 CLI의 재시도 래퍼를 우회합니다. jobdanmark-search/cli/src/helpers.ts에 apiFetch/apiPost와 동일한 재시도/백오프 루프, 타임아웃 및 내보낸 USER_AGENT를 사용하는 htmlFetch(url) 래퍼를 추가하여 이를 수정하세요. HTTP 404에 대해 null을 반환하도록 하여 detail이 NOT_FOUND 동작을 유지하게 한 다음, detail.ts의 직접적인 fetch() 호출을 htmlFetch()로 교체하세요. 재시도-백오프, 요청-타임아웃 및 래퍼 테스트를 확장하고, fetch를 스텁하여 429를 반환하도록 한 후 예상되는 500ms-5s 백오프 스케줄에 따른 여러 번의 시도를 검증하는 핸들러 수준 테스트를 추가하세요.

원본 Issue #459
문제 해결
Windows에서 웹 페이지 텍스트를 출력할 때 발생하는 UnicodeEncodeError 'charmap codec can't encode character' 오류를 해결하는 방법

이 크래시는 Windows에서 파이프로 연결된 Python의 stdout이 기본적으로 레거시 ANSI 코드 페이지(cp1252)를 사용하기 때문에 발생하며, 이 코드 페이지는 비라틴 문자(예: 폴란드어 Ż, Ł; 덴마크어 Ø; 키릴 문자/CJK)를 인코딩할 수 없습니다. 스크립트 시작 시 UTF-8 출력을 강제하여 이 문제를 해결하세요. tools/fetch_page.py와 tools/robots_check.py에서 모든 print()보다 먼저 공유 헬퍼 _force_utf8_output()을 호출하세요. 이는 tools/rank_state.py, tools/job_key.py, tools/posting_guard.py, tools/verify_layout.py, tools/verify_pdf.py, tools/upstream_triage.py에서 이미 사용 중인 것과 동일한 패턴입니다. 이 헬퍼는 sys.stdout/sys.stderr를 UTF-8로 재구성합니다(Python 3.7+의 sys.stdout.reconfigure(encoding='utf-8', errors='replace')와 동일). 코드 변경 없이 가능한 대안적 해결 방법: 실행 전에 환경 변수 PYTHONIOENCODING=utf-8 또는 PYTHONUTF8=1을 설정합니다(예: PYTHONIOENCODING=utf-8 python3 tools/fetch_page.py <url> --text). 또는 Windows 콘솔에서 chcp 65001을 실행하여 UTF-8로 전환합니다.

원본 Issue #685
문제 해결
jobdanmark-search detail이 JSON-LD description에서 원시 HTML 태그를 반환하는 문제를 어떻게 수정하나요?

JSON-LD 브랜치(detail.ts의 fromJsonLd)에서 jobPosting.description을 그대로 할당하지 마세요. 기존 node-html-parser 의존성으로 파싱하고 structuredText를 사용하여 엔티티를 디코딩하고 블록 요소를 개별 줄로 변환한 다음, 기존 cleanText 헬퍼로 각 줄을 정규화하세요. 이렇게 하면 JSON-LD 출력이 렌더링된 HTML 브랜치와 일치하게 됩니다: 태그가 제거되고, &amp; 및 &oslash; 같은 엔티티가 디코딩되며, 단락/목록 줄 바꿈이 유지됩니다. detail-jsonld.test.ts를 업데이트하여 원시 <p> 마크업 대신 일반 텍스트를 기대하도록 하고, <p>...</p><ul><li>...</li></ul> 같은 HTML을 포함하는 테스트 케이스를 추가하세요.

원본 Issue #515