careermate 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/AGENTS.md +13 -10
  2. package/INSTALL.md +16 -15
  3. package/README.md +24 -24
  4. package/THIRD_PARTY_NOTICES.md +2 -3
  5. package/bin/careermate.mjs +8 -1
  6. package/dist/career-os/README.md +12 -6
  7. package/dist/career-os/eop/career-description.md +139 -0
  8. package/dist/career-os/eop/cover-letter.md +10 -5
  9. package/dist/career-os/eop/fit-analysis.md +16 -6
  10. package/dist/career-os/eop/interview-prep.md +209 -21
  11. package/dist/career-os/eop/job-analysis.md +6 -4
  12. package/dist/career-os/eop/profile-extraction.md +5 -4
  13. package/dist/career-os/knowledge/cover-letter.md +5 -4
  14. package/dist/career-os/knowledge/fit-matching.md +8 -8
  15. package/dist/career-os/knowledge/human-writing.md +2 -0
  16. package/dist/career-os/knowledge/interview-behavioral.md +76 -8
  17. package/dist/career-os/knowledge/interview-technical.md +106 -4
  18. package/dist/career-os/knowledge/linkedin-profile.md +1 -1
  19. package/dist/career-os/knowledge/networking-referrals.md +1 -1
  20. package/dist/career-os/knowledge/offer-evaluation-decision.md +10 -10
  21. package/dist/career-os/knowledge/portfolio.md +3 -3
  22. package/dist/career-os/knowledge/verifiers/ats-compat.md +8 -4
  23. package/dist/career-os/knowledge/verifiers/human-voice.md +4 -2
  24. package/dist/career-os/knowledge/verifiers/recency-staleness.md +1 -1
  25. package/dist/career-os/knowledge/verifiers/responsiveness-on-target.md +2 -2
  26. package/dist/career-os/knowledge/verifiers/truthfulness.md +1 -1
  27. package/dist/doctor.mjs +692 -71
  28. package/dist/mcp.mjs +710 -71
  29. package/dist/migrate.mjs +52 -1
  30. package/dist/public/app.js +42 -16
  31. package/dist/public/i18n/en/applications.js +23 -0
  32. package/dist/public/i18n/en/common.js +22 -0
  33. package/dist/public/i18n/en/documents.js +133 -0
  34. package/dist/public/i18n/en/home.js +75 -0
  35. package/dist/public/i18n/en/interview.js +69 -0
  36. package/dist/public/i18n/en/jobs.js +152 -0
  37. package/dist/public/i18n/en/nav.js +18 -0
  38. package/dist/public/i18n/en/profile.js +201 -0
  39. package/dist/public/i18n/en/settings.js +127 -0
  40. package/dist/public/i18n/en/status.js +22 -0
  41. package/dist/public/i18n/en.js +17 -0
  42. package/dist/public/i18n/ko/applications.js +23 -0
  43. package/dist/public/i18n/ko/common.js +22 -0
  44. package/dist/public/i18n/ko/documents.js +133 -0
  45. package/dist/public/i18n/ko/home.js +63 -0
  46. package/dist/public/i18n/ko/interview.js +69 -0
  47. package/dist/public/i18n/ko/jobs.js +152 -0
  48. package/dist/public/i18n/ko/nav.js +18 -0
  49. package/dist/public/i18n/ko/profile.js +201 -0
  50. package/dist/public/i18n/ko/settings.js +127 -0
  51. package/dist/public/i18n/ko/status.js +23 -0
  52. package/dist/public/i18n/ko.js +18 -0
  53. package/dist/public/i18n.js +55 -0
  54. package/dist/public/index.html +1 -0
  55. package/dist/public/lib.js +24 -17
  56. package/dist/public/pages/applications.js +17 -21
  57. package/dist/public/pages/documents.js +153 -107
  58. package/dist/public/pages/home.js +88 -53
  59. package/dist/public/pages/interview.js +105 -51
  60. package/dist/public/pages/jobs.js +330 -106
  61. package/dist/public/pages/profile.js +157 -152
  62. package/dist/public/pages/settings.js +154 -102
  63. package/dist/public/styles.css +28 -1
  64. package/dist/web.mjs +495 -75
  65. package/docs/FAQ.md +23 -3
  66. package/docs/MCP_TOOLS.md +22 -13
  67. package/docs/START_WORKFLOW.md +3 -3
  68. package/docs/SUPPORTED_AI_APPS.md +13 -0
  69. package/docs/WORKFLOWS.md +77 -20
  70. package/docs/career-os/README.md +12 -6
  71. package/docs/career-os/eop/career-description.md +139 -0
  72. package/docs/career-os/eop/cover-letter.md +10 -5
  73. package/docs/career-os/eop/fit-analysis.md +16 -6
  74. package/docs/career-os/eop/interview-prep.md +209 -21
  75. package/docs/career-os/eop/job-analysis.md +6 -4
  76. package/docs/career-os/eop/profile-extraction.md +5 -4
  77. package/docs/career-os/knowledge/cover-letter.md +5 -4
  78. package/docs/career-os/knowledge/fit-matching.md +8 -8
  79. package/docs/career-os/knowledge/human-writing.md +2 -0
  80. package/docs/career-os/knowledge/interview-behavioral.md +76 -8
  81. package/docs/career-os/knowledge/interview-technical.md +106 -4
  82. package/docs/career-os/knowledge/linkedin-profile.md +1 -1
  83. package/docs/career-os/knowledge/networking-referrals.md +1 -1
  84. package/docs/career-os/knowledge/offer-evaluation-decision.md +10 -10
  85. package/docs/career-os/knowledge/portfolio.md +3 -3
  86. package/docs/career-os/knowledge/verifiers/ats-compat.md +8 -4
  87. package/docs/career-os/knowledge/verifiers/human-voice.md +4 -2
  88. package/docs/career-os/knowledge/verifiers/recency-staleness.md +1 -1
  89. package/docs/career-os/knowledge/verifiers/responsiveness-on-target.md +2 -2
  90. package/docs/career-os/knowledge/verifiers/truthfulness.md +1 -1
  91. package/package.json +2 -2
  92. package/packages/core/src/onboarding.ts +2 -1
  93. package/packages/core/src/services.ts +134 -17
  94. package/packages/core/src/summary.ts +59 -1
  95. package/packages/core/src/verify/lint.ts +4 -0
  96. package/packages/db/src/index.ts +1 -0
  97. package/packages/db/src/repositories.ts +0 -0
  98. package/packages/db/src/schema.ts +17 -0
  99. package/packages/exporters/src/index.ts +28 -17
  100. package/packages/knowledge/src/index.ts +55 -9
  101. package/packages/mcp-tools/src/tools.ts +250 -24
  102. package/packages/mcp-tools/src/update.ts +30 -15
  103. package/packages/parsers/src/documents.ts +12 -1
  104. package/packages/prompts/src/humanize.ts +46 -0
  105. package/packages/prompts/src/index.ts +5 -1
  106. package/packages/prompts/src/install.ts +4 -4
  107. package/packages/prompts/src/onboarding.ts +4 -4
  108. package/packages/prompts/src/system.ts +9 -7
  109. package/packages/shared/src/enums.ts +14 -4
  110. package/packages/shared/src/schemas.ts +41 -0
  111. package/packages/workflows/src/definitions.ts +45 -8
  112. package/scripts/init.ts +284 -13
  113. package/dist/site/analytics.js +0 -97
  114. package/dist/site/favicon.svg +0 -1
  115. package/dist/site/fonts/PretendardVariable.woff2 +0 -0
  116. package/dist/site/icon-180.png +0 -0
  117. package/dist/site/icon-512.png +0 -0
  118. package/dist/site/index.html +0 -465
  119. package/dist/site/landing.js +0 -163
  120. package/dist/site/llms-install.txt +0 -218
  121. package/dist/site/robots.txt +0 -4
  122. package/dist/site/sitemap.xml +0 -21
  123. package/dist/site/start.html +0 -356
  124. package/dist/site/style.css +0 -665
  125. package/dist/site/vercel.json +0 -20
@@ -0,0 +1,139 @@
1
+ # EOP — 경력기술서 / Career Description
2
+
3
+ > 외부 LLM 실행 지침. 이 절차를 따르면 단순 이력서 요약이 아니라 **채용 담당자가 빠르게 검증할 수 있는 제출용 경력기술서**가 나온다.
4
+ > **지식 출처(deep reference, 먼저 읽어라):** [`../knowledge/resume.md`](../knowledge/resume.md)(국문 경력기술서 원칙·Do/Don't·Before→After·R1~R9 루브릭) · [`../knowledge/ats.md`](../knowledge/ats.md)(ATS/문항형 지원서 분기·키워드·파싱 안전성) · 검증기 [`../knowledge/verifiers/truthfulness.md`](../knowledge/verifiers/truthfulness.md)·[`consistency.md`](../knowledge/verifiers/consistency.md)·[`ats-compat.md`](../knowledge/verifiers/ats-compat.md). 이 EOP는 그 플레이북을 *실행 절차*로 압축한 얇은 층이다 — 작성 시 해당 knowledge 문서를 함께 적용한다.
5
+ > 근거(보강 리서치): [`../validation/research/job-analysis-and-profile.md`](../validation/research/job-analysis-and-profile.md) §B. 먼저 [README](../README.md) §0·§3 적용.
6
+
7
+ ## 0. 전문가 프레임
8
+
9
+ - 경력기술서 = **실행·성과·검증 가능한 증거**를 구조화한 문서다. 자기소개서처럼 동기·감정·배움을 길게 쓰지 않는다.
10
+ - 이력서는 목록과 요약, 경력기술서는 **역할별 문제-행동-결과의 밀도**, 포트폴리오는 **사례·산출물·맥락 증명**이 중심이다. 세 문서를 병합하지 않는다. 경력기술서 작성 규범은 이 EOP·`resume` 정본이 소유하고, 포트폴리오 항목 규범(`case_study` 3막·증거 링크)은 `knowledge/portfolio.md`가 소유한다 — 서로 재정의하지 않는다.
11
+ - 좋은 경력기술서는 평가자가 30초 안에 "무슨 일을 했고, 어느 정도 규모였고, 무엇이 달라졌는지"를 찾을 수 있어야 한다.
12
+ - 국문 `~을 담당`은 금지어가 아니다. 다만 `담당`만 있고 범위·행동·성과가 없으면 직무 나열에 그친다.
13
+ - 수치·회사명·기간·직책·기술명은 저장 데이터 또는 사용자 제공 자료에 앵커한다. **없는 성과 수치를 발명하지 마라.**
14
+
15
+ ## 1. 입력 수집
16
+
17
+ 먼저 저장된 프로필, 대표 이력서, 기존 경력기술서, 경력, 프로젝트, 스킬을 모두 읽는다. 사용자가 파일 경로를 주면 `read_document`, 인입 폴더를 쓴 경우에는 `read_inbox`로 본문을 읽는다.
18
+
19
+ 입력 문서가 이미 경력기술서면 새로 꾸며 쓰기 전에 원문을 보존해 저장·개선한다. 입력 문서가 이력서/포트폴리오/자기소개서라면 문서 성격을 구분해 필요한 사실만 추출한다. 자기소개서의 동기·감정 문장은 경력기술서 본문으로 그대로 옮기지 않는다.
20
+
21
+ 저장된 자료와 새 자료가 충돌하면 임의로 합치지 말고 충돌 사실을 표시한다. 회사명, 직책, 기간, 수치, 기술명, 자격증, 학교명은 원문을 보존한다.
22
+
23
+ ## 2. 작성 목적 분류
24
+
25
+ 작성 전에 아래 중 무엇인지 확인한다.
26
+
27
+ 1. **범용 마스터본:** 여러 지원에 재사용할 기본 경력기술서.
28
+ 2. **특정 직무/공고용:** 공고의 필수 요건과 반복 키워드를 반영하되, 실제 경험 밖으로 확장하지 않는다.
29
+ 3. **신입/무경력 역량기술서:** 경력을 날조하지 않고 프로젝트·교육·활동·운영 경험을 직무 역량 증거로 정리한다.
30
+ 4. **포트폴리오 보조 문서:** 링크/산출물의 배경, 역할, 의사결정, 결과를 요약해 포트폴리오를 설명한다.
31
+
32
+ 대상 공고가 있으면 must-have와 preferred를 분리하고, must-have는 실제 근거가 있는 경험에만 연결한다. 키워드는 "나열"이 아니라 역할·성과 문장 안에 자연스럽게 넣는다.
33
+
34
+ ## 3. 구조
35
+
36
+ 권장 구조:
37
+
38
+ 1. 제목: 용도와 직무가 보이는 제목. 예: `B2B SaaS 운영/CS 경력기술서`, `백엔드 개발 경력기술서`.
39
+ 2. 핵심 요약: 3~5줄. 연차/직무축/산업/강점/대표 성과를 압축한다.
40
+ 3. 핵심 역량: 직무 키워드 5~10개. `성실함`, `소통`, `다양한 업무` 같은 넓은 일반어로 채우지 않는다.
41
+ 4. 경력 또는 프로젝트: 회사/조직, 기간, 역할, 환경/도구, 문제, 행동, 결과.
42
+ 5. 주요 성과: 수치가 있으면 원문 기준으로 쓰고, 없으면 범위·규모·빈도·산출물처럼 검증 가능한 정보만 쓴다.
43
+ 6. 기술/도구/자격: 실제 사용 또는 보유한 것만 분리한다. 전사 보유 스킬(예: Next.js)을 저장이 묶지 않은 특정 프로젝트의 사용기술로 단정 귀속하지 않는다 — 도구·기술은 저장 데이터가 묶은 범위(프로젝트·경력) 안에서만 표기한다. <!-- applied: r7-career-description / R7 cross-vendor PASS cd-s1=82·cd-s2=92 / 2026-06-20 -->
44
+ 7. 확인 필요 항목: 근거가 부족한 수치·기간·성과는 제출 본문에 섞지 말고 별도 메모로 남긴다.
45
+
46
+ 각 경력/프로젝트 블록은 가능하면 아래 순서를 따른다.
47
+
48
+ ```text
49
+ 회사/조직 | 기간 | 역할
50
+ - 문제/목표:
51
+ - 담당 범위:
52
+ - 주요 실행:
53
+ - 결과/성과:
54
+ - 사용 도구/기술:
55
+ ```
56
+
57
+ 지원서 입력칸이 자유 서술형이면 위 구조를 Markdown/불릿 중심으로 쓰고, 회사 양식이 표를 요구하면 항목명은 유지하되 내용은 짧은 불릿으로 압축한다. ATS 제출용 자유양식은 단일 컬럼, 표준 섹션명, 선택 가능한 텍스트를 우선한다.
58
+
59
+ ## 4. 불릿 작성 원칙
60
+
61
+ 각 불릿을 `책임(responsibility)`과 `성과(achievement)`로 구분한다. 책임 불릿은 역할 범위 설명이고, 성과 불릿은 후보자의 행동 때문에 달라진 결과다. 책임을 가짜 숫자로 성과처럼 격상하지 않는다.
62
+
63
+ 문장 언어를 사람답게 다듬을 때는 `get_writing_style_guide`에 `doc_type='career_description'`을 주어 받은 보정 지침을 적용한다 — 번역투·클리셰·수동태·공허한 일반론은 자기소개서와 똑같이 제거하되, 불릿·번호 성과·섹션 같은 스캔 가능한 구조는 산문으로 풀지 말고 보존한다(경력기술서는 읽는 게 아니라 스캔되는 문서다).
64
+
65
+ 좋은 성과 불릿은 다음 3요소 중 가능한 만큼 담는다.
66
+
67
+ - 무엇을 바꿨는가: 개선·단축·증가·감소·구축·표준화·운영.
68
+ - 얼마나/어떤 규모였는가: 건수, 기간, 사용자 수, 예산, 전후 비교, 처리량, 산출물 수.
69
+ - 어떻게 했는가: 도구, 프로세스, 협업 방식, 분석/개선 방법.
70
+
71
+ 수치가 없으면 `약 30% 향상` 같은 숫자를 만들지 않는다. 대신 `월 단위 정기 리포트`, `3개 부서 협업`, `고객 문의 유형별 FAQ 정리`, `운영 체크리스트 표준화`처럼 실제로 말할 수 있는 범위와 산출물을 쓴다.
72
+
73
+ 저장된 전후값은 **저장된 형태 그대로** 쓰고, 거기서 비율·배수를 계산해 단정하지 않는다. 예: 저장이 `14,000→9,800`이면 그대로 쓰거나 `감소`로만 표현하고 `약 30% 감소`로 바꾸지 않으며, `1,200→2,000`을 `약 1.7배`로 환산하지 않는다(출처 없는 파생 수치). 비율·배수가 원문에 명시돼 있을 때만 그 수치를 쓴다. <!-- applied: r7-career-description / R7 cross-vendor PASS (FIXES.md P2 파생수치) / 2026-06-20 -->
74
+
75
+ ### Before → After 예시
76
+
77
+ 1. **Before:** SNS 채널 운영 및 콘텐츠 제작을 담당함.
78
+ **After:** 주간 콘텐츠 캘린더를 운영하고 카드뉴스·숏폼 콘텐츠를 제작해 캠페인별 게시 일정과 성과 리포트를 표준화함. 실제 지표가 확인되면 도달률·전환율·팔로워 증감 수치를 반영한다.
79
+ **왜 더 나은가:** Before는 업무명만 있다. After는 행동, 산출물, 확인 가능한 보강 지점을 분리해 가짜 수치 없이 평가자가 역할을 이해하게 한다.
80
+
81
+ 2. **Before:** 팀 프로젝트에 참여하여 서비스 기획을 경험함.
82
+ **After:** 사용자 인터뷰 결과를 기능 요구사항으로 정리하고 화면 흐름도를 작성해 팀의 MVP 범위를 확정하는 데 기여함. 인터뷰 건수·팀 규모·제출 산출물이 원문에 있으면 함께 표기한다.
83
+ **왜 더 나은가:** 신입/무경력 상황에서도 경력을 만든 척하지 않고, 실제 행동과 산출물 중심의 역량 증거로 바꾼다.
84
+
85
+ 3. **Before:** 고객 응대 업무를 담당했고 책임감 있게 일함.
86
+ **After:** 고객 문의 유형을 분류해 응대 템플릿과 FAQ를 정리하고, 반복 문의 처리 기준을 문서화함. 처리 건수·CSAT·처리 시간 단축이 확인된 경우에만 성과 수치로 반영한다.
87
+ **왜 더 나은가:** `책임감` 같은 평가어를 빼고, 면접에서 설명 가능한 행동·산출물·검증 필요 수치를 구분한다.
88
+
89
+ ## 5. 무경력/비개발자 분기
90
+
91
+ 정규 경력이 없으면 경력을 만든 것처럼 쓰지 않는다. 문서명도 필요하면 `역량기술서` 또는 `프로젝트 기반 경력기술서`로 둔다.
92
+
93
+ - 아르바이트, 운영, 학회, 동아리, 과제, 교육 과정, 봉사, 개인 프로젝트에서 직무와 관련된 행동을 추출한다.
94
+ - 성과 수치가 없으면 처리 규모, 사용 도구, 산출물, 협업 방식, 개선한 점으로 증거를 구성한다.
95
+ - 비개발자는 기술 스택 중심으로 몰아가지 말고 직무 도구, 업무 프로세스, 고객/데이터/문서/운영 경험을 중심으로 쓴다.
96
+ - 포트폴리오가 있으면 산출물 링크와 본인 역할을 분리해 적는다. 공동 작업은 본인 기여 범위를 과장하지 않는다.
97
+
98
+ ## 6. 출력 계약
99
+
100
+ 사용자에게는 제출용 경력기술서 본문과 검토 메모를 분리해 보여준다.
101
+
102
+ **① 제출용 경력기술서 본문** — 먼저 제시한다. Markdown/불릿 중심으로, 그대로 저장하거나 지원서에 붙여넣을 수 있게 작성한다. 내부 판단, 루브릭명, 도구명, 검증 과정은 본문에 넣지 않는다.
103
+
104
+ **② 검토 메모 (제출하지 않음)** — 별도로 제시한다.
105
+
106
+ - 근거: 사용한 이력서/프로필/프로젝트/공고 요건.
107
+ - 확인 필요: 수치, 기간, 직책, 기술 숙련도, 본인 기여 범위.
108
+ - 리스크: 근거 부족 성과, 공고 키워드 미충족, 이력서와 충돌하는 표현.
109
+ - 다음 단계: 특정 공고용 수정, 자기소개서 작성, 포트폴리오 연결.
110
+ - 자가검증: §7 루브릭 점검 결과. 이 메모와 리스크·다음 단계는 모두 ②에만 두고 ① 제출 본문에 섞지 않는다.
111
+
112
+ 저장은 `add_resume`으로 한다. 경력기술서 작성 산출물은 `kind=career_description`, `source=ai`를 사용하고, 제목은 사용 목적이 드러나게 쓴다. 대표 문서 지정은 사용자가 동의했을 때만 한다.
113
+
114
+ **자소서·이력서 등을 한 턴에 함께 요청받았더라도, 경력기술서 저장 content엔 경력기술서 본문만 넣는다.** 자기소개서는 별도로 `save_cover_letter_version`에 저장하고, 한 번의 `add_resume` 호출 본문에 자소서·이력서 같은 다른 문서를 이어붙이지 않는다(작성은 한 답변에 둘 다 보여줘도, *저장은 문서별 도구로 분리*한다).
115
+
116
+ ## 7. 자가검증 루브릭
117
+
118
+ 저장 직전 아래 기준으로 스스로 점검하고 수정한다.
119
+
120
+ **CRITICAL(하나라도 → 저장 전 수정/질문):**
121
+ - C1 회사명·기간·직책·학력·자격·수치가 저장 자료 또는 사용자 제공 자료와 다름.
122
+ - C2 원문에 없는 성과 수치, 도구, 문제 원인, 기여 범위를 발명함. 저장된 전후값에서 비율·배수(예: `약 30%`, `약 1.7배`)를 임의로 환산하거나, 도구·기술을 저장이 묶지 않은 프로젝트에 귀속한 경우 포함. <!-- applied: r7-career-description / R7 cross-vendor PASS cd-s1=82·cd-s2=92 / 2026-06-20 -->
123
+ - C3 자기소개서 문장을 그대로 옮겨 동기·감정 중심 산문이 됨.
124
+ - C4 이력서/프로필/프로젝트와 기간·역할·성과가 충돌함.
125
+ - C5 공동 작업을 개인 단독 성과로 과장함.
126
+ - C6 한 저장 본문에 경력기술서와 다른 문서(자기소개서 등)가 함께 들어 있음 — `add_resume` content엔 경력기술서만, 자소서는 `save_cover_letter_version`으로 분리 저장.
127
+
128
+ **MAJOR:**
129
+ - M1 직무 나열만 있고 행동·산출물·성과가 없음.
130
+ - M2 `담당`, `참여`, `지원`, `노력` 같은 약한 표현만 반복됨.
131
+ - M3 공고용인데 must-have 키워드가 실제 경험 문장 안에 반영되지 않음.
132
+ - M4 수치가 모두 연도·버전·기간 같은 맥락 숫자이고 결과 임팩트가 없음.
133
+ - M5 핵심 요약, 역량, 대표 성과를 30초 안에 찾기 어려움.
134
+ - M6 ATS 제출용인데 다단, 이미지 텍스트, 비표준 섹션명, 키워드 스터핑 위험이 있음.
135
+
136
+ **MINOR:**
137
+ - 불릿 길이 불균형, 시제/날짜 표기 불일치, 중복 표현, 지나친 전문용어, 개인정보 과다.
138
+
139
+ **통과 = CRITICAL 0 + MAJOR 0 + 확인 불가 수치 별도 메모 + 경력기술서/자기소개서/포트폴리오 목적 분리.**
@@ -8,20 +8,23 @@
8
8
  - 자소서 = **특정 회사·직무를 겨냥한 설득 문서**(이력서 산문화 아님). 리크루터가 수십~수백 편을 스캔 → 첫 문장에 핵심이 꽂혀야 한다.
9
9
  - 합격 패턴: **두괄식 · 항목별 소제목 · STAR-lite(A~60%) · 활동이 아닌 델타 정량화 · 회사 고유성 · 인재상/직무 키워드 매핑.**
10
10
  - **각 문항엔 숨은 평가 의도** — 문자 그대로가 아니라 의도에 답한다(아래 §2-2).
11
- - 한국은 **AI 텍스트 탐지(GPT킬러·무하유)가 실재하는 게이팅 레이어** → 구체·고유·다양한 문장을 쓰고 슬롭 어휘를 금지하면 품질과 탐지 회피를 동시에 충족한다.
11
+ - **(ko 로케일·한국 지원 시)** 한국은 **AI 텍스트 탐지(GPT킬러·무하유)가 실재하는 게이팅 레이어** → 구체·고유·다양한 문장을 쓰고 슬롭 어휘를 금지하면 품질과 탐지 회피를 동시에 충족한다. (비한국 시장에서는 이 탐지 게이트를 전제하지 말 것.)
12
12
  - 사실·수치·고유명사는 저장 데이터에 앵커. **없는 수치를 발명하지 마라**(면접에서 즉시 무너진다). 근거 없으면 약한 주장을 빼되 숫자를 지어내지 않는다.
13
13
 
14
14
  ## 1. 입력 수집
15
15
  `get_application_context` → profile·대표 resume·경력/프로젝트·대상 job·기존 자소서·선호 문체. 사용자가 파일을 주면 `read_document`. 부족하면 사용자 확인.
16
+ **기존 자소서는 참고용이지 템플릿이 아니다(자기복제 주의).** 전문을 그대로 따라 쓰지 마라 — 특히 직전 자소서 1편을 변주만 하는 실패가 잦다. 합격 신호가 있는 과거 자소서(연결된 지원 status가 `document_passed` 이상 — `recent_applications`에서 `cover_letter_id`로 확인)가 있으면 그 *구조·앵글*을 참고하되 본문은 새로 쓴다. 차별화 절차는 §2-3.
16
17
  판정: **로케일**(ko 문항형 vs en 단일 레터), **문항 유형**(지원동기/성장과정/직무역량/입사후포부/약점·갈등), **글자수 상·하한과 count_mode**(공백포함/제외/byte — 실제 지원 필드로 검증; 미지정 시 공백포함 기본).
18
+ **문항·양식·글자수가 컨텍스트/공고에 없으면 작성 전 사용자에게 요청한다**(문항 텍스트·제출 양식·글자수 — 추측·임의 양식 금지). 끝내 없으면 일반 양식으로 진행함을 명시한다.
17
19
 
18
20
  ## 2. 분석·작성 절차
19
21
  1. **회사 리서치**(company-research): 미션·사업·제품·최근 활동·인재상 → 본인과 연결할 고유 포인트 확보.
20
- 2. **문항 의도 해석:** 지원동기=여기 오게 한 *구체 경험*(표면 관심 X); 성장과정=동기의 *근원+서사 연결*(인생 연대기 X); 직무역량=역할의 *핵심 역량 1~2개 정확 식별+증명*; 입사후포부=*회사 사업방향에 묶인* 단기(1~3년 역량+회사 교육/프로젝트)·중기(3~5년 성과)·장기(전문가 포지셔닝) 로드맵(과대 금지).
22
+ 2. **문항 의도 해석:** 지원동기=여기 오게 한 *구체 경험*(표면 관심 X); 성장과정=동기의 *근원+서사 연결*(인생 연대기 X); 직무역량=역할의 *핵심 역량 1~2개 정확 식별+증명*; 입사후포부=*회사 사업방향에 묶인* 단기·중기·장기(전문가 포지셔닝) 로드맵(과대 금지). **연차 수치(1~3년 등)는 일반 로드맵 골격일 때만 — 본인 기여·성과에 '입사 후 1~2년은'처럼 저장·공고에 없는 기간을 단정하지 마라(출처 밖 기간 단정=C4).** <!-- applied: r7-cover-letter / R7 cross-vendor PASS cl-s1=94 PERFECT (opus생성·codex채점) / 2026-06-20 -->
21
23
  3. **본인 증거 매핑:** 저장 경력/프로젝트에서 문항·역량을 증명할 경험 **1~2개를 깊게** 선택(얕게 5~6개 나열 금지).
24
+ - **기존 자소서 차별화(있을 때 — 자기복제 방지):** 기존 자소서는 *참고*지 *템플릿*이 아니다. **(1) 사실은 일관되게** — 경험·수치·고유명사·사용자 보이스는 공고가 달라도 같아야 하며, 자기복제를 피하려고 억지로 비틀지 마라(사실 왜곡 = C4). **(2) 프레이밍·산문은 새로** — 직무 적합 앵글·why-this-company·도입 훅·문장 표현은 이 공고에 맞춰 새로 짠다. 같은 대표 경험을 또 쓸 거면 *이 공고의 요구역량·인재상에 맞는 다른 각*으로 재프레이밍하고, 가능하면 *다른 경험*으로 다양화한다. **직전 자소서를 회사명·일부 토큰만 바꿔 따라 쓰지 마라(가장 흔한 실패).**
22
25
  4. **초안 작성:** 항목별 **소제목** + **두괄식**(핵심 결론 먼저) → **STAR-lite**(S/T 짧게, A에 무게, R=전후 델타 정량) → **직무/인재상 명시 연결**. 회사 고유 근거 1~3문장("회사명 placeholder로 바꾸면 어색"이어야 함). 글자수 **상한의 ~70%+를 채우되**, 입사후포부는 앞 문단과 **다른 새 기여**로(같은 성과·표현 반복 금지).
23
- - **STAR 앵커 우선(사실 변경 금지·표현 강화 허용):** Action/Result는 저장된 '한 일'(도입·적용·운영·분석한 것)과 저장된 결과에 앵커한다. 저장된 행위·맥락은 풍부하게 서술해도 좋다(평가자가 중시하는 경험 서술형 환영). **금지는 발명뿐** — 저장 근거가 없는 진단 결과·방법/도구·원인 규명·실패율·문서화·후속 성과를 새로 지어내지 마라. 저장에 없는 과정을 꼭 암시해야 하면 "기록/근거로 범위를 좁혔다" 수준의 중립 한 구절까지만. <!-- consensus: claude opus/sonnet/haiku 만장일치(haiku 반대→해소). codex cross-vendor 재확인 미완(사용량 소진) — 2-vendor 게이트 미충족 항목, R5·R6 clean에 간접 반영. 2026-06-18 -->
24
- - **프레이밍 경계(작성·평가 공통):** 일반 도메인 원리는 *후보 귀속 없이* 맥락으로 OK. 비즈니스 임팩트·문제 프레이밍은 *저장된 성과/지표가 암시하는 범위 안*에서만. **(아래 예시는 IT 직군 하나의 예일 뿐 — 원리는 전 직군 동일: 영업=매출/전환 기록, 운영·생산=처리량/불량률 기록, 마케팅=유입/전환 기록 등.)** 예: p99 개선 기록 → "느린 구간을 좁혀" OK / 기록 없는 "결제 경험을 해치던" 단정 금지. 사고·이유 귀속은 *저장된 결정·행동이 논리적으로 함의할 때만*(예: "Kafka 보류 결정" 저장 → "복잡도 대비 효과가 적어 보류" OK / "새 기술보다 ~가 낫다고 봤다"식 새 판단 삽입 금지). **금지:** 후보가 측정·관찰·확인했다는 행위, 출처에 없는 중간 지표(A/B를 "클릭"으로 특정), 진단 결과·원인·감정·의도를 후보의 사실로 단정. <!-- consensus: claude opus/sonnet/haiku 만장일치. codex 재확인 미완(사용량 소진). 2026-06-18 -->
26
+ - **STAR 앵커 우선(사실 변경 금지·표현 강화 허용):** Action/Result는 저장된 '한 일'(도입·적용·운영·분석한 것)과 저장된 결과에 앵커한다. 저장된 행위·맥락은 풍부하게 서술해도 좋다(평가자가 중시하는 경험 서술형 환영). **금지는 발명뿐** — 저장 근거가 없는 진단 결과·방법/도구·원인 규명·실패율·문서화·후속 성과를 새로 지어내지 마라. 저장에 없는 과정을 꼭 암시해야 하면 "기록/근거로 범위를 좁혔다" 수준의 중립 한 구절까지만. <!-- applied: P4-star-anchor / closed 2026-06-20 — codex 규칙-텍스트 전용 표결 agree(4/4) + claude 3모델 만장일치 + R7 산출물 PASS 간접지지(cl-s1=94 opus생성·codex채점 / cl-s2 codex생성 90 PASS) -->
27
+ - **프레이밍 경계(작성·평가 공통):** 일반 도메인 원리는 *후보 귀속 없이* 맥락으로 OK. 비즈니스 임팩트·문제 프레이밍은 *저장된 성과/지표가 암시하는 범위 안*에서만. **(아래 예시는 IT 직군 하나의 예일 뿐 — 원리는 전 직군 동일: 영업=매출/전환 기록, 운영·생산=처리량/불량률 기록, 마케팅=유입/전환 기록 등.)** 예: p99 개선 기록 → "느린 구간을 좁혀" OK / 기록 없는 "결제 경험을 해치던" 단정 금지. 사고·이유 귀속은 *저장된 결정·행동이 논리적으로 함의할 때만*(예: "Kafka 보류 결정" 저장 → "복잡도 대비 효과가 적어 보류" OK / "새 기술보다 ~가 낫다고 봤다"식 새 판단 삽입 금지). **금지:** 후보가 측정·관찰·확인했다는 행위, 출처에 없는 중간 지표(A/B를 "클릭"으로 특정), 출처에 없는 파생 정확수치(%·배수) 단정(저장 전후값은 그대로 쓰거나 "절반 이하로" 같은 정성 표현만 허용), 진단 결과·원인·감정·의도를 후보의 사실로 단정. **수치·고유명사는 저장 데이터의 범위·채널·주체 그대로 쓴다('캠페인 누적'을 '인스타그램 누적'으로 좁히듯 채널/주체 재귀속 금지). 학습·기초만 저장된 것을 수행으로 승격하지 마라('SQL 기초 학습'+'주간 리포트 작성'→"SQL로 데이터를 추출해 리포트 작성"식 연결 단정 금지).** <!-- applied: fact-anchor-boundary / closed 2026-06-20 — codex 규칙-텍스트 전용 표결 agree(4/4) + claude 3모델 만장일치 + R7 경계강화 cross-vendor PASS 간접지지 -->
25
28
  5. **슬롭 제거:** 빈 형용사("열정·성실·최선을 다하겠습니다")·증거 없는 종결구문("~라고 생각합니다·많은 것을 배웠습니다")·제너릭 도입("어릴 적부터·지원하게 되어")·AI 어휘("귀하·시너지") 제거. human-writing 가이드(`get_writing_style_guide`) 적용.
26
29
  6. **규칙 점검:** 글자수 상·하한(byte/char) · 지정 양식 · 블라인드(공공: 직무무관 개인정보·학교·지역·가족·사진 금지).
27
30
 
@@ -30,6 +33,8 @@
30
33
  - **EN 단일 레터:** hook → fit(증거) → why-this-company → close, 1페이지(≈250~400단어), 능동태, 수신자 실명 리서치, **고용주 관점**(내가 줄 가치), ATS 안전 포맷(표/컬럼/머리말 금지·본문에 연락처), JD 키워드를 증거 문장 안에.
31
34
 
32
35
  ## 4. 출력 계약 (사용자 대면)
36
+ **출력 언어:** 검토 메모·안내문은 **사용자의 대화 언어**, 자소서 본문은 **§3 로케일**(대상 공고 언어·시장)을 따른다 — 둘은 다를 수 있다.
37
+
33
38
  **제출용 산출물과 검토 메모를 명확히 분리한다** — 자소서는 입력창에 *본문만* 들어가므로 메타(결론·근거 등)가 섞이면 그대로 제출되어 양식 위반이 된다.
34
39
 
35
40
  **① 제출용 자소서 본문** — 먼저 제시한다. 코드펜스로 감싼 단독 블록 **안에는 자소서 본문만** 넣는다(화살표·글자수·안내문·문항 해설·결론/근거 등 메타 일체 금지). "이 안만 지원서에 붙여넣으세요" 안내와 글자수 표기는 **블록 밖 한 줄**로 둔다. 문항별 또는 단일 레터, 글자수 제약 준수. <!-- applied: C3 cl-marker / 2026-06-18 / reconfirm 4/4 (codex·opus·sonnet·haiku) -->
@@ -40,7 +45,7 @@
40
45
  내부 루브릭·도구명·이 EOP는 노출하지 않는다. 결과 저장은 `save_cover_letter_version`, 안내는 대시보드 링크.
41
46
 
42
47
  ## 5. 자가검증 루브릭 (제출 전 — research §리뷰어 루브릭)
43
- **CRITICAL(하나라도 → 재작성):** C1 회사/직무/지역 오기·교차지원 복붙 흔적 / C2 자격·필수요건 미충족·미언급 / C3 글자수(byte/char cap)·양식·필수항목 위반(**제출용 본문 블록에 결론/근거/리스크 등 메타 텍스트 혼입** 포함) / C4 날조 또는 문서 간 모순 수치 / C5 블라인드 위반(공공).
48
+ **CRITICAL(하나라도 → 재작성):** C1 회사/직무/지역 오기·교차지원 복붙 흔적·**기존 자소서 템플릿 복제**(다른 공고인데 직무 적합 앵글·도입·산문이 직전 자소서와 거의 같아 회사명만 바뀐 수준 — *단 사실·수치·고유명사·보이스의 일관성은 정상이며 억지 변형 금지*; 문제는 프레이밍·문장의 무차별 carryover다) / C2 자격·필수요건 미충족·미언급 / C3 글자수(byte/char cap)·양식·필수항목 위반(**제출용 본문 블록에 결론/근거/리스크 등 메타 텍스트 혼입** 포함) / C4 날조 또는 문서 간 모순 수치(**수치·고유명사는 저장 데이터의 범위·채널·주체 그대로 쓴다 — '캠페인 누적'을 '인스타그램 누적'처럼 더 좁은 채널/주체로 재귀속(범위 변경)하거나, 저장·공고에 없는 정확수치·기간·비율('입사 후 1~2년'·%·배수)을 단정하면 C4 날조**) / C5 블라인드 위반(공공). <!-- applied: r7-cover-letter / §5 C4 채널 재귀속·파생수치 경계 (R7 cross-vendor PASS) / 2026-06-20 -->
44
49
  **MAJOR:** M1 제너릭·비고유 지원동기(why-this-company 증명 없음) / M2 핵심 성과에 정량 결과 없음(노력어 의존) / M3 경험을 요구 역량/직무에 미연결(문항 의도 놓침) / M4 두괄식·소제목 약함 / M5 빈 형용사 슬롭·AI 균일 / M6 입사후포부 과대·사업방향 무관.
45
50
  **MINOR:** 오탈자·맞춤법 / 상한 대비 과소·과패딩 / 수동·약한 동사·"나" 관점(영문) / 항목 중복·불균등 가중 / (영문) 수신자 결함.
46
51
  **통과 = CRITICAL 0 + MAJOR 0 + 슬롭/제너릭 없음 + 모든 수치가 저장 데이터에 앵커.**
@@ -11,7 +11,16 @@
11
11
  - 전이가능 스킬은 **자기주장이 아니라 행동 증거**로만 인정.
12
12
  - 과적합(overqualified)은 자동 탈락이 아니라 **리스크+완화질문**으로 표시.
13
13
  - 전역 직감 점수 금지 — **요건별로 증거를 인용하고 강도 등급**을 매긴다(구조화 채점이 인상 채점을 이긴다).
14
- - 높은 키워드 커버리지를 높은 적합으로 등치하지 않는다(>75~80%는 스터핑 신호).
14
+ - 높은 키워드 커버리지를 높은 적합으로 등치하지 않는다(여기 커버리지=*이력서의 JD 키워드 밀도*, >75~80%는 스터핑 신호 — [job-analysis](job-analysis.md) §0의 요건 *충족 %*와는 다른 축이며 둘 다 합격 게이트가 아니다).
15
+
16
+ ## 0a. 발명 차단 — 사실 span 앵커 (판정영향 주장만)
17
+ <!-- applied: r12-fit-contract-invention / 2026-06-21 (consensus R3 전원 agree; 결함-발생률 게이트) -->
18
+
19
+ - **판정영향** = MUST 녹아웃 게이트 또는 최종 밴드를 바꾸는 주장. 판정영향 사실주장·수치·레벨·운영속성·연차 환산은 **공고+이력의 사실 span 또는 명시 기준일**에 앵커해야 한다(두 출처 밖이면 계약 위반). 판정에 무관한 단순 서술은 자유.
20
+ - **라벨 필요(`[추정 — 출처에 없음]` + 불확실성):** 밴드/녹아웃에 영향 주는 추론 — 레벨 단정('시니어급/미드급'), 부재 단정('온보딩 없음'·'무중단 운영'), 성격 프레임('법적 자격 성격'). 동사 레지스터 레벨 추론(§3)도 단정이 아니라 이 라벨로 표기.
21
+ - **라벨 불요(과잉 라벨 금지):** 동의어 연결('Spring=Spring Framework'), 공고에 명시된 NCS 능력단위 매핑, 강도 등급(Strong/Moderate/Weak), 단순 요약.
22
+ - **연차/기준일:** MUST 녹아웃이 연차('N년 이상')에 의존할 때만 판정영향 → 평가 기준일이 출처에 없으면 `[기준일 미제공 — 환산 불가]`로 두고 저장 연차 vs 요건 연차를 **정성 비교만**(숫자 환산 금지). 기준일이 주어질 때만 명시 산술. 연차가 녹아웃에 무관하면 정성 맥락으로만.
23
+ - 없는 운영속성(무중단·고가용성·대규모 등) 단정 금지 — 출처의 수치·도구만 인용(예: 'p99 800→320ms' 인용 가능 / '무중단' 금지). 라벨 경계는 [job-analysis](job-analysis.md) §0 부재 규칙과 동기화(fit는 공고+이력 2출처라 '추정 — 출처에 없음'이 '공고에 언급 없음'보다 정확 — 의도적 차이).
15
24
 
16
25
  ## 1. 입력 수집
17
26
  `get_application_context`를 먼저 호출 → profile·대표 resume·경력/스킬·대상 job(requirements/keywords/직무내용). 공고가 파일/URL이면 사용자가 준 경로를 `read_document`로 읽거나 본문을 받는다. 부족한 정보는 지어내지 말고 사용자에게 확인.
@@ -20,18 +29,19 @@
20
29
  1. **JD 원자 분해** → 3버킷: 필수/MUST(녹아웃) · 우대/PREFERRED(가점) · 맥락/CONTEXT(직무·환경, 관련성 판단용). 각 요건은 단일 검증가능 주장.
21
30
  2. **녹아웃 먼저 게이트.** 각 MUST = 충족/미충족/확인필요. 하드 MUST 하나라도 미충족(법적 자격·필수 자격증·진짜 시니어의 "N년 이상") → 나머지와 무관하게 최종 **낮음/FAIL**, 어떤 녹아웃인지 명시. 녹아웃이 확인필요 → 통과 불가, blocking missing-info.
22
31
  3. **요건별 증거 매핑(핵심).** 각 요건 ← 정확한 resume 증거(프로젝트·역할·지표·맥락 내 도구) → 강도: **Strong**(했음+성과/지표) / **Moderate**(인접·전이) / **Weak**(언급, 증거無) / **None**. 키워드만 있고 행동 증거 없으면 **Weak**(매치 아님).
23
- 4. **가중 채점(평균 아님).** MUST는 게이트. 충족분 중 관련경험 > 맥락 내 하드스킬 > 자격 > 우대 순 가중. 우대는 상방만 더하고 부재는 무감점. 밴드(높음/중간/낮음 또는 0–100)를 추론과 함께 제시.
32
+ 4. **가중 채점(평균 아님).** MUST는 게이트. 충족분 중 관련경험 > 맥락 내 하드스킬 > 자격 > 우대 순 가중. 우대는 상방만 더하고 부재는 무감점. **종합 점수(0~100 정수)와 밴드(높음/중간/낮음)를 함께** 추론과 함께 제시한다(둘 중 하나만 제시는 계약 위반; 점수↔밴드↔근거 일관 — 녹아웃 미충족이면 낮음 밴드).
24
33
  5. **리스크/레드플래그를 점수와 분리.** 과적합·미설명 공백기·짧은 근속·스코프 미스매치(IC가 리드 지원, 리드 증거無)·도메인 미스매치 → **면접 확인 항목**(감점 아님, 진짜 녹아웃 제외).
25
34
  6. **미싱인포 정직 선언.** resume가 침묵하는 요건 = "확인 필요"(가정된 통과/탈락 금지). 녹아웃급 미상은 verdict 보류, 우대급 미상은 신뢰도만 하향.
26
35
 
27
- ## 3. 한국 시장 특수
36
+ ## 3. 한국 시장 특수 (ko 로케일·한국 공고 지원 시에만 — 비한국 공고는 해당 시장 기준)
28
37
  - 자격요건 우산 안의 **필수**(자격증·어학·법적 요건)가 진짜 녹아웃. **우대**=가점이나 반복·강조·시니어 역할이면 *사실상 필수*로 격상해 취급.
29
38
  - **신입 공고에 경력연수 녹아웃 적용 금지** — 잠재력·기초·직무관련 교육/경험으로 평가. 경력은 도구+지표 기반 즉시전력으로 평가.
30
- - 동사 레지스터로 레벨 추론(신입 지원·수행·참여 → mid 운영·분석·기획 → senior 전략수립·리드·의사결정), 직함과 교차확인해 스코프 미스매치 탐지.
39
+ - 동사 레지스터로 레벨 추론(신입 지원·수행·참여 → mid 운영·분석·기획 → senior 전략수립·리드·의사결정), 직함과 교차확인해 스코프 미스매치 탐지. (레벨은 단정이 아니라 §0a 라벨로 표기)
31
40
  - **공채/NCS·블라인드 맥락:** 직무기술서의 능력단위(지식·기술·태도·경험)에 증거 매핑. **학력·출신·나이·외모·가족 신호 사용 금지**(채용절차법 제4조의3 / 공정채용). JD가 그런 직무무관 정보를 요구하면 사용자에게 플래그.
32
41
 
33
42
  ## 4. 출력 계약 (사용자 대면 — 전부 포함)
34
- 1. **종합 점수 + 밴드** (한 줄 근거, MUST+가중 증거 기반; 키워드% 아님)
43
+ 출력 언어 = 사용자의 대화 언어. §3(한국 시장 특수)은 한국 공고 지원 시에만 적용한다.
44
+ 1. **종합 점수 + 밴드 (필수 형식)** — `종합 점수: NN/100 (높음/중간/낮음)` 로 정수 점수와 밴드를 **함께** 제시(한 줄 근거, MUST+가중 증거 기반; 키워드% 아님). 점수만/밴드만은 출력계약 위반.
35
45
  2. **녹아웃 패널** — 각 MUST: 충족/미충족/확인필요 (실패·미상 명시)
36
46
  3. **요건별 증거 표** — 요건 → resume 증거 인용/위치 → 강도 → 전이 크레딧 주석
37
47
  4. **갭** — 필수-부재/약한 항목, 임팩트순
@@ -43,6 +53,6 @@
43
53
  내부 도구명·이 EOP·점수 계산 내부는 노출하지 않는다.
44
54
 
45
55
  ## 5. 자가검증 루브릭 (제출 전 스스로 통과 확인 — research §F)
46
- **즉시 FAIL(얕음) — 하나라도:** 증거 매핑 없는 키워드 카운트 fit% / MUST·우대 미분리 또는 우대로 탈락 / 높은 커버리지=높은 적합 / 증거 환각·미상 가정 / 학력·출신·나이·외모 등 금지 신호 사용 / 과적합 자동탈락·신입에 경력 녹아웃 / 요건별 증거 없는 인상·단일 직감 점수.
56
+ **즉시 FAIL(얕음) — 하나라도:** 증거 매핑 없는 키워드 카운트 fit% / MUST·우대 미분리 또는 우대로 탈락 / 높은 커버리지=높은 적합 / 증거 환각·미상 가정 / 학력·출신·나이·외모 등 금지 신호 사용 / 과적합 자동탈락·신입에 경력 녹아웃 / 요건별 증거 없는 인상·단일 직감 점수 / **종합 점수(정수) 누락(밴드만) 또는 점수↔밴드↔근거 불일치 / 판정영향 주장이 출처 span 미앵커(레벨·부재·운영속성 발명) 또는 기준일 없이 연차 산술(§0a 위반).**
47
57
  **PASS(전문가) — 전부:** JD 원자분해+버킷 / 녹아웃 선게이트+명시 / 요건별 증거 강도+전이 근거(행동 증거) / 관련경험 가중·우대 상방만 / 리스크 분리 / 미싱인포 정직+신뢰도 조정 / 한국 관행(필수·우대·신입/경력·NCS·금지 신호) 준수.
48
58
  **탁월(가점):** ATS가 놓치는 동의어/도구 등가 포착 / 사실상 필수 우대 식별 / 갭·리스크별 구체 next action.