career-compass-mcp 2.9.6 → 2.9.8
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/PRIVACY.md +49 -14
- package/README.md +192 -70
- package/build/bin/cli.js +13 -4
- package/build/bin/cli.js.map +1 -1
- package/build/src/dashboard-lite/ask-bridge.d.ts +27 -3
- package/build/src/dashboard-lite/ask-bridge.d.ts.map +1 -1
- package/build/src/dashboard-lite/ask-bridge.js +38 -8
- package/build/src/dashboard-lite/ask-bridge.js.map +1 -1
- package/build/src/dashboard-lite/server.d.ts +1 -0
- package/build/src/dashboard-lite/server.d.ts.map +1 -1
- package/build/src/dashboard-lite/server.js +1 -1
- package/build/src/dashboard-lite/server.js.map +1 -1
- package/build/src/empty-state.d.ts +18 -10
- package/build/src/empty-state.d.ts.map +1 -1
- package/build/src/empty-state.js +25 -18
- package/build/src/empty-state.js.map +1 -1
- package/build/src/index.js +17 -5
- package/build/src/index.js.map +1 -1
- package/build/src/node-version.d.ts +22 -0
- package/build/src/node-version.d.ts.map +1 -0
- package/build/src/node-version.js +28 -0
- package/build/src/node-version.js.map +1 -0
- package/build/src/pipeline-stats.d.ts +33 -0
- package/build/src/pipeline-stats.d.ts.map +1 -1
- package/build/src/pipeline-stats.js +123 -0
- package/build/src/pipeline-stats.js.map +1 -1
- package/build/src/prompts/index.d.ts +2 -0
- package/build/src/prompts/index.d.ts.map +1 -1
- package/build/src/prompts/index.js +31 -114
- package/build/src/prompts/index.js.map +1 -1
- package/build/src/schemas/career-schema.d.ts +128 -0
- package/build/src/schemas/career-schema.d.ts.map +1 -1
- package/build/src/schemas/career-schema.js +55 -0
- package/build/src/schemas/career-schema.js.map +1 -1
- package/build/src/server-instructions.d.ts +10 -0
- package/build/src/server-instructions.d.ts.map +1 -0
- package/build/src/server-instructions.js +26 -0
- package/build/src/server-instructions.js.map +1 -0
- package/build/src/server.d.ts.map +1 -1
- package/build/src/server.js +42 -0
- package/build/src/server.js.map +1 -1
- package/build/src/storage/file-store.d.ts +67 -2
- package/build/src/storage/file-store.d.ts.map +1 -1
- package/build/src/storage/file-store.js +170 -2
- package/build/src/storage/file-store.js.map +1 -1
- package/build/src/tools/career-context.d.ts +41 -1
- package/build/src/tools/career-context.d.ts.map +1 -1
- package/build/src/tools/career-context.js +105 -0
- package/build/src/tools/career-context.js.map +1 -1
- package/build/src/tools/career-kb.d.ts +10 -0
- package/build/src/tools/career-kb.d.ts.map +1 -1
- package/build/src/tools/career-kb.js +225 -30
- package/build/src/tools/career-kb.js.map +1 -1
- package/build/src/tools/doctor.d.ts +32 -1
- package/build/src/tools/doctor.d.ts.map +1 -1
- package/build/src/tools/doctor.js +143 -40
- package/build/src/tools/doctor.js.map +1 -1
- package/build/src/tools/evidence.d.ts.map +1 -1
- package/build/src/tools/evidence.js +2 -1
- package/build/src/tools/evidence.js.map +1 -1
- package/build/src/tools/interview.d.ts +12 -1
- package/build/src/tools/interview.d.ts.map +1 -1
- package/build/src/tools/interview.js +165 -40
- package/build/src/tools/interview.js.map +1 -1
- package/build/src/tools/opportunity.d.ts +17 -0
- package/build/src/tools/opportunity.d.ts.map +1 -1
- package/build/src/tools/opportunity.js +87 -15
- package/build/src/tools/opportunity.js.map +1 -1
- package/build/src/tools/pipeline-calendar.d.ts +36 -0
- package/build/src/tools/pipeline-calendar.d.ts.map +1 -0
- package/build/src/tools/pipeline-calendar.js +117 -0
- package/build/src/tools/pipeline-calendar.js.map +1 -0
- package/build/src/tools/pipeline.d.ts +86 -2
- package/build/src/tools/pipeline.d.ts.map +1 -1
- package/build/src/tools/pipeline.js +316 -32
- package/build/src/tools/pipeline.js.map +1 -1
- package/build/src/tools/read-guard.js +1 -1
- package/build/src/tools/read-guard.js.map +1 -1
- package/build/src/tools/resume.d.ts +26 -0
- package/build/src/tools/resume.d.ts.map +1 -1
- package/build/src/tools/resume.js +127 -69
- package/build/src/tools/resume.js.map +1 -1
- package/build/src/tools/section-diff.d.ts +29 -0
- package/build/src/tools/section-diff.d.ts.map +1 -0
- package/build/src/tools/section-diff.js +68 -0
- package/build/src/tools/section-diff.js.map +1 -0
- package/build/src/tools/signal-digest.d.ts +18 -1
- package/build/src/tools/signal-digest.d.ts.map +1 -1
- package/build/src/tools/signal-digest.js +41 -11
- package/build/src/tools/signal-digest.js.map +1 -1
- package/build/src/tools/today-digest.d.ts +22 -2
- package/build/src/tools/today-digest.d.ts.map +1 -1
- package/build/src/tools/today-digest.js +249 -16
- package/build/src/tools/today-digest.js.map +1 -1
- package/build/src/tools/truth-rule.d.ts +15 -1
- package/build/src/tools/truth-rule.d.ts.map +1 -1
- package/build/src/tools/truth-rule.js +16 -0
- package/build/src/tools/truth-rule.js.map +1 -1
- package/build/src/types/tool-args.d.ts +18 -1
- package/build/src/types/tool-args.d.ts.map +1 -1
- package/package.json +3 -1
package/PRIVACY.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# Privacy Policy — Career Compass MCP
|
|
2
2
|
|
|
3
|
-
**Last updated:** 2026-
|
|
4
|
-
**Applies to:** the `career-compass-mcp` MCP server
|
|
3
|
+
**Last updated:** 2026-10-07
|
|
4
|
+
**Applies to:** the `career-compass-mcp` MCP server, its bundled local dashboard, and the
|
|
5
|
+
Career Compass plugin's skills in every Claude app, all versions.
|
|
5
6
|
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -12,9 +13,15 @@ career history and job pipeline are plain YAML files in a directory you choose.
|
|
|
12
13
|
uploaded, and there is nothing for us to collect, store, sell, or hand over — because your
|
|
13
14
|
data never reaches us in the first place.
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
The server makes one outbound network request of its own, and only when you ask for it:
|
|
17
|
+
the `check_setup` tool asks the public npm registry whether a newer version has been
|
|
18
|
+
released. It sends nothing about you. Details under [Update checks](#update-checks).
|
|
19
|
+
Commands you run yourself with `npx`, such as the dashboard command `check_setup` prints,
|
|
20
|
+
are separate requests: npm downloads the package, and nothing about you is sent.
|
|
21
|
+
|
|
22
|
+
In claude.ai chat (web, desktop and mobile) only the plugin's skills load, as instructions
|
|
23
|
+
to Claude. The server does not run there, so Career Compass stores nothing and sends
|
|
24
|
+
nothing. Details under [In claude.ai chat](#in-claudeai-chat).
|
|
18
25
|
|
|
19
26
|
---
|
|
20
27
|
|
|
@@ -35,18 +42,21 @@ Career Compass reads and writes the career information *you* give it:
|
|
|
35
42
|
|
|
36
43
|
## Where it is stored
|
|
37
44
|
|
|
38
|
-
In a single directory on your machine, set by the `CAREER_DATA_PATH` environment variable
|
|
39
|
-
The default is `~/.career-compass/`. Files are ordinary YAML you can open, edit, back up,
|
|
45
|
+
In a single directory on your machine, set by the `CAREER_DATA_PATH` environment variable
|
|
46
|
+
(in the plugin, the **Career data folder** setting). The default is `~/.career-compass/`. Files are ordinary YAML you can open, edit, back up,
|
|
40
47
|
or delete with any text editor. While a write is in progress the folder also briefly holds a
|
|
41
48
|
`.write-claim` file naming the process doing the writing, so a second Career Compass process
|
|
42
49
|
(a dashboard, or a server registered in two clients) refuses rather than overwriting it. It is
|
|
43
50
|
deleted when the write finishes, contains no personal data, and is safe to remove by hand.
|
|
44
51
|
Each write also leaves a timestamped `.bak` copy of the
|
|
45
|
-
previous version in the same directory.
|
|
52
|
+
previous version in the same directory. Only the newest 5 `.bak` files per data file are
|
|
53
|
+
kept; older ones are deleted automatically on the next write. Backups you make by hand are
|
|
54
|
+
never touched.
|
|
46
55
|
|
|
47
56
|
**We never receive this data.** There is no Career Compass account, no cloud sync, no
|
|
48
|
-
backup service, and no telemetry or analytics of any kind. The only request the
|
|
49
|
-
|
|
57
|
+
backup service, and no telemetry or analytics of any kind. The only request the server
|
|
58
|
+
makes to the internet on its own is the version check described below, which carries none
|
|
59
|
+
of it.
|
|
50
60
|
|
|
51
61
|
## Update checks
|
|
52
62
|
|
|
@@ -80,6 +90,10 @@ Precisely what that involves:
|
|
|
80
90
|
The npm registry is operated by npm, Inc. (GitHub/Microsoft) under its own privacy policy:
|
|
81
91
|
https://docs.npmjs.com/policies/privacy
|
|
82
92
|
|
|
93
|
+
Career Compass runs nothing on a schedule. Any schedule, such as a morning briefing, is
|
|
94
|
+
one you create yourself in your own Claude app; it runs locally on your computer and only
|
|
95
|
+
reads.
|
|
96
|
+
|
|
83
97
|
Separately, `check_setup` also checks whether your local dashboard is running by requesting
|
|
84
98
|
`http://127.0.0.1:<port>/`. That is a loopback request to your own machine; it never
|
|
85
99
|
reaches the network.
|
|
@@ -87,7 +101,7 @@ reaches the network.
|
|
|
87
101
|
## Who else sees it
|
|
88
102
|
|
|
89
103
|
Career Compass is an MCP server, so it answers a client you connect it to — normally Claude
|
|
90
|
-
|
|
104
|
+
Code, or Cowork on your computer. When you ask Claude to tailor a resume or prep an interview, the
|
|
91
105
|
relevant parts of your career data are passed to that client, and from there to the model
|
|
92
106
|
provider under **their** privacy policy, not this one:
|
|
93
107
|
|
|
@@ -100,7 +114,27 @@ npm registry about a version number and carries nothing else.
|
|
|
100
114
|
|
|
101
115
|
The bundled local dashboard (`career-compass-mcp dashboard`) serves pages from
|
|
102
116
|
`127.0.0.1` on your own machine, renders them with no external assets, and makes no
|
|
103
|
-
network calls.
|
|
117
|
+
network calls. Starting it means running it, usually with `npx`, which downloads the
|
|
118
|
+
package from the npm registry as described above.
|
|
119
|
+
|
|
120
|
+
If you start the dashboard with `--ask-claude`, its buttons run Claude Code on your
|
|
121
|
+
computer. Claude Code sends the Career KB content it reads to Anthropic, under your own
|
|
122
|
+
Claude account and billing, like any other Claude Code session. It is off unless you pass
|
|
123
|
+
the flag, and read-only unless you start it with `--ask-claude-writes`.
|
|
124
|
+
|
|
125
|
+
## In claude.ai chat
|
|
126
|
+
|
|
127
|
+
The Career Compass plugin is also offered in claude.ai chat on the web, desktop and mobile.
|
|
128
|
+
There, only its skills load: plain-text instructions that tell Claude how to do a fit
|
|
129
|
+
check, tailor a résumé, or prep an interview from what you paste into the conversation. The
|
|
130
|
+
MCP server above does not run in chat, so:
|
|
131
|
+
|
|
132
|
+
- nothing is written to your computer or anywhere else by Career Compass, and nothing
|
|
133
|
+
carries over between chats;
|
|
134
|
+
- Career Compass makes no network requests, not even the update check;
|
|
135
|
+
- what you paste, and Claude's replies, are part of your Claude conversation, handled by
|
|
136
|
+
Anthropic under its privacy policy (https://www.anthropic.com/legal/privacy) exactly as
|
|
137
|
+
any other chat is. We never see it.
|
|
104
138
|
|
|
105
139
|
## Untrusted text
|
|
106
140
|
|
|
@@ -113,8 +147,9 @@ anywhere else.
|
|
|
113
147
|
|
|
114
148
|
## Data retention
|
|
115
149
|
|
|
116
|
-
Your files stay on your disk until you delete them.
|
|
117
|
-
|
|
150
|
+
Your files stay on your disk until you delete them. The one exception is backups: only the
|
|
151
|
+
newest 5 `.bak` files per data file are kept, and older ones are deleted automatically.
|
|
152
|
+
There is no retention period on our side because we hold nothing. To remove everything, delete your `CAREER_DATA_PATH`
|
|
118
153
|
directory (including the `.bak` files and any leftover `.write-claim`) and uninstall the package.
|
|
119
154
|
|
|
120
155
|
## Third-party sharing
|
package/README.md
CHANGED
|
@@ -6,77 +6,155 @@
|
|
|
6
6
|
[](https://nodejs.org)
|
|
7
7
|
[](https://modelcontextprotocol.io)
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**Paste a job posting. Get an honest fit verdict.**
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
Paste a job posting and your resume, and ask "Do I fit this?" You get a straight verdict
|
|
12
|
+
(strong fit, stretch, or long shot), each of the posting's must-haves matched to evidence
|
|
13
|
+
from your own background, and the top two gaps with how to handle them. Then Claude can
|
|
14
|
+
tailor your résumé, write the cover letter and prep the interview without padding your
|
|
15
|
+
history. Free, MIT-licensed, and in Claude Code and Cowork your files stay on your own
|
|
16
|
+
computer.
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
## What a fit check looks like
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
*Example on sample data:* the fictional Alex Rivera who ships with the package, and a
|
|
21
|
+
made-up posting.
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
```
|
|
24
|
+
You: [pastes a VP of Operations posting from a payments company]
|
|
25
|
+
Do I fit this?
|
|
26
|
+
|
|
27
|
+
Claude: Stretch: strong on operations at scale, but no P&L or payments
|
|
28
|
+
experience yet.
|
|
29
|
+
|
|
30
|
+
Must-haves, with your evidence
|
|
31
|
+
- 8+ years leading operations teams: Operations Manager at Apex
|
|
32
|
+
Logistics, team of 42; Senior Program Manager at MedFlow, 6 PMs.
|
|
33
|
+
- Scaling a process across sites: patient onboarding cut from 47 days
|
|
34
|
+
to 11 across 3 acquired health systems.
|
|
35
|
+
- Vendor and cost management: procurement cycle cut from 9 months to
|
|
36
|
+
6 weeks; headcount costs down 18% while throughput rose 31%.
|
|
37
|
+
|
|
38
|
+
Top two gaps
|
|
39
|
+
1. P&L ownership. You ran $8M in program budgets, which isn't a P&L.
|
|
40
|
+
Say what that budget covered, and ask in the screen whether the
|
|
41
|
+
role owns a P&L from day one.
|
|
42
|
+
2. Payments. Nothing in your history is payments or fintech. Lead
|
|
43
|
+
with the healthcare compliance work as the closest thing, and
|
|
44
|
+
don't claim more.
|
|
45
|
+
|
|
46
|
+
Want me to tailor your résumé to this one, or track it?
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The real reply goes on with talking points, red flags and questions to ask. A "day in the
|
|
50
|
+
life" of the role comes only when you ask for one.
|
|
51
|
+
|
|
52
|
+
## It won't pad your résumé
|
|
53
|
+
|
|
54
|
+
Every sentence it writes about you has to come from your history or from what you told it.
|
|
55
|
+
When a stronger draft needs a fact it doesn't have, the draft says so in place:
|
|
20
56
|
|
|
21
|
-
```
|
|
22
|
-
|
|
57
|
+
```
|
|
58
|
+
- Cut patient onboarding from 47 days to 11 after the acquisition of 3
|
|
59
|
+
regional health systems, leading a team of [confirm: team size] and
|
|
60
|
+
eliminating $2.1M in compliance penalties over 18 months.
|
|
23
61
|
```
|
|
24
62
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
machine.
|
|
63
|
+
The sample record says what changed, not how many people did it, so the bullet asks. You
|
|
64
|
+
fill in the bracket or cut it; nothing gets invented to sound stronger.
|
|
28
65
|
|
|
29
|
-
|
|
66
|
+
## Get it in the Claude directory
|
|
30
67
|
|
|
31
|
-
|
|
68
|
+
In the Claude app or on claude.ai, open **Customize → Plugins**, search for
|
|
69
|
+
**Career Compass**, and add it. That's the whole install.
|
|
32
70
|
|
|
33
|
-
|
|
71
|
+
| Where you use Claude | What you get |
|
|
72
|
+
|---|---|
|
|
73
|
+
| **claude.ai chat** (web, desktop, mobile) | The skills only. Paste a résumé and a posting and Claude does the fit check, tailoring, interview prep or offer review in the conversation. Nothing is saved between chats. |
|
|
74
|
+
| **Cowork** and **Claude Code** on your computer | The skills plus the local server: your career history and every application are kept as plain YAML on your computer, so later answers start from them. Needs **Node.js 22 or newer**. |
|
|
34
75
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
Can you prep me?
|
|
76
|
+
The commands below work in Claude Code and Cowork. In claude.ai chat, just ask in plain
|
|
77
|
+
words ("prep me for my interview on Friday").
|
|
38
78
|
|
|
39
|
-
|
|
79
|
+
| Command | What it does |
|
|
80
|
+
|---|---|
|
|
81
|
+
| `/career-compass:start` | Sets up your career history from a pasted résumé, or shows what to try first |
|
|
82
|
+
| `/career-compass:fit-check` | A fit verdict for a pasted posting |
|
|
83
|
+
| `/career-compass:interview-prep` | Likely questions, three to five STAR stories from your real work, and questions to ask |
|
|
84
|
+
| `/career-compass:today` | One "start here" move, then the rest of today's list |
|
|
85
|
+
| `/career-compass:debrief` | Right after an interview: what landed, what to sharpen, and a thank-you note per interviewer from your own notes |
|
|
86
|
+
| `/career-compass:week` | Your week: what moved, stalled or closed, your pace, and one focus for next week |
|
|
87
|
+
| `/career-compass:sweep` | Checks your inbox and calendar (through connectors you already use) for job-search mail and invites, then updates applications in one batch you approve. Never sends email |
|
|
88
|
+
| `/career-compass:answer` | Answer an application form's questions from your real history |
|
|
40
89
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
90
|
+
A few things it does once you've used it for a while: saves end with a receipt of what
|
|
91
|
+
changed, you can record an offer or how an interview round went, and `/career-compass:today`
|
|
92
|
+
leads with a debrief the day after an interview. When you accept an offer it switches to
|
|
93
|
+
closing out the search and then to your first weeks in the new job. If you want a nudge,
|
|
94
|
+
you can set up a [morning briefing](#a-morning-briefing-if-you-want-one) on your own
|
|
95
|
+
computer.
|
|
45
96
|
|
|
46
|
-
|
|
47
|
-
You: Here's a job posting I just found. [pastes posting]
|
|
48
|
-
How well do I fit?
|
|
97
|
+
## Turn your git history into honest résumé evidence
|
|
49
98
|
|
|
50
|
-
|
|
99
|
+
If you write code, you have a record of what you did. Ask:
|
|
51
100
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
101
|
+
> **"Look at my project in ~/code/billing-service and tell me what I can honestly claim on my résumé."**
|
|
102
|
+
|
|
103
|
+
`harvest_evidence` reads that project's git history on your computer and reports counts,
|
|
104
|
+
each with the command that produced it. It writes nothing and sends nothing.
|
|
55
105
|
|
|
56
106
|
```
|
|
57
|
-
|
|
107
|
+
## What is measurably true
|
|
108
|
+
- Committed to billing-service across 14 distinct months, 2024-11 to 2025-12.
|
|
109
|
+
- how: git log --no-merges --author=<you> --since=2024-10-07; counted distinct YYYY-MM values.
|
|
110
|
+
- 212 of 530 non-merge commits in this window are yours (40%).
|
|
111
|
+
- how: git rev-list --count --no-merges, with and without --author. Share of commits,
|
|
112
|
+
which is a measure of participation and NOT of contribution size.
|
|
113
|
+
|
|
114
|
+
## What this cannot tell you
|
|
115
|
+
- Did any of this ship to real users, and did anything measurable change when it did?
|
|
116
|
+
That number is the résumé line; none of the above is.
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
*Example on made-up numbers.* Counts are not achievements, so Claude asks the questions the
|
|
120
|
+
log can't answer first. Say you built the invoicing service and it shipped, and the draft
|
|
121
|
+
keeps to that:
|
|
58
122
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- Novare rejection arrived — want me to draft a keep-the-door-open response?
|
|
123
|
+
```
|
|
124
|
+
- Built the invoicing service in billing-service over 14 months (212 commits),
|
|
125
|
+
which [confirm: what changed for users once it shipped, and by how much?].
|
|
63
126
|
```
|
|
64
127
|
|
|
65
|
-
|
|
128
|
+
## Tell me what it got wrong
|
|
66
129
|
|
|
67
|
-
|
|
130
|
+
There is no telemetry, so the only way I hear about a bad fit check is if you say so.
|
|
131
|
+
[Open a "What did your first fit check get wrong?" issue](https://github.com/benskamps/career-compass-mcp/issues/new?template=fit-check-wrong.yml)
|
|
132
|
+
(leave out anything personal), or say what you used it for in
|
|
133
|
+
[Discussions](https://github.com/benskamps/career-compass-mcp/discussions).
|
|
68
134
|
|
|
69
|
-
|
|
135
|
+
More: [How Career Compass works](https://benskamps.github.io/career-compass-mcp/how-it-works/),
|
|
136
|
+
with pages for [people who were laid off](https://benskamps.github.io/career-compass-mcp/for/laid-off/),
|
|
137
|
+
[career switchers](https://benskamps.github.io/career-compass-mcp/for/career-switchers/) and
|
|
138
|
+
[new grads](https://benskamps.github.io/career-compass-mcp/for/new-grads/).
|
|
70
139
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## For other MCP clients
|
|
143
|
+
|
|
144
|
+
Everything below is for running the server yourself, outside the Claude directory: Claude
|
|
145
|
+
Desktop, Cursor, other MCP clients, or Claude Code without the plugin. If you installed the
|
|
146
|
+
plugin, skip it. Running the command below as well would register a second copy of every
|
|
76
147
|
tool, so `install` detects the plugin and leaves Claude Code alone.
|
|
77
148
|
|
|
78
|
-
The
|
|
79
|
-
|
|
149
|
+
The package has 18 tools, 4 prompts, 9 resources and a local dashboard. To see the
|
|
150
|
+
dashboard on the bundled sample first, with no install and no data of your own:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
npx -y career-compass-mcp dashboard --sample
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
It opens in your browser, read-only, against the fictional Alex Rivera search. Nothing is
|
|
157
|
+
written and nothing leaves your machine.
|
|
80
158
|
|
|
81
159
|
### Everywhere else, in one command
|
|
82
160
|
|
|
@@ -206,12 +284,13 @@ Claude will extract your work history, achievements, and skills into structured
|
|
|
206
284
|
clarifying questions about gaps or vague metrics, and call `save_career_section` once per
|
|
207
285
|
section to write it to disk.
|
|
208
286
|
|
|
209
|
-
`save_career_section` is where your
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
287
|
+
`save_career_section` is where your history actually lands. It saves one section at a time
|
|
288
|
+
(`profile`, `experience`, `skills`, `education`, `projects`, `testimonials`), validates
|
|
289
|
+
against the schema before touching the file, and keeps the previous version as a
|
|
290
|
+
timestamped `.bak`. It compares each save with what is stored: a save that would drop roles
|
|
291
|
+
or achievements is refused unless the call says to replace them, and every save ends with a
|
|
292
|
+
one-line receipt of what changed. Your client asks you to confirm each write; approving them
|
|
293
|
+
is what fills the KB.
|
|
215
294
|
|
|
216
295
|
That is the whole setup. From there every tool has full context on who you are, and the KB
|
|
217
296
|
compounds — each posting you explore, interview you debrief, and offer you weigh can add a
|
|
@@ -236,20 +315,30 @@ on your own disk**.
|
|
|
236
315
|
- **Who sees it:** only the MCP client you connect it to, and through that client your model
|
|
237
316
|
provider, under *their* policy — and only for the requests you make. Career Compass sends
|
|
238
317
|
it nowhere on its own.
|
|
239
|
-
- **The one
|
|
240
|
-
version has been released. It is an unauthenticated GET for the package
|
|
241
|
-
nothing about you or your data, and it only happens when `check_setup` is
|
|
242
|
-
`checkForUpdates: true`, which Claude does when you ask about updates. It is
|
|
243
|
-
default. There is no analytics or phone-home path anywhere else in the package.
|
|
318
|
+
- **The one request the server makes:** `check_setup` asks the public **npm registry**
|
|
319
|
+
whether a newer version has been released. It is an unauthenticated GET for the package
|
|
320
|
+
name, carrying nothing about you or your data, and it only happens when `check_setup` is
|
|
321
|
+
called with `checkForUpdates: true`, which Claude does when you ask about updates. It is
|
|
322
|
+
off by default. There is no analytics or phone-home path anywhere else in the package.
|
|
323
|
+
- **Requests you run yourself:** any `npx … career-compass-mcp` command, including the
|
|
324
|
+
dashboard command `check_setup` prints, has npm download the package from the same
|
|
325
|
+
registry. That is npm fetching code, and it carries none of your data.
|
|
326
|
+
- **The dashboard's `--ask-claude` option** runs Claude Code on your computer, which sends
|
|
327
|
+
the Career KB content it reads to Anthropic under your own Claude account and billing.
|
|
328
|
+
It is off unless you start the dashboard with it, and read-only unless you start it with
|
|
329
|
+
`--ask-claude-writes`.
|
|
330
|
+
- **Schedules are yours:** Career Compass runs nothing on a timer. A
|
|
331
|
+
[morning briefing](#a-morning-briefing-if-you-want-one) is a task you create in your own
|
|
332
|
+
Claude app; it runs on your computer and only reads.
|
|
244
333
|
- **What ships in the package:** the server code and a small set of **fictional** example
|
|
245
334
|
files (`data/example/` — the Alex Rivera persona). A publish-time leak guard enforces that
|
|
246
335
|
no real career data can ride along.
|
|
247
336
|
- **The dashboard reads at request time, locally.** Your YAML is read when you open a page,
|
|
248
337
|
by a server on your own `localhost`. It is never baked into a build, never prerendered,
|
|
249
338
|
and never sent over the network.
|
|
250
|
-
- **What else is in that folder:** timestamped `.bak` copies of previous versions (
|
|
251
|
-
|
|
252
|
-
hand are never touched), plus — only while a write is actually happening — a
|
|
339
|
+
- **What else is in that folder:** timestamped `.bak` copies of previous versions (only
|
|
340
|
+
the newest 5 per data file are kept; older ones are deleted automatically on the next
|
|
341
|
+
write, and backups you make by hand are never touched), plus — only while a write is actually happening — a
|
|
253
342
|
`.write-claim` file that stops a second Career Compass process from writing at the same
|
|
254
343
|
time.
|
|
255
344
|
- **Retention is yours:** files stay until you delete them. Remove the `CAREER_DATA_PATH`
|
|
@@ -264,6 +353,24 @@ questions or concerns: [open an issue](https://github.com/benskamps/career-compa
|
|
|
264
353
|
|
|
265
354
|
---
|
|
266
355
|
|
|
356
|
+
## A morning briefing, if you want one
|
|
357
|
+
|
|
358
|
+
Career Compass never runs on a timer. If you'd like your job-search list waiting each
|
|
359
|
+
morning, you can create a **local** scheduled task in the Claude Code desktop app (see
|
|
360
|
+
[desktop scheduled tasks](https://code.claude.com/docs/en/desktop-scheduled-tasks)). A local
|
|
361
|
+
task runs on your computer, so it reaches the server and your data folder. Give it this
|
|
362
|
+
prompt, as plain text:
|
|
363
|
+
|
|
364
|
+
> Call pipeline_view with action next_actions. Lead with the Start here item in eight lines or fewer, and change nothing. If it's after 2pm, say it's a catch-up run.
|
|
365
|
+
|
|
366
|
+
Use the plain prompt rather than `/career-compass:today`: scheduled runs don't start
|
|
367
|
+
commands that only run when you type them. `pipeline_view` only reads, so the briefing
|
|
368
|
+
changes nothing. Cowork's scheduled tasks may run remotely, where your local data folder
|
|
369
|
+
isn't available, so try one by hand before relying on it. Cloud routines and `/loop` don't
|
|
370
|
+
fit this: cloud runs can't see your files, and `/loop` ends with the session.
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
267
374
|
## Tools
|
|
268
375
|
|
|
269
376
|
Eighteen tools, grouped by where they land in a search. **Read** tools take no permission
|
|
@@ -273,16 +380,16 @@ prompt in most clients; **Write** tools ask before touching your files.
|
|
|
273
380
|
|
|
274
381
|
| Tool | Access | What it does |
|
|
275
382
|
|------|--------|-------------|
|
|
276
|
-
| `explore_opportunity` | Read |
|
|
383
|
+
| `explore_opportunity` | Read | Judges a posting against your KB **and your stated preferences** — salary band, remote, relocation, notice period. Opens with a verdict (Strong fit, Stretch, or Long shot) and the biggest reason, then an explicit comp and location check, evidence per requirement, honest gaps, talking points and red flags. A "day in the life" only when you ask. Pass `sourceFitLabel` ("LinkedIn: strong match") and it will agree or disagree with the job board, in both directions |
|
|
277
384
|
| `research_company` | Read | Builds an intelligence brief: product, culture, funding, interview process, strategic fit |
|
|
278
385
|
|
|
279
386
|
### Apply
|
|
280
387
|
|
|
281
388
|
| Tool | Access | What it does |
|
|
282
389
|
|------|--------|-------------|
|
|
283
|
-
| `tailor_resume` | Read |
|
|
390
|
+
| `tailor_resume` | Read | Writes a résumé tailored to one posting from your KB — standard, federal, academic, or functional — using the posting's words only where your history says the same thing |
|
|
284
391
|
| `generate_cover_letter` | Read | Writes a cover letter with your actual achievements woven in, in a tone you pick — professional, conversational, enthusiastic, or concise |
|
|
285
|
-
| `format_for_ats` | Read | Reformats résumé
|
|
392
|
+
| `format_for_ats` | Read | Reformats résumé text you already have into plain sections an applicant tracking system can parse, ready to paste field by field (Workday, Greenhouse, Lever, LinkedIn, iCIMS, Taleo, SmartRecruiters, or generic). Reformats only; it never rewrites what you did |
|
|
286
393
|
|
|
287
394
|
### Track the pipeline
|
|
288
395
|
|
|
@@ -290,7 +397,7 @@ prompt in most clients; **Write** tools ask before touching your files.
|
|
|
290
397
|
|------|--------|-------------|
|
|
291
398
|
| `pipeline_view` | Read | Lists applications, funnel stats, what needs attention, or one application by id |
|
|
292
399
|
| `pipeline_add` | Write | Adds one application. Optional starting `status` (defaults to `applied`); unknown statuses are rejected with a did-you-mean suggestion |
|
|
293
|
-
| `pipeline_update` | Write | Updates one application — status, notes, follow-up date, a contact,
|
|
400
|
+
| `pipeline_update` | Write | Updates one application — status, notes, follow-up date, a contact, an interview round and how it went, or an offer's terms and answer deadline |
|
|
294
401
|
| `classify_email` | Read | Classifies a job-search email and extracts contacts, dates, and suggested pipeline updates |
|
|
295
402
|
|
|
296
403
|
### Interview and decide
|
|
@@ -345,18 +452,20 @@ subscribes, so a client that never does pays nothing for the feature.
|
|
|
345
452
|
|
|
346
453
|
## Prompts
|
|
347
454
|
|
|
348
|
-
Power-user shortcuts
|
|
455
|
+
Power-user shortcuts for MCP clients that show prompts, usually as slash commands. Plugin
|
|
456
|
+
users get the `/career-compass:…` commands above instead.
|
|
349
457
|
|
|
350
458
|
| Prompt | What it does |
|
|
351
459
|
|--------|-------------|
|
|
352
460
|
| `resume-tailor` | Drop in a posting → get a tailored résumé |
|
|
353
|
-
| `interview-coach` | Company + role + interview type → full prep package |
|
|
354
461
|
| `negotiation-coach` | Paste an offer → analysis, strategy, and counter scripts |
|
|
355
|
-
| `setup-career-kb` | Walk through building your Career KB from scratch — profile, experience, skills, first pipeline entry |
|
|
356
|
-
| `daily-review` | Triage the pipeline → today's highest-leverage moves, overdue items, upcoming interviews |
|
|
357
462
|
| `post-interview-debrief` | Capture what an interview surfaced → record the durable signal, set up the next step |
|
|
358
463
|
| `weekly-retro` | Review the week's movement and journal signals → one takeaway that compounds |
|
|
359
464
|
|
|
465
|
+
Retired: `daily-review`, `interview-coach` and `setup-career-kb` duplicated the plugin's
|
|
466
|
+
`/career-compass:today`, `/career-compass:interview-prep` and `/career-compass:start`. Ask
|
|
467
|
+
for the same thing in plain words and the tools do it.
|
|
468
|
+
|
|
360
469
|
---
|
|
361
470
|
|
|
362
471
|
## The dashboard
|
|
@@ -401,8 +510,12 @@ prompt — the server runs `claude` headless with Career Compass as its only too
|
|
|
401
510
|
answer streams into a panel on the page, with a *Reload the board* button when Claude may have
|
|
402
511
|
changed your files. It is opt-in, loopback-only, one question at a time, and Claude Code runs
|
|
403
512
|
without your user hooks, without other MCP servers, and without shell or file-editing tools.
|
|
404
|
-
|
|
405
|
-
Code) the buttons copy,
|
|
513
|
+
It is read-only unless you start it with `--ask-claude-writes`. Prompts that need you to
|
|
514
|
+
paste a posting still copy. Without the flag (or without Claude Code) the buttons copy,
|
|
515
|
+
exactly as before.
|
|
516
|
+
|
|
517
|
+
Each question runs under your own Claude account: Claude Code sends the Career KB content it
|
|
518
|
+
reads to Anthropic, and the usage is billed to you like any other Claude Code session.
|
|
406
519
|
|
|
407
520
|
Other flags: `--port <n>` (default 3141, falling back to the next free port), `--no-open` to
|
|
408
521
|
skip launching a browser, `--lite` to force this dashboard explicitly. Full list:
|
|
@@ -433,6 +546,9 @@ skip launching a browser, `--lite` to force this dashboard explicitly. Full list
|
|
|
433
546
|
└── applications.yaml # all job applications
|
|
434
547
|
```
|
|
435
548
|
|
|
549
|
+
Optional sections (`narrative.yaml`, `stories.yaml`, `people.yaml`) appear in `career/`
|
|
550
|
+
the first time you save one.
|
|
551
|
+
|
|
436
552
|
This is your single source of truth — built once, enriched over time, read by every tool.
|
|
437
553
|
You never need to edit these files by hand: paste a document and ask Claude to save it. But
|
|
438
554
|
they are plain YAML, so you can.
|
|
@@ -448,6 +564,10 @@ Alex Rivera) if you want to see the shape before writing your own.
|
|
|
448
564
|
|---------|---------|-------------|
|
|
449
565
|
| `CAREER_DATA_PATH` | `~/.career-compass` | Directory holding your career and pipeline YAML |
|
|
450
566
|
|
|
567
|
+
Plugin users set the same thing in the plugin's settings as **Career data folder**
|
|
568
|
+
(`data_path`, default `~/.career-compass`). The plugin passes it to the server as
|
|
569
|
+
`CAREER_DATA_PATH`.
|
|
570
|
+
|
|
451
571
|
---
|
|
452
572
|
|
|
453
573
|
## Troubleshooting and upgrading
|
|
@@ -577,8 +697,10 @@ So if Career Compass got you through a week of applications:
|
|
|
577
697
|
- **[Say so in Discussions](https://github.com/benskamps/career-compass-mcp/discussions)** —
|
|
578
698
|
what you used it for, what was missing, what you wish it did instead. Job searches differ
|
|
579
699
|
enough that I would rather hear about yours than guess at it.
|
|
700
|
+
- **[Tell me what a fit check got wrong](https://github.com/benskamps/career-compass-mcp/issues/new?template=fit-check-wrong.yml)**
|
|
701
|
+
— a short form; leave out anything personal.
|
|
580
702
|
|
|
581
|
-
|
|
703
|
+
None of these sends me anything you have not chosen to type.
|
|
582
704
|
|
|
583
705
|
## Contributing
|
|
584
706
|
|
package/build/bin/cli.js
CHANGED
|
@@ -50,7 +50,11 @@ Options:
|
|
|
50
50
|
--ask-claude Dashboard buttons ask Claude directly (needs Claude Code installed).
|
|
51
51
|
Runs \`claude\` headless with your Career Compass data; the answer
|
|
52
52
|
streams into the page. Without it, buttons copy a prompt to paste.
|
|
53
|
-
|
|
53
|
+
Read-only: Claude can look at your pipeline and KB but not change them.
|
|
54
|
+
--ask-claude-writes
|
|
55
|
+
Same as --ask-claude, and also lets Claude add and update applications
|
|
56
|
+
and save to your Career KB from the dashboard, without asking first.
|
|
57
|
+
--lite Force the built-in dashboard (only matters in a source checkout that built the full one)
|
|
54
58
|
|
|
55
59
|
Your data folder is CAREER_DATA_PATH, or ~/.career-compass when that is unset.
|
|
56
60
|
`);
|
|
@@ -118,7 +122,10 @@ else {
|
|
|
118
122
|
const standaloneStaged = existsSync(join(standaloneDir, ".next", "static")) && existsSync(join(standaloneDir, ".staged"));
|
|
119
123
|
// --ask-claude lives in the lite dashboard, so asking for it means asking for
|
|
120
124
|
// lite even in a source checkout that has the full app built.
|
|
121
|
-
|
|
125
|
+
// --ask-claude-writes implies --ask-claude: it is the same bridge with the
|
|
126
|
+
// writing tools allowed as well.
|
|
127
|
+
const askWritesFlag = args.includes("--ask-claude-writes");
|
|
128
|
+
const askClaudeFlag = args.includes("--ask-claude") || askWritesFlag;
|
|
122
129
|
const useLite = forceLite || askClaudeFlag || !existsSync(standalonePath) || !standaloneStaged;
|
|
123
130
|
if (useLite) {
|
|
124
131
|
process.env.CAREER_DATA_PATH = dataPath; // loadPipeline() reads this
|
|
@@ -146,12 +153,14 @@ else {
|
|
|
146
153
|
if (askClaude && useSample) {
|
|
147
154
|
console.error("--ask-claude is off for the bundled sample: it is read-only and not yours to change.");
|
|
148
155
|
}
|
|
149
|
-
const ask = askClaude && claudeCmd && !useSample ? { cmd: claudeCmd } : undefined;
|
|
156
|
+
const ask = askClaude && claudeCmd && !useSample ? { cmd: claudeCmd, allowWrites: askWritesFlag } : undefined;
|
|
150
157
|
const server = await startLiteDashboard(port, undefined, { ask });
|
|
151
158
|
console.error(`Lite dashboard running at http://localhost:${port}`);
|
|
152
159
|
if (ask) {
|
|
153
160
|
console.error("Ask Claude: ON — dashboard buttons send their question to Claude Code on this machine.");
|
|
154
|
-
console.error(
|
|
161
|
+
console.error(ask.allowWrites
|
|
162
|
+
? " Claude reads and updates your career data only through Career Compass's own tools — no shell, no other files. Writes run without a confirmation step."
|
|
163
|
+
: " Read-only: Claude reads your career data through Career Compass's own tools and changes nothing. Add --ask-claude-writes to let it update too.");
|
|
155
164
|
}
|
|
156
165
|
else if (claudeCmd && !useSample) {
|
|
157
166
|
console.error("Tip: add --ask-claude and the dashboard buttons will ask Claude directly instead of copying a prompt.");
|
package/build/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAgB,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,KAAK,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;6DAE6D;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,gFAAgF;AAChF,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAE5C,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,gFAAgF;AAChF,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC;sBACQ,UAAU
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|