@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.
- package/README.md +2 -2
- package/bin/fit-outpost.js +3 -2
- package/package.json +4 -4
- package/src/agent-path.js +10 -6
- package/src/agent-runner.js +28 -24
- package/src/index.js +2 -3
- package/src/kb-manager.js +21 -19
- package/src/outpost.js +37 -33
- package/src/posture.js +3 -3
- package/src/privilege.js +11 -11
- package/src/scheduler.js +14 -12
- package/src/socket-server.js +19 -18
- package/src/spawn-env.js +7 -6
- package/src/state-manager.js +2 -2
- package/templates/.claude/agents/chief-of-staff.md +22 -22
- package/templates/.claude/agents/concierge.md +19 -17
- package/templates/.claude/agents/head-hunter.md +27 -26
- package/templates/.claude/agents/librarian.md +17 -16
- package/templates/.claude/agents/postman.md +19 -18
- package/templates/.claude/agents/recruiter.md +31 -27
- package/templates/.claude/skills/anarlog-follow/SKILL.md +50 -49
- package/templates/.claude/skills/anarlog-follow/references/coaching.md +22 -21
- package/templates/.claude/skills/anarlog-follow/scripts/follow.mjs +4 -4
- package/templates/.claude/skills/anarlog-process/SKILL.md +35 -32
- package/templates/.claude/skills/anarlog-process/references/extraction.md +26 -22
- package/templates/.claude/skills/anarlog-process/references/sessions.md +10 -10
- package/templates/.claude/skills/anarlog-process/scripts/scan.mjs +10 -9
- package/templates/.claude/skills/anarlog-trim/SKILL.md +43 -40
- package/templates/.claude/skills/candidate-report/SKILL.md +30 -28
- package/templates/.claude/skills/candidate-report/references/report-template.html +10 -10
- package/templates/.claude/skills/candidate-report/references/report.css +4 -4
- package/templates/.claude/skills/candidate-report/references/rubric.md +15 -14
- package/templates/.claude/skills/candidate-report/scripts/render-pdf.mjs +2 -2
- package/templates/.claude/skills/changelog/SKILL.md +55 -50
- package/templates/.claude/skills/deck-create/SKILL.md +30 -30
- package/templates/.claude/skills/deck-create/references/slide.css +4 -4
- package/templates/.claude/skills/deck-create/scripts/convert-to-pdf.mjs +6 -6
- package/templates/.claude/skills/deck-review/SKILL.md +59 -57
- package/templates/.claude/skills/deck-review/assets/slide-annotator.js +58 -49
- package/templates/.claude/skills/deck-summarize/SKILL.md +49 -43
- package/templates/.claude/skills/deck-summarize/references/brief-template.md +4 -3
- package/templates/.claude/skills/deck-summarize/scripts/extract-pptx.mjs +8 -7
- package/templates/.claude/skills/doc-collab/SKILL.md +25 -25
- package/templates/.claude/skills/doc-create/SKILL.md +21 -20
- package/templates/.claude/skills/doc-create/scripts/convert-to-pdf.mjs +6 -6
- package/templates/.claude/skills/draft-emails/SKILL.md +37 -33
- package/templates/.claude/skills/draft-emails/references/template.md +2 -2
- package/templates/.claude/skills/draft-emails/scripts/scan-emails.mjs +5 -4
- package/templates/.claude/skills/draft-emails/scripts/send-email.mjs +11 -9
- package/templates/.claude/skills/extract-entities/SKILL.md +65 -65
- package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +5 -5
- package/templates/.claude/skills/extract-entities/references/conditions.md +14 -13
- package/templates/.claude/skills/extract-entities/references/content.md +10 -9
- package/templates/.claude/skills/extract-entities/references/links.md +5 -5
- package/templates/.claude/skills/extract-entities/references/recruitment.md +19 -18
- package/templates/.claude/skills/extract-entities/references/resolution.md +13 -13
- package/templates/.claude/skills/extract-entities/references/sources.md +8 -8
- package/templates/.claude/skills/extract-entities/references/templates-conditions.md +2 -2
- package/templates/.claude/skills/extract-entities/references/templates-priorities.md +2 -2
- package/templates/.claude/skills/extract-entities/scripts/state.mjs +9 -8
- package/templates/.claude/skills/meeting-prep/SKILL.md +25 -24
- package/templates/.claude/skills/organize-files/SKILL.md +24 -22
- package/templates/.claude/skills/organize-files/scripts/organize-by-type.mjs +5 -4
- package/templates/.claude/skills/organize-files/scripts/summarize.mjs +4 -4
- package/templates/.claude/skills/person-identify/SKILL.md +24 -22
- package/templates/.claude/skills/person-identify/scripts/identify.sh +17 -17
- package/templates/.claude/skills/person-lookup/SKILL.md +28 -29
- package/templates/.claude/skills/person-lookup/scripts/lookup.sh +19 -16
- package/templates/.claude/skills/req-assess/SKILL.md +27 -27
- package/templates/.claude/skills/req-assess/references/interview-template.md +1 -1
- package/templates/.claude/skills/req-assess/references/panel-template.md +3 -2
- package/templates/.claude/skills/req-assess/references/rubric.md +13 -13
- package/templates/.claude/skills/req-decide/SKILL.md +28 -25
- package/templates/.claude/skills/req-decide/references/rubric.md +11 -10
- package/templates/.claude/skills/req-forget/SKILL.md +28 -26
- package/templates/.claude/skills/req-forget/references/classify.md +13 -13
- package/templates/.claude/skills/req-forget/references/locations.md +2 -2
- package/templates/.claude/skills/req-forget/references/report-template.md +1 -1
- package/templates/.claude/skills/req-scan/SKILL.md +21 -22
- package/templates/.claude/skills/req-scan/references/fallbacks.md +9 -9
- package/templates/.claude/skills/req-scan/references/filters.md +13 -13
- package/templates/.claude/skills/req-scan/references/sources.md +7 -7
- package/templates/.claude/skills/req-scan/references/state.md +1 -1
- package/templates/.claude/skills/req-scan/scripts/state.mjs +3 -2
- package/templates/.claude/skills/req-screen/SKILL.md +31 -29
- package/templates/.claude/skills/req-screen/references/rubric.md +18 -18
- package/templates/.claude/skills/req-screen/references/template.md +4 -4
- package/templates/.claude/skills/req-track/SKILL.md +40 -40
- package/templates/.claude/skills/req-track/references/fields.md +19 -18
- package/templates/.claude/skills/req-track/references/signals.md +12 -12
- package/templates/.claude/skills/req-track/references/statuses.md +3 -2
- package/templates/.claude/skills/req-track/references/templates.md +4 -4
- package/templates/.claude/skills/req-workday/SKILL.md +24 -24
- package/templates/.claude/skills/req-workday/references/status-mapping.md +5 -5
- package/templates/.claude/skills/req-workday/references/templates.md +13 -13
- package/templates/.claude/skills/req-workday/references/xlsx-format.md +7 -7
- package/templates/.claude/skills/req-workday/scripts/parse-workday.mjs +19 -17
- package/templates/.claude/skills/send-chat/SKILL.md +47 -43
- package/templates/.claude/skills/sync-apple-calendar/SKILL.md +20 -19
- package/templates/.claude/skills/sync-apple-calendar/references/SCHEMA.md +7 -7
- package/templates/.claude/skills/sync-apple-calendar/scripts/query.mjs +6 -6
- package/templates/.claude/skills/sync-apple-calendar/scripts/sync.mjs +9 -8
- package/templates/.claude/skills/sync-apple-mail/SKILL.md +17 -14
- package/templates/.claude/skills/sync-apple-mail/references/SCHEMA.md +10 -10
- package/templates/.claude/skills/sync-apple-mail/scripts/parse-emlx.mjs +9 -9
- package/templates/.claude/skills/sync-apple-mail/scripts/sync-helpers.mjs +16 -13
- package/templates/.claude/skills/sync-apple-mail/scripts/sync.mjs +3 -3
- package/templates/.claude/skills/sync-teams/SKILL.md +43 -43
- package/templates/.claude/skills/sync-teams/scripts/idb-reader.mjs +22 -21
- package/templates/.claude/skills/sync-teams/scripts/leveldb-reader.mjs +4 -4
- package/templates/.claude/skills/sync-teams/scripts/sync.mjs +4 -4
- package/templates/.claude/skills/upstream-instructions/SKILL.md +39 -40
- package/templates/.claude/skills/upstream-instructions/references/examples.md +2 -2
- package/templates/CLAUDE.md +40 -37
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: anarlog-trim
|
|
3
|
-
description: Trim
|
|
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
|
|
9
|
-
|
|
10
|
-
after goodbyes
|
|
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
|
|
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
|
|
20
|
-
|
|
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** —
|
|
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
|
-
|
|
37
|
-
- `~/Library/Application Support/anarlog/sessions/{uuid}/audio.mp3` —
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
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
|
|
86
|
-
|
|
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
|
|
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
|
-
**
|
|
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
|
|
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
|
|
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
|
|
116
|
+
4. The **new duration** and the **number of words to remove**
|
|
116
117
|
|
|
117
|
-
Wait for the user to approve before
|
|
118
|
+
Wait for the user to approve before you continue.
|
|
118
119
|
|
|
119
120
|
### Step 4 — Trim the transcript
|
|
120
121
|
|
|
121
|
-
|
|
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
|
-
|
|
148
|
-
|
|
149
|
-
people who did not consent to
|
|
150
|
-
|
|
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
|
|
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
|
|
165
|
-
confirmation
|
|
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
|
|
171
|
-
|
|
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
|
-
- [ ]
|
|
179
|
-
- [ ]
|
|
180
|
-
- [ ]
|
|
181
|
-
- [ ]
|
|
182
|
-
- [ ]
|
|
183
|
-
|
|
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
|
|
5
|
-
|
|
6
|
-
|
|
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
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
-
|
|
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
|
|
35
|
-
candidate's `Req` field → Role file. Ask the user
|
|
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
|
|
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
|
-
- [ ]
|
|
47
|
-
- [ ]
|
|
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
|
-
- [ ]
|
|
51
|
-
- [ ]
|
|
52
|
-
- [ ]
|
|
53
|
-
- [ ]
|
|
54
|
-
`~/.cache/fit/outpost/state/identity.md
|
|
55
|
-
- [ ]
|
|
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
|
|
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
|
|
95
|
-
[references/rubric.md](references/rubric.md)
|
|
96
|
-
and colours, level-gauge window. Count
|
|
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`
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
13
|
-
tag
|
|
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
|
|
22
|
-
the report fits on a single page. If content overflows,
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
5
|
-
*
|
|
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
|
-
*
|
|
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 —
|
|
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
|
-
#
|
|
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
|
|
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
|
|
18
|
-
below CV claims unless concrete, quantified
|
|
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
|
|
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
|
-
|
|
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
|
|
73
|
-
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
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
|
|
13
|
-
`Organizations/`, `Projects/`, `Topics/`, `Candidates/`,
|
|
14
|
-
other subdirectories. It does **not** track changes to
|
|
15
|
-
(`CLAUDE.md`, agents, skills)
|
|
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
|
|
20
|
-
- A session
|
|
21
|
-
|
|
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
|
|
27
|
-
|
|
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.
|
|
30
|
-
**Name**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
- `Knowledge/CHANGELOG.md` — the existing changelog
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
**what changed in the graph
|
|
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
|
-
- [ ]
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- [ ]
|
|
55
|
-
|
|
56
|
-
- [ ]
|
|
57
|
-
|
|
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
|
|
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
|
|
77
|
-
change landed, confirm it before
|
|
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
|
|
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
|
|
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
|
-
|
|
102
|
-
backlinks
|
|
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
|
|
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
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
|
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.
|