@forwardimpact/outpost 3.3.3 → 3.4.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 +1 -1
- package/src/agent-runner.js +52 -1
- package/src/kb-manager.js +5 -7
- package/src/outpost.js +42 -0
- package/src/posture.js +77 -0
- package/src/socket-server.js +1 -5
- 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/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
|
@@ -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.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: req-workday
|
|
3
3
|
description: >
|
|
4
4
|
Import candidates from a Workday requisition export (.xlsx) into
|
|
5
|
-
|
|
5
|
+
Knowledge/Candidates/. Parses requisition metadata and candidate data,
|
|
6
6
|
creates candidate briefs and CV.md files from resume text, and integrates
|
|
7
7
|
with the existing req-track pipeline. Use when the user provides a
|
|
8
8
|
Workday export file or asks to import candidates from an XLSX requisition
|
|
@@ -12,7 +12,7 @@ description: >
|
|
|
12
12
|
# Workday Requisition Import
|
|
13
13
|
|
|
14
14
|
Import candidates from a Workday requisition export (`.xlsx`) into
|
|
15
|
-
`
|
|
15
|
+
`Knowledge/Candidates/`. Extract requisition metadata and candidate profiles,
|
|
16
16
|
create standardized briefs and `CV.md` files from the embedded resume text, and
|
|
17
17
|
integrate with the `req-track` pipeline format.
|
|
18
18
|
|
|
@@ -36,9 +36,9 @@ integrate with the `req-track` pipeline format.
|
|
|
36
36
|
|
|
37
37
|
## Outputs
|
|
38
38
|
|
|
39
|
-
- `
|
|
40
|
-
- `
|
|
41
|
-
- `
|
|
39
|
+
- `Knowledge/Candidates/{Clean Name}/brief.md` — candidate profile.
|
|
40
|
+
- `Knowledge/Candidates/{Clean Name}/CV.md` — resume text as markdown.
|
|
41
|
+
- `Knowledge/Roles/{Req ID} — {Title}.md` — created or updated.
|
|
42
42
|
- Updated existing briefs when a candidate already exists.
|
|
43
43
|
|
|
44
44
|
<do_confirm_checklist goal="Verify the Workday import is consistent with
|
|
@@ -46,7 +46,7 @@ req-track">
|
|
|
46
46
|
|
|
47
47
|
- [ ] XLSX parsed; candidate count matches the parser summary.
|
|
48
48
|
- [ ] Requisition metadata extracted (ID, title; HM/recruiter when available).
|
|
49
|
-
- [ ] Each candidate has a directory under `
|
|
49
|
+
- [ ] Each candidate has a directory under `Knowledge/Candidates/{Clean Name}/`
|
|
50
50
|
(annotation stripped).
|
|
51
51
|
- [ ] `CV.md` created for every candidate with resume text — faithfully
|
|
52
52
|
reproduced (no rewriting).
|
|
@@ -93,13 +93,13 @@ header indices, name annotations) are in
|
|
|
93
93
|
### 3. Create or update the Role file
|
|
94
94
|
|
|
95
95
|
```bash
|
|
96
|
-
ls
|
|
96
|
+
ls Knowledge/Roles/ | grep "{Req ID}"
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
Use the **Role file stub** in
|
|
100
100
|
[references/templates.md](references/templates.md). Resolve the domain lead by:
|
|
101
101
|
|
|
102
|
-
1. `rg "{Req ID}"
|
|
102
|
+
1. `rg "{Req ID}" Knowledge/` — look in project timelines, People notes, Topics
|
|
103
103
|
for context.
|
|
104
104
|
2. Reading the hiring manager's People note for `**Reports to:**` and walking up
|
|
105
105
|
to a VP or senior leader.
|
|
@@ -111,7 +111,7 @@ If the Role file already exists, follow the existing-file rules in
|
|
|
111
111
|
### 4. Build the candidate index
|
|
112
112
|
|
|
113
113
|
```bash
|
|
114
|
-
ls -d
|
|
114
|
+
ls -d Knowledge/Candidates/*/ 2>/dev/null
|
|
115
115
|
```
|
|
116
116
|
|
|
117
117
|
Match imported candidates against existing notes by name (fuzzy — middle names,
|
|
@@ -126,7 +126,7 @@ step value in the Pipeline entry.
|
|
|
126
126
|
### 6. Write `CV.md`
|
|
127
127
|
|
|
128
128
|
For every candidate with resume text, create
|
|
129
|
-
`
|
|
129
|
+
`Knowledge/Candidates/{Clean Name}/CV.md` using the **CV.md template** in
|
|
130
130
|
[references/templates.md](references/templates.md).
|
|
131
131
|
|
|
132
132
|
### 7. Write or update the brief
|
|
@@ -136,7 +136,7 @@ Brief layout (new candidates) and edit rules (existing candidates):
|
|
|
136
136
|
[references/templates.md](references/templates.md).
|
|
137
137
|
|
|
138
138
|
```bash
|
|
139
|
-
mkdir -p "
|
|
139
|
+
mkdir -p "Knowledge/Candidates/{Clean Name}"
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
For existing candidates, apply targeted Edit operations only — never rewrite the
|
|
@@ -145,7 +145,7 @@ file.
|
|
|
145
145
|
### 8. Capture insights
|
|
146
146
|
|
|
147
147
|
After the batch, review for strategic observations and add bullets to
|
|
148
|
-
`
|
|
148
|
+
`Knowledge/Candidates/Insights.md` under `## Placement Notes` with
|
|
149
149
|
`[[Candidates/Name/brief|Name]]` links. See `req-track` Step 5b for the
|
|
150
150
|
inclusion criteria.
|
|
151
151
|
|
|
@@ -5,7 +5,7 @@ Reference templates for `req-workday` Steps 1b, 4, and 5.
|
|
|
5
5
|
## Role file stub
|
|
6
6
|
|
|
7
7
|
Use when no Role file exists for the requisition. Filename:
|
|
8
|
-
`
|
|
8
|
+
`Knowledge/Roles/{Req ID} — {Short Title}.md`.
|
|
9
9
|
|
|
10
10
|
```markdown
|
|
11
11
|
# {Requisition Title}
|
|
@@ -41,7 +41,7 @@ provides one and the field is `—`; update `Last activity` to today; append
|
|
|
41
41
|
|
|
42
42
|
## CV.md template
|
|
43
43
|
|
|
44
|
-
Save to `
|
|
44
|
+
Save to `Knowledge/Candidates/{Clean Name}/CV.md` when resume text exists. Skip
|
|
45
45
|
when it doesn't.
|
|
46
46
|
|
|
47
47
|
```markdown
|
|
@@ -60,7 +60,7 @@ when it doesn't.
|
|
|
60
60
|
|
|
61
61
|
## Candidate brief
|
|
62
62
|
|
|
63
|
-
Save to `
|
|
63
|
+
Save to `Knowledge/Candidates/{Clean Name}/brief.md`. Format follows
|
|
64
64
|
`req-track`.
|
|
65
65
|
|
|
66
66
|
```markdown
|
|
@@ -35,7 +35,7 @@ Run when the user asks to:
|
|
|
35
35
|
When the user mentions ANY person:
|
|
36
36
|
|
|
37
37
|
1. **STOP** — Do not open the chat platform yet
|
|
38
|
-
2. **SEARCH** — Look them up: `rg -l "{name}"
|
|
38
|
+
2. **SEARCH** — Look them up: `rg -l "{name}" Knowledge/People/`
|
|
39
39
|
3. **READ** — Read their note to understand context, role, recent interactions
|
|
40
40
|
4. **UNDERSTAND** — Know who they are, what you've been working on together
|
|
41
41
|
5. **THEN PROCEED** — Only now compose the message and use browser automation
|
|
@@ -53,10 +53,10 @@ a full name using the knowledge graph:
|
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
55
|
# Find person by partial name
|
|
56
|
-
rg -l -i "{name}"
|
|
56
|
+
rg -l -i "{name}" Knowledge/People/
|
|
57
57
|
|
|
58
58
|
# If ambiguous, read candidates to disambiguate
|
|
59
|
-
cat "
|
|
59
|
+
cat "Knowledge/People/{Candidate}.md"
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
**If ambiguous** (multiple matches), ask the user which person they mean — list
|
|
@@ -73,7 +73,7 @@ can review and edit the exact message before it's sent.
|
|
|
73
73
|
### Draft Workflow
|
|
74
74
|
|
|
75
75
|
1. **Compose the message** based on context and user intent.
|
|
76
|
-
2. **Write it to a draft file** at `
|
|
76
|
+
2. **Write it to a draft file** at `Drafts/chat-{recipient-slug}-{date}.md`
|
|
77
77
|
- `{recipient-slug}` = lowercase, hyphenated full name (e.g. `sarah-chen`)
|
|
78
78
|
- `{date}` = ISO date (e.g. `2026-02-19`)
|
|
79
79
|
3. **Show the user the draft** — display the file path and contents.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: upstream-instructions
|
|
3
|
+
description: Track changes made to this installation's instruction files — the root CLAUDE.md, agent profiles, and skills — and record them in a single root CHANGELOG.md so improvements can be contributed back to the upstream monorepo. Use when CLAUDE.md, agents, or skills have been modified, added, or removed locally and those changes should be documented for upstream.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Upstream Instructions
|
|
7
|
+
|
|
8
|
+
Track changes to this installation's **instructions** and record them in one
|
|
9
|
+
root `CHANGELOG.md` so improvements can be contributed back to the upstream
|
|
10
|
+
monorepo. "Instructions" means all three surfaces, treated equally:
|
|
11
|
+
|
|
12
|
+
- **`CLAUDE.md`** (root) — installation-wide instructions.
|
|
13
|
+
- **`.claude/agents/*.md`** — agent profiles.
|
|
14
|
+
- **`.claude/skills/*/`** — skills (`SKILL.md` and reference files).
|
|
15
|
+
|
|
16
|
+
## Trigger
|
|
17
|
+
|
|
18
|
+
- The user asks to prepare local instruction changes for upstream contribution.
|
|
19
|
+
- The root `CLAUDE.md`, an agent profile, or a skill has been modified, added,
|
|
20
|
+
or removed.
|
|
21
|
+
- The user wants to document what changed locally before syncing upstream.
|
|
22
|
+
|
|
23
|
+
## Prerequisites
|
|
24
|
+
|
|
25
|
+
- A working Outpost installation with `CLAUDE.md`, `.claude/agents/`, and
|
|
26
|
+
`.claude/skills/`.
|
|
27
|
+
- Git available for change detection.
|
|
28
|
+
|
|
29
|
+
## Inputs
|
|
30
|
+
|
|
31
|
+
- `CLAUDE.md` — root installation instructions.
|
|
32
|
+
- `.claude/agents/*.md` — agent profiles.
|
|
33
|
+
- `.claude/skills/*/SKILL.md` and reference files — skills.
|
|
34
|
+
- `CHANGELOG.md` (root) — the existing changelog, for the last documented date.
|
|
35
|
+
- Git history and working tree — change detection.
|
|
36
|
+
|
|
37
|
+
## Outputs
|
|
38
|
+
|
|
39
|
+
- `CHANGELOG.md` (root) — a **single** reverse-chronological changelog covering
|
|
40
|
+
all three surfaces. There are no per-skill or per-agent changelogs.
|
|
41
|
+
|
|
42
|
+
<do_confirm_checklist goal="Verify the changelog is upstream-ready">
|
|
43
|
+
|
|
44
|
+
- [ ] Exactly one root `CHANGELOG.md`; no stray per-skill / per-agent changelogs
|
|
45
|
+
left behind.
|
|
46
|
+
- [ ] Every entry names its **Scope** (which surface(s) and file(s) it touched).
|
|
47
|
+
- [ ] Each entry has **What**, **Why**, and **Details**.
|
|
48
|
+
- [ ] Descriptions are specific enough for an upstream maintainer to act on (not
|
|
49
|
+
"updated CLAUDE.md" / "fixed stuff").
|
|
50
|
+
- [ ] New skills/agents include a brief description of their purpose; removed
|
|
51
|
+
ones explain why.
|
|
52
|
+
- [ ] Dates come from git history (or the date the change was made for
|
|
53
|
+
uncommitted edits), not guessed.
|
|
54
|
+
- [ ] No duplicate entries for the same change.
|
|
55
|
+
|
|
56
|
+
</do_confirm_checklist>
|
|
57
|
+
|
|
58
|
+
## Procedure
|
|
59
|
+
|
|
60
|
+
### 1. Find the last documented state
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
head -20 CHANGELOG.md 2>/dev/null # newest date already recorded, if any
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 2. Identify changed instructions
|
|
67
|
+
|
|
68
|
+
Detect changes across all three surfaces — committed and uncommitted:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Committed changes since the last documented date (or all history)
|
|
72
|
+
git log --after="<last-entry-date>" --name-status -- \
|
|
73
|
+
CLAUDE.md '.claude/agents/' '.claude/skills/'
|
|
74
|
+
|
|
75
|
+
# Uncommitted working-tree changes (common in a live installation)
|
|
76
|
+
git status --short -- CLAUDE.md '.claude/agents/' '.claude/skills/'
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
If no `CHANGELOG.md` exists yet, consider all changes since the initial commit.
|
|
80
|
+
|
|
81
|
+
### 3. Classify each change
|
|
82
|
+
|
|
83
|
+
| Surface | What it covers |
|
|
84
|
+
| ------------- | ----------------------------------------------- |
|
|
85
|
+
| `CLAUDE.md` | Root installation instructions |
|
|
86
|
+
| `agent:<name>`| A profile in `.claude/agents/` |
|
|
87
|
+
| `skill:<name>`| A skill in `.claude/skills/` |
|
|
88
|
+
|
|
89
|
+
| Type | Description |
|
|
90
|
+
| ---------- | ------------------------------------------------------ |
|
|
91
|
+
| `added` | New instruction file that doesn't exist upstream |
|
|
92
|
+
| `modified` | Existing instruction updated |
|
|
93
|
+
| `removed` | Instruction file or directory deleted |
|
|
94
|
+
| `renamed` | File or directory renamed |
|
|
95
|
+
|
|
96
|
+
A single change often spans surfaces (e.g. a KB-structure change touching
|
|
97
|
+
`CLAUDE.md`, several agents, and several skills) — record it as **one entry**
|
|
98
|
+
whose Scope lists every surface touched. Diff to confirm the actual change:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
git diff <commit> -- CLAUDE.md
|
|
102
|
+
git diff <commit> -- '.claude/agents/<agent>.md'
|
|
103
|
+
git diff <commit> -- '.claude/skills/<skill>/'
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 4. Describe each change
|
|
107
|
+
|
|
108
|
+
Every entry must answer:
|
|
109
|
+
|
|
110
|
+
1. **What changed?** — the specific instruction or behaviour modified.
|
|
111
|
+
2. **Why?** — the problem encountered or improvement discovered in use.
|
|
112
|
+
3. **Details** — a summary of the actual change (not a full diff).
|
|
113
|
+
|
|
114
|
+
Good: "Agents now read `Knowledge/Priorities/` at the start of every wake and
|
|
115
|
+
flag anything that threatens a priority — drafts and triage were ignoring
|
|
116
|
+
strategic context."
|
|
117
|
+
|
|
118
|
+
Bad: "Updated the agents" / "Fixed stuff" / "Changed line 42".
|
|
119
|
+
|
|
120
|
+
### 5. Write the changelog
|
|
121
|
+
|
|
122
|
+
Create or update the single root `CHANGELOG.md` (newest first):
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
# Outpost Instructions Changelog
|
|
126
|
+
|
|
127
|
+
Changes to this installation's instructions — root `CLAUDE.md`, agent profiles
|
|
128
|
+
(`.claude/agents/`), and skills (`.claude/skills/`) — for consideration upstream
|
|
129
|
+
in the Forward Impact monorepo. Documents only; pushes nothing.
|
|
130
|
+
|
|
131
|
+
## <YYYY-MM-DD>
|
|
132
|
+
|
|
133
|
+
**Scope:** <surfaces/files, e.g. "skill: extract-entities; CLAUDE.md; agents: librarian, recruiter">
|
|
134
|
+
**Type:** <added | modified | removed | renamed>
|
|
135
|
+
|
|
136
|
+
**What:** <one-line summary>
|
|
137
|
+
|
|
138
|
+
**Why:** <problem or improvement that motivated it>
|
|
139
|
+
|
|
140
|
+
**Details:**
|
|
141
|
+
<2–6 lines describing the specific changes across the listed surfaces>
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Worked examples in [references/examples.md](references/examples.md).
|
|
147
|
+
|
|
148
|
+
## Notes
|
|
149
|
+
|
|
150
|
+
- This skill **documents only** — it does not push or merge anything.
|
|
151
|
+
- The single root `CHANGELOG.md` is consumed by the **downstream-instructions**
|
|
152
|
+
skill in the upstream monorepo.
|
|
153
|
+
- When in doubt about whether a change is upstream-worthy, include it; the
|
|
154
|
+
upstream maintainer decides what to incorporate.
|