@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.
Files changed (65) hide show
  1. package/LICENSE +21 -201
  2. package/config/skill-postures.json +28 -0
  3. package/package.json +1 -1
  4. package/src/agent-runner.js +52 -1
  5. package/src/kb-manager.js +5 -7
  6. package/src/outpost.js +42 -0
  7. package/src/posture.js +77 -0
  8. package/src/socket-server.js +1 -5
  9. package/templates/.claude/agents/chief-of-staff.md +24 -9
  10. package/templates/.claude/agents/concierge.md +14 -0
  11. package/templates/.claude/agents/head-hunter.md +14 -0
  12. package/templates/.claude/agents/librarian.md +19 -7
  13. package/templates/.claude/agents/postman.md +14 -0
  14. package/templates/.claude/agents/recruiter.md +21 -12
  15. package/templates/.claude/skills/anarlog-follow/SKILL.md +7 -7
  16. package/templates/.claude/skills/anarlog-process/SKILL.md +15 -16
  17. package/templates/.claude/skills/anarlog-process/references/extraction.md +5 -5
  18. package/templates/.claude/skills/candidate-report/SKILL.md +9 -9
  19. package/templates/.claude/skills/deck-create/SKILL.md +2 -2
  20. package/templates/.claude/skills/deck-summarize/SKILL.md +2 -2
  21. package/templates/.claude/skills/deck-summarize/references/brief-template.md +1 -1
  22. package/templates/.claude/skills/doc-collab/SKILL.md +8 -8
  23. package/templates/.claude/skills/doc-create/SKILL.md +3 -3
  24. package/templates/.claude/skills/draft-emails/SKILL.md +19 -19
  25. package/templates/.claude/skills/draft-emails/references/template.md +1 -1
  26. package/templates/.claude/skills/draft-emails/scripts/scan-emails.mjs +4 -4
  27. package/templates/.claude/skills/draft-emails/scripts/send-email.mjs +2 -2
  28. package/templates/.claude/skills/extract-entities/SKILL.md +16 -17
  29. package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +2 -2
  30. package/templates/.claude/skills/extract-entities/references/conditions.md +4 -4
  31. package/templates/.claude/skills/extract-entities/references/links.md +3 -18
  32. package/templates/.claude/skills/extract-entities/references/recruitment.md +8 -8
  33. package/templates/.claude/skills/extract-entities/references/resolution.md +3 -5
  34. package/templates/.claude/skills/extract-entities/references/sources.md +1 -1
  35. package/templates/.claude/skills/extract-entities/references/templates-conditions.md +2 -2
  36. package/templates/.claude/skills/extract-entities/references/templates-priorities.md +32 -0
  37. package/templates/.claude/skills/extract-entities/references/templates-projects-topics.md +2 -2
  38. package/templates/.claude/skills/meeting-prep/SKILL.md +18 -19
  39. package/templates/.claude/skills/req-assess/SKILL.md +11 -11
  40. package/templates/.claude/skills/req-assess/references/interview-template.md +1 -1
  41. package/templates/.claude/skills/req-assess/references/panel-template.md +1 -1
  42. package/templates/.claude/skills/req-decide/SKILL.md +17 -17
  43. package/templates/.claude/skills/req-decide/references/template.md +1 -1
  44. package/templates/.claude/skills/req-forget/SKILL.md +8 -8
  45. package/templates/.claude/skills/req-forget/references/classify.md +4 -4
  46. package/templates/.claude/skills/req-forget/references/locations.md +10 -10
  47. package/templates/.claude/skills/req-forget/references/report-template.md +8 -8
  48. package/templates/.claude/skills/req-scan/SKILL.md +3 -3
  49. package/templates/.claude/skills/req-scan/references/template.md +1 -1
  50. package/templates/.claude/skills/req-screen/SKILL.md +9 -9
  51. package/templates/.claude/skills/req-screen/references/template.md +1 -1
  52. package/templates/.claude/skills/req-track/SKILL.md +17 -17
  53. package/templates/.claude/skills/req-track/references/fields.md +8 -8
  54. package/templates/.claude/skills/req-track/references/signals.md +2 -2
  55. package/templates/.claude/skills/req-track/references/templates.md +1 -1
  56. package/templates/.claude/skills/req-workday/SKILL.md +12 -12
  57. package/templates/.claude/skills/req-workday/references/templates.md +3 -3
  58. package/templates/.claude/skills/send-chat/SKILL.md +4 -4
  59. package/templates/.claude/skills/upstream-instructions/SKILL.md +154 -0
  60. package/templates/.claude/skills/upstream-instructions/references/examples.md +97 -0
  61. package/templates/CLAUDE.md +47 -53
  62. package/templates/.claude/skills/extract-entities/references/templates-goals-priorities.md +0 -63
  63. package/templates/.claude/skills/upstream-skill/SKILL.md +0 -130
  64. package/templates/.claude/skills/upstream-skill/references/examples.md +0 -80
  65. 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 "knowledge/Candidates/{Name}/" 2>/dev/null
10
- ls "knowledge/People/{Name}.md" 2>/dev/null
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 "knowledge/People/{First} {Last}.md" 2>/dev/null
14
- ls "knowledge/People/{Last}, {First}.md" 2>/dev/null
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}" knowledge/
21
- rg -l "{First name} {Last name}" knowledge/
22
- rg -l "\[\[.*{Name}.*\]\]" knowledge/
23
- rg -l "{email}" knowledge/
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}" drafts/ 2>/dev/null
50
+ rg -l "{Name}" Drafts/ 2>/dev/null
51
51
  ```
52
52
 
53
53
  ## Final verification
54
54
 
55
55
  ```bash
56
- rg "{Name}" knowledge/ ~/.cache/fit/outpost/ drafts/
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
- `knowledge/Erasure/{Name}--{YYYY-MM-DD}.md`.
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
- - `knowledge/Candidates/{Name}/brief.md`
26
- - `knowledge/Candidates/{Name}/CV.pdf`
27
- - `knowledge/Candidates/{Name}/screening.md`
28
- - `knowledge/People/{Name}.md`
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
- - `knowledge/Organizations/{Agency}.md` — removed backlink
33
- - `knowledge/Candidates/Insights.md` — removed {N} bullet(s)
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}" knowledge/ ~/.cache/fit/outpost/
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 knowledge/Prospects/. Maintains
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
- - `knowledge/Prospects/{Name}.md`.
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 "knowledge/Prospects"
106
+ mkdir -p "Knowledge/Prospects"
107
107
  ```
108
108
 
109
109
  ### 5. Update state
@@ -1,6 +1,6 @@
1
1
  # Prospect Note Template
2
2
 
3
- Reference for `req-scan` Step 4. Save to `knowledge/Prospects/{Name}.md`.
3
+ Reference for `req-scan` Step 4. Save to `Knowledge/Prospects/{Name}.md`.
4
4
 
5
5
  ```markdown
6
6
  # {Name}
@@ -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 `knowledge/Candidates/{Name}/`.
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. `knowledge/Candidates/{Name}/CV.pdf`).
38
+ - CV file path (e.g. `Knowledge/Candidates/{Name}/CV.pdf`).
39
39
  - Target role (optional).
40
- - Existing `knowledge/Candidates/{Name}/brief.md`, if any.
41
- - `knowledge/Roles/*.md` matching the candidate's `Req` (provides `Level`,
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
- - `knowledge/Candidates/{Name}/screening.md` — structured assessment.
47
- - Updated `knowledge/Candidates/{Name}/brief.md` — skills + summary enriched.
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 knowledge/Roles/ | grep "{req_number}"
80
- cat "knowledge/Roles/{matching file}"
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 `knowledge/Candidates/{Name}/screening.md` using the template in
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
- `knowledge/Candidates/{Name}/screening.md`. Filename **must** be `screening.md`
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 knowledge/Candidates/. Use when the user asks to track candidates, process recruitment emails, or update the hiring pipeline.
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 `knowledge/Candidates/`. Builds a local, searchable recruitment
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
- - `knowledge/Roles/*.md` — open role/requisition files (metadata inheritance).
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
- - `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
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 knowledge/Candidates/*/
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 `knowledge/People/`, `knowledge/Organizations/`, and
92
- `knowledge/Projects/` to resolve recruiter names, agency orgs, and project
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 `knowledge/Roles/`
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:\*\*" knowledge/Candidates/*/brief.md`. For each missing 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}" knowledge/`.
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}" knowledge/Candidates/*/brief.md`. Use the **Role
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 `knowledge/People/` to a VP or senior leader.
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 `knowledge/Candidates/{Full Name}/brief.md` from
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 `knowledge/Candidates/Insights.md` only when an observation is
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 `knowledge/Roles/*.md` for the matching
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 `knowledge/People/`.
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 `knowledge/Organizations/`.
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 "knowledge/Candidates/{Full Name}"
83
+ mkdir -p "Knowledge/Candidates/{Full Name}"
84
84
  cp "~/.cache/fit/outpost/apple_mail/attachments/{thread_id}/{file}" \
85
- "knowledge/Candidates/{Full Name}/CV.pdf"
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}" "knowledge/Candidates/{Full Name}/headshot.jpeg"
109
+ cp "{src}" "Knowledge/Candidates/{Full Name}/headshot.jpeg"
110
110
  # PNG → JPEG
111
- magick "{src}.png" "knowledge/Candidates/{Full Name}/headshot.jpeg"
111
+ magick "{src}.png" "Knowledge/Candidates/{Full Name}/headshot.jpeg"
112
112
  # HEIC → JPEG
113
- magick "{src}.heic" "knowledge/Candidates/{Full Name}/headshot.jpeg"
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 `knowledge/Organizations/` tagged as a
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 `knowledge/Candidates/` by name —
41
+ A thread mentions a candidate already in `Knowledge/Candidates/` by name —
42
42
  process it to update pipeline status.
@@ -50,7 +50,7 @@ Sort by First seen, newest first.
50
50
  ## Candidate brief
51
51
 
52
52
  Used by Step 5 for new candidates. File:
53
- `knowledge/Candidates/{Full Name}/brief.md`.
53
+ `Knowledge/Candidates/{Full Name}/brief.md`.
54
54
 
55
55
  ```markdown
56
56
  # {Full Name}
@@ -2,7 +2,7 @@
2
2
  name: req-workday
3
3
  description: >
4
4
  Import candidates from a Workday requisition export (.xlsx) into
5
- knowledge/Candidates/. Parses requisition metadata and candidate data,
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
- `knowledge/Candidates/`. Extract requisition metadata and candidate profiles,
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
- - `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.
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 `knowledge/Candidates/{Clean Name}/`
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 knowledge/Roles/ | grep "{Req ID}"
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}" knowledge/` — look in project timelines, People notes, Topics
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 knowledge/Candidates/*/ 2>/dev/null
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
- `knowledge/Candidates/{Clean Name}/CV.md` using the **CV.md template** in
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 "knowledge/Candidates/{Clean Name}"
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
- `knowledge/Candidates/Insights.md` under `## Placement Notes` with
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
- `knowledge/Roles/{Req ID} — {Short Title}.md`.
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 `knowledge/Candidates/{Clean Name}/CV.md` when resume text exists. Skip
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 `knowledge/Candidates/{Clean Name}/brief.md`. Format follows
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}" knowledge/People/`
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}" knowledge/People/
56
+ rg -l -i "{name}" Knowledge/People/
57
57
 
58
58
  # If ambiguous, read candidates to disambiguate
59
- cat "knowledge/People/{Candidate}.md"
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 `drafts/chat-{recipient-slug}-{date}.md`
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.