@forwardimpact/outpost 3.12.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
@@ -1,23 +1,23 @@
1
1
  ---
2
2
  name: anarlog-trim
3
- description: Trim a Anarlog transcript to its logical end. Recordings are often left running after a meeting finishes this skill finds the natural conclusion (goodbyes, sign-offs) and cuts the transcript there. Use when the user asks to trim, cut, or clean up a Anarlog transcript.
3
+ description: Trim an Anarlog transcript to its logical end. A recording often continues after a meeting finishes. This skill finds the natural conclusion (goodbyes, sign-offs) and cuts the transcript there. Use when the user asks to trim, cut, or clean up an Anarlog transcript.
4
4
  ---
5
5
 
6
6
  # Trim Transcript
7
7
 
8
- Find the logical end of a Anarlog meeting transcript and trim everything after
9
- it. Meetings recorded with Anarlog often have trailing noise the mic stays on
10
- after goodbyes, capturing ambient sound, unrelated chatter, or silence. This
11
- skill identifies the natural conclusion and edits the transcript in place.
8
+ Find the logical end of an Anarlog meeting transcript. Trim everything after it.
9
+ Meetings that Anarlog records often have noise at the end. The mic stays on
10
+ after the goodbyes and captures ambient sound, unrelated chatter, or silence.
11
+ This skill identifies the natural conclusion and edits the transcript in place.
12
12
 
13
13
  ## Trigger
14
14
 
15
15
  Run this skill:
16
16
 
17
- - When the user asks to trim, cut, or clean up a Anarlog transcript
17
+ - When the user asks to trim, cut, or clean up an Anarlog transcript
18
18
  - When given a specific session ID to trim
19
- - When another skill (e.g., anarlog-process) flags a transcript as having
20
- excessive trailing content
19
+ - When another skill (e.g., anarlog-process) flags a transcript that has too
20
+ much content at the end
21
21
 
22
22
  ## Prerequisites
23
23
 
@@ -26,18 +26,19 @@ Run this skill:
26
26
 
27
27
  ## Inputs
28
28
 
29
- - **Session ID** — a UUID identifying the Anarlog session to trim
29
+ - **Session ID** — the UUID of the Anarlog session to trim
30
30
  - `~/Library/Application Support/anarlog/sessions/{uuid}/transcript.json` — the
31
31
  word-level transcript
32
32
 
33
33
  ## Outputs
34
34
 
35
35
  - `~/Library/Application Support/anarlog/sessions/{uuid}/transcript.json` —
36
- edited in place with words after the logical end removed
37
- - `~/Library/Application Support/anarlog/sessions/{uuid}/audio.mp3` — deleted.
38
- Trimming indicates the recording captured audio beyond the consented meeting,
39
- so the full audio must be removed to respect participant privacy.
40
- - Printed summary: original duration, trim point, new duration, words removed
36
+ this skill edits it in place and removes the words after the logical end
37
+ - `~/Library/Application Support/anarlog/sessions/{uuid}/audio.mp3` — this skill
38
+ deletes it. A trim indicates the recording captured audio beyond the consented
39
+ meeting. Delete the full audio to respect participant privacy.
40
+ - A printed summary of the original duration, the trim point, the new duration,
41
+ and the words removed
41
42
 
42
43
  ---
43
44
 
@@ -82,10 +83,10 @@ for i, w in enumerate(words):
82
83
 
83
84
  ### Step 2 — Identify the logical end
84
85
 
85
- Read through the reconstructed text and find the **first point where the meeting
86
- has clearly concluded**. Look for these signals, roughly in order of strength:
86
+ Read through the reconstructed text. Find the **first point where the meeting
87
+ clearly ended**. Look for these signals, roughly in order of strength:
87
88
 
88
- **Strong ending signals (any one is sufficient):**
89
+ **Strong end signals (any one is sufficient):**
89
90
 
90
91
  - Explicit farewells: "bye", "bye bye", "goodbye", "take care", "have a good
91
92
  day/evening/weekend", "cheers"
@@ -94,7 +95,7 @@ has clearly concluded**. Look for these signals, roughly in order of strength:
94
95
  - Meeting close phrases: "that's all", "we're done", "let's wrap up", "I'll let
95
96
  you go"
96
97
 
97
- **Supporting signals (strengthen the case but not sufficient alone):**
98
+ **Support signals (they strengthen the case but are not sufficient alone):**
98
99
 
99
100
  - Long silence gaps (>30 seconds) after a farewell exchange
100
101
  - Channel drops — only one speaker remains after goodbyes
@@ -102,23 +103,23 @@ has clearly concluded**. Look for these signals, roughly in order of strength:
102
103
  - Filler-only content: repeated "um", "uh", fragments with no meaning
103
104
 
104
105
  **The trim point** is the end of the last meaningful farewell exchange. Include
105
- the final "bye" / "thank you" / "take care" from both parties if present, then
106
+ the final "bye" / "thank you" / "take care" from both parties if present. Then
106
107
  cut everything after.
107
108
 
108
109
  ### Step 3 — Confirm with the user
109
110
 
110
- Before modifying the file, show the user:
111
+ Before you modify the file, show the user:
111
112
 
112
113
  1. The **session title** and **original duration**
113
114
  2. The **last ~20 words before the proposed trim point** (as readable text)
114
115
  3. The **first ~20 words after the proposed trim point** (what will be removed)
115
- 4. The **new duration** and **number of words being removed**
116
+ 4. The **new duration** and the **number of words to remove**
116
117
 
117
- Wait for the user to approve before proceeding.
118
+ Wait for the user to approve before you continue.
118
119
 
119
120
  ### Step 4 — Trim the transcript
120
121
 
121
- Once approved:
122
+ After the user approves:
122
123
 
123
124
  1. Read the current `transcript.json` (fresh read, not cached).
124
125
  2. Slice the words array at the identified index.
@@ -144,10 +145,10 @@ json.dump(data, open(path, 'w'), indent=2)
144
145
 
145
146
  ### Step 5 — Delete the audio recording
146
147
 
147
- The fact that a transcript needs trimming means the recording captured audio
148
- beyond the consented meeting ambient conversation, unrelated chatter, or other
149
- people who did not consent to being recorded. The full audio file must be
150
- deleted to respect participant privacy.
148
+ A transcript that needs a trim means that the recording captured audio beyond
149
+ the consented meeting. That audio holds ambient conversation, unrelated
150
+ chatter, or other people who did not consent to the recording. Delete the full
151
+ audio file to respect participant privacy.
151
152
 
152
153
  1. Delete the audio file:
153
154
 
@@ -155,29 +156,31 @@ deleted to respect participant privacy.
155
156
  rm "~/Library/Application Support/anarlog/sessions/{uuid}/audio.mp3"
156
157
  ```
157
158
 
158
- 2. Confirm deletion and inform the user:
159
+ 2. Confirm that the file is gone and tell the user:
159
160
 
160
161
  ```text
161
162
  Audio deleted: audio.mp3 removed (recording contained unconsented content beyond the meeting)
162
163
  ```
163
164
 
164
- This step is **not optional** and does **not require separate user
165
- confirmation** the user already approved the trim, which implicitly
166
- acknowledges the recording went beyond the meeting boundary.
165
+ This step is **not optional**. It does **not require separate user
166
+ confirmation**. The user already approved the trim. That approval implicitly
167
+ acknowledges that the recording went beyond the meeting boundary.
167
168
 
168
169
  ### Step 6 — Verify
169
170
 
170
- Read back the last 10 words of the trimmed transcript to confirm the file was
171
- written correctly and ends at the expected point. Confirm `audio.mp3` no longer
172
- exists in the session directory.
171
+ Read back the last 10 words of the trimmed transcript. Confirm that the write
172
+ succeeded and that the transcript ends at the expected point. Confirm that
173
+ `audio.mp3` no longer exists in the session directory.
173
174
 
174
175
  ---
175
176
 
176
177
  ## Quality checklist
177
178
 
178
- - [ ] Session ID validated and transcript exists
179
- - [ ] Logical end identified based on farewell/closing signals
180
- - [ ] Trim point shown to user and approved before modification
181
- - [ ] Transcript file written correctly with valid JSON
182
- - [ ] Audio recording deleted (contains unconsented content beyond meeting)
183
- - [ ] Post-trim verification confirms expected ending and audio removed
179
+ - [ ] Validate the session ID and confirm the transcript exists
180
+ - [ ] Identify the logical end from the farewell and close signals
181
+ - [ ] Show the trim point to the user and get approval before you edit
182
+ - [ ] Write the transcript file with valid JSON
183
+ - [ ] Delete the audio recording (it holds unconsented content from beyond the
184
+ meeting)
185
+ - [ ] Verify after the trim that the transcript ends as expected and that the
186
+ audio is gone
@@ -1,18 +1,17 @@
1
1
  ---
2
2
  name: candidate-report
3
3
  description: >
4
- Generate an A4 single-page HTML candidate assessment report benchmarked
5
- against the agent-aligned engineering standard. Use when the user asks you
6
- to create a candidate report, one-pager, or visual assessment for a hiring
7
- manager.
4
+ Generate a single-page A4 HTML report that assesses a candidate against the
5
+ agent-aligned engineering standard. Use when the user asks you to create a
6
+ candidate report, one-pager, or visual assessment for a hiring manager.
8
7
  ---
9
8
 
10
9
  # Candidate Report
11
10
 
12
11
  Generate a polished, single-page A4 HTML report that benchmarks a candidate
13
- against a specific role in the agent-aligned engineering standard. The report is
14
- designed for hiring managers and pod leads who need a quick visual summary
15
- before deciding whether to invest interview time.
12
+ against a specific role in the agent-aligned engineering standard. The report
13
+ serves hiring managers and pod leads. They need a quick visual summary before
14
+ they decide whether to invest interview time.
16
15
 
17
16
  ## Trigger
18
17
 
@@ -25,34 +24,36 @@ before deciding whether to invest interview time.
25
24
  - `@forwardimpact/pathway` CLI installed (`bunx fit-pathway --help`).
26
25
  - Playwright for PDF output
27
26
  (`bun install playwright && bunx playwright install chromium`).
28
- - Candidate has a `brief.md` in `Knowledge/Candidates/{Name}/`.
27
+ - The candidate has a `brief.md` in `Knowledge/Candidates/{Name}/`.
29
28
 
30
29
  ## Inputs
31
30
 
32
31
  - **Candidate name** — locates `Knowledge/Candidates/{Name}/brief.md`.
33
32
  - **Target role** — discipline, level, track (e.g.
34
- `software-engineering J070 forward-deployed`). If not given, infer from the
35
- candidate's `Req` field → Role file. Ask the user if it can't be inferred.
33
+ `software-engineering J070 forward-deployed`). If the user does not give it,
34
+ infer it from the candidate's `Req` field → Role file. Ask the user when you
35
+ cannot infer it.
36
36
  - **Recipient** — pod lead or hiring manager the report is for.
37
37
  - **CV file** (optional) — read directly when no `screening.md` exists.
38
38
 
39
39
  ## Outputs
40
40
 
41
41
  - `Drafts/{Recipient}-{CandidateSurname}-Report.html` — the A4 one-pager.
42
- - Optional PDF via `scripts/render-pdf.mjs`.
42
+ - Optional PDF with `scripts/render-pdf.mjs`.
43
43
 
44
44
  <do_confirm_checklist goal="Verify the report before delivering it">
45
45
 
46
- - [ ] Standard data was loaded via `bunx fit-pathway job` (not guessed).
47
- - [ ] Every skill rating is evidence-based; two-level scepticism applied to CV
46
+ - [ ] Load the standard data with `bunx fit-pathway job`. Do not guess it.
47
+ - [ ] Base every skill rating on evidence. Apply two-level scepticism to the CV
48
48
  claims.
49
49
  - [ ] Coverage counters add up to the total skill count.
50
- - [ ] Verdict class matches the overall assessment.
51
- - [ ] Report fits on a single A4 page (browser print preview).
52
- - [ ] CSS is inlined in the `<style>` block.
53
- - [ ] Footer shows the author name and role from
54
- `~/.cache/fit/outpost/state/identity.md`.
55
- - [ ] Written as if the candidate will read it; no special-category data.
50
+ - [ ] Match the verdict class to the overall assessment.
51
+ - [ ] Fit the report on a single A4 page (browser print preview).
52
+ - [ ] Inline the CSS in the `<style>` block.
53
+ - [ ] Show the author name and role from
54
+ `~/.cache/fit/outpost/state/identity.md` in the footer.
55
+ - [ ] Write as if the candidate will read the report. Include no
56
+ special-category data.
56
57
 
57
58
  </do_confirm_checklist>
58
59
 
@@ -70,7 +71,8 @@ Knowledge/Candidates/{Name}/CV.pdf|CV.md # raw CV if needed
70
71
  ```
71
72
 
72
73
  If `screening.md` exists, treat its skill and behaviour ratings as the primary
73
- source they're already standard-calibrated. Otherwise map manually in Step 3.
74
+ source. They are already standard-calibrated. Otherwise map them manually in
75
+ Step 3.
74
76
 
75
77
  Search the graph for surrounding context: `rg "{Candidate Name}" Knowledge/`.
76
78
 
@@ -91,14 +93,14 @@ Group skills by capability area (Delivery, AI, Business, Docs, ML).
91
93
 
92
94
  ### 3. Benchmark the candidate
93
95
 
94
- Map evidence against each skill and behaviour using the rubric in
95
- [references/rubric.md](references/rubric.md): rating pills, behaviour bar widths
96
- and colours, level-gauge window. Count totals into Gap / Partial / Unknown / Met
97
- for the coverage counters.
96
+ Map the evidence against each skill and behaviour with the rubric in
97
+ [references/rubric.md](references/rubric.md). The rubric covers the rating
98
+ pills, the behaviour bar widths and colours, and the level-gauge window. Count
99
+ the totals into Gap / Partial / Unknown / Met for the coverage counters.
98
100
 
99
101
  ### 4. Determine verdict
100
102
 
101
- Pick one of `verdict-proceed`, `verdict-caution`, or `verdict-pass` using the
103
+ Pick one of `verdict-proceed`, `verdict-caution`, or `verdict-pass` with the
102
104
  verdict table in [references/rubric.md](references/rubric.md). Write a one-line
103
105
  headline and a short detail sentence.
104
106
 
@@ -106,10 +108,10 @@ headline and a short detail sentence.
106
108
 
107
109
  1. Read `references/report.css`.
108
110
  2. Read `references/report-template.html`.
109
- 3. Replace every `{{PLACEHOLDER}}` with candidate-specific data, populating the
111
+ 3. Replace every `{{PLACEHOLDER}}` with candidate-specific data. Populate the
110
112
  sections listed in
111
113
  [references/rubric.md](references/rubric.md#template-sections-to-populate).
112
- 4. Inline the CSS into the `<style>` block required for PDF rendering.
114
+ 4. Inline the CSS into the `<style>` block. The PDF output needs this.
113
115
 
114
116
  Respect the **A4 single-page budget** in
115
117
  [references/rubric.md](references/rubric.md#a4-single-page-budget). If the print
@@ -136,5 +138,5 @@ node .claude/skills/candidate-report/scripts/render-pdf.mjs \
136
138
  ~/Desktop/{CandidateSurname}-Report.pdf
137
139
  ```
138
140
 
139
- Requires Playwright. If missing, ask the user to run
141
+ This step needs Playwright. If Playwright is missing, ask the user to run
140
142
  `bun install playwright && bunx playwright install chromium`.
@@ -9,8 +9,8 @@
9
9
  This is the structural skeleton for the A4 one-page candidate assessment.
10
10
  Replace all {{PLACEHOLDER}} tokens with candidate-specific data.
11
11
 
12
- The stylesheet is in references/report.css inline it here with a <style>
13
- tag (required for PDF rendering).
12
+ The stylesheet is in references/report.css. Inline it here with a <style>
13
+ tag. The PDF output needs it inline.
14
14
 
15
15
  LAYOUT BUDGET (fits 297mm A4 height):
16
16
  Header: ~60px
@@ -18,9 +18,9 @@
18
18
  Body: ~680px (6 sections at ~110px avg)
19
19
  Footer: ~28px
20
20
 
21
- When customising, test with Ctrl+P (print preview) in a browser to verify
22
- the report fits on a single page. If content overflows, reduce the number
23
- of benchmark skills shown or shorten the strengths list.
21
+ When you customise the template, test with Ctrl+P (print preview) in a
22
+ browser. Verify that the report fits on a single page. If content overflows,
23
+ reduce the number of benchmark skills shown or shorten the strengths list.
24
24
  -->
25
25
  <style>
26
26
  {{INLINE_CSS}}
@@ -59,7 +59,7 @@
59
59
  <dl class="snap">
60
60
  <!--
61
61
  Typical fields: Experience, Education, Source, Stack.
62
- Add/remove <dt>/<dd> pairs as needed for the candidate.
62
+ Add or remove <dt>/<dd> pairs to fit the candidate.
63
63
  -->
64
64
  {{SNAPSHOT_DL_ITEMS}}
65
65
  </dl>
@@ -115,8 +115,8 @@
115
115
 
116
116
  Group the framework's capability areas into 4 visual blocks.
117
117
  If there are 6 capability areas, combine the smallest two.
118
- Show only skills where evidence exists or the gap is notable
119
- aim for 4-6 rows per block to stay within A4 height.
118
+ Show only skills where evidence exists or the gap is notable.
119
+ Aim for 4-6 rows per block to stay within A4 height.
120
120
 
121
121
  Pill classes:
122
122
  p-g = Gap (red)
@@ -151,7 +151,7 @@
151
151
  <div class="stitle">Coverage Summary</div>
152
152
  <div class="counters">
153
153
  <!--
154
- Four counter boxes. Colours are fixed:
154
+ Four counter boxes. Use these fixed colours:
155
155
  Gap: background:#FEE2E2 text:#991B1B
156
156
  Partial: background:#FEF3C7 text:#92400E
157
157
  Unknown: background:var(--s100) text:var(--s500)
@@ -184,7 +184,7 @@
184
184
  <ol>
185
185
  <!--
186
186
  2-4 numbered action items. Each:
187
- <li><strong>Action.</strong> Detail explaining the step.</li>
187
+ <li><strong>Action.</strong> Detail that explains the step.</li>
188
188
  -->
189
189
  {{RECOMMENDATION_LI_ITEMS}}
190
190
  </ol>
@@ -1,11 +1,11 @@
1
1
  /*
2
2
  * candidate-report — A4 single-page candidate assessment report
3
3
  *
4
- * This stylesheet is designed for a 210mm × 297mm page.
5
- * It is loaded into the HTML template by the candidate-report skill.
4
+ * This stylesheet targets a 210mm × 297mm page.
5
+ * The candidate-report skill loads it into the HTML template.
6
6
  *
7
7
  * IMPORTANT: All colours must use print-color-adjust: exact so they survive
8
- * PDF rendering via Playwright. Avoid box-shadow and fixed positioning.
8
+ * when Playwright renders the PDF. Avoid box-shadow and fixed positioning.
9
9
  */
10
10
 
11
11
  @import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap");
@@ -107,7 +107,7 @@ body {
107
107
  color: var(--s600);
108
108
  }
109
109
 
110
- /* Verdict colour variants — set on the element via class */
110
+ /* Verdict colour variants — add one as a class on the element */
111
111
  .verdict-caution {
112
112
  background: #fef3c7;
113
113
  }
@@ -1,11 +1,11 @@
1
- # Benchmarking Rubric
1
+ # Benchmark Rubric
2
2
 
3
3
  Reference data for `candidate-report` Step 3 (benchmark) and Step 4 (verdict).
4
4
 
5
5
  ## Skill ratings
6
6
 
7
- Map each agent-aligned engineering standard skill against candidate evidence (CV
8
- or `screening.md`).
7
+ Map each skill in the agent-aligned engineering standard against the candidate
8
+ evidence (CV or `screening.md`).
9
9
 
10
10
  | Rating | Criteria | Pill class |
11
11
  | ----------- | -------------------------------------------------- | ---------- |
@@ -14,8 +14,9 @@ or `screening.md`).
14
14
  | **Gap** | No evidence, or clearly below expected | `p-g` |
15
15
  | **Unknown** | Cannot assess from available evidence | `p-u` |
16
16
 
17
- Apply the **two-level scepticism rule** from `req-screen`: default two levels
18
- below CV claims unless concrete, quantified evidence is provided.
17
+ Apply the **two-level scepticism rule** from `req-screen`. Default to two levels
18
+ below the CV claims, unless the candidate supplies concrete, quantified
19
+ evidence.
19
20
 
20
21
  ## Behaviour bar widths
21
22
 
@@ -38,17 +39,17 @@ candidate's estimate and the target level.
38
39
 
39
40
  Pick one verdict class for the report header.
40
41
 
41
- | Verdict | Class | When to use |
42
- | -------------------- | ----------------- | ------------------------------------------------------------------- |
43
- | Proceed | `verdict-proceed` | Candidate benchmarks at or above target level |
44
- | Proceed with Caution | `verdict-caution` | Mixed signals; viable for scoped role or needs interview to resolve |
45
- | Pass | `verdict-pass` | Clear misalignment with role requirements |
42
+ | Verdict | Class | When to use |
43
+ | -------------------- | ----------------- | ------------------------------------------------------------------------- |
44
+ | Proceed | `verdict-proceed` | Candidate benchmarks at or above target level |
45
+ | Proceed with Caution | `verdict-caution` | Mixed signals. Viable for a scoped role, or needs an interview to resolve |
46
+ | Pass | `verdict-pass` | Clear misalignment with role requirements |
46
47
 
47
48
  Write a one-line headline and a brief detail sentence.
48
49
 
49
50
  ## Template sections to populate
50
51
 
51
- Drives the placeholder substitution in Step 5.
52
+ Use this table to replace the placeholders in Step 5.
52
53
 
53
54
  | Section | Source |
54
55
  | ----------------- | ------------------------------------------------------------------ |
@@ -69,8 +70,8 @@ The report **must** fit on a single A4 page (210mm × 297mm):
69
70
 
70
71
  - Snapshot: max 6 `<dt>`/`<dd>` pairs.
71
72
  - Strengths: max 5 `<li>`, one sentence each.
72
- - Benchmark grid: 4–6 rows per capability area; prioritise notable
73
- gaps/strengths, omit "Unknown" rows when tight.
73
+ - Benchmark grid: 4–6 rows per capability area. Prioritise the notable gaps and
74
+ strengths. Omit "Unknown" rows when the space is tight.
74
75
  - Combine small capability areas (e.g. Docs + ML) into one block.
75
76
  - Recommendation: max 4 `<li>`.
76
- - Test with browser print preview (Ctrl+P); cut content if it overflows.
77
+ - Test with the browser print preview (Ctrl+P). Cut content if it overflows.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  /**
3
- * Render a candidate report HTML file to A4 PDF using Playwright.
3
+ * Render a candidate-report HTML file to A4 PDF with Playwright.
4
4
  *
5
5
  * Usage: node scripts/render-pdf.mjs [input.html] [output.pdf]
6
6
  *
@@ -14,7 +14,7 @@
14
14
  import { resolve, join } from "node:path";
15
15
  import { homedir } from "node:os";
16
16
 
17
- const HELP = `render-pdf — render candidate report HTML to A4 PDF via Playwright
17
+ const HELP = `render-pdf — render candidate-report HTML to A4 PDF with Playwright
18
18
 
19
19
  Usage: node scripts/render-pdf.mjs [input.html] [output.pdf] [-h|--help]
20
20
 
@@ -1,60 +1,64 @@
1
1
  ---
2
2
  name: changelog
3
- description: Record the knowledge-graph changes made during the current session into a single shared Knowledge/CHANGELOG.md so the team can see what changed and why. Use when the user asks to log, record, or write up the changes they just made to the knowledge base typically at the end of a session of edits.
3
+ description: Record the knowledge-graph changes from the current session into one shared Knowledge/CHANGELOG.md. The team can then see what changed and why. Use when the user asks to log, record, or write up the changes they just made to the knowledge base. This typically happens at the end of a session of edits.
4
4
  ---
5
5
 
6
6
  # Changelog
7
7
 
8
- Record the changes made to the **knowledge graph** (`Knowledge/`) during the
9
- current working session in one shared `Knowledge/CHANGELOG.md`, newest first, so
10
- teammates syncing the same filesystem can see what changed and why.
8
+ Record the changes to the **knowledge graph** (`Knowledge/`) from the current
9
+ working session. Write them in one shared `Knowledge/CHANGELOG.md`, newest
10
+ first. Teammates who sync the same filesystem can then see what changed and why.
11
11
 
12
- This tracks **graph content** notes under `Knowledge/People/`,
13
- `Organizations/`, `Projects/`, `Topics/`, `Candidates/`, `Priorities/`, and the
14
- other subdirectories. It does **not** track changes to instructions
15
- (`CLAUDE.md`, agents, skills) that is the `upstream-instructions` skill's job.
12
+ This skill tracks **graph content**. Graph content is the notes under
13
+ `Knowledge/People/`, `Organizations/`, `Projects/`, `Topics/`, `Candidates/`,
14
+ `Priorities/`, and the other subdirectories. It does **not** track changes to
15
+ instructions (`CLAUDE.md`, agents, skills). The `upstream-instructions` skill
16
+ owns those.
16
17
 
17
18
  ## Trigger
18
19
 
19
- - The user asks to write, update, or record a changelog after editing the KB.
20
- - A session has added, modified, removed, or renamed notes in `Knowledge/` and
21
- the user wants those changes documented for the team.
20
+ - The user asks to write, update, or record a changelog after they edit the KB.
21
+ - A session added, modified, removed, or renamed notes in `Knowledge/`. The user
22
+ wants a record of those changes for the team.
22
23
 
23
24
  ## Inputs
24
25
 
25
26
  - **The edits made in the current session** — the source of truth. The KB lives
26
- on a synced filesystem and is not version-controlled, so there is no commit
27
- history to diff. Recall every note created, edited, removed, or renamed under
27
+ on a synced filesystem and has no version control, so no commit history exists
28
+ to diff. Recall every note that you created, edited, removed, or renamed under
28
29
  `Knowledge/` during this conversation.
29
- - `~/.cache/fit/outpost/state/identity.md` — the current user's identity. Its
30
- **Name** is the author recorded on each entry. The KB is shared, so every
31
- change must be attributed to the team member who made it. Resolve `~` to
32
- `$HOME` before reading.
33
- - `Knowledge/CHANGELOG.md` — the existing changelog, to see what's already
34
- recorded and avoid duplicates.
30
+ - `~/.cache/fit/outpost/state/identity.md` — the current user's identity. Use
31
+ its **Name** as the author on each entry. The KB is shared, so every entry
32
+ must name the team member who made the change. Resolve `~` to `$HOME` before
33
+ you read it.
34
+ - `Knowledge/CHANGELOG.md` — the existing changelog. Read it to see what is
35
+ already recorded and to avoid duplicates.
35
36
 
36
37
  ## Outputs
37
38
 
38
- - `Knowledge/CHANGELOG.md` — a **single** reverse-chronological changelog
39
- covering all graph subdirectories. No per-folder or per-note changelogs.
39
+ - `Knowledge/CHANGELOG.md` — a **single** reverse-chronological changelog that
40
+ covers all graph subdirectories. No per-folder or per-note changelogs.
40
41
 
41
42
  ## Ethics
42
43
 
43
- `Knowledge/` is shared with the team. Every entry obeys the KB's integrity
44
- rules: objective and factual, work-relevant, no personal judgments. Assume the
45
- person a note is about will read its changelog entry. Describe
46
- **what changed in the graph**, not opinions about the people in it.
44
+ The team shares `Knowledge/`. Every entry obeys the KB's integrity rules:
45
+ objective and factual, work-relevant, no personal judgments. Assume the person a
46
+ note is about will read its changelog entry. Describe
47
+ **what changed in the graph**. Do not record opinions about the people in it.
47
48
 
48
49
  <do_confirm_checklist goal="Verify the changelog is accurate and shareable">
49
50
 
50
- - [ ] Exactly one `Knowledge/CHANGELOG.md`; no stray per-folder changelogs.
51
- - [ ] Every entry names its **Scope** — the specific note(s) or folder(s)
52
- touched, by full path.
53
- - [ ] Each entry has **Who** (author, from identity), **What**, and **Why**.
54
- - [ ] Descriptions are specific enough to be useful (not "updated some notes").
55
- - [ ] Dates are the date the change was actually made, not guessed.
56
- - [ ] No duplicate entries for a change already in the changelog.
57
- - [ ] Entries are factual and would be fine for the subject to read.
51
+ - [ ] Keep exactly one `Knowledge/CHANGELOG.md`. Leave no stray per-folder
52
+ changelog.
53
+ - [ ] Name the **Scope** in every entry, with the full path of each note or
54
+ folder touched.
55
+ - [ ] Give each entry a **Who** (the author, from identity), a **What**, and a
56
+ **Why**.
57
+ - [ ] Make each description specific enough to be useful (never "updated some
58
+ notes").
59
+ - [ ] Use the real date of each change. Never guess a date.
60
+ - [ ] Add no duplicate entry for a change already in the changelog.
61
+ - [ ] Keep every entry factual and fit for the subject to read.
58
62
 
59
63
  </do_confirm_checklist>
60
64
 
@@ -68,26 +72,27 @@ cat "$HOME/.cache/fit/outpost/state/identity.md" # Name → the author for this
68
72
  ```
69
73
 
70
74
  If `identity.md` is missing or stale, run the `person-identify` skill to refresh
71
- it before logging don't guess the author.
75
+ it before you log the changes. Never guess the author.
72
76
 
73
77
  ### 2. Reconstruct this session's changes
74
78
 
75
- Recall every change made to `Knowledge/` during the current conversation:
76
- creations, edits, removals, renames. Group them by note. If you are unsure a
77
- change landed, confirm it before logging:
79
+ Recall every change you made to `Knowledge/` during the current conversation:
80
+ creations, edits, removals, and renames. Group them by note. If you are unsure
81
+ that a change landed, confirm it before you log it:
78
82
 
79
83
  ```bash
80
84
  rg --files Knowledge/ | rg "<note name>" # confirm a note exists
81
85
  cat "Knowledge/People/Doe, Jane.md" # confirm content landed
82
86
  ```
83
87
 
84
- Optionally surface anything edited recently that you might have missed:
88
+ Optionally, surface anything you edited recently and might have missed:
85
89
 
86
90
  ```bash
87
91
  find Knowledge -name '*.md' -newermt '-1 day' -not -path '*/.*'
88
92
  ```
89
93
 
90
- Use `Knowledge/CHANGELOG.md` only to avoid duplicating an entry already there.
94
+ Use `Knowledge/CHANGELOG.md` only to avoid a duplicate of an entry already
95
+ there.
91
96
 
92
97
  ### 3. Classify each change
93
98
 
@@ -98,14 +103,14 @@ Use `Knowledge/CHANGELOG.md` only to avoid duplicating an entry already there.
98
103
  | `removed` | Note deleted |
99
104
  | `renamed` | Note renamed or moved |
100
105
 
101
- Related changes that form one logical edit (e.g. a new project note plus the
102
- backlinks added to the people it involves) are recorded as **one entry** whose
103
- Scope lists every note touched.
106
+ Some related changes form one logical edit. An example is a new project note
107
+ plus the backlinks to the people it involves. Record these as **one entry**. The
108
+ Scope of that entry lists every note touched.
104
109
 
105
110
  ### 4. Write the changelog
106
111
 
107
112
  Create or update `Knowledge/CHANGELOG.md` (newest first). Group entries under
108
- one heading per day; one bullet per logical change:
113
+ one heading per day. Write one bullet per logical change:
109
114
 
110
115
  ```markdown
111
116
  # Knowledge Changelog
@@ -121,16 +126,16 @@ version-controlled, so this is the record of what changed and why.
121
126
  **Why:** <the reason — the email, meeting, or request that prompted it.>
122
127
  ```
123
128
 
124
- Use the real date the change was made (today's date is in context) and the
125
- **Name** from `identity.md` as `<Who>`. Because the file is shared, the author
126
- travels on each entry not just the day's heading so a day with edits from
127
- more than one teammate stays unambiguous. Keep each entry to its What and Why
128
- this is a ledger, not a diff.
129
+ Use the real date of the change (today's date is in context). Use the **Name**
130
+ from `identity.md` as `<Who>`. The team shares the file, so the author travels
131
+ on each entry. The day's heading alone is not enough. A day with edits from more
132
+ than one teammate then stays unambiguous. Keep each entry to its What and Why.
133
+ Write a ledger. Do not write a diff.
129
134
 
130
135
  ## Notes
131
136
 
132
- - This skill **documents only** it records changes already made; it does not
133
- make or undo edits.
137
+ - This skill **documents only**. It records changes you already made. It does
138
+ not make or undo edits.
134
139
  - One `Knowledge/CHANGELOG.md` at the graph root, never per-folder.
135
140
  - For changes to instructions (`CLAUDE.md`, agents, skills), use
136
141
  `upstream-instructions` instead.