@forwardimpact/outpost 3.3.4 → 3.5.0
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/LICENSE +21 -201
- package/config/skill-postures.json +28 -0
- package/package.json +2 -4
- package/src/agent-path.js +42 -0
- package/src/agent-runner.js +60 -17
- package/src/kb-manager.js +5 -7
- package/src/outpost.js +43 -1
- package/src/posture.js +77 -0
- package/src/socket-server.js +15 -6
- package/src/spawn-env.js +62 -0
- package/src/state-manager.js +17 -2
- package/templates/.claude/agents/chief-of-staff.md +24 -9
- package/templates/.claude/agents/concierge.md +14 -0
- package/templates/.claude/agents/head-hunter.md +14 -0
- package/templates/.claude/agents/librarian.md +19 -7
- package/templates/.claude/agents/postman.md +14 -0
- package/templates/.claude/agents/recruiter.md +21 -12
- package/templates/.claude/settings.json +4 -0
- package/templates/.claude/skills/anarlog-follow/SKILL.md +7 -7
- package/templates/.claude/skills/anarlog-process/SKILL.md +15 -16
- package/templates/.claude/skills/anarlog-process/references/extraction.md +5 -5
- package/templates/.claude/skills/candidate-report/SKILL.md +9 -9
- package/templates/.claude/skills/deck-create/SKILL.md +2 -2
- package/templates/.claude/skills/deck-summarize/SKILL.md +2 -2
- package/templates/.claude/skills/deck-summarize/references/brief-template.md +1 -1
- package/templates/.claude/skills/doc-collab/SKILL.md +8 -8
- package/templates/.claude/skills/doc-create/SKILL.md +3 -3
- package/templates/.claude/skills/draft-emails/SKILL.md +19 -19
- package/templates/.claude/skills/draft-emails/references/template.md +1 -1
- package/templates/.claude/skills/draft-emails/scripts/scan-emails.mjs +4 -4
- package/templates/.claude/skills/draft-emails/scripts/send-email.mjs +2 -2
- package/templates/.claude/skills/extract-entities/SKILL.md +16 -17
- package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +2 -2
- package/templates/.claude/skills/extract-entities/references/conditions.md +4 -4
- package/templates/.claude/skills/extract-entities/references/links.md +3 -18
- package/templates/.claude/skills/extract-entities/references/recruitment.md +8 -8
- package/templates/.claude/skills/extract-entities/references/resolution.md +3 -5
- package/templates/.claude/skills/extract-entities/references/sources.md +1 -1
- package/templates/.claude/skills/extract-entities/references/templates-conditions.md +2 -2
- package/templates/.claude/skills/extract-entities/references/templates-priorities.md +32 -0
- package/templates/.claude/skills/extract-entities/references/templates-projects-topics.md +2 -2
- package/templates/.claude/skills/meeting-prep/SKILL.md +18 -19
- package/templates/.claude/skills/req-assess/SKILL.md +11 -11
- package/templates/.claude/skills/req-assess/references/interview-template.md +1 -1
- package/templates/.claude/skills/req-assess/references/panel-template.md +1 -1
- package/templates/.claude/skills/req-decide/SKILL.md +17 -17
- package/templates/.claude/skills/req-decide/references/template.md +1 -1
- package/templates/.claude/skills/req-forget/SKILL.md +8 -8
- package/templates/.claude/skills/req-forget/references/classify.md +4 -4
- package/templates/.claude/skills/req-forget/references/locations.md +10 -10
- package/templates/.claude/skills/req-forget/references/report-template.md +8 -8
- package/templates/.claude/skills/req-scan/SKILL.md +3 -3
- package/templates/.claude/skills/req-scan/references/template.md +1 -1
- package/templates/.claude/skills/req-screen/SKILL.md +9 -9
- package/templates/.claude/skills/req-screen/references/template.md +1 -1
- package/templates/.claude/skills/req-track/SKILL.md +17 -17
- package/templates/.claude/skills/req-track/references/fields.md +8 -8
- package/templates/.claude/skills/req-track/references/signals.md +2 -2
- package/templates/.claude/skills/req-track/references/templates.md +1 -1
- package/templates/.claude/skills/req-workday/SKILL.md +12 -12
- package/templates/.claude/skills/req-workday/references/templates.md +3 -3
- package/templates/.claude/skills/send-chat/SKILL.md +4 -4
- package/templates/.claude/skills/upstream-instructions/SKILL.md +154 -0
- package/templates/.claude/skills/upstream-instructions/references/examples.md +97 -0
- package/templates/CLAUDE.md +47 -53
- package/templates/.claude/skills/extract-entities/references/templates-goals-priorities.md +0 -63
- package/templates/.claude/skills/upstream-skill/SKILL.md +0 -130
- package/templates/.claude/skills/upstream-skill/references/examples.md +0 -80
- package/templates/knowledge/Briefings/.gitkeep +0 -0
|
@@ -22,7 +22,7 @@ This is **Stage 2** of the three-stage hiring pipeline:
|
|
|
22
22
|
|
|
23
23
|
## Trigger
|
|
24
24
|
|
|
25
|
-
- A new `transcript-*.md` file appears in `
|
|
25
|
+
- A new `transcript-*.md` file appears in `Knowledge/Candidates/{Name}/`.
|
|
26
26
|
- The user asks to analyze an interview or debrief.
|
|
27
27
|
- The user asks to prepare a panel brief.
|
|
28
28
|
- The concierge agent processes a Anarlog interview recording.
|
|
@@ -30,22 +30,22 @@ This is **Stage 2** of the three-stage hiring pipeline:
|
|
|
30
30
|
## Prerequisites
|
|
31
31
|
|
|
32
32
|
- `fit-pathway` CLI installed.
|
|
33
|
-
- At least one transcript in `
|
|
33
|
+
- At least one transcript in `Knowledge/Candidates/{Name}/`.
|
|
34
34
|
- `screening.md` should exist; if missing, run `req-screen` first (proceed
|
|
35
35
|
regardless).
|
|
36
36
|
|
|
37
37
|
## Inputs
|
|
38
38
|
|
|
39
|
-
- `
|
|
40
|
-
- `
|
|
41
|
-
- `
|
|
39
|
+
- `Knowledge/Candidates/{Name}/transcript-{date}.md`.
|
|
40
|
+
- `Knowledge/Candidates/{Name}/screening.md`.
|
|
41
|
+
- `Knowledge/Candidates/{Name}/brief.md` — target role.
|
|
42
42
|
|
|
43
43
|
## Outputs
|
|
44
44
|
|
|
45
|
-
- `
|
|
46
|
-
- `
|
|
45
|
+
- `Knowledge/Candidates/{Name}/interview-{date}.md`.
|
|
46
|
+
- `Knowledge/Candidates/{Name}/panel.md` — only when more interviews are
|
|
47
47
|
planned.
|
|
48
|
-
- Updated `
|
|
48
|
+
- Updated `Knowledge/Candidates/{Name}/brief.md`.
|
|
49
49
|
|
|
50
50
|
<do_confirm_checklist goal="Verify the assessment is grounded in transcript
|
|
51
51
|
evidence">
|
|
@@ -105,7 +105,7 @@ Apply the [level signals](references/rubric.md#level-signals).
|
|
|
105
105
|
|
|
106
106
|
### 6. Write the interview assessment
|
|
107
107
|
|
|
108
|
-
Save to `
|
|
108
|
+
Save to `Knowledge/Candidates/{Name}/interview-{date}.md` using
|
|
109
109
|
[references/interview-template.md](references/interview-template.md). Include
|
|
110
110
|
only skills with new evidence — don't repeat the full matrix.
|
|
111
111
|
|
|
@@ -118,14 +118,14 @@ candidates:
|
|
|
118
118
|
bunx fit-pathway interview {discipline} {level} --track={track}
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
-
Save `
|
|
121
|
+
Save `Knowledge/Candidates/{Name}/panel.md` using
|
|
122
122
|
[references/panel-template.md](references/panel-template.md). Audience:
|
|
123
123
|
next-stage interviewers, often non-engineers — explain without jargon and tie
|
|
124
124
|
suggested questions to remaining gaps.
|
|
125
125
|
|
|
126
126
|
### 8. Update the candidate brief
|
|
127
127
|
|
|
128
|
-
Apply targeted Edit operations to `
|
|
128
|
+
Apply targeted Edit operations to `Knowledge/Candidates/{Name}/brief.md`:
|
|
129
129
|
|
|
130
130
|
- Append a Pipeline entry with date, type, and outcome.
|
|
131
131
|
- Add `## Interview Notes` if missing, with key observations.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Interview Assessment Template
|
|
2
2
|
|
|
3
3
|
Reference template for `req-assess` Step 6. Save to
|
|
4
|
-
`
|
|
4
|
+
`Knowledge/Candidates/{Name}/interview-{date}.md`. Include only skills the
|
|
5
5
|
interview produced new evidence for — don't repeat the full matrix.
|
|
6
6
|
|
|
7
7
|
```markdown
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Panel Brief Template
|
|
2
2
|
|
|
3
3
|
Reference template for `req-assess` Step 7. Save to
|
|
4
|
-
`
|
|
4
|
+
`Knowledge/Candidates/{Name}/panel.md`. Audience: **next-stage interviewers,
|
|
5
5
|
often non-engineers** — explain without jargon, focus on behaviours and scope.
|
|
6
6
|
|
|
7
7
|
```markdown
|
|
@@ -29,25 +29,25 @@ This is **Stage 3** of the three-stage pipeline:
|
|
|
29
29
|
## Prerequisites
|
|
30
30
|
|
|
31
31
|
- `fit-pathway` CLI installed.
|
|
32
|
-
- `
|
|
33
|
-
- At least one `
|
|
34
|
-
- `
|
|
32
|
+
- `Knowledge/Candidates/{Name}/screening.md` exists.
|
|
33
|
+
- At least one `Knowledge/Candidates/{Name}/interview-*.md`.
|
|
34
|
+
- `Knowledge/Candidates/{Name}/brief.md` exists.
|
|
35
35
|
|
|
36
36
|
## Inputs
|
|
37
37
|
|
|
38
|
-
- All artifacts in `
|
|
38
|
+
- All artifacts in `Knowledge/Candidates/{Name}/`.
|
|
39
39
|
- Standard data via `fit-pathway`.
|
|
40
|
-
- `
|
|
41
|
-
- `
|
|
40
|
+
- `Knowledge/Candidates/Insights.md` — cross-candidate context.
|
|
41
|
+
- `Knowledge/Roles/*.md` — the candidate's requisition (positions, hiring
|
|
42
42
|
manager, domain lead).
|
|
43
|
-
- `
|
|
43
|
+
- `Knowledge/Priorities/*.md` — strategic context.
|
|
44
44
|
- Other active candidates at the same level — relative positioning.
|
|
45
45
|
|
|
46
46
|
## Outputs
|
|
47
47
|
|
|
48
|
-
- `
|
|
49
|
-
- Updated `
|
|
50
|
-
- Updated `
|
|
48
|
+
- `Knowledge/Candidates/{Name}/recommendation.md` — final recommendation.
|
|
49
|
+
- Updated `Knowledge/Candidates/{Name}/brief.md` — status and link.
|
|
50
|
+
- Updated `Knowledge/Candidates/Insights.md` — cross-candidate observations.
|
|
51
51
|
|
|
52
52
|
<do_confirm_checklist goal="Verify the recommendation is grounded and
|
|
53
53
|
audit-ready">
|
|
@@ -71,7 +71,7 @@ audit-ready">
|
|
|
71
71
|
### 1. Gather all evidence
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
|
-
ls
|
|
74
|
+
ls Knowledge/Candidates/{Name}/
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
Read in order: `brief.md`, `screening.md`, every `interview-*.md`, relevant
|
|
@@ -114,8 +114,8 @@ Apply the level-confirmation criteria in
|
|
|
114
114
|
If `brief.md` carries a `Req`:
|
|
115
115
|
|
|
116
116
|
```bash
|
|
117
|
-
ls
|
|
118
|
-
cat "
|
|
117
|
+
ls Knowledge/Roles/ | grep "{req_number}"
|
|
118
|
+
cat "Knowledge/Roles/{matching file}"
|
|
119
119
|
```
|
|
120
120
|
|
|
121
121
|
Capture remaining positions, hiring manager, domain lead, goal alignment, other
|
|
@@ -125,9 +125,9 @@ in terms of strategic impact.
|
|
|
125
125
|
### 6. Assess against the active pipeline
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
-
cat
|
|
128
|
+
cat Knowledge/Candidates/Insights.md
|
|
129
129
|
|
|
130
|
-
for dir in
|
|
130
|
+
for dir in Knowledge/Candidates/*/; do
|
|
131
131
|
if [ -f "$dir/screening.md" ]; then
|
|
132
132
|
head -5 "$dir/screening.md"
|
|
133
133
|
fi
|
|
@@ -144,7 +144,7 @@ Apply the [decision rules](references/rubric.md#decision-rules) and run the
|
|
|
144
144
|
|
|
145
145
|
### 8. Write the recommendation
|
|
146
146
|
|
|
147
|
-
Save to `
|
|
147
|
+
Save to `Knowledge/Candidates/{Name}/recommendation.md` using the template in
|
|
148
148
|
[references/template.md](references/template.md). Carry the **advisory-only**
|
|
149
149
|
banner. Cite specific evidence in skill, behaviour, level, and track sections.
|
|
150
150
|
|
|
@@ -156,7 +156,7 @@ Update `brief.md`:
|
|
|
156
156
|
- Append `- [Hiring Recommendation](./recommendation.md)`.
|
|
157
157
|
- Add the final pipeline entry with date and outcome.
|
|
158
158
|
|
|
159
|
-
Update `
|
|
159
|
+
Update `Knowledge/Candidates/Insights.md` only when there's a cross-candidate
|
|
160
160
|
observation worth keeping (strongest at level, sourcing channel pattern,
|
|
161
161
|
level-adjustment implications).
|
|
162
162
|
|
|
@@ -37,7 +37,7 @@ what was found, deleted, and redacted — the compliance audit trail.
|
|
|
37
37
|
|
|
38
38
|
## Outputs
|
|
39
39
|
|
|
40
|
-
- `
|
|
40
|
+
- `Knowledge/Erasure/{Name}--{YYYY-MM-DD}.md` — erasure report.
|
|
41
41
|
- Deleted files and redacted references across the knowledge base.
|
|
42
42
|
|
|
43
43
|
<do_confirm_checklist goal="Verify erasure is complete and the audit trail is
|
|
@@ -92,8 +92,8 @@ Process most-specific to most-general.
|
|
|
92
92
|
**3a. Dedicated files and directories:**
|
|
93
93
|
|
|
94
94
|
```bash
|
|
95
|
-
rm -rf "
|
|
96
|
-
rm -f "
|
|
95
|
+
rm -rf "Knowledge/Candidates/{Name}/"
|
|
96
|
+
rm -f "Knowledge/People/{Name}.md"
|
|
97
97
|
find ~/.cache/fit/outpost/apple_mail/attachments/ -iname "*{Name}*" -delete
|
|
98
98
|
```
|
|
99
99
|
|
|
@@ -126,14 +126,14 @@ rg -v "{deleted_path}" ~/.cache/fit/outpost/state/graph_processed \
|
|
|
126
126
|
|
|
127
127
|
### 4. Write the erasure report
|
|
128
128
|
|
|
129
|
-
Save to `
|
|
129
|
+
Save to `Knowledge/Erasure/{Name}--{YYYY-MM-DD}.md` using the template in
|
|
130
130
|
[references/report-template.md](references/report-template.md). Record **only**
|
|
131
131
|
what was deleted — never CV content, skills, or assessments.
|
|
132
132
|
|
|
133
133
|
### 5. Verify
|
|
134
134
|
|
|
135
135
|
```bash
|
|
136
|
-
rg "{Name}"
|
|
136
|
+
rg "{Name}" Knowledge/ ~/.cache/fit/outpost/ Drafts/
|
|
137
137
|
```
|
|
138
138
|
|
|
139
139
|
The only match should be the erasure report. If other matches remain, process
|
|
@@ -143,12 +143,12 @@ them and update the report.
|
|
|
143
143
|
|
|
144
144
|
**`recruitment-only`** limits erasure to:
|
|
145
145
|
|
|
146
|
-
- `
|
|
147
|
-
- `
|
|
146
|
+
- `Knowledge/Candidates/{Name}/`
|
|
147
|
+
- `Knowledge/Candidates/Insights.md` mentions
|
|
148
148
|
- Recruitment threads (known agency domains)
|
|
149
149
|
- `recruiter_triage.md`
|
|
150
150
|
|
|
151
|
-
Leaves `
|
|
151
|
+
Leaves `Knowledge/People/{Name}.md` and the wider graph intact — the person may
|
|
152
152
|
be a colleague or non-recruitment contact.
|
|
153
153
|
|
|
154
154
|
**`all`** (default): full erasure across knowledge base, cache, and state.
|
|
@@ -5,14 +5,14 @@ action below.
|
|
|
5
5
|
|
|
6
6
|
| Reference Type | Action | Example |
|
|
7
7
|
| ---------------------------------- | ------------------------------------------- | ----------------------------------------------- |
|
|
8
|
-
| **Dedicated note** (sole subject) | Delete entire file | `
|
|
9
|
-
| **Dedicated directory** | Delete entire directory | `
|
|
10
|
-
| **Mention in another note** | Redact: remove lines referencing the person | Backlink in `
|
|
8
|
+
| **Dedicated note** (sole subject) | Delete entire file | `Knowledge/People/{Name}.md` |
|
|
9
|
+
| **Dedicated directory** | Delete entire directory | `Knowledge/Candidates/{Name}/` |
|
|
10
|
+
| **Mention in another note** | Redact: remove lines referencing the person | Backlink in `Knowledge/Organizations/Agency.md` |
|
|
11
11
|
| **Email thread** (sole subject) | Delete file | `~/.cache/fit/outpost/apple_mail/thread.md` |
|
|
12
12
|
| **Email thread** (multiple people) | Redact: remove paragraphs about the person | Thread discussing multiple candidates |
|
|
13
13
|
| **Attachment** (their CV, etc.) | Delete file | `attachments/{thread}/CV.pdf` |
|
|
14
14
|
| **Triage/state file** | Redact: remove lines mentioning them | `recruiter_triage.md` |
|
|
15
|
-
| **Insights file** | Redact: remove bullets mentioning them | `
|
|
15
|
+
| **Insights file** | Redact: remove bullets mentioning them | `Knowledge/Candidates/Insights.md` |
|
|
16
16
|
|
|
17
17
|
## Redaction rules
|
|
18
18
|
|
|
@@ -6,21 +6,21 @@ inventory.
|
|
|
6
6
|
## Knowledge base — direct notes
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
|
-
ls -d "
|
|
10
|
-
ls "
|
|
9
|
+
ls -d "Knowledge/Candidates/{Name}/" 2>/dev/null
|
|
10
|
+
ls "Knowledge/People/{Name}.md" 2>/dev/null
|
|
11
11
|
|
|
12
12
|
# Common name variations
|
|
13
|
-
ls "
|
|
14
|
-
ls "
|
|
13
|
+
ls "Knowledge/People/{First} {Last}.md" 2>/dev/null
|
|
14
|
+
ls "Knowledge/People/{Last}, {First}.md" 2>/dev/null
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
## Knowledge base — backlinks and mentions
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
rg -l "{Name}"
|
|
21
|
-
rg -l "{First name} {Last name}"
|
|
22
|
-
rg -l "\[\[.*{Name}.*\]\]"
|
|
23
|
-
rg -l "{email}"
|
|
20
|
+
rg -l "{Name}" Knowledge/
|
|
21
|
+
rg -l "{First name} {Last name}" Knowledge/
|
|
22
|
+
rg -l "\[\[.*{Name}.*\]\]" Knowledge/
|
|
23
|
+
rg -l "{email}" Knowledge/
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
## Cached email threads
|
|
@@ -47,13 +47,13 @@ rg -l "{Name}" ~/.cache/fit/outpost/state/ 2>/dev/null
|
|
|
47
47
|
## Drafts
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
|
-
rg -l "{Name}"
|
|
50
|
+
rg -l "{Name}" Drafts/ 2>/dev/null
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
## Final verification
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
rg "{Name}"
|
|
56
|
+
rg "{Name}" Knowledge/ ~/.cache/fit/outpost/ Drafts/
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
Expected: only the erasure report matches.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Erasure Report Template
|
|
2
2
|
|
|
3
3
|
Audit trail for `req-forget` Step 4. Save to
|
|
4
|
-
`
|
|
4
|
+
`Knowledge/Erasure/{Name}--{YYYY-MM-DD}.md`.
|
|
5
5
|
|
|
6
6
|
**The report itself must not contain personal data** beyond the subject's name
|
|
7
7
|
and the actions taken. Do not copy CV content, skills, or assessments into the
|
|
@@ -22,15 +22,15 @@ report — record only what was deleted, not what it contained.
|
|
|
22
22
|
## Actions Taken
|
|
23
23
|
|
|
24
24
|
### Deleted Files
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
27
|
-
- `
|
|
28
|
-
- `
|
|
25
|
+
- `Knowledge/Candidates/{Name}/brief.md`
|
|
26
|
+
- `Knowledge/Candidates/{Name}/CV.pdf`
|
|
27
|
+
- `Knowledge/Candidates/{Name}/screening.md`
|
|
28
|
+
- `Knowledge/People/{Name}.md`
|
|
29
29
|
- {list all deleted files}
|
|
30
30
|
|
|
31
31
|
### Redacted References
|
|
32
|
-
- `
|
|
33
|
-
- `
|
|
32
|
+
- `Knowledge/Organizations/{Agency}.md` — removed backlink
|
|
33
|
+
- `Knowledge/Candidates/Insights.md` — removed {N} bullet(s)
|
|
34
34
|
- {list all redacted files and what was removed}
|
|
35
35
|
|
|
36
36
|
### Cached Data Removed
|
|
@@ -57,7 +57,7 @@ The following are outside this tool's reach:
|
|
|
57
57
|
## Verification
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
|
-
rg "{Name}"
|
|
60
|
+
rg "{Name}" Knowledge/ ~/.cache/fit/outpost/
|
|
61
61
|
````
|
|
62
62
|
|
|
63
63
|
Expected: no matches except this erasure report.
|
|
@@ -3,7 +3,7 @@ name: req-scan
|
|
|
3
3
|
description: >
|
|
4
4
|
Scan publicly available sources for candidates who indicate they are open for
|
|
5
5
|
hire. Uses WebFetch to read public APIs (HN Algolia, GitHub, dev.to).
|
|
6
|
-
Writes prospect notes to
|
|
6
|
+
Writes prospect notes to Knowledge/Prospects/. Maintains
|
|
7
7
|
cursor/dedup state in ~/.cache/fit/outpost/head-hunter/. Use when the
|
|
8
8
|
head-hunter agent is woken or when the user asks to scan for open candidates.
|
|
9
9
|
---
|
|
@@ -34,7 +34,7 @@ updates.
|
|
|
34
34
|
|
|
35
35
|
## Outputs
|
|
36
36
|
|
|
37
|
-
- `
|
|
37
|
+
- `Knowledge/Prospects/{Name}.md`.
|
|
38
38
|
- Updated `cursor.tsv`, `seen.tsv`, `prospects.tsv`, and `log.md`.
|
|
39
39
|
- `~/.cache/fit/outpost/state/head_hunter_triage.md`.
|
|
40
40
|
|
|
@@ -103,7 +103,7 @@ Write notes for **strong** and **moderate** matches only, using the template in
|
|
|
103
103
|
[references/template.md](references/template.md).
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
|
-
mkdir -p "
|
|
106
|
+
mkdir -p "Knowledge/Prospects"
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
### 5. Update state
|
|
@@ -22,7 +22,7 @@ This is **Stage 1** of a three-stage hiring pipeline:
|
|
|
22
22
|
|
|
23
23
|
## Trigger
|
|
24
24
|
|
|
25
|
-
- A new CV is added to `
|
|
25
|
+
- A new CV is added to `Knowledge/Candidates/{Name}/`.
|
|
26
26
|
- A CV appears in `~/Downloads/` and is associated with a candidate.
|
|
27
27
|
- The user asks to screen, evaluate, or assess a CV.
|
|
28
28
|
- The user asks "is this person worth interviewing?".
|
|
@@ -35,16 +35,16 @@ This is **Stage 1** of a three-stage hiring pipeline:
|
|
|
35
35
|
|
|
36
36
|
## Inputs
|
|
37
37
|
|
|
38
|
-
- CV file path (e.g. `
|
|
38
|
+
- CV file path (e.g. `Knowledge/Candidates/{Name}/CV.pdf`).
|
|
39
39
|
- Target role (optional).
|
|
40
|
-
- Existing `
|
|
41
|
-
- `
|
|
40
|
+
- Existing `Knowledge/Candidates/{Name}/brief.md`, if any.
|
|
41
|
+
- `Knowledge/Roles/*.md` matching the candidate's `Req` (provides `Level`,
|
|
42
42
|
`Discipline`, `Hiring manager`, `Domain lead`).
|
|
43
43
|
|
|
44
44
|
## Outputs
|
|
45
45
|
|
|
46
|
-
- `
|
|
47
|
-
- Updated `
|
|
46
|
+
- `Knowledge/Candidates/{Name}/screening.md` — structured assessment.
|
|
47
|
+
- Updated `Knowledge/Candidates/{Name}/brief.md` — skills + summary enriched.
|
|
48
48
|
|
|
49
49
|
<do_confirm_checklist goal="Verify the screening is grounded and
|
|
50
50
|
decision-rule-compliant">
|
|
@@ -76,8 +76,8 @@ Extract the fields listed in
|
|
|
76
76
|
If `brief.md` carries a `Req`, look up the matching Role file:
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
ls
|
|
80
|
-
cat "
|
|
79
|
+
ls Knowledge/Roles/ | grep "{req_number}"
|
|
80
|
+
cat "Knowledge/Roles/{matching file}"
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
Use the Role's `Level` and `Discipline` as the target unless the user specified
|
|
@@ -127,7 +127,7 @@ Pick the recommendation using the decision rules and threshold rule in
|
|
|
127
127
|
|
|
128
128
|
### 7. Write the screening
|
|
129
129
|
|
|
130
|
-
Save to `
|
|
130
|
+
Save to `Knowledge/Candidates/{Name}/screening.md` using the template in
|
|
131
131
|
[references/template.md](references/template.md). Include the **Suggested
|
|
132
132
|
Interview Questions** when the recommendation is "Interview" or "Interview with
|
|
133
133
|
focus areas":
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Screening Output Template
|
|
2
2
|
|
|
3
3
|
Reference template for `req-screen` Step 6. Save to
|
|
4
|
-
`
|
|
4
|
+
`Knowledge/Candidates/{Name}/screening.md`. Filename **must** be `screening.md`
|
|
5
5
|
— not `assessment.md`, `cv-screening.md`, or any variant. If a misnamed
|
|
6
6
|
screening file exists in the folder (look for `# CV Screening` in the header),
|
|
7
7
|
delete it after writing.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: req-track
|
|
3
|
-
description: Scan synced email threads for recruitment candidates, extract structured profiles, and create/update notes in
|
|
3
|
+
description: Scan synced email threads for recruitment candidates, extract structured profiles, and create/update notes in Knowledge/Candidates/. Use when the user asks to track candidates, process recruitment emails, or update the hiring pipeline.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Track Candidates
|
|
7
7
|
|
|
8
8
|
Scan synced email threads from `~/.cache/fit/outpost/apple_mail/` for
|
|
9
9
|
recruitment candidates. Extract structured candidate profiles and create or
|
|
10
|
-
update notes in `
|
|
10
|
+
update notes in `Knowledge/Candidates/`. Builds a local, searchable recruitment
|
|
11
11
|
pipeline from scattered email threads.
|
|
12
12
|
|
|
13
13
|
## Trigger
|
|
@@ -29,7 +29,7 @@ pipeline from scattered email threads.
|
|
|
29
29
|
- `~/.cache/fit/outpost/apple_mail/attachments/` — CV/resume attachments.
|
|
30
30
|
- `~/.cache/fit/outpost/apple_calendar/*.json` — calendar events (for
|
|
31
31
|
cross-source inference).
|
|
32
|
-
- `
|
|
32
|
+
- `Knowledge/Roles/*.md` — open role/requisition files (metadata inheritance).
|
|
33
33
|
- `~/.cache/fit/outpost/state/graph_processed` — processed-file index (shared
|
|
34
34
|
with `extract-entities`).
|
|
35
35
|
- `~/.cache/fit/outpost/state/identity.md` — user identity for self-exclusion
|
|
@@ -37,10 +37,10 @@ pipeline from scattered email threads.
|
|
|
37
37
|
|
|
38
38
|
## Outputs
|
|
39
39
|
|
|
40
|
-
- `
|
|
41
|
-
- `
|
|
42
|
-
- `
|
|
43
|
-
- `
|
|
40
|
+
- `Knowledge/Candidates/{Full Name}/brief.md` — candidate profile note.
|
|
41
|
+
- `Knowledge/Candidates/{Full Name}/CV.pdf` (or `CV.docx`) — local CV copy.
|
|
42
|
+
- `Knowledge/Candidates/{Full Name}/headshot.jpeg` — candidate photo.
|
|
43
|
+
- `Knowledge/Roles/*.md` — created/updated role files (Candidates tables
|
|
44
44
|
rebuilt).
|
|
45
45
|
- `~/.cache/fit/outpost/state/graph_processed` — updated with processed threads.
|
|
46
46
|
|
|
@@ -84,31 +84,31 @@ here.
|
|
|
84
84
|
### 2. Build candidate, people, and org indexes
|
|
85
85
|
|
|
86
86
|
```bash
|
|
87
|
-
ls -d
|
|
87
|
+
ls -d Knowledge/Candidates/*/
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
Read each existing brief's header (Name, Role, Source, Status) to build a mental
|
|
91
|
-
index. Also scan `
|
|
92
|
-
`
|
|
91
|
+
index. Also scan `Knowledge/People/`, `Knowledge/Organizations/`, and
|
|
92
|
+
`Knowledge/Projects/` to resolve recruiter names, agency orgs, and project
|
|
93
93
|
links.
|
|
94
94
|
|
|
95
|
-
### 3. Sync `
|
|
95
|
+
### 3. Sync `Knowledge/Roles/`
|
|
96
96
|
|
|
97
97
|
This keeps role metadata current and enables inheritance.
|
|
98
98
|
|
|
99
99
|
1. Read each Role file's Info block to map Req → Role file path, Hiring manager,
|
|
100
100
|
Domain lead, recruiter, Channel.
|
|
101
101
|
2. Find Reqs referenced by candidate briefs but missing a Role file:
|
|
102
|
-
`rg "^\*\*Req:\*\*"
|
|
102
|
+
`rg "^\*\*Req:\*\*" Knowledge/Candidates/*/brief.md`. For each missing Req,
|
|
103
103
|
create a stub using the **Role file stub** in
|
|
104
104
|
[references/templates.md](references/templates.md), then enrich by searching
|
|
105
|
-
the graph: `rg "{req_number}"
|
|
105
|
+
the graph: `rg "{req_number}" Knowledge/`.
|
|
106
106
|
3. Rebuild each Role file's `## Candidates` table by scanning briefs:
|
|
107
|
-
`rg -l "Req:.*{req_number}"
|
|
107
|
+
`rg -l "Req:.*{req_number}" Knowledge/Candidates/*/brief.md`. Use the **Role
|
|
108
108
|
Candidates table** format from `references/templates.md`. Sort by First seen,
|
|
109
109
|
newest first.
|
|
110
110
|
4. If a Role file has a hiring manager but no domain lead, walk the
|
|
111
|
-
`**Reports to:**` chain in `
|
|
111
|
+
`**Reports to:**` chain in `Knowledge/People/` to a VP or senior leader.
|
|
112
112
|
|
|
113
113
|
### 4. Identify recruitment threads
|
|
114
114
|
|
|
@@ -137,7 +137,7 @@ forwarded headers).
|
|
|
137
137
|
|
|
138
138
|
### 8. Write or update the candidate note
|
|
139
139
|
|
|
140
|
-
For **new** candidates, create `
|
|
140
|
+
For **new** candidates, create `Knowledge/Candidates/{Full Name}/brief.md` from
|
|
141
141
|
the **Candidate brief** template in
|
|
142
142
|
[references/templates.md](references/templates.md). Place the **Extra Info
|
|
143
143
|
fields** after `Last activity` in the order shown there. Add the **Optional
|
|
@@ -149,7 +149,7 @@ known Info fields, and add new Skills.
|
|
|
149
149
|
|
|
150
150
|
### 9. Capture cross-candidate insights
|
|
151
151
|
|
|
152
|
-
Update `
|
|
152
|
+
Update `Knowledge/Candidates/Insights.md` only when an observation is
|
|
153
153
|
high-signal: candidate may suit a **different role**, is a **strong match** for
|
|
154
154
|
a specific team or leader, a meaningful **comparison between candidates**, or a
|
|
155
155
|
hiring trade-off needs to be **remembered across sessions**.
|
|
@@ -43,13 +43,13 @@ Field map and resolution rules for Step 2 of `req-track`.
|
|
|
43
43
|
|
|
44
44
|
Stop at the first match:
|
|
45
45
|
|
|
46
|
-
1. **Req-first inheritance** — look up `
|
|
46
|
+
1. **Req-first inheritance** — look up `Knowledge/Roles/*.md` for the matching
|
|
47
47
|
Req; inherit Hiring manager and Domain lead from the Role file.
|
|
48
48
|
2. **Calendar inference** —
|
|
49
49
|
`rg -l "{Candidate Name}" ~/.cache/fit/outpost/apple_calendar/`. The non-user
|
|
50
50
|
organizer of an interview event is likely the hiring manager.
|
|
51
51
|
3. **Email inference** — internal To/CC recipients (besides the user)
|
|
52
|
-
cross-checked against `
|
|
52
|
+
cross-checked against `Knowledge/People/`.
|
|
53
53
|
4. **Reporting chain** — read the hiring manager's `**Reports to:**` field; walk
|
|
54
54
|
up to a VP / senior leader for the domain lead.
|
|
55
55
|
5. **Staffing project timeline** — search staffing notes for the candidate or
|
|
@@ -71,7 +71,7 @@ hiring decisions, assessment criteria, or candidate visibility.
|
|
|
71
71
|
|
|
72
72
|
## Source and recruiter
|
|
73
73
|
|
|
74
|
-
- Map sender email domain to an organization in `
|
|
74
|
+
- Map sender email domain to an organization in `Knowledge/Organizations/`.
|
|
75
75
|
- The person who sent or forwarded the profile is the recruiter — link with
|
|
76
76
|
`[[People/Name]]`.
|
|
77
77
|
- Create the organization or recruiter notes if missing.
|
|
@@ -80,9 +80,9 @@ hiring decisions, assessment criteria, or candidate visibility.
|
|
|
80
80
|
|
|
81
81
|
```bash
|
|
82
82
|
ls ~/.cache/fit/outpost/apple_mail/attachments/{thread_id}/
|
|
83
|
-
mkdir -p "
|
|
83
|
+
mkdir -p "Knowledge/Candidates/{Full Name}"
|
|
84
84
|
cp "~/.cache/fit/outpost/apple_mail/attachments/{thread_id}/{file}" \
|
|
85
|
-
"
|
|
85
|
+
"Knowledge/Candidates/{Full Name}/CV.pdf"
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
Use `CV.pdf` (PDF) or `CV.docx` (Word). The `## CV` link is `./CV.pdf`.
|
|
@@ -106,9 +106,9 @@ Match by name fragment (case-insensitive). Prefer the Downloads match. Always
|
|
|
106
106
|
write `headshot.jpeg`:
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
|
-
cp "{src}" "
|
|
109
|
+
cp "{src}" "Knowledge/Candidates/{Full Name}/headshot.jpeg"
|
|
110
110
|
# PNG → JPEG
|
|
111
|
-
magick "{src}.png" "
|
|
111
|
+
magick "{src}.png" "Knowledge/Candidates/{Full Name}/headshot.jpeg"
|
|
112
112
|
# HEIC → JPEG
|
|
113
|
-
magick "{src}.heic" "
|
|
113
|
+
magick "{src}.heic" "Knowledge/Candidates/{Full Name}/headshot.jpeg"
|
|
114
114
|
```
|
|
@@ -10,7 +10,7 @@ no signal — most email is not.
|
|
|
10
10
|
|
|
11
11
|
## Recruiter sender domains
|
|
12
12
|
|
|
13
|
-
Sender domain maps to an organization in `
|
|
13
|
+
Sender domain maps to an organization in `Knowledge/Organizations/` tagged as a
|
|
14
14
|
recruitment agency. When no agencies are catalogued yet, treat these patterns as
|
|
15
15
|
hints:
|
|
16
16
|
|
|
@@ -38,5 +38,5 @@ Structured candidate descriptions containing:
|
|
|
38
38
|
|
|
39
39
|
## Follow-up on existing candidates
|
|
40
40
|
|
|
41
|
-
A thread mentions a candidate already in `
|
|
41
|
+
A thread mentions a candidate already in `Knowledge/Candidates/` by name —
|
|
42
42
|
process it to update pipeline status.
|