@forwardimpact/outpost 3.3.0 → 3.3.2

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 (37) hide show
  1. package/package.json +1 -1
  2. package/src/kb-manager.js +1 -6
  3. package/templates/.claude/agents/chief-of-staff.md +0 -3
  4. package/templates/.claude/agents/concierge.md +3 -3
  5. package/templates/.claude/agents/librarian.md +0 -1
  6. package/templates/.claude/settings.json +2 -2
  7. package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/SKILL.md +12 -12
  8. package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/references/coaching.md +3 -3
  9. package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/references/debrief.md +2 -2
  10. package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/references/meeting-types.md +1 -1
  11. package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/scripts/follow.mjs +3 -3
  12. package/templates/.claude/skills/{hyprnote-process → anarlog-process}/SKILL.md +20 -16
  13. package/templates/.claude/skills/{hyprnote-process → anarlog-process}/references/extraction.md +2 -2
  14. package/templates/.claude/skills/{hyprnote-process → anarlog-process}/references/sessions.md +5 -5
  15. package/templates/.claude/skills/{hyprnote-process → anarlog-process}/scripts/scan.mjs +5 -8
  16. package/templates/.claude/skills/{hyprnote-trim → anarlog-trim}/SKILL.md +15 -15
  17. package/templates/.claude/skills/candidate-report/SKILL.md +1 -1
  18. package/templates/.claude/skills/candidate-report/references/rubric.md +12 -12
  19. package/templates/.claude/skills/extract-entities/SKILL.md +11 -6
  20. package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +2 -2
  21. package/templates/.claude/skills/extract-entities/references/recruitment.md +2 -1
  22. package/templates/.claude/skills/extract-entities/references/resolution.md +15 -0
  23. package/templates/.claude/skills/extract-entities/references/sources.md +8 -1
  24. package/templates/.claude/skills/extract-entities/references/templates-goals-priorities.md +1 -1
  25. package/templates/.claude/skills/identify-user/SKILL.md +103 -0
  26. package/templates/.claude/skills/identify-user/scripts/identify.sh +89 -0
  27. package/templates/.claude/skills/req-assess/SKILL.md +1 -1
  28. package/templates/.claude/skills/req-track/SKILL.md +7 -4
  29. package/templates/.claude/skills/req-workday/SKILL.md +5 -3
  30. package/templates/.claude/skills/sync-teams/scripts/sync.mjs +4 -3
  31. package/templates/.claude/skills/upstream-skill/references/examples.md +5 -5
  32. package/templates/CLAUDE.md +45 -46
  33. package/templates/.claude/skills/manage-tasks/SKILL.md +0 -152
  34. package/templates/.claude/skills/manage-tasks/references/format.md +0 -73
  35. package/templates/.claude/skills/weekly-update/SKILL.md +0 -141
  36. package/templates/.claude/skills/weekly-update/references/template.md +0 -55
  37. package/templates/USER.md +0 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forwardimpact/outpost",
3
- "version": "3.3.0",
3
+ "version": "3.3.2",
4
4
  "description": "Personal operations center — context from email, calendar, and knowledge assembled so preparation is continuous, not a morning scramble.",
5
5
  "homepage": "https://www.forwardimpact.team",
6
6
  "repository": {
package/src/kb-manager.js CHANGED
@@ -188,15 +188,10 @@ export class KBManager {
188
188
  ])
189
189
  await this.#ensureDir(join(dest, d));
190
190
 
191
- await this.#fs.copyFile(
192
- join(templateDir, "USER.md"),
193
- join(dest, "USER.md"),
194
- );
195
-
196
191
  await this.copyBundledFiles(templateDir, dest);
197
192
 
198
193
  this.#logger.info(
199
- `Knowledge base initialized at ${dest}\n\nNext steps:\n 1. Edit ${dest}/USER.md with your name, email, and domain\n 2. cd ${dest} && npx apm install\n 3. claude`,
194
+ `Knowledge base initialized at ${dest}\n\nNext steps:\n 1. cd ${dest} && npx apm install\n 2. claude\n 3. Run the identify-user skill to populate your identity`,
200
195
  );
201
196
  return { ok: true, value: { dest } };
202
197
  }
@@ -6,8 +6,6 @@ description: >
6
6
  Woken at key moments (morning, evening) by the Outpost scheduler.
7
7
  model: sonnet
8
8
  permissionMode: bypassPermissions
9
- skills:
10
- - weekly-update
11
9
  ---
12
10
 
13
11
  You are the chief of staff — the user's executive assistant. Each wake:
@@ -35,7 +33,6 @@ Plus directly: `knowledge/Goals/`, `knowledge/Priorities/`, `drafts/`,
35
33
  | -------------- | -------------------------------------------------- |
36
34
  | Before noon | `knowledge/Briefings/{YYYY-MM-DD}-morning.md` |
37
35
  | Noon or later | `knowledge/Briefings/{YYYY-MM-DD}-evening.md` |
38
- | Monday morning | also run `weekly-update` for the week's priorities |
39
36
 
40
37
  A briefing covers: today's schedule with prep status, top three priority actions
41
38
  linked to `[[Priorities/...]]`, goal progress, inbox snapshot (urgent / awaiting
@@ -9,7 +9,7 @@ permissionMode: bypassPermissions
9
9
  skills:
10
10
  - sync-apple-calendar
11
11
  - meeting-prep
12
- - hyprnote-process
12
+ - anarlog-process
13
13
  ---
14
14
 
15
15
  You are the concierge — the user's scheduling assistant. Each wake: keep the
@@ -22,11 +22,11 @@ recordings.
22
22
  | ---------------------------------------------------------- | --------------------- |
23
23
  | Calendar may be stale | `sync-apple-calendar` |
24
24
  | Meeting within 2 hours and key attendees lack recent notes | `meeting-prep` |
25
- | Unprocessed Hyprnote sessions exist | `hyprnote-process` |
25
+ | Unprocessed Anarlog sessions exist | `anarlog-process` |
26
26
  | All prepped, no transcripts pending | none — report idle |
27
27
 
28
28
  When more than one trigger is live, prefer **meeting-prep** (time-sensitive)
29
- over **hyprnote-process** (catch-up work).
29
+ over **anarlog-process** (catch-up work).
30
30
 
31
31
  ## Scope
32
32
 
@@ -9,7 +9,6 @@ permissionMode: bypassPermissions
9
9
  skills:
10
10
  - extract-entities
11
11
  - organize-files
12
- - manage-tasks
13
12
  ---
14
13
 
15
14
  You are the librarian — the user's knowledge curator. Each time you are woken,
@@ -37,7 +37,7 @@
37
37
  "Read(~/Library/Mail/**)",
38
38
  "Read(~/Library/Group Containers/group.com.apple.calendar/**)",
39
39
  "Read(~/Library/Calendars/**)",
40
- "Read(~/Library/Application Support/hyprnote/**)",
40
+ "Read(~/Library/Application Support/anarlog/**)",
41
41
  "Read(~/Desktop/**)",
42
42
  "Read(~/Documents/**)",
43
43
  "Read(~/Downloads/**)",
@@ -78,7 +78,7 @@
78
78
  "~/Library/Mail",
79
79
  "~/Library/Group Containers/group.com.apple.calendar",
80
80
  "~/Library/Calendars",
81
- "~/Library/Application Support/hyprnote",
81
+ "~/Library/Application Support/anarlog",
82
82
  "~/Desktop",
83
83
  "~/Documents",
84
84
  "~/Downloads",
@@ -1,16 +1,16 @@
1
1
  ---
2
- name: hyprnote-follow
2
+ name: anarlog-follow
3
3
  description: >
4
- Follow a live Hyprnote session in real-time, coaching the user through a
4
+ Follow a live Anarlog session in real-time, coaching the user through a
5
5
  meeting or interview. Understands context from the session title, knowledge
6
6
  base, and candidate pipeline. Provides talking points, flags gaps in
7
7
  coverage, and suggests follow-up questions as the conversation unfolds.
8
8
  Use when the user asks to follow, shadow, or coach them through a live meeting.
9
9
  ---
10
10
 
11
- # Hyprnote Follow
11
+ # Anarlog Follow
12
12
 
13
- Follow a live Hyprnote recording, read the transcript as it grows, and coach the
13
+ Follow a live Anarlog recording, read the transcript as it grows, and coach the
14
14
  user through the meeting in real time. Gather knowledge-base context once before
15
15
  the session, then poll the transcript and provide actionable nudges as new
16
16
  content appears.
@@ -19,12 +19,12 @@ content appears.
19
19
 
20
20
  - The user asks to follow, shadow, or coach them through a live meeting.
21
21
  - "Follow my meeting", "coach me", "shadow this call".
22
- - The user starts a Hyprnote recording and wants real-time support.
22
+ - The user starts a Anarlog recording and wants real-time support.
23
23
 
24
24
  ## Prerequisites
25
25
 
26
- - Hyprnote installed; sessions at
27
- `~/Library/Application Support/hyprnote/sessions/`.
26
+ - Anarlog installed; sessions at
27
+ `~/Library/Application Support/anarlog/sessions/`.
28
28
  - An active or about-to-start session.
29
29
  - Knowledge base populated (attendee / candidate context).
30
30
 
@@ -49,7 +49,7 @@ content appears.
49
49
  - [ ] Coaching nudges were actionable and concise (1–3 lines each).
50
50
  - [ ] Coverage gaps tracked and surfaced before the meeting ended.
51
51
  - [ ] End-of-meeting detected; debrief provided.
52
- - [ ] Next steps offered (`req-assess` / `hyprnote-process`); user decided
52
+ - [ ] Next steps offered (`req-assess` / `anarlog-process`); user decided
53
53
  whether to run them.
54
54
  - [ ] No files were modified during the session.
55
55
 
@@ -62,7 +62,7 @@ content appears.
62
62
  #### 1. Find the active session
63
63
 
64
64
  ```bash
65
- node .claude/skills/hyprnote-follow/scripts/follow.mjs --detect
65
+ node .claude/skills/anarlog-follow/scripts/follow.mjs --detect
66
66
  ```
67
67
 
68
68
  Returns the most recently modified session, whether it's live, and its title. If
@@ -73,7 +73,7 @@ the user.
73
73
  #### 2. Read session metadata
74
74
 
75
75
  ```bash
76
- node .claude/skills/hyprnote-follow/scripts/follow.mjs <session-id> --meta
76
+ node .claude/skills/anarlog-follow/scripts/follow.mjs <session-id> --meta
77
77
  ```
78
78
 
79
79
  Capture **title**, **created_at**, **participants**.
@@ -124,13 +124,13 @@ print it to the user.
124
124
  First read (no `--after`):
125
125
 
126
126
  ```bash
127
- node .claude/skills/hyprnote-follow/scripts/follow.mjs <session-id>
127
+ node .claude/skills/anarlog-follow/scripts/follow.mjs <session-id>
128
128
  ```
129
129
 
130
130
  Subsequent reads (pass the last word ID):
131
131
 
132
132
  ```bash
133
- node .claude/skills/hyprnote-follow/scripts/follow.mjs <session-id> --after <last-word-id>
133
+ node .claude/skills/anarlog-follow/scripts/follow.mjs <session-id> --after <last-word-id>
134
134
  ```
135
135
 
136
136
  Returns JSON with grouped text segments, channel labels, and the next last-word
@@ -1,6 +1,6 @@
1
1
  # Coaching Reference
2
2
 
3
- Reference for `hyprnote-follow` Phases 2 and 3.
3
+ Reference for `anarlog-follow` Phases 2 and 3.
4
4
 
5
5
  ## Pre-meeting brief format
6
6
 
@@ -108,9 +108,9 @@ Capture: decision made on {topic} — {who} will {what}
108
108
 
109
109
  ## Constraints
110
110
 
111
- - **Read-only.** Never modify Hyprnote files, knowledge notes, or state.
111
+ - **Read-only.** Never modify Anarlog files, knowledge notes, or state.
112
112
  - **No post-processing during follow.** Don't run `extract-entities`,
113
- `req-assess`, or `hyprnote-process`. Offer them after.
113
+ `req-assess`, or `anarlog-process`. Offer them after.
114
114
  - **Channel 0 = user.** Always.
115
115
  - **Transcription noise.** Live transcripts are messy. Don't coach from a single
116
116
  ambiguous word — wait for context.
@@ -1,6 +1,6 @@
1
1
  # Debrief Templates
2
2
 
3
- Reference for `hyprnote-follow` Phase 4 (Steps 12–13).
3
+ Reference for `anarlog-follow` Phase 4 (Steps 12–13).
4
4
 
5
5
  ## Interview debrief
6
6
 
@@ -53,7 +53,7 @@ Reference for `hyprnote-follow` Phase 4 (Steps 12–13).
53
53
 
54
54
  After the debrief, **offer** (don't ask) logical follow-ups:
55
55
 
56
- - **Interviews:** "I can run `req-assess` on this transcript when Hyprnote
56
+ - **Interviews:** "I can run `req-assess` on this transcript when Anarlog
57
57
  finishes processing."
58
58
  - **Meetings:** "I can extract entities from this session into the knowledge
59
59
  graph when ready."
@@ -1,6 +1,6 @@
1
1
  # Meeting-Type Classification
2
2
 
3
- Reference for `hyprnote-follow` Phase 1, Step 3. Classify from the session
3
+ Reference for `anarlog-follow` Phase 1, Step 3. Classify from the session
4
4
  title.
5
5
 
6
6
  | Title pattern | Type | Coaching focus |
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
 
3
3
  /**
4
- * follow.mjs — Read a live Hyprnote transcript and output new content since
4
+ * follow.mjs — Read a live Anarlog transcript and output new content since
5
5
  * the last read. Designed to be called repeatedly during a live session.
6
6
  *
7
7
  * Usage:
@@ -36,7 +36,7 @@ import { homedir } from "node:os";
36
36
 
37
37
  const SESSIONS_DIR = join(
38
38
  homedir(),
39
- "Library/Application Support/hyprnote/sessions",
39
+ "Library/Application Support/anarlog/sessions",
40
40
  );
41
41
 
42
42
  function parseArgs() {
@@ -80,7 +80,7 @@ function detectActiveSession() {
80
80
  }
81
81
 
82
82
  if (!best) {
83
- console.error("No active Hyprnote session found.");
83
+ console.error("No active Anarlog session found.");
84
84
  process.exit(1);
85
85
  }
86
86
 
@@ -1,35 +1,37 @@
1
1
  ---
2
- name: hyprnote-process
3
- description: Process Hyprnote meeting sessions (memos, summaries, transcripts) into the knowledge graph. Extracts people, organizations, projects, and topics from AI-generated meeting summaries and user notes, creating or updating Obsidian-compatible notes in knowledge/. Use when the user asks to process meeting notes or after Hyprnote sessions.
2
+ name: anarlog-process
3
+ description: Process Anarlog meeting sessions (memos, summaries, transcripts) into the knowledge graph. Extracts people, organizations, projects, and topics from AI-generated meeting summaries and user notes, creating or updating Obsidian-compatible notes in knowledge/. Use when the user asks to process meeting notes or after Anarlog sessions.
4
4
  ---
5
5
 
6
- # Process Hyprnote
6
+ # Process Anarlog
7
7
 
8
- Process meeting sessions from Hyprnote (a local AI meeting-notes app) into the
9
- knowledge graph. Hyprnote records meetings, transcribes them, and generates AI
8
+ Process meeting sessions from Anarlog (a local AI meeting-notes app) into the
9
+ knowledge graph. Anarlog records meetings, transcribes them, and generates AI
10
10
  summaries; this skill reads that output and feeds it into `knowledge/` — the
11
11
  same way `extract-entities` processes emails and calendar events.
12
12
 
13
13
  ## Trigger
14
14
 
15
- - The user asks to process meeting notes or Hyprnote sessions.
15
+ - The user asks to process meeting notes or Anarlog sessions.
16
16
  - New meetings have been recorded.
17
17
  - The user asks to update the knowledge base from recent meetings.
18
18
 
19
19
  ## Prerequisites
20
20
 
21
- - Hyprnote installed; sessions at
22
- `~/Library/Application Support/hyprnote/sessions/`.
23
- - User identity in `USER.md`.
21
+ - Anarlog installed; sessions at
22
+ `~/Library/Application Support/anarlog/sessions/`.
23
+ - User identity from running the `identify-user` skill, which writes
24
+ `~/.cache/fit/outpost/state/identity.md`.
24
25
 
25
26
  ## Inputs
26
27
 
27
- - `~/Library/Application Support/hyprnote/sessions/{uuid}/` — see
28
+ - `~/Library/Application Support/anarlog/sessions/{uuid}/` — see
28
29
  [references/sessions.md](references/sessions.md) for the file shape and skip
29
30
  rules.
30
31
  - `~/.cache/fit/outpost/state/graph_processed` — processed-file index (TSV,
31
32
  shared with `extract-entities`).
32
- - `USER.md` — user identity for self-exclusion.
33
+ - `~/.cache/fit/outpost/state/identity.md` — user identity for self-exclusion
34
+ (written by the `identify-user` skill).
33
35
 
34
36
  ## Outputs
35
37
 
@@ -59,10 +61,12 @@ same way `extract-entities` processes emails and calendar events.
59
61
 
60
62
  ### 0. Set up
61
63
 
62
- Read `USER.md`. Scan unprocessed sessions:
64
+ Read the user's identity from `~/.cache/fit/outpost/state/identity.md` (run the
65
+ `identify-user` skill first if it is missing or stale). Scan unprocessed
66
+ sessions:
63
67
 
64
68
  ```bash
65
- node .claude/skills/hyprnote-process/scripts/scan.mjs
69
+ node .claude/skills/anarlog-process/scripts/scan.mjs
66
70
  ```
67
71
 
68
72
  Flags: `--changed` (also detect changed memo/summary hashes), `--json`
@@ -96,7 +100,7 @@ it). File shapes and skip rules:
96
100
 
97
101
  ### 3. Classify the source
98
102
 
99
- Hyprnote sessions are **meetings** and follow the meeting rules from
103
+ Anarlog sessions are **meetings** and follow the meeting rules from
100
104
  `extract-entities`:
101
105
 
102
106
  - **Can create** People, Organization, Project, and Topic notes.
@@ -138,10 +142,10 @@ For each processed session:
138
142
 
139
143
  ```bash
140
144
  node .claude/skills/extract-entities/scripts/state.mjs update \
141
- "$HOME/Library/Application Support/hyprnote/sessions/{uuid}/_memo.md"
145
+ "$HOME/Library/Application Support/anarlog/sessions/{uuid}/_memo.md"
142
146
 
143
147
  node .claude/skills/extract-entities/scripts/state.mjs update \
144
- "$HOME/Library/Application Support/hyprnote/sessions/{uuid}/_summary.md"
148
+ "$HOME/Library/Application Support/anarlog/sessions/{uuid}/_summary.md"
145
149
  ```
146
150
 
147
151
  (Skip the summary call if `_summary.md` doesn't exist.)
@@ -1,6 +1,6 @@
1
1
  # Entity Extraction Signals
2
2
 
3
- Reference for `hyprnote-process` Steps 3 and 4. Combine `_memo.md` and
3
+ Reference for `anarlog-process` Steps 3 and 4. Combine `_memo.md` and
4
4
  `_summary.md` (prefer the summary when both exist).
5
5
 
6
6
  ## People
@@ -34,7 +34,7 @@ or is strategically important.
34
34
  ## Self-exclusion
35
35
 
36
36
  Never create or update a note for the user — match against name, email, or
37
- `@domain` from `USER.md`.
37
+ `@domain` from `~/.cache/fit/outpost/state/identity.md`.
38
38
 
39
39
  ## Interview sessions (special case)
40
40
 
@@ -1,7 +1,7 @@
1
- # Hyprnote Session Files
1
+ # Anarlog Session Files
2
2
 
3
- Reference for `hyprnote-process` Step 1. Each session lives at
4
- `~/Library/Application Support/hyprnote/sessions/{uuid}/`.
3
+ Reference for `anarlog-process` Step 1. Each session lives at
4
+ `~/Library/Application Support/anarlog/sessions/{uuid}/`.
5
5
 
6
6
  ## `_meta.json`
7
7
 
@@ -16,7 +16,7 @@ Reference for `hyprnote-process` Step 1. Each session lives at
16
16
  ```
17
17
 
18
18
  Use: session date (from `created_at`), title, participants (often empty —
19
- Hyprnote doesn't reliably populate this).
19
+ Anarlog doesn't reliably populate this).
20
20
 
21
21
  ## `_memo.md`
22
22
 
@@ -75,7 +75,7 @@ A session is skipped when **all** of:
75
75
 
76
76
  - `_memo.md` body is empty or only `&nbsp;` / whitespace.
77
77
  - No `_summary.md` exists.
78
- - Title is empty or generic ("Hello", "Welcome to Hyprnote", "Test").
78
+ - Title is empty or generic ("Hello", "Welcome to Anarlog", "Test").
79
79
 
80
80
  Process a session if it has **either** a substantive memo **or** a
81
81
  `_summary.md`.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  /**
3
- * Scan for unprocessed Hyprnote sessions.
3
+ * Scan for unprocessed Anarlog sessions.
4
4
  *
5
5
  * Compares session _memo.md and _summary.md files against the graph_processed
6
6
  * state file to identify sessions that need processing. Reports unprocessed
@@ -19,14 +19,11 @@ import { join } from "node:path";
19
19
  import { homedir } from "node:os";
20
20
 
21
21
  const HOME = homedir();
22
- const SESSIONS_DIR = join(
23
- HOME,
24
- "Library/Application Support/hyprnote/sessions",
25
- );
22
+ const SESSIONS_DIR = join(HOME, "Library/Application Support/anarlog/sessions");
26
23
  const STATE_FILE = join(HOME, ".cache/fit/outpost/state/graph_processed");
27
24
 
28
25
  if (process.argv.includes("-h") || process.argv.includes("--help")) {
29
- console.log(`scan — find unprocessed Hyprnote sessions
26
+ console.log(`scan — find unprocessed Anarlog sessions
30
27
 
31
28
  Usage:
32
29
  node scripts/scan.mjs [options]
@@ -38,7 +35,7 @@ Options:
38
35
  --limit N Max sessions to display (default: 20)
39
36
  -h, --help Show this help message
40
37
 
41
- Sessions dir: ~/Library/Application Support/hyprnote/sessions/
38
+ Sessions dir: ~/Library/Application Support/anarlog/sessions/
42
39
  State file: ~/.cache/fit/outpost/state/graph_processed`);
43
40
  process.exit(0);
44
41
  }
@@ -129,7 +126,7 @@ function readMeta(sessionDir) {
129
126
  // --- Scan sessions ---
130
127
 
131
128
  if (!existsSync(SESSIONS_DIR)) {
132
- console.error(`Hyprnote sessions directory not found: ${SESSIONS_DIR}`);
129
+ console.error(`Anarlog sessions directory not found: ${SESSIONS_DIR}`);
133
130
  process.exit(1);
134
131
  }
135
132
 
@@ -1,12 +1,12 @@
1
1
  ---
2
- name: hyprnote-trim
3
- description: Trim a Hyprnote 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 Hyprnote transcript.
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.
4
4
  ---
5
5
 
6
6
  # Trim Transcript
7
7
 
8
- Find the logical end of a Hyprnote meeting transcript and trim everything after
9
- it. Meetings recorded with Hyprnote often have trailing noise — the mic stays on
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
10
  after goodbyes, capturing ambient sound, unrelated chatter, or silence. This
11
11
  skill identifies the natural conclusion and edits the transcript in place.
12
12
 
@@ -14,27 +14,27 @@ skill identifies the natural conclusion and edits the transcript in place.
14
14
 
15
15
  Run this skill:
16
16
 
17
- - When the user asks to trim, cut, or clean up a Hyprnote transcript
17
+ - When the user asks to trim, cut, or clean up a Anarlog transcript
18
18
  - When given a specific session ID to trim
19
- - When another skill (e.g., hyprnote-process) flags a transcript as having
19
+ - When another skill (e.g., anarlog-process) flags a transcript as having
20
20
  excessive trailing content
21
21
 
22
22
  ## Prerequisites
23
23
 
24
- - Hyprnote installed with session data at
25
- `~/Library/Application Support/hyprnote/sessions/`
24
+ - Anarlog installed with session data at
25
+ `~/Library/Application Support/anarlog/sessions/`
26
26
 
27
27
  ## Inputs
28
28
 
29
- - **Session ID** — a UUID identifying the Hyprnote session to trim
30
- - `~/Library/Application Support/hyprnote/sessions/{uuid}/transcript.json` — the
29
+ - **Session ID** — a UUID identifying the Anarlog session to trim
30
+ - `~/Library/Application Support/anarlog/sessions/{uuid}/transcript.json` — the
31
31
  word-level transcript
32
32
 
33
33
  ## Outputs
34
34
 
35
- - `~/Library/Application Support/hyprnote/sessions/{uuid}/transcript.json` —
35
+ - `~/Library/Application Support/anarlog/sessions/{uuid}/transcript.json` —
36
36
  edited in place with words after the logical end removed
37
- - `~/Library/Application Support/hyprnote/sessions/{uuid}/audio.mp3` — deleted.
37
+ - `~/Library/Application Support/anarlog/sessions/{uuid}/audio.mp3` — deleted.
38
38
  Trimming indicates the recording captured audio beyond the consented meeting,
39
39
  so the full audio must be removed to respect participant privacy.
40
40
  - Printed summary: original duration, trim point, new duration, words removed
@@ -47,7 +47,7 @@ Run this skill:
47
47
 
48
48
  1. Confirm the session directory exists:
49
49
  ```
50
- ~/Library/Application Support/hyprnote/sessions/{uuid}/
50
+ ~/Library/Application Support/anarlog/sessions/{uuid}/
51
51
  ```
52
52
  2. Confirm `transcript.json` exists and has at least one transcript with words.
53
53
  3. Read `_meta.json` to get the session title for context.
@@ -125,7 +125,7 @@ Once approved:
125
125
  ```python
126
126
  import json
127
127
 
128
- path = f'~/Library/Application Support/hyprnote/sessions/{uuid}/transcript.json'
128
+ path = f'~/Library/Application Support/anarlog/sessions/{uuid}/transcript.json'
129
129
  data = json.load(open(path))
130
130
  data['transcripts'][0]['words'] = data['transcripts'][0]['words'][:trim_index]
131
131
  json.dump(data, open(path, 'w'), indent=2)
@@ -148,7 +148,7 @@ deleted to respect participant privacy.
148
148
 
149
149
  1. Delete the audio file:
150
150
  ```bash
151
- rm "~/Library/Application Support/hyprnote/sessions/{uuid}/audio.mp3"
151
+ rm "~/Library/Application Support/anarlog/sessions/{uuid}/audio.mp3"
152
152
  ```
153
153
  2. Confirm deletion and inform the user:
154
154
  ```
@@ -50,7 +50,7 @@ before deciding whether to invest interview time.
50
50
  - [ ] Verdict class matches the overall assessment.
51
51
  - [ ] Report fits on a single A4 page (browser print preview).
52
52
  - [ ] CSS is inlined in the `<style>` block.
53
- - [ ] Footer shows the author name and role from `USER.md`.
53
+ - [ ] Footer shows the author name and role from `~/.cache/fit/outpost/state/identity.md`.
54
54
  - [ ] Written as if the candidate will read it; no special-category data.
55
55
 
56
56
  </do_confirm_checklist>
@@ -50,18 +50,18 @@ Write a one-line headline and a brief detail sentence.
50
50
 
51
51
  Drives the placeholder substitution in Step 5.
52
52
 
53
- | Section | Source |
54
- | ----------------- | ---------------------------------------------------- |
55
- | Header | Candidate name, title, org, location from `brief.md` |
56
- | Verdict | This file's verdict table |
57
- | Snapshot | 5–6 key facts (experience, education, source, stack) |
58
- | Strengths | 3–5 bullet points — what the candidate brings |
59
- | Level gauge | Estimated vs target level |
60
- | Benchmark grid | Top skills per capability area with pills |
61
- | Behaviours | Bar chart items with widths and colours |
62
- | Coverage counters | Gap / Partial / Unknown / Met counts |
63
- | Recommendation | 2–4 actionable next steps |
64
- | Footer | Author name and role from `USER.md` |
53
+ | Section | Source |
54
+ | ----------------- | ------------------------------------------------------------------ |
55
+ | Header | Candidate name, title, org, location from `brief.md` |
56
+ | Verdict | This file's verdict table |
57
+ | Snapshot | 5–6 key facts (experience, education, source, stack) |
58
+ | Strengths | 3–5 bullet points — what the candidate brings |
59
+ | Level gauge | Estimated vs target level |
60
+ | Benchmark grid | Top skills per capability area with pills |
61
+ | Behaviours | Bar chart items with widths and colours |
62
+ | Coverage counters | Gap / Partial / Unknown / Met counts |
63
+ | Recommendation | 2–4 actionable next steps |
64
+ | Footer | Author name and role from `~/.cache/fit/outpost/state/identity.md` |
65
65
 
66
66
  ## A4 single-page budget
67
67
 
@@ -19,7 +19,8 @@ under `knowledge/`. The core knowledge-graph builder.
19
19
  ## Prerequisites
20
20
 
21
21
  - Synced data in `~/.cache/fit/outpost/` and/or ad-hoc paths.
22
- - User identity in `USER.md` (Name, Email, Domain).
22
+ - User identity from running the `identify-user` skill, which writes
23
+ `~/.cache/fit/outpost/state/identity.md` (Name, Email, Domain).
23
24
 
24
25
  ## Inputs
25
26
 
@@ -28,8 +29,9 @@ under `knowledge/`. The core knowledge-graph builder.
28
29
  `~/.cache/fit/outpost/teams_chat/*.md`.
29
30
  - Ad-hoc paths: `.pdf`, `.txt`, `.md`, `.rtf`, `.doc`, `.docx`, `.csv`, `.xlsx`.
30
31
  - `~/.cache/fit/outpost/state/graph_processed` — processed-file index (TSV,
31
- shared with `req-track` and `hyprnote-process`).
32
- - `USER.md` — user identity for self-exclusion.
32
+ shared with `req-track` and `anarlog-process`).
33
+ - `~/.cache/fit/outpost/state/identity.md` — user identity for self-exclusion
34
+ (written by the `identify-user` skill).
33
35
 
34
36
  ## Outputs
35
37
 
@@ -49,7 +51,9 @@ well-grounded notes">
49
51
  - [ ] Source type correctly identified; meeting-vs-email rules applied (meetings
50
52
  create, emails only update).
51
53
  - [ ] Self and `@user.domain` excluded from extraction.
52
- - [ ] "Would I prep?" test applied to each person.
54
+ - [ ] "Would I prep?" test applied; no stub profiles — every new People note has
55
+ a substantive `## Summary`, calendar-only attendees routed to Organization
56
+ `## Contacts`.
53
57
  - [ ] All links use absolute paths `[[Folder/Name]]`; bidirectional links
54
58
  consistent (incl. Goal ↔ Project, Priority ↔ Goal).
55
59
  - [ ] Summaries describe relationship, not communication method; key facts are
@@ -71,7 +75,8 @@ writes.
71
75
 
72
76
  ### 0. Load context and pick the batch
73
77
 
74
- Read `USER.md`. Find new/changed files:
78
+ Read the user's identity from `~/.cache/fit/outpost/state/identity.md` (run the
79
+ `identify-user` skill first if it is missing or stale). Find new/changed files:
75
80
 
76
81
  ```bash
77
82
  node scripts/state.mjs check
@@ -183,5 +188,5 @@ node scripts/state.mjs update "$FILE"
183
188
  ```
184
189
 
185
190
  Run for every processed file. The state file is shared with `req-track` and
186
- `hyprnote-process`, so this prevents either skill from re-scanning the same
191
+ `anarlog-process`, so this prevents either skill from re-scanning the same
187
192
  input.
@@ -1,14 +1,14 @@
1
1
  # Note Templates
2
2
 
3
3
  Templates for creating new knowledge-base notes. Split by entity family to keep
4
- each file under the L5 cap. `hyprnote-process` references this file as the
4
+ each file under the L5 cap. `anarlog-process` references this file as the
5
5
  index.
6
6
 
7
7
  - [templates-people-orgs.md](templates-people-orgs.md) — People, Organizations.
8
8
  - [templates-projects-topics.md](templates-projects-topics.md) — Projects,
9
9
  Topics.
10
10
  - [templates-goals-priorities.md](templates-goals-priorities.md) — Goals,
11
- Priorities. **Never auto-created** by `extract-entities` or `hyprnote-process`
11
+ Priorities. **Never auto-created** by `extract-entities` or `anarlog-process`
12
12
  — set by the user.
13
13
  - [templates-conditions.md](templates-conditions.md) — Conditions (time-bound
14
14
  cross-cutting states).
@@ -21,7 +21,8 @@ When a calendar event title matches an interview pattern — "Interview",
21
21
  "Candidate" — combined with a person name:
22
22
 
23
23
  1. Cross-reference the candidate against `knowledge/Candidates/`.
24
- 2. Extract the **organizer**. If the organizer isn't the user (per `USER.md`),
24
+ 2. Extract the **organizer**. If the organizer isn't the user (per
25
+ `~/.cache/fit/outpost/state/identity.md`),
25
26
  they are likely the hiring manager.
26
27
  3. Confirm: look up the organizer in `knowledge/People/` for a manager/HM role
27
28
  indication.