@forwardimpact/outpost 3.12.0 → 3.13.0

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 (129) hide show
  1. package/README.md +2 -2
  2. package/bin/fit-outpost.js +3 -2
  3. package/package.json +6 -5
  4. package/src/agent-path.js +10 -6
  5. package/src/agent-runner.js +28 -24
  6. package/src/index.js +2 -3
  7. package/src/kb-manager.js +75 -20
  8. package/src/kb-validator.js +762 -0
  9. package/src/outpost.js +108 -39
  10. package/src/posture.js +3 -3
  11. package/src/privilege.js +11 -11
  12. package/src/scheduler.js +14 -12
  13. package/src/socket-server.js +19 -18
  14. package/src/spawn-env.js +7 -6
  15. package/src/state-manager.js +2 -2
  16. package/templates/.claude/agents/chief-of-staff.md +32 -24
  17. package/templates/.claude/agents/concierge.md +26 -17
  18. package/templates/.claude/agents/head-hunter.md +34 -26
  19. package/templates/.claude/agents/librarian.md +26 -18
  20. package/templates/.claude/agents/postman.md +26 -18
  21. package/templates/.claude/agents/recruiter.md +38 -27
  22. package/templates/.claude/skills/anarlog-follow/SKILL.md +91 -66
  23. package/templates/.claude/skills/anarlog-follow/references/coaching.md +22 -21
  24. package/templates/.claude/skills/anarlog-follow/references/sessions.md +52 -0
  25. package/templates/.claude/skills/anarlog-process/SKILL.md +108 -62
  26. package/templates/.claude/skills/anarlog-process/references/extraction.md +41 -29
  27. package/templates/.claude/skills/anarlog-process/references/sessions.md +92 -58
  28. package/templates/.claude/skills/anarlog-process/scripts/scan.mjs +402 -160
  29. package/templates/.claude/skills/candidate-report/SKILL.md +41 -36
  30. package/templates/.claude/skills/candidate-report/references/report-template.html +10 -10
  31. package/templates/.claude/skills/candidate-report/references/report.css +4 -4
  32. package/templates/.claude/skills/candidate-report/references/rubric.md +15 -14
  33. package/templates/.claude/skills/candidate-report/scripts/render-pdf.mjs +2 -2
  34. package/templates/.claude/skills/changelog/SKILL.md +122 -67
  35. package/templates/.claude/skills/deck-create/SKILL.md +90 -32
  36. package/templates/.claude/skills/deck-create/references/slide.css +4 -4
  37. package/templates/.claude/skills/deck-create/scripts/convert-to-pdf.mjs +6 -6
  38. package/templates/.claude/skills/deck-review/SKILL.md +63 -58
  39. package/templates/.claude/skills/deck-review/assets/slide-annotator.js +58 -49
  40. package/templates/.claude/skills/deck-summarize/SKILL.md +55 -45
  41. package/templates/.claude/skills/deck-summarize/references/brief-template.md +5 -4
  42. package/templates/.claude/skills/deck-summarize/scripts/extract-pptx.mjs +8 -7
  43. package/templates/.claude/skills/doc-collab/SKILL.md +39 -34
  44. package/templates/.claude/skills/doc-create/SKILL.md +27 -23
  45. package/templates/.claude/skills/doc-create/scripts/convert-to-pdf.mjs +6 -6
  46. package/templates/.claude/skills/draft-emails/SKILL.md +63 -53
  47. package/templates/.claude/skills/draft-emails/references/template.md +2 -2
  48. package/templates/.claude/skills/draft-emails/scripts/scan-emails.mjs +15 -8
  49. package/templates/.claude/skills/draft-emails/scripts/send-email.mjs +19 -11
  50. package/templates/.claude/skills/extract-entities/SKILL.md +76 -75
  51. package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +6 -5
  52. package/templates/.claude/skills/extract-entities/references/conditions.md +20 -18
  53. package/templates/.claude/skills/extract-entities/references/content.md +10 -9
  54. package/templates/.claude/skills/extract-entities/references/links.md +37 -13
  55. package/templates/.claude/skills/extract-entities/references/recruitment.md +30 -24
  56. package/templates/.claude/skills/extract-entities/references/resolution.md +14 -14
  57. package/templates/.claude/skills/extract-entities/references/sources.md +9 -9
  58. package/templates/.claude/skills/extract-entities/references/templates-conditions.md +12 -6
  59. package/templates/.claude/skills/extract-entities/references/templates-people-orgs.md +29 -10
  60. package/templates/.claude/skills/extract-entities/references/templates-priorities.md +10 -4
  61. package/templates/.claude/skills/extract-entities/references/templates-projects-topics.md +19 -7
  62. package/templates/.claude/skills/extract-entities/scripts/state.mjs +9 -8
  63. package/templates/.claude/skills/meeting-prep/SKILL.md +42 -36
  64. package/templates/.claude/skills/organize-files/SKILL.md +27 -22
  65. package/templates/.claude/skills/organize-files/scripts/organize-by-type.mjs +5 -4
  66. package/templates/.claude/skills/organize-files/scripts/summarize.mjs +4 -4
  67. package/templates/.claude/skills/person-identify/SKILL.md +77 -27
  68. package/templates/.claude/skills/person-identify/scripts/identify.sh +125 -26
  69. package/templates/.claude/skills/person-lookup/SKILL.md +34 -30
  70. package/templates/.claude/skills/person-lookup/scripts/lookup.sh +46 -17
  71. package/templates/.claude/skills/req-assess/SKILL.md +44 -36
  72. package/templates/.claude/skills/req-assess/references/interview-template.md +7 -2
  73. package/templates/.claude/skills/req-assess/references/panel-template.md +7 -2
  74. package/templates/.claude/skills/req-assess/references/rubric.md +13 -13
  75. package/templates/.claude/skills/req-bundle/SKILL.md +164 -0
  76. package/templates/.claude/skills/req-bundle/references/matching.md +70 -0
  77. package/templates/.claude/skills/req-bundle/references/pdf-structure.md +74 -0
  78. package/templates/.claude/skills/req-bundle/scripts/split-bundle.mjs +377 -0
  79. package/templates/.claude/skills/req-decide/SKILL.md +52 -41
  80. package/templates/.claude/skills/req-decide/references/rubric.md +11 -10
  81. package/templates/.claude/skills/req-decide/references/template.md +2 -2
  82. package/templates/.claude/skills/req-forget/SKILL.md +58 -39
  83. package/templates/.claude/skills/req-forget/references/classify.md +15 -13
  84. package/templates/.claude/skills/req-forget/references/locations.md +27 -22
  85. package/templates/.claude/skills/req-forget/references/report-template.md +24 -16
  86. package/templates/.claude/skills/req-scan/SKILL.md +27 -25
  87. package/templates/.claude/skills/req-scan/references/fallbacks.md +9 -9
  88. package/templates/.claude/skills/req-scan/references/filters.md +13 -13
  89. package/templates/.claude/skills/req-scan/references/sources.md +7 -7
  90. package/templates/.claude/skills/req-scan/references/state.md +1 -1
  91. package/templates/.claude/skills/req-scan/references/template.md +11 -1
  92. package/templates/.claude/skills/req-scan/scripts/state.mjs +3 -2
  93. package/templates/.claude/skills/req-screen/SKILL.md +96 -50
  94. package/templates/.claude/skills/req-screen/references/rubric.md +46 -50
  95. package/templates/.claude/skills/req-screen/references/scoring.md +79 -0
  96. package/templates/.claude/skills/req-screen/references/template.md +29 -17
  97. package/templates/.claude/skills/req-track/SKILL.md +76 -76
  98. package/templates/.claude/skills/req-track/references/fields.md +31 -27
  99. package/templates/.claude/skills/req-track/references/overlays.md +42 -0
  100. package/templates/.claude/skills/req-track/references/signals.md +12 -12
  101. package/templates/.claude/skills/req-track/references/statuses.md +3 -2
  102. package/templates/.claude/skills/req-track/references/templates.md +28 -27
  103. package/templates/.claude/skills/req-workday/SKILL.md +69 -40
  104. package/templates/.claude/skills/req-workday/references/brief.md +81 -0
  105. package/templates/.claude/skills/req-workday/references/status-mapping.md +5 -5
  106. package/templates/.claude/skills/req-workday/references/templates.md +11 -78
  107. package/templates/.claude/skills/req-workday/references/xlsx-format.md +26 -7
  108. package/templates/.claude/skills/req-workday/scripts/parse-workday.mjs +113 -35
  109. package/templates/.claude/skills/send-chat/SKILL.md +58 -54
  110. package/templates/.claude/skills/sync-apple-calendar/SKILL.md +23 -19
  111. package/templates/.claude/skills/sync-apple-calendar/references/SCHEMA.md +7 -7
  112. package/templates/.claude/skills/sync-apple-calendar/scripts/query.mjs +6 -6
  113. package/templates/.claude/skills/sync-apple-calendar/scripts/sync.mjs +9 -8
  114. package/templates/.claude/skills/sync-apple-mail/SKILL.md +20 -14
  115. package/templates/.claude/skills/sync-apple-mail/references/SCHEMA.md +10 -10
  116. package/templates/.claude/skills/sync-apple-mail/scripts/parse-emlx.mjs +9 -9
  117. package/templates/.claude/skills/sync-apple-mail/scripts/sync-helpers.mjs +16 -13
  118. package/templates/.claude/skills/sync-apple-mail/scripts/sync.mjs +3 -3
  119. package/templates/.claude/skills/sync-teams/SKILL.md +46 -43
  120. package/templates/.claude/skills/sync-teams/scripts/idb-reader.mjs +22 -21
  121. package/templates/.claude/skills/sync-teams/scripts/leveldb-reader.mjs +4 -4
  122. package/templates/.claude/skills/sync-teams/scripts/sync.mjs +4 -4
  123. package/templates/.claude/skills/upstream-instructions/SKILL.md +43 -41
  124. package/templates/.claude/skills/upstream-instructions/references/examples.md +5 -5
  125. package/templates/CLAUDE.md +97 -85
  126. package/templates/MIGRATION.md +359 -0
  127. package/templates/registry.yaml +25 -0
  128. package/templates/.claude/skills/anarlog-follow/scripts/follow.mjs +0 -243
  129. package/templates/.claude/skills/anarlog-trim/SKILL.md +0 -183
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: anarlog-follow
3
3
  description: >
4
- Follow a live Anarlog session in real-time, coaching the user through a
4
+ Follow a live Anarlog session in real-time and coach 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.
@@ -10,48 +10,60 @@ description: >
10
10
 
11
11
  # Anarlog Follow
12
12
 
13
- Follow a live Anarlog recording, read the transcript as it grows, and coach the
14
- user through the meeting in real time. Gather knowledge-base context once before
15
- the session, then poll the transcript and provide actionable nudges as new
16
- content appears.
13
+ Write tier: none
14
+ Frontmatter: none
15
+
16
+ Follow a live Anarlog recording. Read the transcript as it grows. Coach the user
17
+ through the meeting in real time. Gather knowledge-base context once before the
18
+ session. Then poll the transcript. Provide actionable nudges as new content
19
+ appears.
17
20
 
18
21
  ## Trigger
19
22
 
20
23
  - The user asks to follow, shadow, or coach them through a live meeting.
21
24
  - "Follow my meeting", "coach me", "shadow this call".
22
- - The user starts a Anarlog recording and wants real-time support.
25
+ - The user starts an Anarlog recording and wants real-time support.
23
26
 
24
27
  ## Prerequisites
25
28
 
26
- - Anarlog installed; sessions at
27
- `~/Library/Application Support/anarlog/sessions/`.
29
+ - Anarlog installed. Meetings live in its local SQLite database (`app.db`).
30
+ Read them only through Anarlog's typed, read-only interfaces. Prefer the
31
+ **Anarlog MCP tools** (`list_meetings`, `get_meeting`,
32
+ `get_meeting_transcript`) when the MCP server is connected. Fall back to the
33
+ **`anarlog` CLI with `--json`** otherwise. Never `grep`, crawl `sessions/`,
34
+ or query SQLite directly. See Anarlog's own `AGENTS.md`
35
+ (`~/Library/Application Support/anarlog/AGENTS.md`).
28
36
  - An active or about-to-start session.
29
- - Knowledge base populated (attendee / candidate context).
37
+ - A populated knowledge base (attendee / candidate context).
30
38
 
31
39
  ## Inputs
32
40
 
33
- - Live `transcript.json` (growing during the session).
34
- - `Knowledge/People/`, `Knowledge/Candidates/{Name}/{brief,screening,panel}.md`,
35
- `Knowledge/Roles/`, `Knowledge/Organizations/`, `Knowledge/Projects/`.
41
+ - The live meeting transcript, via `get_meeting_transcript` (MCP) or
42
+ `anarlog --json meetings transcript <id>` (CLI). See
43
+ [references/sessions.md](references/sessions.md) for both interfaces.
44
+ - `3-Team/People/`,
45
+ `2-Confidential/Candidates/{Name}/{brief,screening,panel}.md`,
46
+ `2-Confidential/Roles/`, `3-Team/Organizations/`, `3-Team/Projects/`.
36
47
  - `~/.cache/fit/outpost/apple_calendar/*.json` for context.
37
48
 
38
49
  ## Outputs
39
50
 
40
- - Real-time coaching messages printed to the user.
41
- - **No files are written.** This skill is purely advisory.
51
+ - This skill prints real-time coaching messages to the user.
52
+ - **This skill writes no files.** It only advises.
42
53
 
43
54
  <do_confirm_checklist goal="Verify the follow session was useful and read-only">
44
55
 
45
- - [ ] Active session detected and confirmed with the user.
46
- - [ ] Meeting type classified from the title.
47
- - [ ] Knowledge-base context gathered for all attendees.
48
- - [ ] For interviews: standard expectations and screening focus areas loaded.
49
- - [ ] Coaching nudges were actionable and concise (1–3 lines each).
50
- - [ ] Coverage gaps tracked and surfaced before the meeting ended.
51
- - [ ] End-of-meeting detected; debrief provided.
52
- - [ ] Next steps offered (`req-assess` / `anarlog-process`); user decided
53
- whether to run them.
54
- - [ ] No files were modified during the session.
56
+ - [ ] Detect the active session and confirm it with the user.
57
+ - [ ] Classify the meeting type from the title.
58
+ - [ ] Gather knowledge-base context for all attendees.
59
+ - [ ] For interviews, load the standard expectations and the focus areas from
60
+ screening.
61
+ - [ ] Keep each coaching nudge actionable and concise (1–3 lines).
62
+ - [ ] Track the coverage gaps. Surface them before the meeting ends.
63
+ - [ ] Detect the end of the meeting. Debrief the user.
64
+ - [ ] Offer the next steps (`req-assess` / `anarlog-process`). Let the user
65
+ decide whether to run them.
66
+ - [ ] Modify no file during the session.
55
67
 
56
68
  </do_confirm_checklist>
57
69
 
@@ -61,112 +73,125 @@ content appears.
61
73
 
62
74
  #### 1. Find the active session
63
75
 
76
+ No interface exposes a "recording now" signal. The only liveness signal is the
77
+ most recently written `audio.mp3` on disk. This is the one deliberate
78
+ filesystem read in this skill. All content reads go through Anarlog's
79
+ interfaces. The session directory name **is** the meeting ID:
80
+
64
81
  ```bash
65
- node .claude/skills/anarlog-follow/scripts/follow.mjs --detect
82
+ find "$HOME/Library/Application Support/anarlog/sessions" -maxdepth 2 \
83
+ -name "audio.mp3" -exec stat -f "%m %N" {} \; | sort -rn | head -5
66
84
  ```
67
85
 
68
- Returns the most recently modified session, whether it's live, and its title. If
69
- nothing has been modified in the last 5 minutes, warn the user and ask whether
70
- to follow a specific session. If multiple sessions could be active, confirm with
71
- the user.
86
+ Take the top result's parent directory name as the candidate meeting ID. If
87
+ its mtime is more than 5 minutes old, warn the user. Ask whether to follow a
88
+ specific meeting. If more than one session could be active, confirm with the
89
+ user.
90
+
91
+ #### 2. Read meeting metadata
72
92
 
73
- #### 2. Read session metadata
93
+ MCP: `get_meeting({ meeting_id })`. CLI fallback:
74
94
 
75
95
  ```bash
76
- node .claude/skills/anarlog-follow/scripts/follow.mjs <session-id> --meta
96
+ anarlog --json meetings get <meeting-id>
77
97
  ```
78
98
 
79
- Capture **title**, **created_at**, **participants**.
99
+ Capture **title**, **created_at**, **participants** from `data`.
80
100
 
81
101
  #### 3. Classify the meeting type
82
102
 
83
- Title pattern type → coaching focus:
84
- [references/meeting-types.md](references/meeting-types.md). The type drives
85
- Phase 2 context loading and Phase 3 dimensions.
103
+ [references/meeting-types.md](references/meeting-types.md) maps the title
104
+ pattern → type → coaching focus. The type drives the context you load in
105
+ Phase 2 and the dimensions you track in Phase 3.
86
106
 
87
107
  ### Phase 2 — Gather context (once)
88
108
 
89
109
  #### 4. Resolve attendees
90
110
 
91
- Extract names from title and participant list. For each:
111
+ Extract the names from the title and the participant list. For each name:
92
112
 
93
113
  ```bash
94
- rg -l "{name}" Knowledge/People/
95
- rg -l "{name}" Knowledge/Candidates/
114
+ rg -l "{name}" 3-Team/People/
115
+ rg -l "{name}" 2-Confidential/Candidates/
96
116
  ```
97
117
 
98
- Read matching notes for role, organization, history, open items, prior
118
+ Read each note you find for role, organization, history, open items, and prior
99
119
  interactions.
100
120
 
101
121
  #### 5. Load type-specific context
102
122
 
103
- **Interviews:** read `Knowledge/Candidates/{Name}/{brief,screening,panel}.md`,
104
- look up the `Req` field's matching `Knowledge/Roles/*.md` file (check the
105
- `**Status:**` field for context), and load standard expectations:
123
+ **Interviews:** read
124
+ `2-Confidential/Candidates/{Name}/{brief,screening,panel}.md`. Look up the `Req`
125
+ field's matching `2-Confidential/Roles/*.md` file. Check its `**Status:**` field
126
+ for context. Then load the standard expectations:
106
127
 
107
128
  ```bash
108
129
  bunx fit-pathway job {discipline} {level} --track={track}
109
130
  ```
110
131
 
111
132
  **General meetings:** read attendee People notes plus referenced
112
- Project/Organization notes. Check open tasks: `rg "{name}" Knowledge/Tasks/`.
133
+ Project/Organization notes. Check open tasks: `rg "{name}" 3-Team/Tasks/`.
113
134
 
114
135
  #### 6. Build the coaching brief
115
136
 
116
- Synthesize gathered context into the pre-meeting brief format in
117
- [references/coaching.md](references/coaching.md#pre-meeting-brief-format) and
118
- print it to the user.
137
+ Synthesize the gathered context into the pre-meeting brief format in
138
+ [references/coaching.md](references/coaching.md#pre-meeting-brief-format). Print
139
+ it to the user.
119
140
 
120
141
  ### Phase 3 — Follow loop
121
142
 
122
143
  #### 7. Read new transcript content
123
144
 
124
- First read (no `--after`):
145
+ MCP: `get_meeting_transcript({ meeting_id, offset, limit: 500 })`. CLI
146
+ fallback:
125
147
 
126
148
  ```bash
127
- node .claude/skills/anarlog-follow/scripts/follow.mjs <session-id>
149
+ anarlog --json meetings transcript <meeting-id> --offset <offset> --limit 500
128
150
  ```
129
151
 
130
- Subsequent reads (pass the last word ID):
131
-
132
- ```bash
133
- node .claude/skills/anarlog-follow/scripts/follow.mjs <session-id> --after <last-word-id>
134
- ```
152
+ First read: `offset` = 0. Each later read: `offset` = the `pagination.total`
153
+ from the previous read. That fetches only the words added since then. When a
154
+ page comes back full and `next_offset < pagination.total`, keep paging with
155
+ `next_offset` until you catch up. Track `total` across reads. It is your next
156
+ offset.
135
157
 
136
- Returns JSON with grouped text segments, channel labels, and the next last-word
137
- ID.
158
+ `data.words` is a flat array of `{ channel, text, start_ms, end_ms }`. Group
159
+ consecutive words into segments yourself. Start a new segment on a channel
160
+ change or a >3s gap between one word's `end_ms` and the next word's
161
+ `start_ms`. Channel `0` = user. Channel `1`+ = guest(s) (a heuristic, per
162
+ Anarlog's own docs).
138
163
 
139
164
  #### 8. Analyze new content
140
165
 
141
- Track the dimensions in
142
- [references/coaching.md](references/coaching.md#dimensions-to-track) interview
143
- vs. general — and apply the [principles](references/coaching.md#principles) and
166
+ Track the interview dimensions or the general dimensions in
167
+ [references/coaching.md](references/coaching.md#dimensions-to-track). Apply the
168
+ [principles](references/coaching.md#principles) and the
144
169
  [constraints](references/coaching.md#constraints).
145
170
 
146
171
  #### 9. Provide coaching
147
172
 
148
- Output only when actionable. Use the
173
+ Output only when the nudge is actionable. Use the
149
174
  [coaching output formats](references/coaching.md#coaching-output-formats). Keep
150
175
  each nudge 1–3 lines.
151
176
 
152
177
  #### 10. Detect meeting end
153
178
 
154
- Watch for: farewells ("bye", "take care", "have a good day"), wrap-up phrases
155
- ("that's all", "let's wrap", "I'll let you go"), or final thank-yous with no
156
- substantive follow-up. When detected, move to Phase 4.
179
+ Watch for farewells ("bye", "take care", "have a good day"). Watch for wrap-up
180
+ phrases ("that's all", "let's wrap", "I'll let you go"). Watch for final
181
+ thank-yous with no substantive follow-up. When you detect one, move to Phase 4.
157
182
 
158
183
  #### 11. Loop cadence
159
184
 
160
185
  **Do not use `sleep` or timed loops.** After each coaching output, read the next
161
- batch immediately natural cadence emerges from read/analyze/output. On two
162
- consecutive empty reads, ask the user whether the meeting has ended.
186
+ batch immediately. A natural cadence emerges from read/analyze/output. After two
187
+ consecutive empty reads, ask the user whether the meeting ended.
163
188
 
164
189
  ### Phase 4 — Wrap-up
165
190
 
166
191
  #### 12–13. Debrief
167
192
 
168
- Use the appropriate template in [references/debrief.md](references/debrief.md)
169
- interview vs. general.
193
+ Pick the interview template or the general template in
194
+ [references/debrief.md](references/debrief.md).
170
195
 
171
196
  #### 14. Offer next steps
172
197
 
@@ -45,19 +45,19 @@ Suggested topics:
45
45
 
46
46
  | Dimension | What to watch for |
47
47
  | ----------------------- | ---------------------------------------------------------------------------------- |
48
- | **Skills demonstrated** | Candidate shows (not just claims) standard skills |
48
+ | **Skills demonstrated** | Candidate shows standard skills. A claim alone does not count. |
49
49
  | **Behaviour signals** | Own the Outcome, Think in Systems, Communicate with Precision, Polymath, Curiosity |
50
50
  | **Level signals** | Autonomy, scope, complexity handling, mentoring |
51
- | **Coverage gaps** | Focus areas from screening that haven't been touched yet |
51
+ | **Coverage gaps** | Focus areas from screening that you did not touch yet |
52
52
  | **Red flags** | Contradictions with CV, vague answers, deflection |
53
- | **Time awareness** | Are you running out of time with uncovered areas? |
53
+ | **Time awareness** | Time runs out while areas stay uncovered |
54
54
 
55
55
  ### General meetings
56
56
 
57
57
  | Dimension | What to watch for |
58
58
  | --------------------- | ---------------------------------------------------- |
59
- | **Open items** | Were pending items raised and addressed? |
60
- | **Decisions** | What was decided? Who owns next steps? |
59
+ | **Open items** | Someone raised and addressed the pending items |
60
+ | **Decisions** | The decisions made, and who owns the next steps |
61
61
  | **New commitments** | Track who committed to what |
62
62
  | **Unasked questions** | Topics the user should raise before the meeting ends |
63
63
  | **Tone/dynamics** | Shifts in energy, resistance, enthusiasm |
@@ -81,30 +81,31 @@ Capture: decision made on {topic} — {who} will {what}
81
81
 
82
82
  - **Standard-grounded.** Every nudge ties to standard skills/behaviours. Don't
83
83
  coach on vibes.
84
- - **Evidence over claims.** Flag _claims_ vs. _demonstrations_; push for
84
+ - **Evidence over claims.** Flag _claims_ vs. _demonstrations_. Push for
85
85
  specific examples.
86
- - **Coverage-aware.** Track which screening focus areas have been explored and
87
- nudge before time runs out.
88
- - **Level-calibrated.** Know what the target level expects; flag
86
+ - **Coverage-aware.** Track which screening focus areas you explored. Nudge
87
+ before time runs out.
88
+ - **Level-calibrated.** Know what the target level expects. Flag
89
89
  below-/above-level answers.
90
- - **Don't lead.** Suggest open-ended probes, never loaded or leading questions.
90
+ - **Don't lead.** Suggest open-ended probes. Never suggest a loaded or leading
91
+ question.
91
92
 
92
93
  ### General meetings
93
94
 
94
95
  - **Agenda-aware.** Track coverage of known topics or open items.
95
96
  - **Decision-focused.** Flag decisions and capture owners.
96
- - **Commitment-tracking.** Note who said they'd do what; surface unresolved
97
- commitments from prior meetings.
98
- - **Time-conscious.** Nudge when the meeting is running long and key topics
99
- aren't raised.
97
+ - **Commitment-tracking.** Note who said they would do what. Surface unresolved
98
+ commitments from earlier meetings.
99
+ - **Time-conscious.** Nudge when the meeting runs long and nobody raises the key
100
+ topics.
100
101
 
101
102
  ### Universal
102
103
 
103
- - **Be quiet when things are going well.** Speak only when actionable.
104
- - **Channel awareness.** Channel 0 = user; channel 1+ = guest(s). Reference what
105
- the _guest_ said the user already knows what they said.
104
+ - **Be quiet when things go well.** Speak only when actionable.
105
+ - **Channel awareness.** Channel 0 = user. Channel 1+ = guest(s). Reference what
106
+ the _guest_ said. The user already knows what they said.
106
107
  - **Never interrupt flow.** Hold nudges for the next natural pause.
107
- - **Respect the user.** Coach at the margin, don't patronise.
108
+ - **Respect the user.** Coach at the margin. Do not patronise.
108
109
 
109
110
  ## Constraints
110
111
 
@@ -113,6 +114,6 @@ Capture: decision made on {topic} — {who} will {what}
113
114
  `req-assess`, or `anarlog-process`. Offer them after.
114
115
  - **Channel 0 = user.** Always.
115
116
  - **Transcription noise.** Live transcripts are messy. Don't coach from a single
116
- ambiguous word wait for context.
117
- - **Privacy.** Coaching may appear on a shared screen keep nudges generic
118
- enough that they don't reveal confidential assessment detail.
117
+ ambiguous word. Wait for context.
118
+ - **Privacy.** Coaching may appear on a shared screen. Keep nudges generic. They
119
+ must not reveal confidential assessment detail.
@@ -0,0 +1,52 @@
1
+ # Anarlog Meeting Data
2
+
3
+ Reference for `anarlog-follow` Phases 1 and 3. Anarlog stores meetings in a
4
+ local SQLite database (`~/Library/Application Support/anarlog/app.db`). Read
5
+ them through Anarlog's typed, read-only interfaces. Its own `AGENTS.md`
6
+ (`~/Library/Application Support/anarlog/AGENTS.md`) is explicit:
7
+
8
+ > Use Anarlog's typed, read-only interfaces for meeting data. Do not use
9
+ > `find`, `grep`, `rg`, filesystem crawling, or direct SQLite queries.
10
+
11
+ **Prefer the MCP tools** when the `anarlog` MCP server is connected. **Fall
12
+ back to the CLI** (`anarlog --json ...`) otherwise. Never guess a meeting ID.
13
+ Phase 1 resolves it from the freshest `audio.mp3` on disk (the one signal
14
+ neither interface exposes). Every other read goes through one of the two
15
+ interfaces below.
16
+
17
+ ## `get_meeting` / `meetings get <id>`
18
+
19
+ MCP: `get_meeting({ meeting_id })`. CLI:
20
+ `anarlog --json meetings get <meeting-id>`.
21
+
22
+ Returns `title`, `created_at`, `participants` (`{ human_id, display_name,
23
+ email, role, job_title, organization_name }`, often sparse), `note`,
24
+ `summaries`, `action_items`. For a live meeting, `note` and `summaries` are
25
+ usually thin or empty. That is expected. They fill in once the meeting ends.
26
+ Use this once per session, in Phase 1 Step 2, to capture the pre-meeting brief
27
+ inputs.
28
+
29
+ ## `get_meeting_transcript` / `meetings transcript <id>`
30
+
31
+ MCP: `get_meeting_transcript({ meeting_id, offset, limit })`. CLI:
32
+ `anarlog --json meetings transcript <meeting-id> --offset <n> --limit <n>`
33
+ (`limit` capped at 500 by both interfaces).
34
+
35
+ ```json
36
+ { "meeting_id": "…", "text": "Yeah, so the overall …",
37
+ "words": [ { "channel": 0, "text": " Yeah,", "start_ms": 0, "end_ms": 400 } ] }
38
+ ```
39
+
40
+ `pagination.total` is the running word count. Use it as the next poll's
41
+ `offset` so you fetch only the words added since the last read. Page with
42
+ `next_offset` when a single poll returns a full page and more remain. Channel
43
+ `0` = user, channel `1`+ = guest(s) — a heuristic, not guaranteed.
44
+
45
+ ## The one filesystem exception: liveness detection
46
+
47
+ Neither interface reports which meeting is currently recording. The only
48
+ signal for that lives on disk: the most recently written `audio.mp3` under
49
+ `~/Library/Application Support/anarlog/sessions/{uuid}/`, where the directory
50
+ name is the meeting ID. This skill touches the filesystem for exactly that one
51
+ lookup (Phase 1 Step 1) and nothing else. Every read of meeting *content*
52
+ goes through `get_meeting` / `get_meeting_transcript`.