@forwardimpact/outpost 3.3.0 → 3.3.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/package.json +1 -1
- package/src/kb-manager.js +1 -6
- package/templates/.claude/agents/chief-of-staff.md +0 -3
- package/templates/.claude/agents/concierge.md +3 -3
- package/templates/.claude/agents/librarian.md +0 -1
- package/templates/.claude/settings.json +2 -2
- package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/SKILL.md +12 -12
- package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/references/coaching.md +3 -3
- package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/references/debrief.md +2 -2
- package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/references/meeting-types.md +1 -1
- package/templates/.claude/skills/{hyprnote-follow → anarlog-follow}/scripts/follow.mjs +3 -3
- package/templates/.claude/skills/{hyprnote-process → anarlog-process}/SKILL.md +20 -16
- package/templates/.claude/skills/{hyprnote-process → anarlog-process}/references/extraction.md +2 -2
- package/templates/.claude/skills/{hyprnote-process → anarlog-process}/references/sessions.md +5 -5
- package/templates/.claude/skills/{hyprnote-process → anarlog-process}/scripts/scan.mjs +5 -8
- package/templates/.claude/skills/{hyprnote-trim → anarlog-trim}/SKILL.md +15 -15
- package/templates/.claude/skills/candidate-report/SKILL.md +1 -1
- package/templates/.claude/skills/candidate-report/references/rubric.md +12 -12
- package/templates/.claude/skills/extract-entities/SKILL.md +11 -6
- package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +2 -2
- package/templates/.claude/skills/extract-entities/references/recruitment.md +2 -1
- package/templates/.claude/skills/extract-entities/references/resolution.md +15 -0
- package/templates/.claude/skills/extract-entities/references/sources.md +8 -1
- package/templates/.claude/skills/extract-entities/references/templates-goals-priorities.md +1 -1
- package/templates/.claude/skills/identify-user/SKILL.md +103 -0
- package/templates/.claude/skills/identify-user/scripts/identify.sh +89 -0
- package/templates/.claude/skills/req-assess/SKILL.md +1 -1
- package/templates/.claude/skills/req-track/SKILL.md +7 -4
- package/templates/.claude/skills/req-workday/SKILL.md +5 -3
- package/templates/.claude/skills/sync-teams/scripts/sync.mjs +4 -3
- package/templates/.claude/skills/upstream-skill/references/examples.md +5 -5
- package/templates/CLAUDE.md +45 -46
- package/templates/.claude/skills/manage-tasks/SKILL.md +0 -152
- package/templates/.claude/skills/manage-tasks/references/format.md +0 -73
- package/templates/.claude/skills/weekly-update/SKILL.md +0 -141
- package/templates/.claude/skills/weekly-update/references/template.md +0 -55
- 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.
|
|
3
|
+
"version": "3.3.1",
|
|
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.
|
|
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
|
-
-
|
|
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
|
|
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 **
|
|
29
|
+
over **anarlog-process** (catch-up work).
|
|
30
30
|
|
|
31
31
|
## Scope
|
|
32
32
|
|
|
@@ -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/
|
|
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/
|
|
81
|
+
"~/Library/Application Support/anarlog",
|
|
82
82
|
"~/Desktop",
|
|
83
83
|
"~/Documents",
|
|
84
84
|
"~/Downloads",
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: anarlog-follow
|
|
3
3
|
description: >
|
|
4
|
-
Follow a live
|
|
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
|
-
#
|
|
11
|
+
# Anarlog Follow
|
|
12
12
|
|
|
13
|
-
Follow a live
|
|
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
|
|
22
|
+
- The user starts a Anarlog recording and wants real-time support.
|
|
23
23
|
|
|
24
24
|
## Prerequisites
|
|
25
25
|
|
|
26
|
-
-
|
|
27
|
-
`~/Library/Application Support/
|
|
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` / `
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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 `
|
|
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
|
|
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 `
|
|
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 `
|
|
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
|
|
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,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* follow.mjs — Read a live
|
|
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/
|
|
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
|
|
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:
|
|
3
|
-
description: Process
|
|
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
|
|
6
|
+
# Process Anarlog
|
|
7
7
|
|
|
8
|
-
Process meeting sessions from
|
|
9
|
-
knowledge graph.
|
|
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
|
|
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
|
-
-
|
|
22
|
-
`~/Library/Application Support/
|
|
23
|
-
- User identity
|
|
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/
|
|
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
|
-
-
|
|
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
|
|
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/
|
|
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
|
-
|
|
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/
|
|
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/
|
|
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.)
|
package/templates/.claude/skills/{hyprnote-process → anarlog-process}/references/extraction.md
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Entity Extraction Signals
|
|
2
2
|
|
|
3
|
-
Reference for `
|
|
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
|
|
37
|
+
`@domain` from `~/.cache/fit/outpost/state/identity.md`.
|
|
38
38
|
|
|
39
39
|
## Interview sessions (special case)
|
|
40
40
|
|
package/templates/.claude/skills/{hyprnote-process → anarlog-process}/references/sessions.md
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Anarlog Session Files
|
|
2
2
|
|
|
3
|
-
Reference for `
|
|
4
|
-
`~/Library/Application Support/
|
|
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
|
-
|
|
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 ` ` / whitespace.
|
|
77
77
|
- No `_summary.md` exists.
|
|
78
|
-
- Title is empty or generic ("Hello", "Welcome to
|
|
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
|
|
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
|
|
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/
|
|
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(`
|
|
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:
|
|
3
|
-
description: Trim a
|
|
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
|
|
9
|
-
it. Meetings recorded with
|
|
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
|
|
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.,
|
|
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
|
-
-
|
|
25
|
-
`~/Library/Application Support/
|
|
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
|
|
30
|
-
- `~/Library/Application Support/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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
|
|
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
|
|
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
|
|
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 `
|
|
32
|
-
-
|
|
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
|
|
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
|
|
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
|
-
`
|
|
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. `
|
|
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 `
|
|
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
|
|
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.
|