@forwardimpact/outpost 3.11.0 → 3.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +2 -2
  2. package/bin/fit-outpost.js +3 -2
  3. package/package.json +4 -4
  4. package/src/agent-path.js +10 -6
  5. package/src/agent-runner.js +28 -24
  6. package/src/index.js +2 -3
  7. package/src/kb-manager.js +21 -19
  8. package/src/outpost.js +37 -33
  9. package/src/posture.js +3 -3
  10. package/src/privilege.js +11 -11
  11. package/src/scheduler.js +14 -12
  12. package/src/socket-server.js +19 -18
  13. package/src/spawn-env.js +7 -6
  14. package/src/state-manager.js +2 -2
  15. package/templates/.claude/agents/chief-of-staff.md +22 -22
  16. package/templates/.claude/agents/concierge.md +19 -17
  17. package/templates/.claude/agents/head-hunter.md +27 -26
  18. package/templates/.claude/agents/librarian.md +17 -16
  19. package/templates/.claude/agents/postman.md +19 -18
  20. package/templates/.claude/agents/recruiter.md +31 -27
  21. package/templates/.claude/skills/anarlog-follow/SKILL.md +50 -49
  22. package/templates/.claude/skills/anarlog-follow/references/coaching.md +22 -21
  23. package/templates/.claude/skills/anarlog-follow/scripts/follow.mjs +4 -4
  24. package/templates/.claude/skills/anarlog-process/SKILL.md +35 -32
  25. package/templates/.claude/skills/anarlog-process/references/extraction.md +26 -22
  26. package/templates/.claude/skills/anarlog-process/references/sessions.md +10 -10
  27. package/templates/.claude/skills/anarlog-process/scripts/scan.mjs +10 -9
  28. package/templates/.claude/skills/anarlog-trim/SKILL.md +43 -40
  29. package/templates/.claude/skills/candidate-report/SKILL.md +30 -28
  30. package/templates/.claude/skills/candidate-report/references/report-template.html +10 -10
  31. package/templates/.claude/skills/candidate-report/references/report.css +4 -4
  32. package/templates/.claude/skills/candidate-report/references/rubric.md +15 -14
  33. package/templates/.claude/skills/candidate-report/scripts/render-pdf.mjs +2 -2
  34. package/templates/.claude/skills/changelog/SKILL.md +55 -50
  35. package/templates/.claude/skills/deck-create/SKILL.md +30 -30
  36. package/templates/.claude/skills/deck-create/references/slide.css +4 -4
  37. package/templates/.claude/skills/deck-create/scripts/convert-to-pdf.mjs +6 -6
  38. package/templates/.claude/skills/deck-review/SKILL.md +59 -57
  39. package/templates/.claude/skills/deck-review/assets/slide-annotator.js +58 -49
  40. package/templates/.claude/skills/deck-summarize/SKILL.md +49 -43
  41. package/templates/.claude/skills/deck-summarize/references/brief-template.md +4 -3
  42. package/templates/.claude/skills/deck-summarize/scripts/extract-pptx.mjs +8 -7
  43. package/templates/.claude/skills/doc-collab/SKILL.md +25 -25
  44. package/templates/.claude/skills/doc-create/SKILL.md +21 -20
  45. package/templates/.claude/skills/doc-create/scripts/convert-to-pdf.mjs +6 -6
  46. package/templates/.claude/skills/draft-emails/SKILL.md +37 -33
  47. package/templates/.claude/skills/draft-emails/references/template.md +2 -2
  48. package/templates/.claude/skills/draft-emails/scripts/scan-emails.mjs +5 -4
  49. package/templates/.claude/skills/draft-emails/scripts/send-email.mjs +11 -9
  50. package/templates/.claude/skills/extract-entities/SKILL.md +65 -65
  51. package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +5 -5
  52. package/templates/.claude/skills/extract-entities/references/conditions.md +14 -13
  53. package/templates/.claude/skills/extract-entities/references/content.md +10 -9
  54. package/templates/.claude/skills/extract-entities/references/links.md +5 -5
  55. package/templates/.claude/skills/extract-entities/references/recruitment.md +19 -18
  56. package/templates/.claude/skills/extract-entities/references/resolution.md +13 -13
  57. package/templates/.claude/skills/extract-entities/references/sources.md +8 -8
  58. package/templates/.claude/skills/extract-entities/references/templates-conditions.md +2 -2
  59. package/templates/.claude/skills/extract-entities/references/templates-priorities.md +2 -2
  60. package/templates/.claude/skills/extract-entities/scripts/state.mjs +9 -8
  61. package/templates/.claude/skills/meeting-prep/SKILL.md +25 -24
  62. package/templates/.claude/skills/organize-files/SKILL.md +24 -22
  63. package/templates/.claude/skills/organize-files/scripts/organize-by-type.mjs +5 -4
  64. package/templates/.claude/skills/organize-files/scripts/summarize.mjs +4 -4
  65. package/templates/.claude/skills/person-identify/SKILL.md +24 -22
  66. package/templates/.claude/skills/person-identify/scripts/identify.sh +17 -17
  67. package/templates/.claude/skills/person-lookup/SKILL.md +28 -29
  68. package/templates/.claude/skills/person-lookup/scripts/lookup.sh +19 -16
  69. package/templates/.claude/skills/req-assess/SKILL.md +27 -27
  70. package/templates/.claude/skills/req-assess/references/interview-template.md +1 -1
  71. package/templates/.claude/skills/req-assess/references/panel-template.md +3 -2
  72. package/templates/.claude/skills/req-assess/references/rubric.md +13 -13
  73. package/templates/.claude/skills/req-decide/SKILL.md +28 -25
  74. package/templates/.claude/skills/req-decide/references/rubric.md +11 -10
  75. package/templates/.claude/skills/req-forget/SKILL.md +28 -26
  76. package/templates/.claude/skills/req-forget/references/classify.md +13 -13
  77. package/templates/.claude/skills/req-forget/references/locations.md +2 -2
  78. package/templates/.claude/skills/req-forget/references/report-template.md +1 -1
  79. package/templates/.claude/skills/req-scan/SKILL.md +21 -22
  80. package/templates/.claude/skills/req-scan/references/fallbacks.md +9 -9
  81. package/templates/.claude/skills/req-scan/references/filters.md +13 -13
  82. package/templates/.claude/skills/req-scan/references/sources.md +7 -7
  83. package/templates/.claude/skills/req-scan/references/state.md +1 -1
  84. package/templates/.claude/skills/req-scan/scripts/state.mjs +3 -2
  85. package/templates/.claude/skills/req-screen/SKILL.md +31 -29
  86. package/templates/.claude/skills/req-screen/references/rubric.md +18 -18
  87. package/templates/.claude/skills/req-screen/references/template.md +4 -4
  88. package/templates/.claude/skills/req-track/SKILL.md +40 -40
  89. package/templates/.claude/skills/req-track/references/fields.md +19 -18
  90. package/templates/.claude/skills/req-track/references/signals.md +12 -12
  91. package/templates/.claude/skills/req-track/references/statuses.md +3 -2
  92. package/templates/.claude/skills/req-track/references/templates.md +4 -4
  93. package/templates/.claude/skills/req-workday/SKILL.md +24 -24
  94. package/templates/.claude/skills/req-workday/references/status-mapping.md +5 -5
  95. package/templates/.claude/skills/req-workday/references/templates.md +13 -13
  96. package/templates/.claude/skills/req-workday/references/xlsx-format.md +7 -7
  97. package/templates/.claude/skills/req-workday/scripts/parse-workday.mjs +19 -17
  98. package/templates/.claude/skills/send-chat/SKILL.md +47 -43
  99. package/templates/.claude/skills/sync-apple-calendar/SKILL.md +20 -19
  100. package/templates/.claude/skills/sync-apple-calendar/references/SCHEMA.md +7 -7
  101. package/templates/.claude/skills/sync-apple-calendar/scripts/query.mjs +6 -6
  102. package/templates/.claude/skills/sync-apple-calendar/scripts/sync.mjs +9 -8
  103. package/templates/.claude/skills/sync-apple-mail/SKILL.md +17 -14
  104. package/templates/.claude/skills/sync-apple-mail/references/SCHEMA.md +10 -10
  105. package/templates/.claude/skills/sync-apple-mail/scripts/parse-emlx.mjs +9 -9
  106. package/templates/.claude/skills/sync-apple-mail/scripts/sync-helpers.mjs +16 -13
  107. package/templates/.claude/skills/sync-apple-mail/scripts/sync.mjs +3 -3
  108. package/templates/.claude/skills/sync-teams/SKILL.md +43 -43
  109. package/templates/.claude/skills/sync-teams/scripts/idb-reader.mjs +22 -21
  110. package/templates/.claude/skills/sync-teams/scripts/leveldb-reader.mjs +4 -4
  111. package/templates/.claude/skills/sync-teams/scripts/sync.mjs +4 -4
  112. package/templates/.claude/skills/upstream-instructions/SKILL.md +39 -40
  113. package/templates/.claude/skills/upstream-instructions/references/examples.md +2 -2
  114. package/templates/CLAUDE.md +40 -37
@@ -3,17 +3,19 @@
3
3
  # input (an email address, or a first / last / full name) and print their
4
4
  # directory record(s).
5
5
  #
6
- # Sibling to `person-identify`, but for *other* people, not the current user:
6
+ # Sibling to `person-identify`. Use it for *other* people. Do not use it for
7
+ # the current user:
7
8
  # - Searches the Global Catalog (port 3268, base "") so it reaches EVERY
8
- # domain in the forest from a single ticket colleagues in other regions
9
- # are found, not just your own domain.
9
+ # domain in the forest from a single ticket. It finds colleagues in other
10
+ # regions. It does not stop at your own domain.
10
11
  # - Uses Active Directory ANR (Ambiguous Name Resolution), so one filter
11
12
  # matches an email, a login, or any part of a name.
12
- # - Handles 0, 1, or many matches, and flags external Contacts / vendor
13
- # accounts so an internal employee is never confused with an outside one.
14
- # - NEVER writes the identity cache this is a throwaway lookup.
13
+ # - Handles 0, 1, or many matches. Flags external Contacts / vendor
14
+ # accounts so you never confuse an internal employee with an outside one.
15
+ # - NEVER writes the identity cache. This is a throwaway lookup.
15
16
  #
16
- # Auth uses SASL/GSSAPI against the existing Kerberos ticket no password.
17
+ # Auth uses SASL/GSSAPI against the existing Kerberos ticket. It needs no
18
+ # password.
17
19
  #
18
20
  # Robustness note: under load the directory intermittently returns an entry's
19
21
  # DN with NO attributes (exit 0, no error). Every attribute fetch below retries
@@ -22,9 +24,10 @@
22
24
  set -u
23
25
 
24
26
  # Org-specific: substring of the DN's OU that marks external/vendor *user*
25
- # accounts (external Contact objects are detected generically via objectClass).
26
- # Empty by default set it to your directory's convention, e.g. "OU=Contractors"
27
- # or "OU=External", to label those accounts as "User (external / vendor)".
27
+ # accounts. The script detects external Contact objects generically through
28
+ # objectClass. Empty by default. Set it to your directory's convention, e.g.
29
+ # "OU=Contractors" or "OU=External", to label those accounts as
30
+ # "User (external / vendor)".
28
31
  VENDOR_OU_PATTERN=""
29
32
 
30
33
  QUERY="$*"
@@ -44,7 +47,7 @@ dom=$(printf '%s' "$realm" | tr '[:upper:]' '[:lower:]')
44
47
  dc=$(dig +short SRV "_ldap._tcp.dc._msdcs.$dom" | awk 'NR==1{print $4}' | sed 's/\.$//')
45
48
  [ -z "$dc" ] && dc=$(dig +short SRV "_ldap._tcp.$dom" | awk 'NR==1{print $4}' | sed 's/\.$//')
46
49
  if [ -z "$dc" ]; then
47
- echo "Could not find a domain controller for $dom via DNS SRV." >&2
50
+ echo "Could not find a domain controller for $dom with DNS SRV." >&2
48
51
  exit 1
49
52
  fi
50
53
 
@@ -53,7 +56,7 @@ GC="ldap://$dc:3268"
53
56
  ATTRS="displayName givenName sn company title department employeeID mail telephoneNumber physicalDeliveryOfficeName objectClass manager"
54
57
  MAX_SHOW=12 # cap detailed output for very broad name matches
55
58
 
56
- # Pull one attribute out of an LDIF record (passed as $2), decoding base64 (::).
59
+ # Pull one attribute out of an LDIF record (passed as $2). Decode base64 (::).
57
60
  field() { # $1=attr $2=record
58
61
  local attr="$1" line
59
62
  line=$(printf '%s\n' "$2" | grep -m1 -E "^$attr:: ?|^$attr: ") || return 0
@@ -63,13 +66,13 @@ field() { # $1=attr $2=record
63
66
  esac
64
67
  }
65
68
 
66
- # List matching DNs for a filter (no attributes requested → reliable under load).
69
+ # List the DNs that match a filter. Request no attributes → reliable under load.
67
70
  dns_for() { # $1=filter
68
71
  ldapsearch -Y GSSAPI -LLL -o ldif-wrap=no -H "$GC" -b "" "$1" 1.1 2>/dev/null \
69
72
  | sed -n 's/^dn: //p'
70
73
  }
71
74
 
72
- # Fetch one entry's attributes by DN, retrying past the silent DN-only response.
75
+ # Fetch one entry's attributes by DN. Retry past the silent DN-only response.
73
76
  fetch() { # $1=dn
74
77
  local dn="$1" out tries=0
75
78
  while [ "$tries" -lt 4 ]; do
@@ -100,7 +103,7 @@ kind_of() { # $1=record $2=dn
100
103
  }
101
104
 
102
105
  # 2. Primary search (ANR), then a substring fallback if it finds nothing.
103
- # (Portable array fill macOS ships bash 3.2, which has no `mapfile`.)
106
+ # (Portable array fill. macOS ships bash 3.2, which has no `mapfile`.)
104
107
  read_dns() { # $1=filter -> populates global DNS array
105
108
  DNS=()
106
109
  local line
@@ -138,7 +141,7 @@ if [ "${#DNS[@]}" -eq 1 ]; then
138
141
  fi
139
142
 
140
143
  # 3b. Several matches → a compact disambiguation list (no per-row manager call).
141
- echo "${#DNS[@]} matches for \"$QUERY\" narrow with an email for an exact hit:"
144
+ echo "${#DNS[@]} matches for \"$QUERY\". Narrow with an email for an exact hit:"
142
145
  echo
143
146
  shown=0
144
147
  for dn in "${DNS[@]}"; do
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  name: req-assess
3
3
  description: >
4
- Analyze interview transcripts against the agent-aligned engineering standard,
5
- updating skill and behaviour ratings with observed evidence. Produces
6
- per-interview assessments and panel briefs for subsequent interview stages.
4
+ Analyze interview transcripts against the agent-aligned engineering standard.
5
+ Update skill and behaviour ratings with observed evidence. Produces
6
+ per-interview assessments and panel briefs for later interview stages.
7
7
  Use when transcript files appear in a candidate's folder.
8
8
  ---
9
9
 
@@ -11,7 +11,7 @@ description: >
11
11
 
12
12
  Analyze a candidate's interview transcripts. Update their skill and behaviour
13
13
  profile with **observed** (not claimed) evidence. Interview evidence is
14
- higher-fidelity than CV evidence it confirms or contradicts the screening
14
+ higher-fidelity than CV evidence. It confirms or contradicts the screening
15
15
  assessment.
16
16
 
17
17
  This is **Stage 2** of the three-stage hiring pipeline:
@@ -25,14 +25,14 @@ This is **Stage 2** of the three-stage hiring pipeline:
25
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
- - The concierge agent processes a Anarlog interview recording.
28
+ - The concierge agent processes an Anarlog interview recording.
29
29
 
30
30
  ## Prerequisites
31
31
 
32
32
  - `fit-pathway` CLI installed.
33
33
  - At least one transcript in `Knowledge/Candidates/{Name}/`.
34
- - `screening.md` should exist; if missing, run `req-screen` first (proceed
35
- regardless).
34
+ - `screening.md` should exist. If it is missing, run `req-screen` first.
35
+ Proceed regardless.
36
36
 
37
37
  ## Inputs
38
38
 
@@ -50,15 +50,15 @@ This is **Stage 2** of the three-stage hiring pipeline:
50
50
  <do_confirm_checklist goal="Verify the assessment is grounded in transcript
51
51
  evidence">
52
52
 
53
- - [ ] Every skill re-rating cites a specific moment from the transcript.
54
- - [ ] Behaviour assessments reference observed actions, not claimed traits.
55
- - [ ] Level assessment uses standard progression criteria, not gut feel.
56
- - [ ] Interviewer observations are attributed by name.
57
- - [ ] Confirmed strengths and new concerns are distinguished.
58
- - [ ] Panel brief (if created) is written for non-technical readers and ties
59
- suggested questions to remaining gaps.
60
- - [ ] Brief's Pipeline section, links, and Status are updated.
61
- - [ ] Gender field is **not** updated from interview observations.
53
+ - [ ] Cite a specific moment from the transcript for every skill re-rating.
54
+ - [ ] Base behaviour assessments on observed actions. Ignore claimed traits.
55
+ - [ ] Assess the level with standard progression criteria. Ignore gut feel.
56
+ - [ ] Attribute interviewer observations by name.
57
+ - [ ] Distinguish confirmed strengths from new concerns.
58
+ - [ ] Write the panel brief (if created) for non-technical readers. Tie the
59
+ suggested questions to the remaining gaps.
60
+ - [ ] Update the brief's Pipeline section, links, and Status.
61
+ - [ ] **Never** update the Gender field from interview observations.
62
62
 
63
63
  </do_confirm_checklist>
64
64
 
@@ -79,8 +79,8 @@ bunx fit-pathway skill {skill_id}
79
79
  bunx fit-pathway behaviour --list
80
80
  ```
81
81
 
82
- If screening recommended a different level than originally targeted (e.g. J100
83
- J090), load **both** for comparison.
82
+ If screening recommended a level different from the original target (e.g. J100
83
+ J090), load **both** for comparison.
84
84
 
85
85
  ### 3. Re-rate skills
86
86
 
@@ -90,8 +90,8 @@ moment, quote, or observation per change.
90
90
 
91
91
  ### 4. Re-rate behaviours
92
92
 
93
- Behaviours are better assessed in interviews than CVs they describe how
94
- someone acts, not what they've done. Use the
93
+ Interviews assess behaviours better than CVs. Behaviours describe how someone
94
+ acts. They do not describe what someone did. Use the
95
95
  [behaviour signals](references/rubric.md#behaviour-signals) and the
96
96
  [behaviour maturity scale](references/rubric.md#behaviour-maturity-scale).
97
97
 
@@ -105,23 +105,23 @@ Apply the [level signals](references/rubric.md#level-signals).
105
105
 
106
106
  ### 6. Write the interview assessment
107
107
 
108
- Save to `Knowledge/Candidates/{Name}/interview-{date}.md` using
108
+ Save to `Knowledge/Candidates/{Name}/interview-{date}.md` with
109
109
  [references/interview-template.md](references/interview-template.md). Include
110
- only skills with new evidence don't repeat the full matrix.
110
+ only skills with new evidence. Do not repeat the full matrix.
111
111
 
112
112
  ### 7. Generate the panel brief (if applicable)
113
113
 
114
- When more interview stages are planned (panel, technical, etc.), pull question
114
+ When you plan more interview stages (panel, technical, etc.), pull question
115
115
  candidates:
116
116
 
117
117
  ```bash
118
118
  bunx fit-pathway interview {discipline} {level} --track={track}
119
119
  ```
120
120
 
121
- Save `Knowledge/Candidates/{Name}/panel.md` using
122
- [references/panel-template.md](references/panel-template.md). Audience:
123
- next-stage interviewers, often non-engineers explain without jargon and tie
124
- suggested questions to remaining gaps.
121
+ Save `Knowledge/Candidates/{Name}/panel.md` with
122
+ [references/panel-template.md](references/panel-template.md). The audience is
123
+ next-stage interviewers, often non-engineers. Explain without jargon. Tie the
124
+ suggested questions to the remaining gaps.
125
125
 
126
126
  ### 8. Update the candidate brief
127
127
 
@@ -2,7 +2,7 @@
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
- interview produced new evidence for don't repeat the full matrix.
5
+ interview produced new evidence for. Do not repeat the full matrix.
6
6
 
7
7
  ```markdown
8
8
  # Interview Assessment — {Full Name}
@@ -1,8 +1,9 @@
1
1
  # Panel Brief Template
2
2
 
3
3
  Reference template for `req-assess` Step 7. Save to
4
- `Knowledge/Candidates/{Name}/panel.md`. Audience: **next-stage interviewers,
5
- often non-engineers** explain without jargon, focus on behaviours and scope.
4
+ `Knowledge/Candidates/{Name}/panel.md`. The audience is **next-stage
5
+ interviewers, often non-engineers**. Explain without jargon. Focus on
6
+ behaviours and scope.
6
7
 
7
8
  ```markdown
8
9
  # Panel Brief — {Full Name}
@@ -13,17 +13,17 @@ Reference data for `req-assess` Steps 1, 3, 4, and 5.
13
13
  | **Behaviour observations** | How the candidate acted under pressure, with others |
14
14
  | **Self-identified strengths** | What the candidate claims they're good at |
15
15
  | **Self-identified gaps** | What the candidate acknowledges as growth areas |
16
- | **Red flags** | Contradictions with CV, concerning patterns |
16
+ | **Red flags** | Contradictions with CV, patterns of concern |
17
17
  | **Interviewer feedback** | Direct quotes or observations from interviewers |
18
18
  | **Level signals** | Autonomy, scope, complexity demonstrated in responses |
19
19
  | **Track signals** | Business immersion vs. platform thinking in their answers |
20
20
 
21
21
  ## Skill re-rating
22
22
 
23
- **Interview evidence outranks CV evidence.** A candidate who claimed
24
- `practitioner` but demonstrated `foundational` should be re-rated. The reverse
25
- also applies. Every re-rating cites a specific moment, quote, or observation
26
- from the transcript — "seemed strong" is not evidence.
23
+ **Interview evidence outranks CV evidence.** Re-rate a candidate who claimed
24
+ `practitioner` but demonstrated `foundational`. The reverse also applies. Every
25
+ re-rating cites a specific moment, quote, or observation from the transcript.
26
+ The phrase "seemed strong" is not evidence.
27
27
 
28
28
  | Interview evidence | Rating adjustment |
29
29
  | ------------------------------------------- | ------------------------------------- |
@@ -36,13 +36,13 @@ from the transcript — "seemed strong" is not evidence.
36
36
 
37
37
  ## Behaviour signals
38
38
 
39
- | Behaviour | Interview evidence |
40
- | -------------------------- | -------------------------------------------------------------- |
41
- | Own the Outcome | Takes responsibility, doesn't deflect, drives to resolution |
42
- | Think in Systems | Considers second-order effects, trade-offs, system boundaries |
43
- | Communicate with Precision | Clear explanations, appropriate detail, listens actively |
44
- | Be Polymath Oriented | Draws on diverse knowledge, makes unexpected connections |
45
- | Don't Lose Your Curiosity | Asks good questions, explores alternatives, admits not knowing |
39
+ | Behaviour | Interview evidence |
40
+ | -------------------------- | ------------------------------------------------------------------------ |
41
+ | Own the Outcome | Takes responsibility, doesn't deflect, drives to resolution |
42
+ | Think in Systems | Considers second-order effects, trade-offs, system boundaries |
43
+ | Communicate with Precision | Clear explanations, appropriate detail, listens actively |
44
+ | Be Polymath Oriented | Draws on diverse knowledge, makes unexpected connections |
45
+ | Don't Lose Your Curiosity | Asks good questions, explores alternatives, admits what they do not know |
46
46
 
47
47
  ## Behaviour maturity scale
48
48
 
@@ -59,7 +59,7 @@ from the transcript — "seemed strong" is not evidence.
59
59
  | Interview signal | Implication |
60
60
  | --------------------------------------------------------- | ------------------------------ |
61
61
  | Needed guidance to structure their approach | Level may be lower than est. |
62
- | Self-directed; sound trade-offs independently | Level estimate confirmed |
62
+ | Self-directed, made sound trade-offs independently | Level estimate confirmed |
63
63
  | Mentored or coached others during the exercise | Level may be higher than est. |
64
64
  | Struggled with complexity appropriate to the target level | Downgrade |
65
65
  | Interviewer explicitly suggested a different level | Strong signal — weight heavily |
@@ -10,7 +10,7 @@ description: >
10
10
  # Hiring Decision
11
11
 
12
12
  Synthesize all available evidence for a candidate into a final hiring
13
- recommendation. This is the culmination of the hiring pipeline every prior
13
+ recommendation. This is the culmination of the hiring pipeline. Every prior
14
14
  assessment feeds in.
15
15
 
16
16
  This is **Stage 3** of the three-stage pipeline:
@@ -42,7 +42,7 @@ This is **Stage 3** of the three-stage pipeline:
42
42
  manager, domain lead). Check the `**Status:**` field to distinguish active
43
43
  from historical reqs.
44
44
  - `Knowledge/Priorities/*.md` — strategic context.
45
- - Other active candidates at the same level — relative positioning.
45
+ - Other active candidates at the same level — relative position.
46
46
 
47
47
  ## Outputs
48
48
 
@@ -53,17 +53,20 @@ This is **Stage 3** of the three-stage pipeline:
53
53
  <do_confirm_checklist goal="Verify the recommendation is grounded and
54
54
  audit-ready">
55
55
 
56
- - [ ] Every skill rating traces to a specific evidence source (stage + detail).
57
- - [ ] Evidence hierarchy respected interview evidence outranks CV.
58
- - [ ] Level recommendation grounded in standard progression criteria.
59
- - [ ] Track recommendation cites interview evidence, not just CV.
60
- - [ ] Decision rules applied strictly; match % and gap counts verified.
61
- - [ ] Risk assessment is honest concerns not minimised to justify a hire.
62
- - [ ] "Do not hire" written with the same rigour as "Hire" (GDPR Article 15:
63
- candidate may request access).
64
- - [ ] Brief updated with `[Hiring Recommendation](./recommendation.md)` and a
65
- final pipeline entry.
66
- - [ ] Recommendation could be shown to the candidate without embarrassment.
56
+ - [ ] Trace every skill rating to a specific evidence source (stage + detail).
57
+ - [ ] Respect the evidence hierarchy. Interview evidence outranks CV.
58
+ - [ ] Ground the level recommendation in standard progression criteria.
59
+ - [ ] Cite interview evidence for the track recommendation. A CV alone is not
60
+ enough.
61
+ - [ ] Apply the decision rules strictly. Verify the match % and the gap counts.
62
+ - [ ] Keep the risk assessment honest. Do not minimise a concern to justify a
63
+ hire.
64
+ - [ ] Write "Do not hire" with the same rigour as "Hire" (GDPR Article 15 lets
65
+ the candidate request access).
66
+ - [ ] Update the brief with `[Hiring Recommendation](./recommendation.md)` and
67
+ a final pipeline entry.
68
+ - [ ] Write a recommendation you could show to the candidate without
69
+ embarrassment.
67
70
 
68
71
  </do_confirm_checklist>
69
72
 
@@ -86,9 +89,10 @@ bunx fit-pathway job {discipline} {level} --track={track} --skills
86
89
  bunx fit-pathway progress {discipline} {level} --track={track}
87
90
  ```
88
91
 
89
- For each skill in the target job, pick the highest-fidelity evidence using the
90
- [evidence hierarchy](references/rubric.md#evidence-hierarchy). Record final
91
- rating, best evidence source, trajectory, confidence.
92
+ For each skill in the target job, use the
93
+ [evidence hierarchy](references/rubric.md#evidence-hierarchy) to pick the
94
+ highest-fidelity evidence. Record final rating, best evidence source,
95
+ trajectory, confidence.
92
96
 
93
97
  ### 3. Build the final behaviour profile
94
98
 
@@ -120,9 +124,8 @@ cat "Knowledge/Roles/{matching file}"
120
124
  ```
121
125
 
122
126
  Check the `**Status:**` field. Capture remaining positions, hiring manager,
123
- domain lead, goal alignment, other
124
- candidates on the same req, and channel (hr / vendor). Frame the recommendation
125
- in terms of strategic impact.
127
+ domain lead, goal alignment, other candidates on the same req, and channel
128
+ (hr / vendor). Frame the recommendation in terms of strategic impact.
126
129
 
127
130
  ### 6. Assess against the active pipeline
128
131
 
@@ -146,8 +149,8 @@ Apply the [decision rules](references/rubric.md#decision-rules) and run the
146
149
 
147
150
  ### 8. Write the recommendation
148
151
 
149
- Save to `Knowledge/Candidates/{Name}/recommendation.md` using the template in
150
- [references/template.md](references/template.md). Carry the **advisory-only**
152
+ Use the template in [references/template.md](references/template.md). Save to
153
+ `Knowledge/Candidates/{Name}/recommendation.md`. Carry the **advisory-only**
151
154
  banner. Cite specific evidence in skill, behaviour, level, and track sections.
152
155
 
153
156
  ### 9. Update brief and insights
@@ -158,8 +161,8 @@ Update `brief.md`:
158
161
  - Append `- [Hiring Recommendation](./recommendation.md)`.
159
162
  - Add the final pipeline entry with date and outcome.
160
163
 
161
- Update `Knowledge/Candidates/Insights.md` only when there's a cross-candidate
162
- observation worth keeping (strongest at level, sourcing channel pattern,
163
- level-adjustment implications).
164
+ Update `Knowledge/Candidates/Insights.md` only when a cross-candidate
165
+ observation deserves a record (strongest at level, a pattern in the sourcing
166
+ channel, level-adjustment implications).
164
167
 
165
- Use targeted Edit operations never rewrite entire files.
168
+ Use targeted Edit operations. Never rewrite entire files.
@@ -13,8 +13,9 @@ applies and use it as the source of the final rating.
13
13
  answers.
14
14
  3. **Interviewer observation** — an interviewer noted strength or concern.
15
15
  4. **CV evidence with quantification** — concrete metrics, named projects.
16
- 5. **CV evidence without quantification** — described but vague.
17
- 6. **Not evidenced** — never surfaced across any stage.
16
+ 5. **CV evidence without quantification** — the CV describes it but stays
17
+ vague.
18
+ 6. **Not evidenced** — no stage surfaced it.
18
19
 
19
20
  For each skill record: **final rating**, **best evidence source**,
20
21
  **trajectory** (↑ / ↓ / —), **confidence** (High = demonstrated live; Medium =
@@ -22,9 +23,9 @@ discussed well; Low = CV only or thin).
22
23
 
23
24
  ## Behaviour evidence
24
25
 
25
- Same hierarchy. Behaviours assessed in interviews carry far more weight than CV
26
- signals. For each: **final maturity**, **best evidence** (specific moment or
27
- pattern), **consistency** (once vs. throughout).
26
+ Same hierarchy. A behaviour that an interview assessed carries far more weight
27
+ than a CV signal. For each: **final maturity**, **best evidence** (specific
28
+ moment or pattern), **consistency** (once vs. throughout).
28
29
 
29
30
  ## Level confirmation criteria
30
31
 
@@ -41,7 +42,7 @@ pattern), **consistency** (once vs. throughout).
41
42
  | Recommendation | Criteria |
42
43
  | -------------------------- | ----------------------------------------------------------------------------------------- |
43
44
  | **Hire** | ≥ 70 % Strong match at the final level, no unresolved core-skill gaps, strong behaviours |
44
- | **Hire at adjusted level** | Strong candidate; evidence supports a different level than originally targeted |
45
+ | **Hire at adjusted level** | Strong candidate. The evidence supports a level other than the original target |
45
46
  | **Do not hire** | Unresolved core-skill gaps, behaviour concerns, or insufficient evidence after interviews |
46
47
 
47
48
  ### Hire criteria check
@@ -50,14 +51,14 @@ pattern), **consistency** (once vs. throughout).
50
51
  - No core skill gaps remain unresolved (core = top-tier skills for the
51
52
  discipline/track combo).
52
53
  - All agent-aligned standard behaviours at or above expected maturity.
53
- - Level confirmed by interview evidence (not just CV).
54
- - Track fit confirmed by interview evidence.
54
+ - Interview evidence confirms the level. The CV alone does not.
55
+ - Interview evidence confirms the track fit.
55
56
  - No red flags from any interview stage.
56
57
 
57
58
  ## Pipeline context (Step 5)
58
59
 
59
- This is **not** a ranking exercise it provides context. Note:
60
+ This is **not** a ranking exercise. It gives context. Note:
60
61
 
61
62
  - Whether this candidate fills a gap in the current pipeline.
62
63
  - Whether stronger candidates exist for the same role.
63
- - Whether this candidate is better suited to a different open position.
64
+ - Whether a different open position suits this candidate better.
@@ -4,17 +4,18 @@ description: >
4
4
  Process GDPR Article 17 data erasure requests. Finds and removes all personal
5
5
  data related to a named individual from the knowledge base, cached data, and
6
6
  agent state files. Use when the user receives a right-to-be-forgotten
7
- request, asks to delete all data about a person, or needs to comply with a
7
+ request, asks to delete all data about a person, or must comply with a
8
8
  data erasure obligation.
9
9
  compatibility: Requires macOS filesystem access
10
10
  ---
11
11
 
12
12
  # Right to Be Forgotten
13
13
 
14
- Process data erasure requests under GDPR Article 17. Given a person's name,
15
- systematically find and remove all personal data from the knowledge base, cached
16
- synced data, and agent state files. Produces an **erasure report** documenting
17
- what was found, deleted, and redacted the compliance audit trail.
14
+ Process data erasure requests under GDPR Article 17. Work from the person's
15
+ name. Systematically find and remove all personal data from the knowledge base,
16
+ the cached synced data, and the agent state files. Produces an **erasure
17
+ report** that records what you found, deleted, and redacted. The report is the
18
+ compliance audit trail.
18
19
 
19
20
  ## Trigger
20
21
 
@@ -43,16 +44,16 @@ what was found, deleted, and redacted — the compliance audit trail.
43
44
  <do_confirm_checklist goal="Verify erasure is complete and the audit trail is
44
45
  sound">
45
46
 
46
- - [ ] User confirmed intent before any deletion.
47
- - [ ] All discovery recipes ran; inventory covers knowledge, cache, state,
48
- drafts.
49
- - [ ] All dedicated files and directories deleted.
50
- - [ ] All mentions and backlinks redacted from other notes.
51
- - [ ] Cached email threads, attachments, and calendar entries handled.
52
- - [ ] Agent state and `graph_processed` cleaned.
53
- - [ ] Erasure report saved; contains **no** personal data beyond the name and
54
- actions taken.
55
- - [ ] Final `rg` search shows only the erasure report as a match.
47
+ - [ ] Get the user's confirmation before any deletion.
48
+ - [ ] Run every discovery recipe. Cover knowledge, cache, state, and drafts in
49
+ the inventory.
50
+ - [ ] Delete all dedicated files and directories.
51
+ - [ ] Redact all mentions and backlinks from other notes.
52
+ - [ ] Handle cached email threads, attachments, and calendar entries.
53
+ - [ ] Clean the agent state and `graph_processed`.
54
+ - [ ] Save the erasure report. Keep **no** personal data in it beyond the name
55
+ and the actions taken.
56
+ - [ ] Run a final `rg` search. Confirm the erasure report is the only match.
56
57
 
57
58
  </do_confirm_checklist>
58
59
 
@@ -70,9 +71,9 @@ State to the user:
70
71
  > - Cached email threads and attachments
71
72
  > - Agent state and triage files
72
73
  >
73
- > This action cannot be undone. Proceed?
74
+ > You cannot undo this action. Proceed?
74
75
 
75
- **Wait for explicit confirmation before continuing.**
76
+ **Wait for explicit confirmation before you continue.**
76
77
 
77
78
  ### 1. Discovery
78
79
 
@@ -97,12 +98,12 @@ rm -f "Knowledge/People/{Name}.md"
97
98
  find ~/.cache/fit/outpost/apple_mail/attachments/ -iname "*{Name}*" -delete
98
99
  ```
99
100
 
100
- **3b. Redact mentions in other notes:** read each file, remove the specific
101
+ **3b. Redact mentions in other notes:** Read each file. Remove the specific
101
102
  lines/bullets/sections per the rules in
102
- [references/classify.md](references/classify.md#redaction-rules), remove broken
103
- `[[backlinks]]` to deleted notes, write the file back.
103
+ [references/classify.md](references/classify.md#redaction-rules). Remove broken
104
+ `[[backlinks]]` to deleted notes. Write the file back.
104
105
 
105
- **3c. Email threads:** delete sole-subject threads; redact paragraphs only in
106
+ **3c. Email threads:** Delete sole-subject threads. Redact paragraphs only in
106
107
  multi-person threads.
107
108
 
108
109
  **3d. Agent state files:**
@@ -126,9 +127,10 @@ rg -v "{deleted_path}" ~/.cache/fit/outpost/state/graph_processed \
126
127
 
127
128
  ### 4. Write the erasure report
128
129
 
129
- Save to `Knowledge/Erasure/{Name}--{YYYY-MM-DD}.md` using the template in
130
- [references/report-template.md](references/report-template.md). Record **only**
131
- what was deleted never CV content, skills, or assessments.
130
+ Use the template in
131
+ [references/report-template.md](references/report-template.md). Save to
132
+ `Knowledge/Erasure/{Name}--{YYYY-MM-DD}.md`. Record **only** what you deleted.
133
+ Never record CV content, skills, or assessments.
132
134
 
133
135
  ### 5. Verify
134
136
 
@@ -148,7 +150,7 @@ them and update the report.
148
150
  - Recruitment threads (known agency domains)
149
151
  - `recruiter_triage.md`
150
152
 
151
- Leaves `Knowledge/People/{Name}.md` and the wider graph intact the person may
152
- be a colleague or non-recruitment contact.
153
+ It leaves `Knowledge/People/{Name}.md` and the wider graph intact. The person
154
+ may be a colleague or a non-recruitment contact.
153
155
 
154
156
  **`all`** (default): full erasure across knowledge base, cache, and state.
@@ -3,21 +3,21 @@
3
3
  Reference for `req-forget` Step 2. For every match in the inventory, pick the
4
4
  action below.
5
5
 
6
- | Reference Type | Action | Example |
7
- | ---------------------------------- | ------------------------------------------- | ----------------------------------------------- |
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
- | **Email thread** (sole subject) | Delete file | `~/.cache/fit/outpost/apple_mail/thread.md` |
12
- | **Email thread** (multiple people) | Redact: remove paragraphs about the person | Thread discussing multiple candidates |
13
- | **Attachment** (their CV, etc.) | Delete file | `attachments/{thread}/CV.pdf` |
14
- | **Triage/state file** | Redact: remove lines mentioning them | `recruiter_triage.md` |
15
- | **Insights file** | Redact: remove bullets mentioning them | `Knowledge/Candidates/Insights.md` |
6
+ | Reference Type | Action | Example |
7
+ | ---------------------------------- | ---------------------------------------------- | ----------------------------------------------- |
8
+ | **Dedicated note** (sole subject) | Delete the entire file | `Knowledge/People/{Name}.md` |
9
+ | **Dedicated directory** | Delete the entire directory | `Knowledge/Candidates/{Name}/` |
10
+ | **Mention in another note** | Redact: remove the lines that name the person | Backlink in `Knowledge/Organizations/Agency.md` |
11
+ | **Email thread** (sole subject) | Delete the file | `~/.cache/fit/outpost/apple_mail/thread.md` |
12
+ | **Email thread** (multiple people) | Redact: remove the paragraphs about the person | A thread about multiple candidates |
13
+ | **Attachment** (their CV, etc.) | Delete the file | `attachments/{thread}/CV.pdf` |
14
+ | **Triage/state file** | Redact: remove the lines that mention them | `recruiter_triage.md` |
15
+ | **Insights file** | Redact: remove the bullets that mention them | `Knowledge/Candidates/Insights.md` |
16
16
 
17
17
  ## Redaction rules
18
18
 
19
19
  - Remove entire bullet points that mention the person by name.
20
- - Remove table rows containing the person's name.
21
- - Remove `## Connected to` entries linking to deleted notes.
20
+ - Remove the table rows that contain the person's name.
21
+ - Remove the `## Connected to` entries that link to deleted notes.
22
22
  - If a section becomes empty after redaction, remove its header too.
23
- - Do **not** remove surrounding context that doesn't identify the person.
23
+ - Do **not** remove nearby context that does not identify the person.
@@ -1,7 +1,7 @@
1
1
  # Discovery Search Recipes
2
2
 
3
- Reference for `req-forget` Step 1. Run every recipe; record every match into the
4
- inventory.
3
+ Reference for `req-forget` Step 1. Run every recipe. Record every match into
4
+ the inventory.
5
5
 
6
6
  ## Knowledge base — direct notes
7
7
 
@@ -5,7 +5,7 @@ Audit trail for `req-forget` Step 4. Save to
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
8
- report record only what was deleted, not what it contained.
8
+ report. Record only what you deleted. Do not record what it contained.
9
9
 
10
10
  ````markdown
11
11
  # Data Erasure Report — {Full Name}