<aside>

링크드인에 있는 사람들의 프로필 데이터를 가져온 뒤, Claude Code를 사용해서 특정 직무에 맞는 사람들을 스크리닝한 다음에 개별적으로 연락하려해. 이를 위해서 Claude Code의 CLAUDE.MD 파일과 어떤 Sub agent를 두고 작업하는 것이 가장 좋을지 Anthropic의 공식 문서 (https://docs.anthropic.com/en/docs/claude-code/overview)와 에이전트 사용법 (https://www.anthropic.com/engineering/claude-code-best-practices)을 참고해서 네가 각각 구성해줘. 필요하다고 생각한 각 Sub agent의 프롬프트도 작성해줘.

</aside>

좋아요, 태현! 아래에 바로 붙여 넣어 사용할 수 있는 CLAUDE.md(프로젝트 루트에 두면 자동 인식)와 목적별 Sub agent 세트를 준비했어요. 모두 Claude Code 공식 문서의 권장 구성(CLAUDE.md 활용, /agents를 통한 서브에이전트 관리, 에이전트 파일 규격, 헤드리스/SDK 활용 등)을 따릅니다. (Anthropic, Anthropic)


바로 요약 (Direct Answer)


레포 구조 제안

/recruiting-pipeline
  ├─ CLAUDE.md
  ├─ data/
  │   ├─ raw/            # LinkedIn 합법적 내보내기 CSV 등
  │   ├─ processed/      # 정규화된 profiles.jsonl
  ├─ outputs/
  │   ├─ shortlist.csv
  │   ├─ outreach/       # 개인화 메시지
  ├─ .claude/
  │   ├─ agents/
  │   │   ├─ ingestor.md
  │   │   ├─ scorer.md
  │   │   ├─ researcher.md
  │   │   ├─ personalizer.md
  │   │   ├─ sequencer.md
  │   │   └─ compliance.md
  │   └─ commands/
  │       ├─ screen-role.md
  │       └─ write-outreach.md
  └─ scripts/
      ├─ normalize_profiles.py
      └─ export_hubspot_csv.py


붙여 넣기용 CLAUDE.md

아래 블록 전체를 CLAUDE.md로 저장하세요.

# Recruiting with Claude Code — Operating Rules

## Goals
- 합법적으로 확보한 LinkedIn/기타 출처의 후보자 데이터를 정규화하고, 특정 직무에 대한 적합도를 점수화하여 상위 후보자에게 개인화 아웃리치를 생성한다.
- 모든 자동화는 재현 가능하며, 수정/감사를 위해 로그와 산출물을 파일로 남긴다.

## Legal & Compliance (MUST)
- **LinkedIn ToS 및 개인정보 보호법 준수.** 스크래핑/자동화 추출 금지 구간은 사용하지 않는다. 데이터는 사용자가 직접 내보낸 CSV 또는 계약된 B2B 데이터 제공자에서만 사용. 고지/동의, 옵트아웃 경로 명시.
- 차별/편향 위험 단어, 민감 속성(나이, 인종, 성별 추정 등) 활용 금지. 메시지에 허위 경력·과장 금지. 모든 메시지는 존중/투명 어조.
- 아웃리치 빈도/캠페인 제한 준수(스팸 방지). `compliance` 서브에이전트가 MUST PASS.

## Data Contract
Expected CSV columns (best-effort mapping accepted):
- `full_name`, `headline`, `location`, `current_title`, `current_company`,
  `experience[]` (title, company, start, end), `skills[]`, `education[]`,
  `urls` (linkedin, github, personal), `notes`
Normalize to `data/processed/profiles.jsonl`.

## Role Profile (Job Target)
- `role_name`: 예) "Founding Backend Engineer"
- `must_have`: 키스킬/연차/도메인 (정규식/키워드/가중치)
- `nice_to_have`: 보너스 스킬/도메인
- `exclude_rules`: 에이전시/적합하지 않은 도메인 등
- 산출: `score_total(0~100)`, `score_breakdown`, `rationale`, `risk_flags[]`

## Tools & Permissions
- 기본 툴: Read/Grep/Glob/Edit/Bash 사용.
- 프로젝트 범위 MCP 서버가 있을 경우 자동 상속. 필요한 경우 `/permissions`로 allowlist 추가. (권장 패턴) :contentReference[oaicite:2]{index=2}

## Standard Workflow
1. `ingestor`로 `data/raw/*.csv` → `profiles.jsonl` 정규화/중복제거/기본 검증.
2. `researcher`로 회사/레포/퍼블릭 활동 요약(웹/깃허브 URL이 있을 때만).
3. `scorer`로 특정 직무 스코어링 및 상위 N명 선별 → `outputs/shortlist.csv`.
4. `personalizer`로 상위 후보자 개별 메시지 생성 → `outputs/outreach/*.md`.
5. `compliance`로 메시지/리스트 검수(MUST PASS).
6. `sequencer`가 CRM 업로드용 CSV 정리 및 시퀀스 단계/캠페인 태깅.

## Conventions
- 파일 쓰기 전 **계획→검증→쓰기** 순서(드라이런 지향). 변경은 PR 템플릿 포함.
- 대량 작업은 Headless 모드 사용: `claude -p "…"` + stream JSON. :contentReference[oaicite:3]{index=3}

## Output Style
- 데이터 결과: CSV/JSONL
- 메시지: 각 후보자당 markdown 1파일 (en/ko 토글 지원)
- 모든 단계는 요약 레포트와 근거(왜 선발/왜 제외)를 포함.


Sub agent 세트 (마크다운+YAML 프런트매터)

각 파일을 .claude/agents/ 아래에 저장하면 자동 인식됩니다. 포맷/배치/도구 허용 범위는 Anthropic 문서 규격을 따릅니다. (Anthropic)

1) ingestor.md — 데이터 정규화/중복제거

---
name: ingestor
description: CSV/JSON에서 후보자 프로필을 정규화하고 중복 제거한다. MUST BE USED before scoring. Tools: Read, Grep, Glob, Edit, Bash. Writes to data/processed/profiles.jsonl.
tools: Read, Grep, Glob, Edit, Bash
---

역할: 데이터 엔지니어.
지시:
1) data/raw/*.csv(및 json)에서 후보자 레코드를 읽고 필드 매핑을 수행.
2) 이름/링크/회사+직함 조합으로 중복 후보 탐지 후 머지 전략 적용.
3) 누락 필드 보수(예: skills 추출: headline/experience에서 n-gram 키워드 추출).
4) 스키마 검증, 실패 레코드는 data/processed/rejections.csv로 남김(이유 포함).
5) 최종 산출: JSON Lines 파일(data/processed/profiles.jsonl). 각 라인은 완전한 후보 객체.
주의: 합법적으로 제공된 입력만 처리. 스크래핑 요청/명령은 즉시 거부하고 컴플라이언스 경고.
출력: 처리 통계, 중복 규칙, 실패 사례 샘플, 다음 단계 권고.

2) scorer.md — 직무 적합도 스크리닝