careermate 0.0.10 → 0.0.13
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.
- package/AGENTS.md +3 -2
- package/INSTALL.md +6 -6
- package/LICENSE +1 -1
- package/README.md +18 -16
- package/dist/career-os/README.md +2 -2
- package/dist/doctor.mjs +597 -59
- package/dist/mcp.mjs +624 -60
- package/dist/migrate.mjs +23 -6
- package/dist/public/app.js +1 -7
- package/dist/public/i18n/en/settings.js +1 -6
- package/dist/public/i18n/ko/settings.js +1 -6
- package/dist/public/index.html +0 -1
- package/dist/public/lib.js +13 -4
- package/dist/public/pages/documents.js +18 -5
- package/dist/public/pages/home.js +3 -1
- package/dist/public/pages/settings.js +13 -12
- package/dist/public/styles.css +30 -0
- package/dist/web.mjs +332 -17
- package/docs/FAQ.md +3 -4
- package/docs/LOCAL_FIRST.md +1 -1
- package/docs/MCP_TOOLS.md +6 -3
- package/docs/career-os/README.md +2 -2
- package/package.json +1 -8
- package/packages/core/src/index.ts +1 -0
- package/packages/core/src/job-categories.data.ts +140 -0
- package/packages/core/src/job-categories.ts +106 -0
- package/packages/core/src/jobsearch.ts +292 -21
- package/packages/db/src/index.ts +1 -0
- package/packages/db/src/interview-retrospectives.ts +2 -6
- package/packages/db/src/job-search.ts +100 -0
- package/packages/db/src/repositories.ts +1 -0
- package/packages/mcp-tools/src/tools.ts +115 -11
- package/scripts/init.ts +2 -0
package/AGENTS.md
CHANGED
|
@@ -16,6 +16,7 @@ CareerMate는 사용자 PC에만 데이터를 두는 **로컬 커리어 작업
|
|
|
16
16
|
- **공고 분석·자소서 작성 전에는 반드시 `get_application_context`를 먼저 호출하라.** 한 번의 호출로 프로필·대표 이력서·경력·스킬·기존 자소서·대상 공고·선호 문체·강조 포인트를 모두 돌려준다. 맥락 없이 작성하지 마라.
|
|
17
17
|
- **결과는 다시 CareerMate에 저장하라.** 분석 → `save_fit_analysis`, 자소서 → `save_cover_letter_version`, 경력기술서 → `add_resume`(`kind=career_description`), 공고 → `save_job_posting`, 면접 자료 → `save_interview_prep`. 커리어 데이터는 흩어진 파일이 아니라 CareerMate 안에 둔다. 임의의 로컬 파일 생성은 최소화하라(사용자가 파일을 원하면 자소서는 `export_cover_letter`, 이력서·경력기술서는 `export_resume`, 프로필은 `export_profile`로 `~/.careermate/exports`에 내보낸다).
|
|
18
18
|
- **여러 문서를 한 번에 요청받아도 각 문서는 각자의 저장 도구로 따로 저장하라.** "경력기술서랑 자기소개서 둘 다 써줘"처럼 한 턴에 여러 문서를 만들었더라도, 한 저장 호출의 본문(content)에 다른 문서를 이어붙이지 마라 — 경력기술서는 `add_resume`(`kind=career_description`), 자기소개서는 `save_cover_letter_version`으로 **각각 따로** 저장한다(작성은 한 답변에 둘 다 보여줘도 무방하나, 저장은 문서별 도구로 분리). 한 문서 본문에 다른 문서가 섞이면 대시보드에 통째로 붙어 등록된다.
|
|
19
|
+
- **공고 찾기는 사용자 직무 기준으로.** 직무 조건은 짐작하지 말고 `find_job_categories`로 사용자 직무(말하지 않았으면 프로필의 희망 직무)에 맞는 리멤버 분류·사람인 코드를 찾는다. 사용자가 자주 볼 직무라고 확인하면 `set_job_search_preferences`로 저장해 두고, 이후 "오늘 올라온 공고 보여줘"는 `search_jobs`를 조건 없이 `posted_since: "today"`로 부른다. 원티드·점핏은 게시일을 주지 않아 CareerMate가 처음 본 날로 거르므로 첫 검색에선 전부 새 공고로 보인다는 점을 알려라. 개발 직군만이 아니라 모든 직군에 같은 흐름을 쓴다.
|
|
19
20
|
- **도구 응답은 사람 말로 바꿔라.** 응답에 `user_message`가 있으면 그 내용을 우선 활용하되 **사용자의 언어로 옮겨** 전달하고(한국어 원문을 그대로 복사하지 않는다), `suggested_next_action`은 선택지로 제안한다. `id`, `job_id`, `cover_letter_id`, `workflow_id`, JSON 원문, 도구 이름은 내부 작업용으로만 쓰고 사용자에게 그대로 복사하지 않는다.
|
|
20
21
|
- **공고 분석 뒤에는 자기소개서를 곧장 쓰지 말고 선택지를 보여줘라.** 적합도 분석을 저장하고 쉬운 말로 설명한 뒤 "이 공고에 맞춘 자기소개서를 써드릴까요?"라고 묻고, `1. 네, 이 공고에 맞춘 자기소개서를 써줘` / `2. 아니요, 분석만 저장해줘`처럼 고르게 한다. 사용자가 1번을 고른 경우에만 자소서 작성·저장 흐름으로 이어간다. **1번(쓰기)을 고르면 작성 전에, 회사가 지정한 문항·양식·글자수 제한이 있으면 먼저 달라고 요청하라** — 한국 자소서는 문항형(회사별 항목·글자수)이 많아 문항·양식이 결과 질을 좌우한다. 공고·맥락에 없으면 사용자에게 문항 텍스트·제출 양식·글자수(상·하한, 공백포함 여부)를 묻고, 끝내 없으면 일반 양식으로 진행한다고 알린다. 받은 문항·양식·글자수는 작성에 반영하고 가능하면 공고에 함께 저장한다.
|
|
21
22
|
- **표준 워크플로우를 따르라(핵심 6 + 선택 1)**: onboarding, analyze_job, write_cover_letter, write_career_description, manage_application_status, prepare_interview — 그리고 사용자가 LinkedIn·포트폴리오 같은 자기표현 자산을 요청하면 `build_personal_brand`. 순서가 헷갈리면 `get_workflow_guide`를 호출한다.
|
|
@@ -23,8 +24,8 @@ CareerMate는 사용자 PC에만 데이터를 두는 **로컬 커리어 작업
|
|
|
23
24
|
- **8단계 지원 상태를 존중하라**: `draft`(작성 중) → `planned`(지원 예정) → `applied`(지원 완료) → `document_passed`(서류 합격) → `interview`(면접 진행) → `final_passed`(최종 합격) / `rejected`(불합격) / `on_hold`(보류). 면접 준비는 사용자가 요청하면 공고 기준으로 저장할 수 있고, `document_passed` 이상에서는 다음 행동으로 우선 제안한다. 상태 변경은 `update_application_status`.
|
|
24
25
|
- **업데이트 요청은 구분해서 처리하라.** 사용자가 "최신이야?", "업데이트 있어?"처럼 확인만 요청하면 `check_for_update`로 확인한다. "업데이트해줘", "CareerMate 업데이트해줘", "최신으로 올려줘"처럼 적용을 명시하면 `update_careermate`를 바로 호출한다(이 도구가 최신 버전 확인도 함께 한다). 성공 후에는 AI 앱 또는 MCP 연결 재시작이 필요하다고 안내한다.
|
|
25
26
|
- **결과를 낼 때마다 대시보드로 안내하라.** 공고 저장·적합도 분석·자소서 버전·상태 변경·면접 준비 등 무언가를 저장·완료할 때마다 대시보드(`http://127.0.0.1:4319`) 주소를 알려준다. 브라우저를 직접 여는 건 **첫 온보딩 때 한 번만**(`open_dashboard`) — 이후에는 자동으로 열지 말고 링크만 보여주고, 사용자가 "열어줘"라고 하면 그때 `open_application`(단건)·`open_dashboard`(전체)로 연다.
|
|
26
|
-
- **지원·문의·버그 신고는 정해진 경로로 안내하라(연락처를 지어내지 마라).** 사용자가 문제 신고·기능 요청·일반 문의를 하면: **버그·기능 요청**은
|
|
27
|
-
- **절대 사용자 데이터를 외부로 업로드하지 마라.** 모든 데이터는 `~/.careermate`(Windows: `%USERPROFILE%\.careermate`)에만 있고, 대시보드는 `127.0.0.1`에만 바인딩된다. CareerMate가 외부로 보내는 것은 선택적 버전 확인 요청과 공고 검색 시 **검색
|
|
27
|
+
- **지원·문의·버그 신고는 정해진 경로로 안내하라(연락처를 지어내지 마라).** 사용자가 문제 신고·기능 요청·일반 문의를 하면: **버그·기능 요청**은 ?? ???(`osntak@gmail.com`), **일반 문의**는 공개 이메일(`osntak@gmail.com`)로 안내한다 — 같은 링크가 **대시보드 설정 화면의 '도움말·문제 신고' 카드**(영어 UI는 'Help & report a problem')와 **사이트 푸터(careermate.life)** 에도 모여 있으니 그쪽을 알려줘도 된다. **보안 취약점은 공개 이슈로 올리지 말고** 비공개 절차(`SECURITY.md`의 ??? ??? ??)로 안내한다. 어느 경로든 신고·문의에 **이름·이메일·연락처·자소서 본문 같은 개인정보를 붙여넣지 말라고 먼저 경고**한다(데이터는 로컬에만 있으니 신고에 개인정보가 필요 없다).
|
|
28
|
+
- **절대 사용자 데이터를 외부로 업로드하지 마라.** 모든 데이터는 `~/.careermate`(Windows: `%USERPROFILE%\.careermate`)에만 있고, 대시보드는 `127.0.0.1`에만 바인딩된다. CareerMate가 외부로 보내는 것은 선택적 버전 확인 요청과 공고 검색 시 **검색 키워드·직무 조건**뿐이며, 저장된 개인 데이터(프로필·이력서·자소서 등)는 어떤 서버로도 보내지 않는다. 사용자가 프라이버시를 물으면 이 경계를 그대로 설명하되, CareerMate 도구 응답이 당신(연결된 AI)에게 전달되는 만큼 그 처리에는 당신 쪽 AI 서비스의 정책이 적용된다는 점도 정직하게 알려라.
|
|
28
29
|
- 기술 용어(MCP, `job_id` 등)는 사용자에게 노출하지 말고, 매 단계 무엇을 하는지 **사용자의 언어로** 쉽게 설명하라. 확실하지 않으면 지어내지 말고 사용자에게 확인하라.
|
|
29
30
|
|
|
30
31
|
## 아직 연결되지 않았다면
|
package/INSTALL.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
각 단계는 순서대로 수행하되, 무엇을 할지 **먼저 사용자의 언어로 쉽게 설명하고 사용자의 동의를 받은 뒤** 실행하세요. 확실하지 않으면 추측하지 말고 사용자에게 확인합니다.
|
|
6
6
|
|
|
7
|
-
> Claude Desktop만
|
|
7
|
+
> 공개 설치의 기본 경로는 npm/npx입니다. Claude Desktop만 쓰고 소스나 내부 번들을 이미 받은 사용자는 `careermate.zip`을 압축 해제해 폴더로 추가하는 보조 경로(아래 5단계)를 안내하세요. `.mcpb` 직접 추가는 일부 Claude Desktop 버전에서 실패하는 알려진 이슈가 있습니다.
|
|
8
8
|
|
|
9
9
|
> **빈 폴더에서 시작**한다면(소스를 미리 받지 않는 경우) 이 런북의 공개본을 에이전트에게 주세요: **https://careermate.life/llms-install.txt** — 에이전트가 그 URL을 직접 읽고 npm으로 자동 설치·연결합니다.
|
|
10
10
|
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
| 내가 누구인가 | MCP 등록 방식 |
|
|
28
28
|
|---|---|
|
|
29
|
-
| 사용자가 **Claude Desktop**을
|
|
29
|
+
| 사용자가 **Claude Desktop**을 쓰고 소스/내부 번들이 있는 경우 | `careermate.zip` 압축 해제 후 폴더 추가 — **터미널 불필요** (`.mcpb` 직접 추가는 known issue) |
|
|
30
30
|
| **Claude Code** | 사용자가 여는 작업 폴더의 프로젝트 `.mcp.json`, 또는 `claude mcp add` (첫 실행 시 1회 승인) |
|
|
31
31
|
| **Codex** (OpenAI Codex CLI) | `~/.codex/config.toml`의 `[mcp_servers.careermate]` 테이블, 또는 `codex mcp add` |
|
|
32
32
|
|
|
@@ -113,7 +113,7 @@ npm run init
|
|
|
113
113
|
|
|
114
114
|
| 클라이언트 | 등록 결과 |
|
|
115
115
|
|---|---|
|
|
116
|
-
| **Claude Desktop** | `careermate.zip` 압축 해제 후 폴더 추가(아래) — `init`과 별개. `.mcpb` 직접 추가는 known issue |
|
|
116
|
+
| **Claude Desktop** | 소스/내부 번들이 있으면 `careermate.zip` 압축 해제 후 폴더 추가(아래) — `init`과 별개. `.mcpb` 직접 추가는 known issue |
|
|
117
117
|
| **Claude Code** | 현재 작업 폴더에 `.mcp.json` + `.claude/settings.local.json`(데이터 도구 사전 허용) 기록 → 첫 실행 시 폴더 **"신뢰" 1회**만 |
|
|
118
118
|
| **Codex** | `~/.codex/config.toml`의 `[mcp_servers.careermate]` 기록 → Codex 안에서 `/mcp`로 확인 |
|
|
119
119
|
|
|
@@ -148,13 +148,13 @@ npm run init -- --print
|
|
|
148
148
|
|
|
149
149
|
### Claude Desktop — ZIP 폴더 설치 (터미널 불필요)
|
|
150
150
|
|
|
151
|
-
1. `npm run build:mcpb`로 만들어진 **`dist/careermate.zip`** 을 압축 해제합니다.
|
|
151
|
+
1. 소스나 내부 번들이 있는 경우 `npm run build:mcpb`로 만들어진 **`dist/careermate.zip`** 을 압축 해제합니다.
|
|
152
152
|
2. Claude Desktop의 **Settings → Extensions → Advanced settings → Install extension…** 에서 압축을 푼 폴더를 추가합니다.
|
|
153
153
|
3. Claude Desktop을 **완전히 재시작**합니다.
|
|
154
154
|
|
|
155
155
|
`.mcpb` 직접 추가는 일부 Claude Desktop 버전에서 설치 창이 뜨지 않거나 실패하는 알려진 이슈가 있습니다. `careermate.zip`은 같은 번들을 폴더 설치용으로 제공하는 파일이며, 폴더 안에는 같은 `manifest.json`과 서버 코드가 들어 있습니다.
|
|
156
156
|
|
|
157
|
-
> 참고: `careermate.mcpb`와 `careermate.zip`은
|
|
157
|
+
> 참고: 공개 설치의 기본 경로는 **터미널에서 `npx -y careermate init`** 입니다. `careermate.mcpb`와 `careermate.zip`은 소스나 내부 번들이 있을 때 `npm run build:mcpb`로 직접 만들 수 있습니다.
|
|
158
158
|
|
|
159
159
|
### init 직후 마무리
|
|
160
160
|
|
|
@@ -223,7 +223,7 @@ npm start
|
|
|
223
223
|
|---|---|
|
|
224
224
|
| **포트 충돌** (4319 사용 중) | 자동 폴백되니 터미널의 실제 주소를 확인. 포트를 고정하려면 `CAREERMATE_PORT` 환경변수를 설정 후 재실행. AI가 백그라운드로 열었을 때의 실행 로그는 `~/.careermate/server.log`에 남습니다. |
|
|
225
225
|
| **MCP가 연결되지 않음** | ① 등록 경로가 맞는지 ② `node --version`이 22.5.0 이상인지 ③ `npm install`을 마쳤는지 확인 → 그다음 **AI 클라이언트를 완전히 재시작**. 폴더를 옮겼다면 `npm run init`을 다시 실행. |
|
|
226
|
-
| **Claude `.mcpb` 파일 설치가 무반응/실패** | 알려진 이슈입니다. `careermate.zip`을
|
|
226
|
+
| **Claude `.mcpb` 파일 설치가 무반응/실패** | 알려진 이슈입니다. 소스나 내부 번들이 있다면 `careermate.zip`을 압축 해제 → Claude Desktop 확장 설정에서 압축을 푼 폴더를 추가. 그래도 안 되면 `npx -y careermate init` 경로로 등록. |
|
|
227
227
|
| **무엇이 잘못됐는지 모를 때** | `npm run doctor`로 Node·데이터 폴더·DB·도구 개수·대시보드 상태를 한 번에 점검. |
|
|
228
228
|
| **데이터 위치 확인** | `~/.careermate` (Windows: `%USERPROFILE%\.careermate`). 데이터 폴더를 옮기려면 `CAREERMATE_DATA_DIR` 환경변수 사용. |
|
|
229
229
|
| **DB 스키마 문제** | `npm run migrate` — 여러 번 실행해도 안전합니다(idempotent). |
|
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026 osntak (CareerMate
|
|
3
|
+
Copyright (c) 2026 osntak (CareerMate)
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
## 핵심 철학
|
|
14
14
|
|
|
15
15
|
- **MCP 우선** — 새 앱 사용법을 익힐 필요가 없습니다. 내 컴퓨터에서 동작하는 AI 에이전트(Claude Desktop·Claude Code·Codex 등 로컬 MCP 클라이언트)와 대화하면, 그 AI가 CareerMate의 로컬 MCP 도구를 호출해 당신의 커리어 DB를 읽고 씁니다.
|
|
16
|
-
- **로컬 우선** — 모든 데이터는 당신의 컴퓨터에만 저장됩니다(`~/.careermate`). 저장된 개인 데이터는 외부 서버로 전송하지 않습니다 — 외부로 나가는 것은 선택적 버전 확인과 공고 검색 시 **검색
|
|
16
|
+
- **로컬 우선** — 모든 데이터는 당신의 컴퓨터에만 저장됩니다(`~/.careermate`). 저장된 개인 데이터는 외부 서버로 전송하지 않습니다 — 외부로 나가는 것은 선택적 버전 확인과 공고 검색 시 **검색 키워드·직무 조건**뿐입니다(아래 [보안 / 프라이버시](#보안--프라이버시) 참고). 대시보드 웹 서버는 `127.0.0.1`(이 컴퓨터)에만 연결됩니다.
|
|
17
17
|
- **LLM 비내장** — CareerMate 안에는 AI가 들어 있지 않습니다. 분석·글쓰기 같은 “생각하는 일”은 **당신의 AI**가 하고, CareerMate는 데이터를 **안전하게 보관·조회**하는 역할만 합니다.
|
|
18
18
|
|
|
19
19
|
> 쉽게 말해: 당신의 AI가 “두뇌”, CareerMate는 그 두뇌가 꺼내 쓰는 “커리어 서랍장”입니다.
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
- **AI와 대화로 모든 작업** — MCP 도구로 온보딩·프로필·이력서·자소서·공고·핏 분석·지원 상태·면접 준비·전문가 플레이북·AI 티 안 나는 글쓰기까지 처리.
|
|
36
36
|
- **지원 상태 8단계 관리** — `draft`(작성 중) · `planned`(지원 예정) · `applied`(지원 완료) · `document_passed`(서류 합격) · `interview`(면접 진행) · `final_passed`(최종 합격) · `rejected`(불합격) · `on_hold`(보류). `document_passed` 이상에서는 면접 준비를 다음 행동으로 제안합니다.
|
|
37
37
|
- **자기소개서 버전 관리** — 공고별로 자소서 버전을 쌓고 타임라인으로 비교, 파일로 내보내기.
|
|
38
|
-
- **공고 검색·가져오기** — 키워드(직무·기술)
|
|
38
|
+
- **공고 검색·가져오기** — 키워드(직무·기술)나 직무 분류로 원티드·점핏·리멤버·사람인 같은 공개 채용 사이트에서 공고를 바로 가져와, 마음에 드는 것만 저장. 영업·회계·간호·생산직 등 모든 직군의 분류표가 내장돼 있어, 내 직무를 검색 조건으로 저장해 두면 "오늘 올라온 공고 보여줘" 한마디로 새 공고만 볼 수 있습니다(여러 사이트에 함께 올라온 공고는 한 줄로 합침). 키 발급·설치 없이 동작하며, 공개 공고를 *가져오기만* 합니다(봇 차단 우회·자동 대량수집 없음, 보내는 건 검색어·직무 조건뿐).
|
|
39
39
|
- **채용공고 파싱** — 붙여넣거나 가져온 공고 텍스트를 구조화해 저장.
|
|
40
40
|
- **로컬 대시보드** — 프레임워크·CDN 없는 바닐라 JS로 만든 7페이지 웹 화면(다크모드 지원).
|
|
41
41
|
- **데이터 내보내기/삭제** — Settings 페이지에서 직접.
|
|
42
42
|
|
|
43
|
-
> **예: 공고 검색** — "백엔드 공고 찾아줘"라고 하면 AI가 공개 사이트에서 공고를 모아 이렇게 보여주고, 고른 것만
|
|
43
|
+
> **예: 공고 검색** — "백엔드 공고 찾아줘"라고 하면 AI가 공개 사이트에서 공고를 모아 이렇게 보여주고, 고른 것만 저장합니다(직무를 저장해 뒀다면 "오늘 올라온 공고 보여줘"만으로도 됩니다):
|
|
44
44
|
>
|
|
45
45
|
> > "백엔드" 공고 6건을 찾았어요 (원티드·점핏):
|
|
46
46
|
> > 1. **미소(miso)** — 백엔드 개발자 (Node.js) · 서울 · 경력 5~11년
|
|
@@ -98,7 +98,7 @@ npx -y careermate init
|
|
|
98
98
|
|
|
99
99
|
#### ③ `careermate.zip` (Claude Desktop "채팅" 앱 전용 · Node 불필요 폴백)
|
|
100
100
|
|
|
101
|
-
터미널·Node 없이 붙이는
|
|
101
|
+
터미널·Node 없이 붙이는 보조 경로입니다. 소스나 내부 번들이 있으면 `npm run build:mcpb`로 `dist/careermate.zip`을 만든 뒤 압축 해제하고, Claude Desktop의 **Settings → Extensions → Advanced settings → Install extension…** 에서 압축을 푼 폴더를 추가한 뒤 재시작합니다. 단 Claude Desktop **내장 Node 버전에 의존해 불안정할 수 있습니다**(Node<22.5면 동작 불가). 공개 설치의 기본 경로는 위의 `npx -y careermate init`입니다.
|
|
102
102
|
|
|
103
103
|
`.mcpb` 직접 추가는 일부 Claude Desktop 버전에서 실패하는 알려진 이슈가 있어, 현재는 ZIP 압축 해제 후 폴더 추가를 권장합니다. `.mcpb`와 `.zip`은 같은 번들입니다.
|
|
104
104
|
|
|
@@ -107,7 +107,8 @@ npx -y careermate init
|
|
|
107
107
|
### B. 소스로 개발/기여하려면
|
|
108
108
|
|
|
109
109
|
```bash
|
|
110
|
-
|
|
110
|
+
# Source development requires repository access.
|
|
111
|
+
# Clone your private checkout, then cd into it.
|
|
111
112
|
npm install # 빌드 단계 없음 — TypeScript를 tsx로 바로 실행
|
|
112
113
|
npm start # 대시보드 http://127.0.0.1:4319 (포트 사용 중이면 다음 빈 포트로 폴백, Ctrl+C 종료)
|
|
113
114
|
npm run seed # (선택) 데모 데이터로 둘러보기
|
|
@@ -158,7 +159,7 @@ AI 클라이언트에 연결된 상태라면 "대시보드 열어줘"만으로
|
|
|
158
159
|
| 이력서 | `read_document` · `add_resume` · `get_resumes` · `export_resume` · `delete_resume` · `open_inbox` · `read_inbox` |
|
|
159
160
|
| 경력·프로젝트·스킬 | `add_experience` · `get_experiences` · `delete_experience` · `add_project` · `get_projects` · `delete_project` · `add_skill` · `get_skills` · `delete_skill` |
|
|
160
161
|
| 자기소개서 | `get_cover_letters` · `save_cover_letter_version` · `delete_cover_letter` · `export_cover_letter` |
|
|
161
|
-
| 채용공고 | `search_jobs` · `save_job_posting` · `get_job_posting` · `list_jobs` · `prescreen_job` · `delete_job_posting` |
|
|
162
|
+
| 채용공고 | `search_jobs` · `find_job_categories` · `get_job_search_preferences` · `set_job_search_preferences` · `save_job_posting` · `get_job_posting` · `list_jobs` · `prescreen_job` · `delete_job_posting` |
|
|
162
163
|
| 오퍼(제안) | `save_offer` · `compare_offers` · `get_offer` |
|
|
163
164
|
| 핵심 컨텍스트 | **`get_application_context`** (지원에 필요한 맥락을 한 번에 모아줌) |
|
|
164
165
|
| 핏 분석 | `save_fit_analysis` |
|
|
@@ -214,7 +215,7 @@ CareerMate/
|
|
|
214
215
|
| `npm run doctor` | 설치/환경 점검 |
|
|
215
216
|
| `npm run seed` | 예시 데이터 삽입 |
|
|
216
217
|
| `npm run build` | 배포용 플레인 JS 번들(`dist/`) 생성 (esbuild) |
|
|
217
|
-
| `npm run build:mcpb` | Claude Desktop용 번들 빌드 → `dist/careermate.mcpb`와 폴더 설치용 `dist/careermate.zip` 생성(+ `site
|
|
218
|
+
| `npm run build:mcpb` | Claude Desktop용 번들 빌드 → `dist/careermate.mcpb`와 폴더 설치용 `dist/careermate.zip` 생성(+ maintainer용 `site/` 복사). manifest+서버코드를 한 파일로 묶음. |
|
|
218
219
|
| `npm test` | E2E 테스트 실행 |
|
|
219
220
|
| `npm run test:ui` | Playwright UI 스모크 테스트 |
|
|
220
221
|
| `npm run typecheck` | 타입 검사 (`tsc --noEmit`) |
|
|
@@ -244,7 +245,7 @@ CareerMate/
|
|
|
244
245
|
- **정적 파일 보호** — 경로 traversal(상위 폴더 탈출) 차단.
|
|
245
246
|
- **본문 크기 제한** — 요청 본문 8MB 제한.
|
|
246
247
|
- **민감 정보 비노출** — 이력서·자기소개서 본문은 로그나 에러 응답에 노출되지 않습니다.
|
|
247
|
-
- **사용자 데이터 외부 전송 없음** — CareerMate는 당신의 프로필·이력서·자소서 등 **개인 데이터를 외부로 보내지 않습니다.** 모든 데이터는 당신의 컴퓨터에만 남습니다. 외부로 나가는 네트워크 호출은 (1) 선택적 버전 확인, (2) 공고 검색(공개 잡보드)뿐이며, 이때도 **보내는 것은 검색
|
|
248
|
+
- **사용자 데이터 외부 전송 없음** — CareerMate는 당신의 프로필·이력서·자소서 등 **개인 데이터를 외부로 보내지 않습니다.** 모든 데이터는 당신의 컴퓨터에만 남습니다. 외부로 나가는 네트워크 호출은 (1) 선택적 버전 확인, (2) 공고 검색(공개 잡보드)뿐이며, 이때도 **보내는 것은 검색 키워드·직무 조건뿐**(개인 데이터 아님)이고 공개 공고를 *가져오기만* 합니다(봇 차단 우회·자동 대량수집 없음). 내보내기·삭제는 대시보드 **Settings**에서 직접 할 수 있습니다.
|
|
248
249
|
|
|
249
250
|
---
|
|
250
251
|
|
|
@@ -294,7 +295,7 @@ MIT 라이선스 — 전문은 [`LICENSE`](LICENSE) 파일을 참고하세요.
|
|
|
294
295
|
## Core philosophy
|
|
295
296
|
|
|
296
297
|
- **MCP-first** — No new app to learn. You talk to an AI agent running on your machine (Claude Desktop, Claude Code, Codex, and other local MCP clients), and that AI calls CareerMate's local MCP tools to read and write your career database.
|
|
297
|
-
- **Local-first** — All data lives only on your computer (`~/.careermate`). Your stored personal data is never sent to external servers — the only outbound calls are the optional version check and the **search keyword** during job search (see [Security / privacy](#security--privacy) below). The dashboard web server binds only to `127.0.0.1` (this machine).
|
|
298
|
+
- **Local-first** — All data lives only on your computer (`~/.careermate`). Your stored personal data is never sent to external servers — the only outbound calls are the optional version check and the **search keyword and job category** during job search (see [Security / privacy](#security--privacy) below). The dashboard web server binds only to `127.0.0.1` (this machine).
|
|
298
299
|
- **No built-in LLM** — There is no AI inside CareerMate. The "thinking" — analysis, writing — is done by **your AI**; CareerMate only stores and serves the data safely.
|
|
299
300
|
|
|
300
301
|
> In short: your AI is the "brain," and CareerMate is the "career drawer" it reaches into.
|
|
@@ -316,12 +317,12 @@ You can open the dashboard at any time to see your stored data. For a step-by-st
|
|
|
316
317
|
- **Everything through conversation with AI** — MCP tools cover onboarding, profile, resumes, cover letters, job postings, fit analysis, application status, interview prep, expert playbooks, and human-sounding writing.
|
|
317
318
|
- **8-stage application status** — `draft` · `planned` · `applied` · `document_passed` · `interview` · `final_passed` · `rejected` · `on_hold`. Interview prep is suggested at `document_passed` or later.
|
|
318
319
|
- **Cover-letter versioning** — Stack versions per posting, compare on a timeline, export to a file.
|
|
319
|
-
- **Job search & import** — Pull postings by keyword (role/skill) straight from public job boards (
|
|
320
|
+
- **Job search & import** — Pull postings by keyword (role/skill) or job category straight from public job boards (Wanted, Jumpit, Remember, Saramin) and save only the ones you like. Category tables for every occupation (sales, accounting, nursing, manufacturing...) are built in: save your role as a search condition and "show me today's new postings" returns only new ones, with the same posting from several boards folded into one row. No API key or setup; it only *fetches* public postings (no bot-protection bypass, no bulk harvesting; only the search keyword and job category are sent).
|
|
320
321
|
- **Job-posting parsing** — Turn pasted or imported posting text into structured records.
|
|
321
322
|
- **Local dashboard** — A 7-page web UI built with framework-free, CDN-free vanilla JS (dark mode supported).
|
|
322
323
|
- **Export / delete your data** — Directly from the Settings page.
|
|
323
324
|
|
|
324
|
-
> **Example: job search** — Ask "find backend jobs" and the AI gathers postings from public boards, presents them like this, and saves only the ones you pick:
|
|
325
|
+
> **Example: job search** — Ask "find backend jobs" and the AI gathers postings from public boards, presents them like this, and saves only the ones you pick (with a saved role, "show me today's new postings" is enough):
|
|
325
326
|
>
|
|
326
327
|
> > Found 6 "backend" postings (Wanted · Jumpit):
|
|
327
328
|
> > 1. **miso** — Backend Developer (Node.js) · Seoul · 5–11 yrs
|
|
@@ -379,7 +380,7 @@ For other clients (Cursor, Cline, Windsurf, …), `npx -y careermate init -- --p
|
|
|
379
380
|
|
|
380
381
|
#### ③ `careermate.zip` (Claude Desktop "chat" app only · no-Node fallback)
|
|
381
382
|
|
|
382
|
-
This is the
|
|
383
|
+
This is the no-terminal/no-Node fallback path. If you have the source or an internal bundle, run `npm run build:mcpb`, unzip `dist/careermate.zip`, add the extracted folder through Claude Desktop's **Settings → Extensions → Advanced settings → Install extension…**, then restart. It **depends on Claude Desktop's bundled Node version** (won't work if that Node is < 22.5). The public default install path is `npx -y careermate init`.
|
|
383
384
|
|
|
384
385
|
Direct `.mcpb` install is a known issue in some Claude Desktop builds, so the ZIP folder path is the recommended no-terminal route. The `.mcpb` and `.zip` assets contain the same bundle.
|
|
385
386
|
|
|
@@ -388,7 +389,8 @@ After connecting, **fully restart** the AI client and verify the connection by a
|
|
|
388
389
|
### B. Develop / contribute from source
|
|
389
390
|
|
|
390
391
|
```bash
|
|
391
|
-
|
|
392
|
+
# Source development requires repository access.
|
|
393
|
+
# Clone your private checkout, then cd into it.
|
|
392
394
|
npm install # no build step — TypeScript runs directly via tsx
|
|
393
395
|
npm start # dashboard at http://127.0.0.1:4319 (falls back to the next free port; Ctrl+C to stop)
|
|
394
396
|
npm run seed # (optional) explore with demo data
|
|
@@ -439,7 +441,7 @@ Dark mode is supported.
|
|
|
439
441
|
| Resume | `read_document` · `add_resume` · `get_resumes` · `export_resume` · `delete_resume` · `open_inbox` · `read_inbox` |
|
|
440
442
|
| Experience / projects / skills | `add_experience` · `get_experiences` · `delete_experience` · `add_project` · `get_projects` · `delete_project` · `add_skill` · `get_skills` · `delete_skill` |
|
|
441
443
|
| Cover letter | `get_cover_letters` · `save_cover_letter_version` · `delete_cover_letter` · `export_cover_letter` |
|
|
442
|
-
| Job posting | `search_jobs` · `save_job_posting` · `get_job_posting` · `list_jobs` · `prescreen_job` · `delete_job_posting` |
|
|
444
|
+
| Job posting | `search_jobs` · `find_job_categories` · `get_job_search_preferences` · `set_job_search_preferences` · `save_job_posting` · `get_job_posting` · `list_jobs` · `prescreen_job` · `delete_job_posting` |
|
|
443
445
|
| Offer | `save_offer` · `compare_offers` · `get_offer` |
|
|
444
446
|
| Core context | **`get_application_context`** (gathers all context needed for an application in one call) |
|
|
445
447
|
| Fit analysis | `save_fit_analysis` |
|
|
@@ -495,7 +497,7 @@ CareerMate/
|
|
|
495
497
|
| `npm run doctor` | Check installation/environment |
|
|
496
498
|
| `npm run seed` | Insert example data |
|
|
497
499
|
| `npm run build` | Build the plain-JS distribution bundle (`dist/`) via esbuild |
|
|
498
|
-
| `npm run build:mcpb` | Build the Claude Desktop bundle → `dist/careermate.mcpb` plus unpacked-folder fallback `dist/careermate.zip` (also copied to `site/`). Packs manifest + server code
|
|
500
|
+
| `npm run build:mcpb` | Build the Claude Desktop bundle → `dist/careermate.mcpb` plus unpacked-folder fallback `dist/careermate.zip` (also copied to `site/` for maintainers). Packs manifest + server code. |
|
|
499
501
|
| `npm test` | Run E2E tests |
|
|
500
502
|
| `npm run test:ui` | Playwright UI smoke tests |
|
|
501
503
|
| `npm run typecheck` | Type check (`tsc --noEmit`) |
|
|
@@ -526,7 +528,7 @@ CareerMate/
|
|
|
526
528
|
- **Static-file protection** — Path traversal (escaping the parent folder) is blocked.
|
|
527
529
|
- **Body size limit** — Request bodies are capped at 8MB.
|
|
528
530
|
- **No sensitive-data leakage** — Resume and cover-letter content is never exposed in logs or error responses.
|
|
529
|
-
- **No personal-data transmission** — CareerMate never sends your personal data (profile, resumes, cover letters) anywhere; all data stays only on your computer. The only outbound network calls are (1) the optional version check and (2) job search (public job boards) — and even then only the **search keyword**
|
|
531
|
+
- **No personal-data transmission** — CareerMate never sends your personal data (profile, resumes, cover letters) anywhere; all data stays only on your computer. The only outbound network calls are (1) the optional version check and (2) job search (public job boards) — and even then only the **search keyword and job category** are sent (no personal data), to *fetch* public postings (no bot-protection bypass, no automated bulk harvesting). Export and delete are available directly in the dashboard **Settings**.
|
|
530
532
|
|
|
531
533
|
---
|
|
532
534
|
|
package/dist/career-os/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Career-OS — 외부 LLM 실행 진입점 (단일 입구)
|
|
2
2
|
|
|
3
|
-
> ✅ **상태(2026-06): 이 라우팅·EOP 적용은 이제 런타임에 배선되어 있다(Phase B-1).** 연결된 AI는 `get_workflow_guide`로 작업별 실행 절차(EOP)와 적용할 플레이북·검증기 순서를 받고, `get_playbook`/`get_verifier`로 이 폴더의 지식을 실제로 받아 적용한다. `get_application_context`도 `recommended_route`·`verifier_sequence`·`next_tool`를 함께 돌려준다. 아직 구현하지 않은 범위(B-2: det 점수 계산·저장 게이트·마이그레이션)와 패키지 구조는 [`implementation/README.md`](
|
|
3
|
+
> ✅ **상태(2026-06): 이 라우팅·EOP 적용은 이제 런타임에 배선되어 있다(Phase B-1).** 연결된 AI는 `get_workflow_guide`로 작업별 실행 절차(EOP)와 적용할 플레이북·검증기 순서를 받고, `get_playbook`/`get_verifier`로 이 폴더의 지식을 실제로 받아 적용한다. `get_application_context`도 `recommended_route`·`verifier_sequence`·`next_tool`를 함께 돌려준다. 아직 구현하지 않은 범위(B-2: det 점수 계산·저장 게이트·마이그레이션)와 패키지 구조는 [`implementation/README.md`](implementation/README.md) 참고.
|
|
4
4
|
|
|
5
5
|
> **여기서 시작하라.** CareerMate는 수동적 지식이 아니라, 외부 AI가 사용자 대면 결과를 내기 전에 적용해야 하는
|
|
6
6
|
> **실행형 플레이북(EOP)·검증 루브릭·라우팅·출력 계약**을 제공한다. 두뇌=외부 AI(당신), CareerMate=실행 기질(substrate). 내부 LLM 없음.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
> 보조(런타임 아님): `validation/`(리서치 출처 + 다중 LLM(cross-vendor) 검증 하니스) · `implementation/`(CareerMate 개발자용 Phase B 내부 설계).
|
|
10
10
|
>
|
|
11
11
|
> EOP(Expert Operating Procedure) = 한 기능을 *시니어 전문가처럼* 수행하는 실행 절차. 검증된 리서치(`validation/research/`)에 근거하고
|
|
12
|
-
> [`validation/PROTOCOL.md`](
|
|
12
|
+
> [`validation/PROTOCOL.md`](validation/PROTOCOL.md)의 다중 LLM(cross-vendor) 교차검증으로 단단해진다.
|
|
13
13
|
|
|
14
14
|
## 0. 절대 원칙 — 근거 우선순위
|
|
15
15
|
```
|