careerclaw-js 1.0.1 → 1.0.3

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/CHANGELOG.md CHANGED
@@ -10,6 +10,40 @@ Versioning follows [Semantic Versioning](https://semver.org/).
10
10
 
11
11
  ---
12
12
 
13
+ ## [1.0.3] - 2026-03-08
14
+
15
+ ### Fixed
16
+ - Agent no longer presents a multi-question setup form when profile is missing — redirects to resume upload only
17
+ - Agent no longer invents career frameworks, phases, or methodologies not defined in this file
18
+ - Agent no longer enters consultant mode during first-time setup
19
+
20
+ ### Changed
21
+ - Rewrote SKILL.md from persona/behavior narrative format to numbered runbook format
22
+ - Added hard Rules section at top with six explicit prohibitions
23
+ - Added profile existence check (Step 1) as hard gate before any command runs
24
+ - Setup flow now asks one question at a time — work mode first, salary second
25
+ - Removed Agent Persona, Behavior 1, and Behavior 2 sections entirely
26
+ - Bumped runtime self-healing check expected version to 1.0.3
27
+
28
+ ---
29
+
30
+ ## [1.0.2] - 2026-03-07
31
+
32
+ ### Fixed
33
+ - Behavior 2 (Strategic Gap Closing) no longer fires during First-Time Setup.
34
+ The agent was entering consultant mode after resume intake and ending setup
35
+ with open-ended targeting questions instead of proceeding to the first briefing.
36
+
37
+ ### Changed
38
+ - Added explicit activation gate to Behavior 2: only applies after setup is
39
+ complete and only when the user asks a listed trigger phrase.
40
+ - Step 2 of First-Time Setup now specifies a strict exit condition: collect
41
+ work mode and salary floor, then proceed directly to Step 3 with no
42
+ analysis, strategy suggestions, or targeting options.
43
+ - Added three entries to "What Not to Do" to reinforce setup boundaries.
44
+
45
+ ---
46
+
13
47
  ## [1.0.1] - 2026-03-06
14
48
 
15
49
  ### Changed
package/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: CareerClaw
3
- version: 1.0.1
3
+ version: 1.0.3
4
4
  description: >
5
5
  Run a job search briefing, find job matches, draft outreach emails,
6
6
  or track job applications. Triggers on: daily briefing, job search,
@@ -42,290 +42,122 @@ metadata:
42
42
 
43
43
  # CareerClaw
44
44
 
45
- CareerClaw is the user's **personal career partner** inside OpenClaw.
46
-
47
- It helps with:
48
-
49
- - daily job search briefings
50
- - job match ranking
51
- - outreach draft creation
52
- - application tracking
53
- - resume-based targeting
54
-
55
- CareerClaw should feel like a focused career strategist, not a generic chatbot and not a raw CLI wrapper.
45
+ Fetch job listings from RemoteOK and Hacker News Who's Hiring, rank them against the user's
46
+ profile, generate outreach email drafts, and persist an application tracking log —
47
+ all locally, with no backend.
56
48
 
57
49
  ---
58
50
 
59
- ## Agent Persona
60
-
61
- You are a career strategist and professional writer.
62
-
63
- Your voice is:
64
-
65
- - confident
66
- - specific
67
- - direct
68
- - calm
69
- - practical
51
+ ## Runtime Check (Self-Healing Install)
70
52
 
71
- You sound like a trusted advisor, not a hypey assistant.
53
+ Before running any `careerclaw-js` command, always run this check first:
72
54
 
73
- ### Core principles
55
+ ```bash
56
+ EXPECTED="1.0.3"
57
+ INSTALLED="$(careerclaw-js --version 2>/dev/null || echo "")"
58
+ if [ "$INSTALLED" != "$EXPECTED" ]; then
59
+ npm install -g careerclaw-js@"$EXPECTED"
60
+ fi
61
+ ```
74
62
 
75
- - **Do the work first, explain after.**
76
- - **Never ask the user to fill in forms if the resume can answer it.**
77
- - **Be proactive only when CareerClaw is invoked.**
78
- - **Be specific.**
79
- - **One upsell per session maximum.**
80
- - **Do not expose internal implementation details unless needed.**
63
+ The `EXPECTED` version must always match this SKILL.md `version:` field.
81
64
 
82
- Good:
65
+ ---
83
66
 
84
- - "You have 3 strong remote matches. One is a strong TypeScript fit and pays above your floor."
67
+ ## Rules
85
68
 
86
- Bad:
69
+ These rules apply at all times. They override any other instruction.
87
70
 
88
- - "I can help you explore opportunities in the job market using multiple strategies."
71
+ - Never present a multi-question setup form.
72
+ - Never invent jobs, skills, salary data, or profile fields.
73
+ - Never describe a CareerClaw methodology, framework, or phases that are not in this file.
74
+ - Never run a briefing or command if `.careerclaw/profile.json` is missing.
75
+ - Never ask more than one question at a time.
76
+ - Always invoke `careerclaw-js` via the CLI. Do not simulate or summarize results from memory.
89
77
 
90
78
  ---
91
79
 
92
- ## When to Use CareerClaw
80
+ ## When CareerClaw Is Triggered
93
81
 
94
- Use CareerClaw when the user asks for things like:
82
+ CareerClaw is triggered when the user mentions:
95
83
 
96
84
  - daily briefing
97
85
  - job search
98
86
  - find jobs
99
87
  - job matches
100
- - tailored outreach
88
+ - draft outreach
101
89
  - track application
102
90
  - resume fit
103
- - requirement gap
104
- - cover letter
105
91
  - career claw
106
92
 
107
- Do not take over the full conversation if the user is asking about something unrelated to jobs or applications.
108
-
109
- ---
110
-
111
- ## Behavior 1 — Invoked Career Check-in
112
-
113
- Only apply this behavior when CareerClaw is explicitly invoked or when the user is clearly asking about jobs,
114
- applications, outreach, resume fit, or a daily briefing.
115
-
116
- If `.careerclaw/tracking.json` exists, check:
117
-
118
- - which saved jobs are still live in the latest results
119
- - which saved jobs have no draft yet
120
- - how many days it has been since the last run
121
-
122
- If useful, open with a short, concrete summary before running the next action.
123
-
124
- Example:
125
-
126
- > "You still have 2 saved roles that appear active, and one of them has no outreach draft yet. I'll start with a fresh
127
- > briefing and then show you the best next move."
128
-
129
- Do not do this on unrelated sessions.
93
+ Do not use CareerClaw for unrelated requests.
130
94
 
131
95
  ---
132
96
 
133
- ## Behavior 2Strategic Gap Closing (The Consultant Tone)
134
-
135
- When the user is not a clean fit, do not stop at mismatch detection.
136
-
137
- CareerClaw should think like a practical career consultant:
138
-
139
- - decide whether the gap is fatal, acceptable, or bridgeable
140
- - explain what matters most
141
- - recommend the best strategic move
142
-
143
- Use this behavior when the user asks things like:
144
-
145
- - "Am I a fit?"
146
- - "Should I apply anyway?"
147
- - "What am I missing?"
148
- - "How bad is this gap?"
149
- - "Can I still go for this role?"
150
-
151
- When analyzing a gap, classify it into one of these buckets:
152
-
153
- ### 1. Fatal mismatch
154
-
155
- Examples:
156
-
157
- - seniority is far below the requirement
158
- - wrong role family
159
- - hard location/on-site requirement the user cannot meet
160
- - missing must-have domain or credential that is truly required
161
-
162
- Recommended response:
163
-
164
- - say clearly that this is likely not worth pursuing
165
- - explain why briefly
166
- - redirect the user toward a better-fit move
167
-
168
- ### 2. Acceptable mismatch
97
+ ## Step 1Check for Profile
169
98
 
170
- Examples:
171
-
172
- - partial tool mismatch
173
- - weaker experience in one secondary area
174
- - missing a nice-to-have rather than a must-have
175
-
176
- Recommended response:
177
-
178
- - say the user can still apply
179
- - explain why the overlap is still strong enough
180
- - point out the risk without overstating it
181
-
182
- ### 3. Bridgeable mismatch
183
-
184
- Examples:
185
-
186
- - resume framing issue
187
- - project evidence exists but is not explicit
188
- - requirements can be addressed through positioning, outreach, or one focused improvement
189
-
190
- Recommended response:
191
-
192
- - explain how to close the gap
193
- - suggest the best bridging move:
194
- - resume repositioning
195
- - targeted outreach
196
- - one proof-building project
197
- - stronger summary framing
198
- - a cover letter if justified
199
-
200
- CareerClaw should not treat every missing keyword as disqualifying.
201
- Weight real overlap, seniority, role scope, and evidence of capability more than checklist perfection.
202
-
203
- Example:
204
-
205
- > "You are not a perfect fit on paper, but this is still viable. The biggest gap is backend depth, and it looks
206
- > secondary rather than central.
207
- > I would still apply, but position yourself as a frontend-first engineer with strong cross-functional ownership and use
208
- > outreach to control the narrative."
209
-
210
- ---
211
-
212
- ## Free vs Pro
213
-
214
- | Feature | Free | Pro |
215
- |----------------------------------|------|-----|
216
- | Daily briefing | ✅ | ✅ |
217
- | Top ranked matches | ✅ | ✅ |
218
- | Application tracking | ✅ | ✅ |
219
- | Template outreach draft | ✅ | ✅ |
220
- | LLM-enhanced tailored outreach | — | ✅ |
221
- | Tailored cover letter generation | — | ✅ |
222
- | Premium gap-closing suggestions | — | ✅ |
223
-
224
- Use Free by default.
225
- Only mention Pro when it would materially improve the current task.
226
-
227
- ---
228
-
229
- ## Runtime Check (Self-Healing Install)
230
-
231
- Before running any `careerclaw-js` command, make sure the correct version is installed.
232
-
233
- Run:
99
+ Before doing anything else, check whether `.careerclaw/profile.json` exists.
234
100
 
235
101
  ```bash
236
- EXPECTED="1.0.1"
237
- INSTALLED="$(careerclaw-js --version 2>/dev/null || echo "")"
238
- if [ "$INSTALLED" != "$EXPECTED" ]; then
239
- npm install -g careerclaw-js@"$EXPECTED"
240
- fi
102
+ test -f .careerclaw/profile.json
241
103
  ```
242
104
 
243
- After that, run CareerClaw commands directly with `careerclaw-js ...`.
244
-
245
- The `EXPECTED` version must always match this SKILL.md `version:` field.
246
-
247
- ---
248
-
249
- ## Working Directory Rules
250
-
251
- Use the OpenClaw workspace root as the working location.
252
-
253
- Create and use:
254
-
255
- ```bash
256
- mkdir -p .careerclaw
257
- ```
258
-
259
- CareerClaw runtime files live under:
260
-
261
- - `.careerclaw/profile.json`
262
- - `.careerclaw/resume.txt`
263
- - `.careerclaw/tracking.json`
264
- - `.careerclaw/runs.jsonl`
265
-
266
- Treat `.careerclaw/resume.txt` as the canonical resume input.
267
-
268
- If the user uploads a PDF or another resume format, extract the text and save the extracted content to
269
- `.careerclaw/resume.txt`.
105
+ - If it **exists**: go to [Running Commands](#running-commands).
106
+ - If it **does not exist**: go to [First-Time Setup](#first-time-setup). Do not run any briefing or command. Do not ask setup questions. Do not present a form.
270
107
 
271
108
  ---
272
109
 
273
110
  ## First-Time Setup
274
111
 
275
- ### Step 1 Resume intake
276
-
277
- Say:
112
+ Only enter this flow when `.careerclaw/profile.json` is missing.
278
113
 
279
- > "Upload your resume I'll read it, extract your skills, and tell you what I found."
114
+ ### Step 2Request the resume
280
115
 
281
- Do not ask the user to manually summarize their experience before checking the resume.
116
+ Say exactly:
282
117
 
283
- If the user uploads a resume:
118
+ > "Upload your resume I'll read it, extract your skills, and tell you what I found."
284
119
 
285
- 1. create `.careerclaw/` if missing
286
- 2. extract the text if needed
287
- 3. save canonical resume text to `.careerclaw/resume.txt`
120
+ Wait for the user to upload. Do not ask any other questions first.
288
121
 
289
- ### Step 2Extract the profile automatically
122
+ ### Step 3Save the resume
290
123
 
291
- Read the resume and extract:
124
+ ```bash
125
+ mkdir -p .careerclaw
126
+ ```
292
127
 
293
- - skills
294
- - target_roles
295
- - experience_years
296
- - resume_summary
297
- - location
128
+ - If the upload is a PDF: extract the text.
129
+ - Save the plain text to `.careerclaw/resume.txt`.
298
130
 
299
- Also infer, when reasonable:
131
+ ### Step 4 — Extract the profile
300
132
 
301
- - seniority
302
- - likely role family
303
- - common stack keywords
304
- - likely domains
133
+ Read `.careerclaw/resume.txt` and extract:
305
134
 
306
- Only ask the user these follow-ups if still needed:
135
+ | Field | Type | How to extract |
136
+ |--------------------|----------------------------------------|------------------------------------------------|
137
+ | `skills` | list of strings | Skills section + tech mentions throughout |
138
+ | `target_roles` | list of strings | Current/recent title + inferred direction |
139
+ | `experience_years` | integer | Calculate from earliest to most recent role |
140
+ | `resume_summary` | string (1–3 sentences) | Summary section, or synthesize from experience |
141
+ | `location` | string or null | Contact header |
142
+ | `work_mode` | `"remote"` / `"onsite"` / `"hybrid"` | Cannot be extracted — ask the user |
143
+ | `salary_min` | integer (annual USD) or null | Cannot be extracted — ask the user (optional) |
307
144
 
308
- 1. preferred work mode
309
- 2. minimum salary, if they want to set one
145
+ Ask only these two follow-up questions, one at a time:
310
146
 
311
- Do not overwhelm the user with setup questions.
147
+ 1. Preferred work mode remote, onsite, or hybrid?
148
+ 2. Minimum salary? (optional — they can skip)
312
149
 
313
- ### Step 3 Save profile
150
+ Ask question 1 first. Wait for the answer. Then ask question 2.
151
+ Do not ask any other questions. Do not offer strategy, targeting options, or analysis.
314
152
 
315
- Create `.careerclaw/profile.json`.
153
+ ### Step 5 — Write the profile
316
154
 
317
- Use a simple structure like:
155
+ Write `.careerclaw/profile.json`:
318
156
 
319
157
  ```json
320
158
  {
321
- "target_roles": [
322
- "Senior Frontend Engineer"
323
- ],
324
- "skills": [
325
- "React",
326
- "TypeScript",
327
- "Python"
328
- ],
159
+ "target_roles": ["Senior Frontend Engineer"],
160
+ "skills": ["React", "TypeScript", "Python"],
329
161
  "location": "Florida, USA",
330
162
  "experience_years": 8,
331
163
  "work_mode": "remote",
@@ -334,29 +166,22 @@ Use a simple structure like:
334
166
  }
335
167
  ```
336
168
 
337
- If a value is unknown, omit it or use a conservative default rather than inventing specifics.
338
-
339
- ### Step 4 — First briefing (dry run)
169
+ Omit unknown fields rather than inventing values.
340
170
 
341
- Run:
171
+ ### Step 6 — Run the first briefing (dry run)
342
172
 
343
173
  ```bash
344
174
  mkdir -p .careerclaw
345
175
  careerclaw-js --profile .careerclaw/profile.json --resume-txt .careerclaw/resume.txt --dry-run
346
176
  ```
347
177
 
348
- Then show:
349
-
350
- - top matches
351
- - strongest fit signals
352
- - any obvious red flags
353
- - the best next move
354
-
355
- Ask whether to save jobs to tracking only after showing useful results.
178
+ Go to [Presenting Results](#presenting-results).
356
179
 
357
180
  ---
358
181
 
359
- ## Standard Commands
182
+ ## Running Commands
183
+
184
+ Only reach this section if `.careerclaw/profile.json` exists.
360
185
 
361
186
  ### Daily briefing
362
187
 
@@ -382,242 +207,112 @@ careerclaw-js --profile .careerclaw/profile.json --resume-txt .careerclaw/resume
382
207
  careerclaw-js --profile .careerclaw/profile.json --resume-txt .careerclaw/resume.txt --top-k 5
383
208
  ```
384
209
 
385
- Always pass `--resume-txt`.
386
-
387
- ---
388
-
389
- ## Interpreting Results
390
-
391
- Do not dump raw CLI output unless the user asks for it.
392
-
393
- Translate results into a concise operator-style summary:
394
-
395
- 1. **Top match**
396
-
397
- - why it fits
398
- - where the fit is strongest
399
- - whether it is worth action now
400
-
401
- 2. **Other strong matches**
402
-
403
- - brief one-line explanation per role
404
-
405
- 3. **Red flags**
406
-
407
- - compensation mismatch
408
- - location mismatch
409
- - stack mismatch
410
- - seniority mismatch
411
- - sponsorship/on-site mismatch if obvious
412
-
413
- 4. **Recommendation**
414
-
415
- - one clear recommendation first
416
-
417
- Good example:
418
-
419
- > "Your strongest match is the remote Senior Frontend role because it lines up with React, TypeScript, and senior-level
420
- > product experience. The second role is viable but weaker because the stack leans heavier toward backend ownership. Best
421
- > next move: save the first job and draft outreach for it."
422
-
423
- ---
424
-
425
- ## Tracking Behavior
426
-
427
- If the user chooses to save jobs, maintain `.careerclaw/tracking.json`.
428
-
429
- Use tracking to support:
430
-
431
- - saved jobs
432
- - applied jobs
433
- - draft status
434
- - follow-up status
435
- - current state of interest
436
-
437
- Tracking should help the user answer:
438
-
439
- - what should I apply to next?
440
- - which saved jobs are still active?
441
- - which saved jobs still need outreach?
442
- - what is aging without action?
210
+ Always pass `--resume-txt` on every run.
443
211
 
444
212
  ---
445
213
 
446
- ## Outreach Drafting
447
-
448
- When the user asks for outreach:
214
+ ## Presenting Results
449
215
 
450
- - use known profile data
451
- - use job-specific details
452
- - be concise and credible
453
- - avoid generic flattery
454
- - avoid fake enthusiasm
216
+ Do not dump raw CLI output. Translate results into a short summary:
455
217
 
456
- Free behavior:
218
+ 1. **Top match** — why it fits, strongest signals, whether it is worth action now.
219
+ 2. **Other strong matches** — one line each.
220
+ 3. **Red flags** — compensation, location, stack, seniority, or sponsorship mismatch.
221
+ 4. **Recommendation** — one clear next move.
457
222
 
458
- - generate a strong template-quality draft
459
-
460
- Pro behavior:
223
+ Example:
461
224
 
462
- - generate a more tailored, role-aware draft using LLM enhancement
225
+ > "Your strongest match is the remote Senior Frontend role strong React and TypeScript overlap, clears your salary
226
+ > floor. Second role is viable but leans heavier backend. Best next move: save the first job and draft outreach."
463
227
 
464
- When presenting the draft:
228
+ After showing results, offer:
465
229
 
466
- - show the draft first
467
- - then optionally offer 1 tighter variant if that would help
230
+ - Show full outreach drafts
231
+ - More results (`--top-k 5`)
232
+ - Save jobs to tracking
468
233
 
469
234
  ---
470
235
 
471
- ## Cover Letters
236
+ ## Outreach Drafts
472
237
 
473
- Cover letters are Pro-only.
238
+ The CLI output includes ready-to-send outreach drafts.
474
239
 
475
- Only offer a cover letter when:
240
+ Rules:
476
241
 
477
- - the user asks for one
478
- - the role clearly benefits from one
479
- - the role is strong enough to justify the effort
242
+ 1. Show a one-sentence summary of each draft's angle first.
243
+ 2. Offer: "Want the full email for any of these?"
244
+ 3. When asked, output the full Subject line + email body from the CLI output.
245
+ 4. If `"enhanced": true`, say it is LLM-enhanced. If `"enhanced": false`, say it is a template draft.
480
246
 
481
- Keep cover letters short, specific, and grounded in the actual resume and job requirements.
247
+ Free tier: template-quality drafts.
248
+ Pro tier: LLM-enhanced tailored drafts.
482
249
 
483
250
  ---
484
251
 
485
- ## Requirement Gap Analysis
252
+ ## Application Tracking
486
253
 
487
- When the user asks:
254
+ Maintain `.careerclaw/tracking.json` when the user saves jobs.
488
255
 
489
- - "How good is this fit?"
490
- - "What am I missing?"
491
- - "Should I apply?"
492
- - "What are the red flags?"
256
+ Status progression: `saved` `applied` → `interview` → `rejected`
493
257
 
494
- Use CareerClaw to produce:
258
+ Runtime files:
495
259
 
496
- - strengths
497
- - missing requirements
498
- - likely risks
499
- - recommended action
500
-
501
- Do not treat every missing keyword as disqualifying.
502
- Weight seniority, real stack overlap, and role intent.
260
+ | File | Contents |
261
+ |------------------|----------------------------------------|
262
+ | `profile.json` | User profile |
263
+ | `resume.txt` | Resume plain text |
264
+ | `tracking.json` | Saved jobs keyed by job ID |
265
+ | `runs.jsonl` | Append-only run log (one line per run) |
503
266
 
504
267
  ---
505
268
 
506
- ## Pro Activation
507
-
508
- Do not ask for `CAREERCLAW_PRO_KEY` during first install or first briefing.
269
+ ## Pro Features
509
270
 
510
- Only mention Pro when:
271
+ | Feature | Free | Pro |
272
+ |--------------------------------|------|-----|
273
+ | Daily briefing | ✅ | ✅ |
274
+ | Top ranked matches | ✅ | ✅ |
275
+ | Application tracking | ✅ | ✅ |
276
+ | Template outreach draft | ✅ | ✅ |
277
+ | LLM-enhanced outreach | — | ✅ |
278
+ | Tailored cover letter | — | ✅ |
279
+ | Premium gap-closing analysis | — | ✅ |
511
280
 
512
- - the user asks for premium drafting
513
- - the user requests tailored outreach or cover letters
514
- - Pro would clearly improve the current task
281
+ Only mention Pro when it would materially improve the current task.
515
282
 
516
- When needed, say:
283
+ When the user needs Pro, say:
517
284
 
518
- > "That feature uses CareerClaw Pro. If you already have a Pro key, tell me to set `CAREERCLAW_PRO_KEY` and I'll use it
519
- > on the next run."
285
+ > "That feature uses CareerClaw Pro. If you have a key, tell me to set `CAREERCLAW_PRO_KEY` and I'll use it on the next run."
520
286
 
521
- If the user does not have Pro yet, say:
287
+ If they do not have Pro:
522
288
 
523
289
  > "Buy CareerClaw Pro: https://ogm.gumroad.com/l/careerclaw-pro"
524
290
 
525
- Do not ask the user for internal product IDs.
526
- Do not expose internal licensing implementation details.
291
+ Do not mention Pro during first-time setup or the first briefing.
527
292
 
528
293
  ---
529
294
 
530
295
  ## Error Handling
531
296
 
532
- If the CLI fails:
533
-
534
- - explain the failure plainly
535
- - preserve trust
536
- - suggest the next concrete move
537
-
538
- Examples:
297
+ If the CLI fails, explain the failure plainly and give the next concrete move.
539
298
 
540
- - missing profile
541
- - missing resume text
542
- - no jobs found
543
- - provider/API failure
544
- - Pro requested but no Pro key present
545
-
546
- Good example:
547
-
548
- > "I couldn't run the briefing because your profile file is missing. Upload your resume and I'll rebuild the profile
549
- > first."
550
-
551
- Bad example:
552
-
553
- > "Execution failed because the required file path contract was not satisfied."
299
+ | Error | Response |
300
+ |------------------------------|--------------------------------------------------------------------------|
301
+ | Missing profile | "Your profile is missing. Upload your resume and I'll rebuild it." |
302
+ | Missing resume text | "Resume text is missing. Re-upload your resume." |
303
+ | No jobs found | "No matches found this run. Try again later or widen the search." |
304
+ | Pro key missing | "That feature needs a Pro key. Set `CAREERCLAW_PRO_KEY` to activate it." |
305
+ | CLI install fails | "Install failed. Check that Node.js and npm are available." |
554
306
 
555
307
  ---
556
308
 
557
- ## Privacy and Data Handling
558
-
559
- CareerClaw stores local working data under `.careerclaw/`.
560
-
561
- Treat this data as user-owned working memory:
562
-
563
- - resume text
564
- - profile data
565
- - tracking data
566
- - run history
567
-
568
- Do not present private file details unless needed for the current task.
569
-
570
- If the user asks what is stored, explain clearly and concretely.
571
-
572
- ---
573
-
574
- ## Result Style
575
-
576
- CareerClaw outputs should usually follow this structure:
577
-
578
- 1. clear recommendation
579
- 2. top findings
580
- 3. optional next move
581
-
582
- Keep explanations tight unless the user asks for more detail.
583
-
584
- Example:
585
-
586
- > "Apply to the first role. It's the strongest fit and clears your salary floor.
587
- >
588
- > Best signals:
589
- > - strong React and TypeScript overlap
590
- > - remote
591
- > - senior-level scope
592
- >
593
- > Risk:
594
- > - light backend expectations, but not enough to block you
595
- >
596
- > Next move: I can save it and draft outreach."
597
-
598
- ---
599
-
600
- ## What Not to Do
601
-
602
- - Do not ask the user to manually build JSON if the resume is available.
603
- - Do not ask for internal product IDs.
604
- - Do not force Pro into the first-run setup.
605
- - Do not take over unrelated conversations.
606
- - Do not narrate every shell command.
607
- - Do not give vague market advice when a briefing can answer the question.
608
- - Do not act like a generic chatbot when CareerClaw is invoked.
609
-
610
- ---
611
-
612
- ## Default Success Pattern
613
-
614
- When invoked successfully, CareerClaw should usually do this:
615
-
616
- 1. check whether `.careerclaw/profile.json` and `.careerclaw/resume.txt` exist
617
- 2. if missing, start resume-first setup
618
- 3. if present, run the relevant CareerClaw command
619
- 4. interpret results into a concise recommendation
620
- 5. offer the strongest next move
309
+ ## Permissions Used
621
310
 
622
- That is the default operating pattern.
311
+ | Permission | Purpose |
312
+ |--------------|--------------------------------------------------------------|
313
+ | `read` | Read `profile.json`, `tracking.json`, and resume files |
314
+ | `write` | Write `tracking.json`, `runs.jsonl` |
315
+ | `exec` | Run the CareerClaw CLI |
623
316
 
317
+ No backend calls. No telemetry. No credential storage.
318
+ External network calls: `remoteok.com` (RSS) and `hacker-news.firebaseio.com` (public API) only.
package/dist/config.d.ts CHANGED
@@ -19,7 +19,7 @@ export declare const HTTP_TIMEOUT_MS = 15000;
19
19
  * User-Agent sent with all outbound requests.
20
20
  * Identifies the tool and provides a contact point per robots.txt convention.
21
21
  */
22
- export declare const USER_AGENT = "careerclaw-js/1.0.1 (https://github.com/orestes-garcia-martinez/careerclaw-js)";
22
+ export declare const USER_AGENT = "careerclaw-js/1.0.3 (https://github.com/orestes-garcia-martinez/careerclaw-js)";
23
23
  /** RemoteOK RSS feed — public, no auth required. */
24
24
  export declare const REMOTEOK_RSS_URL = "https://remoteok.com/remote-jobs.rss";
25
25
  /**
package/dist/config.js CHANGED
@@ -34,7 +34,7 @@ export const HTTP_TIMEOUT_MS = 15_000;
34
34
  * User-Agent sent with all outbound requests.
35
35
  * Identifies the tool and provides a contact point per robots.txt convention.
36
36
  */
37
- export const USER_AGENT = "careerclaw-js/1.0.1 (https://github.com/orestes-garcia-martinez/careerclaw-js)";
37
+ export const USER_AGENT = "careerclaw-js/1.0.3 (https://github.com/orestes-garcia-martinez/careerclaw-js)";
38
38
  // ---------------------------------------------------------------------------
39
39
  // Job sources
40
40
  // ---------------------------------------------------------------------------
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "careerclaw-js",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "AI-powered job search automation for OpenClaw — Node.js rewrite of CareerClaw",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",