@forwardimpact/basecamp 2.9.1 → 2.9.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forwardimpact/basecamp",
3
- "version": "2.9.1",
3
+ "version": "2.9.2",
4
4
  "description": "Claude Code-native personal knowledge system with autonomous agents",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -30,11 +30,11 @@ reference framework data — never rely on subjective impressions.
30
30
  Every candidate progresses through three assessment stages. Each stage has a
31
31
  dedicated skill and produces a specific artifact:
32
32
 
33
- | Stage | Skill | Trigger | Output | Decision |
34
- |-------|-------|---------|--------|----------|
35
- | 1. Screen | `screen-cv` | CV arrives | `screening.md` | Interview or Pass |
36
- | 2. Assess | `assess-interview` | Transcript arrives | `interview-{date}.md`, `panel.md` | Continue or Pass |
37
- | 3. Decide | `hiring-decision` | All stages complete | `recommendation.md` | Hire or Not |
33
+ | Stage | Skill | Trigger | Output | Decision |
34
+ | --------- | ------------------ | ------------------- | --------------------------------- | ----------------- |
35
+ | 1. Screen | `screen-cv` | CV arrives | `screening.md` | Interview or Pass |
36
+ | 2. Assess | `assess-interview` | Transcript arrives | `interview-{date}.md`, `panel.md` | Continue or Pass |
37
+ | 3. Decide | `hiring-decision` | All stages complete | `recommendation.md` | Hire or Not |
38
38
 
39
39
  **Stage progression rules:**
40
40
 
@@ -46,8 +46,8 @@ Run this skill:
46
46
  ## Outputs
47
47
 
48
48
  - `knowledge/Candidates/{Name}/interview-{date}.md` — per-interview assessment
49
- - `knowledge/Candidates/{Name}/panel.md` — brief for next-stage
50
- interviewers (if further interviews are planned)
49
+ - `knowledge/Candidates/{Name}/panel.md` — brief for next-stage interviewers (if
50
+ further interviews are planned)
51
51
  - Updated `knowledge/Candidates/{Name}/brief.md` — pipeline and notes enriched
52
52
 
53
53
  ---
@@ -56,19 +56,19 @@ Run this skill:
56
56
 
57
57
  Read the transcript file(s). For each transcript, extract:
58
58
 
59
- | Field | What to look for |
60
- | ----------------------------- | --------------------------------------------------------- |
61
- | **Interview type** | Screening, decomposition, panel, technical, etc. |
62
- | **Interviewers** | Who conducted the interview |
63
- | **Date** | When the interview took place |
64
- | **Skill demonstrations** | Concrete examples of skills applied in real-time |
65
- | **Behaviour observations** | How the candidate acted under pressure, with others |
66
- | **Self-identified strengths** | What the candidate claims they're good at |
67
- | **Self-identified gaps** | What the candidate acknowledges as growth areas |
68
- | **Red flags** | Contradictions with CV, concerning patterns |
69
- | **Interviewer feedback** | Direct quotes or observations from interviewers |
70
- | **Level signals** | Autonomy, scope, complexity demonstrated in responses |
71
- | **Track signals** | Business immersion vs platform thinking in their answers |
59
+ | Field | What to look for |
60
+ | ----------------------------- | -------------------------------------------------------- |
61
+ | **Interview type** | Screening, decomposition, panel, technical, etc. |
62
+ | **Interviewers** | Who conducted the interview |
63
+ | **Date** | When the interview took place |
64
+ | **Skill demonstrations** | Concrete examples of skills applied in real-time |
65
+ | **Behaviour observations** | How the candidate acted under pressure, with others |
66
+ | **Self-identified strengths** | What the candidate claims they're good at |
67
+ | **Self-identified gaps** | What the candidate acknowledges as growth areas |
68
+ | **Red flags** | Contradictions with CV, concerning patterns |
69
+ | **Interviewer feedback** | Direct quotes or observations from interviewers |
70
+ | **Level signals** | Autonomy, scope, complexity demonstrated in responses |
71
+ | **Track signals** | Business immersion vs platform thinking in their answers |
72
72
 
73
73
  ## Step 2: Load Framework Reference
74
74
 
@@ -122,23 +122,23 @@ how someone acts, not what they've done.
122
122
 
123
123
  For each framework behaviour, look for:
124
124
 
125
- | Behaviour | Interview Evidence |
126
- | -------------------------- | --------------------------------------------------------------- |
127
- | Own the Outcome | Takes responsibility, doesn't deflect, drives to resolution |
128
- | Think in Systems | Considers second-order effects, trade-offs, system boundaries |
129
- | Communicate with Precision | Clear explanations, appropriate detail level, listens actively |
130
- | Be Polymath Oriented | Draws on diverse knowledge, makes unexpected connections |
131
- | Don't Lose Your Curiosity | Asks good questions, explores alternatives, admits not knowing |
125
+ | Behaviour | Interview Evidence |
126
+ | -------------------------- | -------------------------------------------------------------- |
127
+ | Own the Outcome | Takes responsibility, doesn't deflect, drives to resolution |
128
+ | Think in Systems | Considers second-order effects, trade-offs, system boundaries |
129
+ | Communicate with Precision | Clear explanations, appropriate detail level, listens actively |
130
+ | Be Polymath Oriented | Draws on diverse knowledge, makes unexpected connections |
131
+ | Don't Lose Your Curiosity | Asks good questions, explores alternatives, admits not knowing |
132
132
 
133
133
  Rate each behaviour using maturity levels:
134
134
 
135
- | Maturity | Interview Signal |
136
- | --------------- | ------------------------------------------------------------- |
137
- | `emerging` | Behaviour not observed or only when prompted |
138
- | `developing` | Behaviour present but inconsistent or surface-level |
139
- | `practicing` | Behaviour consistent and natural throughout the interview |
140
- | `role_modeling` | Behaviour demonstrated at high level, influenced the room |
141
- | `exemplifying` | Behaviour exceptional, set the standard for the conversation |
135
+ | Maturity | Interview Signal |
136
+ | --------------- | ------------------------------------------------------------ |
137
+ | `emerging` | Behaviour not observed or only when prompted |
138
+ | `developing` | Behaviour present but inconsistent or surface-level |
139
+ | `practicing` | Behaviour consistent and natural throughout the interview |
140
+ | `role_modeling` | Behaviour demonstrated at high level, influenced the room |
141
+ | `exemplifying` | Behaviour exceptional, set the standard for the conversation |
142
142
 
143
143
  ## Step 5: Assess Level Fit
144
144
 
@@ -150,13 +150,13 @@ should change:
150
150
  npx fit-pathway progress {discipline} {level} --track={track}
151
151
  ```
152
152
 
153
- | Level Signal in Interview | Implication |
153
+ | Level Signal in Interview | Implication |
154
154
  | ------------------------------------------------------------------- | ------------------------------ |
155
- | Candidate needed guidance on structuring their approach | Level may be lower than est. |
156
- | Candidate self-directed, made sound trade-offs independently | Level estimate confirmed |
157
- | Candidate mentored or coached others during the exercise | Level may be higher than est. |
158
- | Candidate struggled with complexity appropriate to the target level | Level should be downgraded |
159
- | Interviewer explicitly suggested a different level | Strong signal — weight heavily |
155
+ | Candidate needed guidance on structuring their approach | Level may be lower than est. |
156
+ | Candidate self-directed, made sound trade-offs independently | Level estimate confirmed |
157
+ | Candidate mentored or coached others during the exercise | Level may be higher than est. |
158
+ | Candidate struggled with complexity appropriate to the target level | Level should be downgraded |
159
+ | Interviewer explicitly suggested a different level | Strong signal — weight heavily |
160
160
 
161
161
  ## Step 6: Write Interview Assessment
162
162
 
@@ -368,7 +368,8 @@ Update `knowledge/Candidates/{Name}/brief.md`:
368
368
 
369
369
  - Add the interview to the **Pipeline** section with date, type, and outcome
370
370
  - Add **Interview Notes** section if not present, with key observations
371
- - Link to the interview assessment: `- [Interview Assessment](./interview-{date}.md)`
371
+ - Link to the interview assessment:
372
+ `- [Interview Assessment](./interview-{date}.md)`
372
373
  - Link to panel brief if created: `- [Panel Brief](./panel.md)`
373
374
  - Update **Status** field to reflect current pipeline stage
374
375
 
@@ -401,8 +401,8 @@ Scan email subjects and bodies for requisition numbers (e.g. 7-digit Workday
401
401
  IDs). When found:
402
402
 
403
403
  1. Check if a Role file exists: `ls knowledge/Roles/ | grep "{req_number}"`
404
- 2. If **no Role file exists**, create a stub (see `track-candidates` Step 0b
405
- for the template). Search the knowledge graph for context:
404
+ 2. If **no Role file exists**, create a stub (see `track-candidates` Step 0b for
405
+ the template). Search the knowledge graph for context:
406
406
  ```bash
407
407
  rg "{req_number}" knowledge/
408
408
  ```
@@ -412,6 +412,7 @@ IDs). When found:
412
412
  ### Hiring Manager Inference from Calendar Events
413
413
 
414
414
  When a calendar event title matches interview-related patterns:
415
+
415
416
  - "Interview", "Screening", "Screen", "Decomposition", "Panel", "Technical
416
417
  Assessment", "Candidate"
417
418
  - Combined with a person name (cross-reference `knowledge/Candidates/`)
@@ -421,8 +422,8 @@ Extract the **organizer** of the event. If the organizer is NOT the user (from
421
422
 
422
423
  1. Look up the organizer in `knowledge/People/` — check if they have a role
423
424
  indicating they manage a team or are described as a hiring manager.
424
- 2. Look up which candidate is being interviewed — check their `brief.md` for
425
- a `Req` field.
425
+ 2. Look up which candidate is being interviewed — check their `brief.md` for a
426
+ `Req` field.
426
427
  3. If a Req is known, update the corresponding `knowledge/Roles/*.md` file's
427
428
  `Hiring manager` field (only if currently `—`).
428
429
  4. Update the candidate's `brief.md` `Hiring manager` field if currently `—`.
@@ -436,8 +437,8 @@ When processing email threads that reference candidates (by name match against
436
437
  2. If a CC'd person's note mentions "recruiter", "talent acquisition", or a
437
438
  similar recruiting role, they are likely the internal recruiter for this
438
439
  candidate's role.
439
- 3. Update the candidate's `brief.md` recruiter field and the corresponding
440
- Role file if the field is currently `—`.
440
+ 3. Update the candidate's `brief.md` recruiter field and the corresponding Role
441
+ file if the field is currently `—`.
441
442
 
442
443
  ### Domain Lead Resolution
443
444
 
@@ -445,8 +446,8 @@ When a hiring manager is newly identified (from calendar or email inference),
445
446
  attempt to resolve the domain lead:
446
447
 
447
448
  1. Read the hiring manager's People note for a `**Reports to:**` field.
448
- 2. Walk up the reporting chain until reaching a VP or senior leader listed in
449
- a stakeholder map or organizational hierarchy note.
449
+ 2. Walk up the reporting chain until reaching a VP or senior leader listed in a
450
+ stakeholder map or organizational hierarchy note.
450
451
  3. Update both the Role file's `Domain lead` and the candidate brief's
451
452
  `Domain lead`.
452
453
 
@@ -32,7 +32,8 @@ Run this skill:
32
32
 
33
33
  - `fit-pathway` CLI installed (`npx fit-pathway` must work)
34
34
  - Screening assessment: `knowledge/Candidates/{Name}/screening.md`
35
- - At least one interview assessment: `knowledge/Candidates/{Name}/interview-*.md`
35
+ - At least one interview assessment:
36
+ `knowledge/Candidates/{Name}/interview-*.md`
36
37
  - Candidate brief: `knowledge/Candidates/{Name}/brief.md`
37
38
  - Transcripts provide additional context but are not strictly required if
38
39
  interview assessments exist
@@ -72,9 +73,9 @@ Read in order:
72
73
 
73
74
  Build a chronological evidence timeline:
74
75
 
75
- | Date | Stage | Source | Key Finding |
76
- |------|-------|--------|-------------|
77
- | {date} | CV Screening | screening.md | {key finding} |
76
+ | Date | Stage | Source | Key Finding |
77
+ | ------ | ---------------- | ------------------- | ------------- |
78
+ | {date} | CV Screening | screening.md | {key finding} |
78
79
  | {date} | {Interview type} | interview-{date}.md | {key finding} |
79
80
 
80
81
  ## Step 2: Build Final Skill Profile
@@ -104,14 +105,14 @@ For each skill, record:
104
105
  - **Final rating** — the proficiency level supported by the best evidence
105
106
  - **Best evidence source** — which stage provided the strongest signal
106
107
  - **Trajectory** — did the rating improve, decline, or hold across stages?
107
- - **Confidence** — high (demonstrated live), medium (discussed well), low
108
- (CV only or thin evidence)
108
+ - **Confidence** — high (demonstrated live), medium (discussed well), low (CV
109
+ only or thin evidence)
109
110
 
110
111
  ## Step 3: Build Final Behaviour Profile
111
112
 
112
113
  For each framework behaviour, determine the **final maturity** using the same
113
- evidence hierarchy. Behaviours assessed in interviews carry far more weight
114
- than CV signals.
114
+ evidence hierarchy. Behaviours assessed in interviews carry far more weight than
115
+ CV signals.
115
116
 
116
117
  ```bash
117
118
  npx fit-pathway behaviour --list
@@ -125,7 +126,8 @@ For each behaviour:
125
126
 
126
127
  ## Step 4: Confirm Level and Track
127
128
 
128
- Using the complete evidence profile, make a final level and track recommendation:
129
+ Using the complete evidence profile, make a final level and track
130
+ recommendation:
129
131
 
130
132
  ```bash
131
133
  # Compare adjacent levels
@@ -134,13 +136,13 @@ npx fit-pathway job {discipline} {target_level} --track={track}
134
136
  npx fit-pathway progress {discipline} {lower_level} --track={track}
135
137
  ```
136
138
 
137
- | Question | Answer informs |
138
- | ----------------------------------------------------------- | ----------------------- |
139
+ | Question | Answer informs |
140
+ | ------------------------------------------------------------ | ----------------------- |
139
141
  | Does the candidate meet ≥ 70% of skills at the target level? | Level confirmation |
140
- | Were level concerns from screening resolved in interviews? | Level upgrade/downgrade |
141
- | Did interviewers explicitly suggest a different level? | Strong level signal |
142
- | Does the candidate's scope and autonomy match the level? | Level fit |
143
- | Which track energized the candidate in interviews? | Track confirmation |
142
+ | Were level concerns from screening resolved in interviews? | Level upgrade/downgrade |
143
+ | Did interviewers explicitly suggest a different level? | Strong level signal |
144
+ | Does the candidate's scope and autonomy match the level? | Level fit |
145
+ | Which track energized the candidate in interviews? | Track confirmation |
144
146
 
145
147
  ## Step 4b: Read Role Context
146
148
 
@@ -337,14 +339,16 @@ rests with the hiring manager. All assessments are advisory.*
337
339
 
338
340
  Update `knowledge/Candidates/{Name}/brief.md`:
339
341
 
340
- - Update **Status** to reflect the recommendation (`recommended` / `not-recommended`)
342
+ - Update **Status** to reflect the recommendation (`recommended` /
343
+ `not-recommended`)
341
344
  - Add link: `- [Hiring Recommendation](./recommendation.md)`
342
345
  - Add final pipeline entry with the recommendation date and outcome
343
346
 
344
347
  Update `knowledge/Candidates/Insights.md` with any cross-candidate observations:
345
348
 
346
349
  - If this candidate is the strongest at their level, note it
347
- - If this candidate revealed a pattern about a sourcing channel, note the channel
350
+ - If this candidate revealed a pattern about a sourcing channel, note the
351
+ channel
348
352
  - If the level adjustment has implications for other candidates, note it
349
353
 
350
354
  **Use precise edits — don't rewrite entire files.**
@@ -143,8 +143,8 @@ When preparing for interview meetings (title contains "Interview", "Screening",
143
143
  3. **Include in the briefing:**
144
144
  - Candidate's current status, skills, and screening recommendation
145
145
  - Role context: hiring manager, domain lead, remaining positions
146
- - Other candidates on the same requisition and their statuses (from the
147
- Role file's Candidates table)
146
+ - Other candidates on the same requisition and their statuses (from the Role
147
+ file's Candidates table)
148
148
  - Previous interview assessments if this is a second/later stage
149
149
  - Panel brief if one exists (`panel.md`)
150
150
  4. **Format as a dedicated section:**
@@ -43,8 +43,8 @@ Run this skill:
43
43
  - Existing candidate brief (if available):
44
44
  `knowledge/Candidates/{Name}/brief.md`
45
45
  - Role file (if candidate has a `Req`): `knowledge/Roles/*.md` — provides
46
- `Level`, `Discipline`, `Hiring manager`, and `Domain lead` for
47
- more accurate screening
46
+ `Level`, `Discipline`, `Hiring manager`, and `Domain lead` for more accurate
47
+ screening
48
48
 
49
49
  ## Outputs
50
50
 
@@ -231,7 +231,7 @@ Classify each skill as:
231
231
 
232
232
  Create `knowledge/Candidates/{Name}/screening.md`:
233
233
 
234
- ```markdown
234
+ ````markdown
235
235
  # CV Screening — {Full Name}
236
236
 
237
237
  **Assessed against:** {Discipline} {Level} — {Track}
@@ -323,10 +323,11 @@ These are the specific uncertainties that interviews must resolve.}
323
323
 
324
324
  ```bash
325
325
  npx fit-pathway interview {discipline} {level} --track={track}
326
- ```
326
+ ````
327
+
328
+ {Select 3-5 questions most relevant to the identified gaps and focus areas. For
329
+ each question, note which gap or uncertainty it targets.}
327
330
 
328
- {Select 3-5 questions most relevant to the identified gaps and focus areas.
329
- For each question, note which gap or uncertainty it targets.}
330
331
  ```
331
332
 
332
333
  ## Step 7: Enrich Candidate Brief
@@ -366,3 +367,4 @@ to create the candidate profile from email threads.
366
367
  - [ ] Candidate brief links to screening using exact text
367
368
  `[CV Screening](./screening.md)`
368
369
  - [ ] Gender field set only from explicit pronouns/titles (never name-inferred)
370
+ ```
@@ -30,7 +30,8 @@ Run this skill:
30
30
  - `~/.cache/fit/basecamp/apple_mail/attachments/` — CV/resume attachments
31
31
  - `~/.cache/fit/basecamp/apple_calendar/*.json` — synced calendar events (for
32
32
  cross-source inference)
33
- - `knowledge/Roles/*.md` — open role/requisition files (for metadata inheritance)
33
+ - `knowledge/Roles/*.md` — open role/requisition files (for metadata
34
+ inheritance)
34
35
  - `~/.cache/fit/basecamp/state/graph_processed` — tracks processed files (shared
35
36
  with `extract-entities`)
36
37
  - `USER.md` — user identity for self-exclusion
@@ -170,8 +171,8 @@ Sort by First seen (newest first).
170
171
  If a Role file has a hiring manager but no domain lead, attempt to resolve it:
171
172
 
172
173
  1. Read the hiring manager's People note for a `**Reports to:**` field.
173
- 2. Walk up the reporting chain until reaching a VP or senior leader listed in
174
- a stakeholder map or organizational hierarchy note.
174
+ 2. Walk up the reporting chain until reaching a VP or senior leader listed in a
175
+ stakeholder map or organizational hierarchy note.
175
176
  3. Set `Domain lead` on the Role file.
176
177
 
177
178
  ---
@@ -272,14 +273,16 @@ These fields are rarely available in a single email. Use the following
272
273
  resolution chain, stopping at the first match:
273
274
 
274
275
  1. **Req-first inheritance:** If the candidate has a `Req`, look up the matching
275
- `knowledge/Roles/*.md` file. Inherit `Hiring manager` and `Domain lead`
276
- from the Role file.
276
+ `knowledge/Roles/*.md` file. Inherit `Hiring manager` and `Domain lead` from
277
+ the Role file.
277
278
 
278
279
  2. **Calendar inference:** Search synced calendar events for interview events
279
280
  mentioning the candidate's name:
281
+
280
282
  ```bash
281
283
  rg -l "{Candidate Name}" ~/.cache/fit/basecamp/apple_calendar/
282
284
  ```
285
+
283
286
  Read matching events. The **organizer** of an interview event (who is not the
284
287
  user from `USER.md`) is likely the hiring manager. Record this on the
285
288
  candidate brief and update the Role file if it was missing.
@@ -573,12 +576,12 @@ Format: one bullet per insight under `## Placement Notes`, with
573
576
 
574
577
  After writing candidate notes, verify links go both ways:
575
578
 
576
- | If you add... | Then also add... |
577
- | ------------------------ | --------------------------------------------------------- |
578
- | Candidate → Organization | Organization → Candidate |
579
- | Candidate → Recruiter | Recruiter → Candidate (in Activity section) |
580
- | Candidate → Project | Project → Candidate (in People section) |
581
- | Candidate → Role | Role → Candidate (in Candidates table — rebuilt by sync) |
579
+ | If you add... | Then also add... |
580
+ | ------------------------ | -------------------------------------------------------- |
581
+ | Candidate → Organization | Organization → Candidate |
582
+ | Candidate → Recruiter | Recruiter → Candidate (in Activity section) |
583
+ | Candidate → Project | Project → Candidate (in People section) |
584
+ | Candidate → Role | Role → Candidate (in Candidates table — rebuilt by sync) |
582
585
 
583
586
  Use absolute paths: `[[Candidates/Name/brief|Name]]`,
584
587
  `[[Organizations/Agency]]`, `[[People/Recruiter]]`.
@@ -209,9 +209,11 @@ The export rarely contains organizational hierarchy information directly. Use
209
209
  cross-referencing to resolve it:
210
210
 
211
211
  1. **Search the knowledge graph** for mentions of the req number:
212
+
212
213
  ```bash
213
214
  rg "{Req ID}" knowledge/
214
215
  ```
216
+
215
217
  Look in project timelines, People notes, and Topics for context about which
216
218
  area/VP owns this req.
217
219
 
@@ -81,14 +81,14 @@ This knowledge base is maintained by a team of agents, each defined in
81
81
  `.claude/agents/`. They are woken on a schedule by the Basecamp scheduler. Each
82
82
  wake, they observe KB state, decide the most valuable action, and execute.
83
83
 
84
- | Agent | Domain | Schedule | Skills |
85
- | ------------------ | ------------------------------ | --------------- | ---------------------------------------------------------------------------------------------- |
86
- | **postman** | Email triage and drafts | Every 5 min | sync-apple-mail, draft-emails |
87
- | **concierge** | Meeting prep and transcripts | Every 10 min | sync-apple-calendar, meeting-prep, process-hyprnote |
88
- | **librarian** | Knowledge graph maintenance | Every 15 min | extract-entities, organize-files, manage-tasks |
84
+ | Agent | Domain | Schedule | Skills |
85
+ | ------------------ | ------------------------------ | --------------- | -------------------------------------------------------------------------------------------------------------------------------- |
86
+ | **postman** | Email triage and drafts | Every 5 min | sync-apple-mail, draft-emails |
87
+ | **concierge** | Meeting prep and transcripts | Every 10 min | sync-apple-calendar, meeting-prep, process-hyprnote |
88
+ | **librarian** | Knowledge graph maintenance | Every 15 min | extract-entities, organize-files, manage-tasks |
89
89
  | **recruiter** | Engineering recruitment | Every 30 min | track-candidates, screen-cv, assess-interview, hiring-decision, workday-requisition, right-to-be-forgotten, fit-pathway, fit-map |
90
- | **head-hunter** | Passive talent scouting | Every 60 min | scan-open-candidates, fit-pathway, fit-map |
91
- | **chief-of-staff** | Daily briefings and priorities | 7am, Mon 7:30am | weekly-update _(Mon)_, _(reads all state for daily briefings)_ |
90
+ | **head-hunter** | Passive talent scouting | Every 60 min | scan-open-candidates, fit-pathway, fit-map |
91
+ | **chief-of-staff** | Daily briefings and priorities | 7am, Mon 7:30am | weekly-update _(Mon)_, _(reads all state for daily briefings)_ |
92
92
 
93
93
  Each agent writes a triage file to `~/.cache/fit/basecamp/state/` every wake
94
94
  cycle. The naming convention is `{agent}_triage.md`: