@forwardimpact/basecamp 2.4.0 → 2.4.1

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.4.0",
3
+ "version": "2.4.1",
4
4
  "description": "Claude Code-native personal knowledge system with autonomous agents",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -29,14 +29,14 @@ framework.
29
29
 
30
30
  ### Career Levels
31
31
 
32
- | Level | Title Pattern | Key Indicators |
33
- | ----- | --------------------- | --------------------------------------------- |
34
- | J040 | Level I / Associate | Learning, needs guidance, basic tasks |
35
- | J060 | Level II / Senior Assoc | Independent on familiar problems |
36
- | J070 | Level III / Manager | Handles ambiguity, mentors others |
37
- | J090 | Staff / Senior Mgr | Area scope, leads complex initiatives |
38
- | J100 | Principal / Director | Org-wide impact, shapes direction |
39
- | J110 | Senior Principal | Enterprise strategy, cross-org influence |
32
+ | Level | Title Pattern | Key Indicators |
33
+ | ----- | ----------------------- | ---------------------------------------- |
34
+ | J040 | Level I / Associate | Learning, needs guidance, basic tasks |
35
+ | J060 | Level II / Senior Assoc | Independent on familiar problems |
36
+ | J070 | Level III / Manager | Handles ambiguity, mentors others |
37
+ | J090 | Staff / Senior Mgr | Area scope, leads complex initiatives |
38
+ | J100 | Principal / Director | Org-wide impact, shapes direction |
39
+ | J110 | Senior Principal | Enterprise strategy, cross-org influence |
40
40
 
41
41
  ### Forward Deployed vs Platform — Track Differences
42
42
 
@@ -47,14 +47,14 @@ track fit right is critical for hiring success.
47
47
  (Commercial, Manufacturing, R&D). They operate like a "startup CTO" — bridging
48
48
  product and business, discovering patterns in the field.
49
49
 
50
- | Dimension | Forward Deployed | Platform |
51
- | ----------------- | -------------------------------------------- | -------------------------------------------- |
52
- | **Core strength** | Delivery, domain immersion, rapid prototyping| Architecture, scalability, reliability |
53
- | **Boosted skills**| Data Integration, Full-Stack Dev, Problem Discovery, Business Immersion, Stakeholder Mgmt, Model Development | Architecture & Design, Cloud Platforms, Code Quality, DevOps & CI/CD, Data Modeling, Technical Debt Mgmt |
54
- | **Reduced skills**| Scale, Reliability, Process capabilities | Delivery capability |
55
- | **Key behaviours**| Own the Outcome (+1), Be Polymath Oriented (+1), Don't Lose Your Curiosity (+1), Communicate with Precision (+1) | Think in Systems (+1), Communicate with Precision (+1) |
56
- | **Mindset** | Ship fast, learn from users, bridge business & tech | Build for the long term, treat devs as customers |
57
- | **Typical CV signals** | Multiple industries, customer projects, MVPs, analytics | Infrastructure, platform teams, APIs, shared services |
50
+ | Dimension | Forward Deployed | Platform |
51
+ | ---------------------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
52
+ | **Core strength** | Delivery, domain immersion, rapid prototyping | Architecture, scalability, reliability |
53
+ | **Boosted skills** | Data Integration, Full-Stack Dev, Problem Discovery, Business Immersion, Stakeholder Mgmt, Model Development | Architecture & Design, Cloud Platforms, Code Quality, DevOps & CI/CD, Data Modeling, Technical Debt Mgmt |
54
+ | **Reduced skills** | Scale, Reliability, Process capabilities | Delivery capability |
55
+ | **Key behaviours** | Own the Outcome (+1), Be Polymath Oriented (+1), Don't Lose Your Curiosity (+1), Communicate with Precision (+1) | Think in Systems (+1), Communicate with Precision (+1) |
56
+ | **Mindset** | Ship fast, learn from users, bridge business & tech | Build for the long term, treat devs as customers |
57
+ | **Typical CV signals** | Multiple industries, customer projects, MVPs, analytics | Infrastructure, platform teams, APIs, shared services |
58
58
 
59
59
  **Hiring implications:**
60
60
 
@@ -76,8 +76,8 @@ engineering_management — tracks: dx
76
76
  product_management — no tracks
77
77
  ```
78
78
 
79
- Use `npx fit-pathway discipline {id}` to see skill tiers and behaviour
80
- modifiers for each discipline.
79
+ Use `npx fit-pathway discipline {id}` to see skill tiers and behaviour modifiers
80
+ for each discipline.
81
81
 
82
82
  ## Data Protection
83
83
 
@@ -100,14 +100,14 @@ professional information.
100
100
  views, religious beliefs, sexual orientation, or other special category data
101
101
  — even if it appears in a CV or email.
102
102
  5. **Assume the candidate will see it.** Write every assessment and note as if
103
- the candidate will request a copy (GDPR Article 15 — right of access). If
104
- you wouldn't be comfortable sharing it with them, don't write it.
103
+ the candidate will request a copy (GDPR Article 15 — right of access). If you
104
+ wouldn't be comfortable sharing it with them, don't write it.
105
105
 
106
106
  ## Human Oversight
107
107
 
108
108
  This agent **recommends** — the user **decides**. Automated recruitment tools
109
- carry legal and ethical risk when they make consequential decisions without human
110
- review.
109
+ carry legal and ethical risk when they make consequential decisions without
110
+ human review.
111
111
 
112
112
  **Hard rules:**
113
113
 
@@ -115,8 +115,8 @@ review.
115
115
  proceed," but the user must make the final rejection decision. Assessments
116
116
  are advisory, not dispositive.
117
117
  2. **Level estimates are hypotheses.** Always present estimated career level
118
- with confidence language ("likely J060", "evidence suggests J070") — never
119
- as definitive fact. CVs are incomplete signals.
118
+ with confidence language ("likely J060", "evidence suggests J070") — never as
119
+ definitive fact. CVs are incomplete signals.
120
120
  3. **Flag uncertainty.** When evidence is thin or ambiguous, say so explicitly.
121
121
  Recommend interview focus areas to resolve uncertainty rather than guessing.
122
122
  4. **No ranking by protected characteristics.** Never sort, filter, or rank
@@ -145,8 +145,8 @@ diverse candidates don't exist.
145
145
  gender or any other protected characteristic.
146
146
  4. **Track sourcing channels.** When a sourcing channel consistently produces
147
147
  homogeneous candidate pools, note **the channel pattern** (not individual
148
- candidates) in `knowledge/Candidates/Insights.md` so the user can address
149
- it with the agency.
148
+ candidates) in `knowledge/Candidates/Insights.md` so the user can address it
149
+ with the agency.
150
150
  5. **Gender data handling.** Gender is recorded only when explicitly stated in
151
151
  recruiter communications (pronouns, titles like "Ms./Mr."). Never infer
152
152
  gender from names. Record as `Woman`, `Man`, or `—` (unknown). When
@@ -180,8 +180,8 @@ for dir in knowledge/Candidates/*/; do
180
180
  done
181
181
  ```
182
182
 
183
- For each unassessed candidate with a CV, run the `analyze-cv` skill workflow.
184
- If the target role is known from the candidate brief, use it:
183
+ For each unassessed candidate with a CV, run the `analyze-cv` skill workflow. If
184
+ the target role is known from the candidate brief, use it:
185
185
 
186
186
  ```bash
187
187
  # Look up the role for context
@@ -50,17 +50,17 @@ Run this skill:
50
50
 
51
51
  Read the candidate's CV file. Extract:
52
52
 
53
- | Field | What to look for |
54
- | ---------------------- | ------------------------------------------------------ |
55
- | **Current role** | Most recent job title |
56
- | **Years of experience**| Total and per-role tenure |
57
- | **Technical skills** | Languages, frameworks, platforms, tools mentioned |
58
- | **Domain experience** | Industries, business domains, customer-facing work |
59
- | **Education** | Degrees, certifications, relevant courses |
60
- | **Leadership signals** | Team size, mentoring, cross-team work, architecture |
61
- | **Scope signals** | Scale of systems, user base, revenue impact |
62
- | **Communication** | Publications, talks, open source, documentation |
63
- | **Gender** | Pronouns, gendered titles (never infer from names) |
53
+ | Field | What to look for |
54
+ | ----------------------- | --------------------------------------------------- |
55
+ | **Current role** | Most recent job title |
56
+ | **Years of experience** | Total and per-role tenure |
57
+ | **Technical skills** | Languages, frameworks, platforms, tools mentioned |
58
+ | **Domain experience** | Industries, business domains, customer-facing work |
59
+ | **Education** | Degrees, certifications, relevant courses |
60
+ | **Leadership signals** | Team size, mentoring, cross-team work, architecture |
61
+ | **Scope signals** | Scale of systems, user base, revenue impact |
62
+ | **Communication** | Publications, talks, open source, documentation |
63
+ | **Gender** | Pronouns, gendered titles (never infer from names) |
64
64
 
65
65
  ## Step 2: Look Up the Framework Reference
66
66
 
@@ -112,15 +112,15 @@ npx fit-pathway track platform
112
112
 
113
113
  Map CV evidence to track indicators:
114
114
 
115
- | Forward Deployed signals | Platform signals |
116
- | -------------------------------------------- | ------------------------------------------- |
117
- | Customer-facing projects | Internal tooling / shared services |
118
- | Business domain immersion | Infrastructure / platform-as-product |
119
- | Rapid prototyping, MVPs | Architecture, system design |
120
- | Data integration, analytics | CI/CD, DevOps, reliability |
121
- | Stakeholder management | Code quality, technical debt management |
122
- | Cross-functional work | Scalability, performance engineering |
123
- | Multiple industries or domain breadth | Deep platform ownership |
115
+ | Forward Deployed signals | Platform signals |
116
+ | ------------------------------------- | --------------------------------------- |
117
+ | Customer-facing projects | Internal tooling / shared services |
118
+ | Business domain immersion | Infrastructure / platform-as-product |
119
+ | Rapid prototyping, MVPs | Architecture, system design |
120
+ | Data integration, analytics | CI/CD, DevOps, reliability |
121
+ | Stakeholder management | Code quality, technical debt management |
122
+ | Cross-functional work | Scalability, performance engineering |
123
+ | Multiple industries or domain breadth | Deep platform ownership |
124
124
 
125
125
  ## Step 3: Map CV to Framework Skills
126
126
 
@@ -134,13 +134,13 @@ npx fit-pathway skill {skill_id}
134
134
 
135
135
  Use the proficiency definitions from the framework:
136
136
 
137
- | Proficiency | CV Evidence |
138
- | -------------- | -------------------------------------------------------- |
139
- | `awareness` | Mentioned but no project evidence |
140
- | `foundational` | Used in projects, basic application |
141
- | `working` | Primary tool/skill in multiple roles, independent usage |
142
- | `practitioner` | Led teams using this skill, mentored others, deep work |
143
- | `expert` | Published, shaped org practice, industry recognition |
137
+ | Proficiency | CV Evidence |
138
+ | -------------- | ------------------------------------------------------- |
139
+ | `awareness` | Mentioned but no project evidence |
140
+ | `foundational` | Used in projects, basic application |
141
+ | `working` | Primary tool/skill in multiple roles, independent usage |
142
+ | `practitioner` | Led teams using this skill, mentored others, deep work |
143
+ | `expert` | Published, shaped org practice, industry recognition |
144
144
 
145
145
  **Be conservative.** CVs inflate; default one level below what's claimed unless
146
146
  there's concrete evidence (metrics, project details, scope indicators).
@@ -155,13 +155,13 @@ npx fit-pathway behaviour --list
155
155
 
156
156
  Map CV evidence to behaviours:
157
157
 
158
- | Behaviour | CV Evidence |
159
- | ---------------------------- | -------------------------------------------------- |
160
- | Own the Outcome | End-to-end ownership, P&L impact, delivery metrics |
161
- | Think in Systems | Architecture decisions, system-wide reasoning |
162
- | Communicate with Precision | Technical writing, documentation, talks |
163
- | Be Polymath Oriented | Cross-domain work, diverse tech stack |
164
- | Don't Lose Your Curiosity | Side projects, continuous learning, certifications |
158
+ | Behaviour | CV Evidence |
159
+ | -------------------------- | -------------------------------------------------- |
160
+ | Own the Outcome | End-to-end ownership, P&L impact, delivery metrics |
161
+ | Think in Systems | Architecture decisions, system-wide reasoning |
162
+ | Communicate with Precision | Technical writing, documentation, talks |
163
+ | Be Polymath Oriented | Cross-domain work, diverse tech stack |
164
+ | Don't Lose Your Curiosity | Side projects, continuous learning, certifications |
165
165
 
166
166
  ## Step 5: Identify Gaps and Strengths
167
167
 
@@ -259,7 +259,7 @@ to create the candidate profile from email threads.
259
259
  ## Quality Checklist
260
260
 
261
261
  - [ ] Assessment is grounded in `fit-pathway` framework data, not subjective
262
- opinion
262
+ opinion
263
263
  - [ ] Every skill rating cites specific CV evidence or marks "Not evidenced"
264
264
  - [ ] Estimated level is conservative (one below CV claims unless proven)
265
265
  - [ ] Track fit analysis references specific skill modifiers from the framework
@@ -38,7 +38,8 @@ Run this skill:
38
38
 
39
39
  - **Name**: Full name of the data subject (required)
40
40
  - **Aliases**: Alternative names, maiden names, nicknames (optional)
41
- - **Email addresses**: Known email addresses (optional, improves search coverage)
41
+ - **Email addresses**: Known email addresses (optional, improves search
42
+ coverage)
42
43
  - **Scope**: `all` (default) or `recruitment-only` (limits to candidate data)
43
44
 
44
45
  ## Outputs
@@ -55,6 +56,7 @@ Before proceeding, clearly state to the user:
55
56
  > **Data erasure request for: {Name}**
56
57
  >
57
58
  > This will permanently delete all personal data related to {Name} from:
59
+ >
58
60
  > - Knowledge base notes (People, Candidates, Organizations mentions)
59
61
  > - Cached email threads and attachments
60
62
  > - Agent state and triage files
@@ -134,16 +136,16 @@ Compile a complete inventory of every file and reference found.
134
136
 
135
137
  For each discovered reference, classify the required action:
136
138
 
137
- | Reference Type | Action | Example |
138
- | --- | --- | --- |
139
- | **Dedicated note** (sole subject) | Delete entire file | `knowledge/People/{Name}.md` |
140
- | **Dedicated directory** | Delete entire directory | `knowledge/Candidates/{Name}/` |
141
- | **Mention in another note** | Redact: remove lines referencing the person | Backlink in `knowledge/Organizations/Agency.md` |
142
- | **Email thread** (sole subject) | Delete file | `~/.cache/fit/basecamp/apple_mail/thread.md` |
143
- | **Email thread** (multiple people) | Redact: remove paragraphs about the person | Thread discussing multiple candidates |
144
- | **Attachment** (their CV, etc.) | Delete file | `attachments/{thread}/CV.pdf` |
145
- | **Triage/state file** | Redact: remove lines mentioning them | `recruiter_triage.md` |
146
- | **Insights file** | Redact: remove bullets mentioning them | `knowledge/Candidates/Insights.md` |
139
+ | Reference Type | Action | Example |
140
+ | ---------------------------------- | ------------------------------------------- | ----------------------------------------------- |
141
+ | **Dedicated note** (sole subject) | Delete entire file | `knowledge/People/{Name}.md` |
142
+ | **Dedicated directory** | Delete entire directory | `knowledge/Candidates/{Name}/` |
143
+ | **Mention in another note** | Redact: remove lines referencing the person | Backlink in `knowledge/Organizations/Agency.md` |
144
+ | **Email thread** (sole subject) | Delete file | `~/.cache/fit/basecamp/apple_mail/thread.md` |
145
+ | **Email thread** (multiple people) | Redact: remove paragraphs about the person | Thread discussing multiple candidates |
146
+ | **Attachment** (their CV, etc.) | Delete file | `attachments/{thread}/CV.pdf` |
147
+ | **Triage/state file** | Redact: remove lines mentioning them | `recruiter_triage.md` |
148
+ | **Insights file** | Redact: remove bullets mentioning them | `knowledge/Candidates/Insights.md` |
147
149
 
148
150
  ## Step 3: Execute Deletions
149
151
 
@@ -222,7 +224,7 @@ rg -v "{deleted_path}" ~/.cache/fit/basecamp/state/graph_processed \
222
224
 
223
225
  Create the audit trail at `knowledge/Erasure/{Name}--{YYYY-MM-DD}.md`:
224
226
 
225
- ```markdown
227
+ ````markdown
226
228
  # Data Erasure Report — {Full Name}
227
229
 
228
230
  **Date:** {YYYY-MM-DD HH:MM}
@@ -278,10 +280,11 @@ After erasure, verify no traces remain:
278
280
 
279
281
  ```bash
280
282
  rg "{Name}" knowledge/ ~/.cache/fit/basecamp/
281
- ```
283
+ ````
282
284
 
283
285
  Expected result: no matches (except this erasure report).
284
- ```
286
+
287
+ ````
285
288
 
286
289
  **IMPORTANT:** The erasure report itself must NOT contain personal data beyond
287
290
  the name and the fact that data was deleted. Do not copy CV content, skill
@@ -294,7 +297,7 @@ Run a final search to confirm no references were missed:
294
297
 
295
298
  ```bash
296
299
  rg "{Name}" knowledge/ ~/.cache/fit/basecamp/ drafts/
297
- ```
300
+ ````
298
301
 
299
302
  The only match should be the erasure report itself. If other matches remain,
300
303
  process them and update the report.
@@ -310,8 +313,8 @@ When scope is `recruitment-only`, limit erasure to:
310
313
  - Recruitment-related email threads (from known agency domains)
311
314
  - `recruiter_triage.md` state file
312
315
 
313
- Leave `knowledge/People/{Name}.md` and general knowledge graph references
314
- intact — the person may be a colleague or contact outside of recruitment.
316
+ Leave `knowledge/People/{Name}.md` and general knowledge graph references intact
317
+ — the person may be a colleague or contact outside of recruitment.
315
318
 
316
319
  ### all (default)
317
320
 
@@ -59,8 +59,8 @@ The script:
59
59
  3. Discovers the thread grouping column (`conversation_id` or `thread_id`)
60
60
  4. Loads last-seen ROWID (or defaults to 0 for first sync)
61
61
  5. Finds threads with new messages since last sync (up to 500), using both
62
- timestamp and ROWID to catch late-arriving emails (emails downloaded after
63
- a delay may have `date_received` before the last sync timestamp, but their
62
+ timestamp and ROWID to catch late-arriving emails (emails downloaded after a
63
+ delay may have `date_received` before the last sync timestamp, but their
64
64
  ROWID will be higher than the last-seen ROWID)
65
65
  6. For each thread: fetches messages, batch-fetches recipients and attachment
66
66
  metadata, parses `.emlx` files for full email bodies (falling back to
@@ -128,29 +128,29 @@ recruitment-related.
128
128
 
129
129
  For each candidate found in a recruitment email, extract:
130
130
 
131
- | Field | Source | Required |
132
- | ----------------- | ------------------------------------------------- | ------------------- |
133
- | **Name** | Filename, email body, CV | Yes |
134
- | **Title** | Email body, CV — the candidate's professional title/function | Yes |
135
- | **Rate** | Email body (e.g. "$120/hr", "€80/h") | If available |
136
- | **Availability** | Email body (e.g. "1 month notice", "immediately") | If available |
137
- | **English** | Email body (e.g. "B2", "Upper-intermediate") | If available |
138
- | **Location** | Email body, CV | If available |
139
- | **Source agency** | Sender domain → Organization | Yes |
140
- | **Recruiter** | Email sender or CC'd recruiter | Yes |
141
- | **CV path** | Attachment directory | If available |
142
- | **Skills** | Email body, CV | If available |
143
- | **Gender** | Name, pronouns, recruiter context | If identifiable |
144
- | **Summary** | Email body, CV | Yes — 2-3 sentences |
145
- | **Role** | Internal requisition profile being hired against | If available |
146
- | **Req** | Requisition ID from hiring system | If available |
147
- | **Internal/External**| Whether candidate is internal or external | If available |
148
- | **Model** | Engagement model (B2B, Direct Hire, etc.) | If available |
149
- | **Current title** | CV or email body | If available |
150
- | **Email** | Email body, CV, signature | If available |
151
- | **Phone** | Email body, CV, signature | If available |
152
- | **LinkedIn** | Email body, CV | If available |
153
- | **Also known as** | Alternate name spellings or transliterations | If available |
131
+ | Field | Source | Required |
132
+ | --------------------- | ------------------------------------------------------------ | ------------------- |
133
+ | **Name** | Filename, email body, CV | Yes |
134
+ | **Title** | Email body, CV — the candidate's professional title/function | Yes |
135
+ | **Rate** | Email body (e.g. "$120/hr", "€80/h") | If available |
136
+ | **Availability** | Email body (e.g. "1 month notice", "immediately") | If available |
137
+ | **English** | Email body (e.g. "B2", "Upper-intermediate") | If available |
138
+ | **Location** | Email body, CV | If available |
139
+ | **Source agency** | Sender domain → Organization | Yes |
140
+ | **Recruiter** | Email sender or CC'd recruiter | Yes |
141
+ | **CV path** | Attachment directory | If available |
142
+ | **Skills** | Email body, CV | If available |
143
+ | **Gender** | Name, pronouns, recruiter context | If identifiable |
144
+ | **Summary** | Email body, CV | Yes — 2-3 sentences |
145
+ | **Role** | Internal requisition profile being hired against | If available |
146
+ | **Req** | Requisition ID from hiring system | If available |
147
+ | **Internal/External** | Whether candidate is internal or external | If available |
148
+ | **Model** | Engagement model (B2B, Direct Hire, etc.) | If available |
149
+ | **Current title** | CV or email body | If available |
150
+ | **Email** | Email body, CV, signature | If available |
151
+ | **Phone** | Email body, CV, signature | If available |
152
+ | **LinkedIn** | Email body, CV | If available |
153
+ | **Also known as** | Alternate name spellings or transliterations | If available |
154
154
 
155
155
  ### Determining Gender
156
156
 
@@ -428,4 +428,5 @@ produces a full framework-aligned assessment.
428
428
  - [ ] No duplicate candidate notes created
429
429
  - [ ] Key strategic insights added to `Insights.md` where warranted
430
430
  - [ ] Skills tagged using framework skill IDs where possible
431
- - [ ] Gender field populated only from explicit pronouns/titles (never name-inferred)
431
+ - [ ] Gender field populated only from explicit pronouns/titles (never
432
+ name-inferred)
@@ -63,12 +63,12 @@ skill's directory.
63
63
 
64
64
  For every changed skill file, determine the type of change:
65
65
 
66
- | Type | Description |
67
- | ----------- | ----------------------------------------------------- |
68
- | `added` | New skill created that doesn't exist upstream |
69
- | `modified` | Existing skill updated (workflow, checklists, tools) |
70
- | `removed` | Skill deleted from the installation |
71
- | `renamed` | Skill directory or file renamed |
66
+ | Type | Description |
67
+ | ---------- | ---------------------------------------------------- |
68
+ | `added` | New skill created that doesn't exist upstream |
69
+ | `modified` | Existing skill updated (workflow, checklists, tools) |
70
+ | `removed` | Skill deleted from the installation |
71
+ | `renamed` | Skill directory or file renamed |
72
72
 
73
73
  For **modified** skills, read the current file and the previous version to
74
74
  identify what specifically changed: