@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.
- package/README.md +2 -2
- package/bin/fit-outpost.js +3 -2
- package/package.json +6 -5
- 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 +75 -20
- package/src/kb-validator.js +762 -0
- package/src/outpost.js +108 -39
- 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 +32 -24
- package/templates/.claude/agents/concierge.md +26 -17
- package/templates/.claude/agents/head-hunter.md +34 -26
- package/templates/.claude/agents/librarian.md +26 -18
- package/templates/.claude/agents/postman.md +26 -18
- package/templates/.claude/agents/recruiter.md +38 -27
- package/templates/.claude/skills/anarlog-follow/SKILL.md +91 -66
- package/templates/.claude/skills/anarlog-follow/references/coaching.md +22 -21
- package/templates/.claude/skills/anarlog-follow/references/sessions.md +52 -0
- package/templates/.claude/skills/anarlog-process/SKILL.md +108 -62
- package/templates/.claude/skills/anarlog-process/references/extraction.md +41 -29
- package/templates/.claude/skills/anarlog-process/references/sessions.md +92 -58
- package/templates/.claude/skills/anarlog-process/scripts/scan.mjs +402 -160
- package/templates/.claude/skills/candidate-report/SKILL.md +41 -36
- 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 +122 -67
- package/templates/.claude/skills/deck-create/SKILL.md +90 -32
- 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 +63 -58
- package/templates/.claude/skills/deck-review/assets/slide-annotator.js +58 -49
- package/templates/.claude/skills/deck-summarize/SKILL.md +55 -45
- package/templates/.claude/skills/deck-summarize/references/brief-template.md +5 -4
- package/templates/.claude/skills/deck-summarize/scripts/extract-pptx.mjs +8 -7
- package/templates/.claude/skills/doc-collab/SKILL.md +39 -34
- package/templates/.claude/skills/doc-create/SKILL.md +27 -23
- package/templates/.claude/skills/doc-create/scripts/convert-to-pdf.mjs +6 -6
- package/templates/.claude/skills/draft-emails/SKILL.md +63 -53
- package/templates/.claude/skills/draft-emails/references/template.md +2 -2
- package/templates/.claude/skills/draft-emails/scripts/scan-emails.mjs +15 -8
- package/templates/.claude/skills/draft-emails/scripts/send-email.mjs +19 -11
- package/templates/.claude/skills/extract-entities/SKILL.md +76 -75
- package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +6 -5
- package/templates/.claude/skills/extract-entities/references/conditions.md +20 -18
- package/templates/.claude/skills/extract-entities/references/content.md +10 -9
- package/templates/.claude/skills/extract-entities/references/links.md +37 -13
- package/templates/.claude/skills/extract-entities/references/recruitment.md +30 -24
- package/templates/.claude/skills/extract-entities/references/resolution.md +14 -14
- package/templates/.claude/skills/extract-entities/references/sources.md +9 -9
- package/templates/.claude/skills/extract-entities/references/templates-conditions.md +12 -6
- package/templates/.claude/skills/extract-entities/references/templates-people-orgs.md +29 -10
- package/templates/.claude/skills/extract-entities/references/templates-priorities.md +10 -4
- package/templates/.claude/skills/extract-entities/references/templates-projects-topics.md +19 -7
- package/templates/.claude/skills/extract-entities/scripts/state.mjs +9 -8
- package/templates/.claude/skills/meeting-prep/SKILL.md +42 -36
- package/templates/.claude/skills/organize-files/SKILL.md +27 -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 +77 -27
- package/templates/.claude/skills/person-identify/scripts/identify.sh +125 -26
- package/templates/.claude/skills/person-lookup/SKILL.md +34 -30
- package/templates/.claude/skills/person-lookup/scripts/lookup.sh +46 -17
- package/templates/.claude/skills/req-assess/SKILL.md +44 -36
- package/templates/.claude/skills/req-assess/references/interview-template.md +7 -2
- package/templates/.claude/skills/req-assess/references/panel-template.md +7 -2
- package/templates/.claude/skills/req-assess/references/rubric.md +13 -13
- package/templates/.claude/skills/req-bundle/SKILL.md +164 -0
- package/templates/.claude/skills/req-bundle/references/matching.md +70 -0
- package/templates/.claude/skills/req-bundle/references/pdf-structure.md +74 -0
- package/templates/.claude/skills/req-bundle/scripts/split-bundle.mjs +377 -0
- package/templates/.claude/skills/req-decide/SKILL.md +52 -41
- package/templates/.claude/skills/req-decide/references/rubric.md +11 -10
- package/templates/.claude/skills/req-decide/references/template.md +2 -2
- package/templates/.claude/skills/req-forget/SKILL.md +58 -39
- package/templates/.claude/skills/req-forget/references/classify.md +15 -13
- package/templates/.claude/skills/req-forget/references/locations.md +27 -22
- package/templates/.claude/skills/req-forget/references/report-template.md +24 -16
- package/templates/.claude/skills/req-scan/SKILL.md +27 -25
- 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/references/template.md +11 -1
- package/templates/.claude/skills/req-scan/scripts/state.mjs +3 -2
- package/templates/.claude/skills/req-screen/SKILL.md +96 -50
- package/templates/.claude/skills/req-screen/references/rubric.md +46 -50
- package/templates/.claude/skills/req-screen/references/scoring.md +79 -0
- package/templates/.claude/skills/req-screen/references/template.md +29 -17
- package/templates/.claude/skills/req-track/SKILL.md +76 -76
- package/templates/.claude/skills/req-track/references/fields.md +31 -27
- package/templates/.claude/skills/req-track/references/overlays.md +42 -0
- 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 +28 -27
- package/templates/.claude/skills/req-workday/SKILL.md +69 -40
- package/templates/.claude/skills/req-workday/references/brief.md +81 -0
- package/templates/.claude/skills/req-workday/references/status-mapping.md +5 -5
- package/templates/.claude/skills/req-workday/references/templates.md +11 -78
- package/templates/.claude/skills/req-workday/references/xlsx-format.md +26 -7
- package/templates/.claude/skills/req-workday/scripts/parse-workday.mjs +113 -35
- package/templates/.claude/skills/send-chat/SKILL.md +58 -54
- package/templates/.claude/skills/sync-apple-calendar/SKILL.md +23 -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 +20 -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 +46 -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 +43 -41
- package/templates/.claude/skills/upstream-instructions/references/examples.md +5 -5
- package/templates/CLAUDE.md +97 -85
- package/templates/MIGRATION.md +359 -0
- package/templates/registry.yaml +25 -0
- package/templates/.claude/skills/anarlog-follow/scripts/follow.mjs +0 -243
- 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
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|
25
|
+
- The user starts an Anarlog recording and wants real-time support.
|
|
23
26
|
|
|
24
27
|
## Prerequisites
|
|
25
28
|
|
|
26
|
-
- Anarlog installed
|
|
27
|
-
|
|
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
|
-
-
|
|
37
|
+
- A populated knowledge base (attendee / candidate context).
|
|
30
38
|
|
|
31
39
|
## Inputs
|
|
32
40
|
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
-
|
|
41
|
-
- **
|
|
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
|
-
- [ ]
|
|
46
|
-
- [ ]
|
|
47
|
-
- [ ]
|
|
48
|
-
- [ ] For interviews
|
|
49
|
-
|
|
50
|
-
- [ ]
|
|
51
|
-
- [ ]
|
|
52
|
-
- [ ]
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
93
|
+
MCP: `get_meeting({ meeting_id })`. CLI fallback:
|
|
74
94
|
|
|
75
95
|
```bash
|
|
76
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
Phase 2
|
|
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}"
|
|
95
|
-
rg -l "{name}"
|
|
114
|
+
rg -l "{name}" 3-Team/People/
|
|
115
|
+
rg -l "{name}" 2-Confidential/Candidates/
|
|
96
116
|
```
|
|
97
117
|
|
|
98
|
-
Read
|
|
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
|
|
104
|
-
|
|
105
|
-
|
|
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}"
|
|
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)
|
|
118
|
-
|
|
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
|
-
|
|
145
|
+
MCP: `get_meeting_transcript({ meeting_id, offset, limit: 500 })`. CLI
|
|
146
|
+
fallback:
|
|
125
147
|
|
|
126
148
|
```bash
|
|
127
|
-
|
|
149
|
+
anarlog --json meetings transcript <meeting-id> --offset <offset> --limit 500
|
|
128
150
|
```
|
|
129
151
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
137
|
-
|
|
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)
|
|
143
|
-
|
|
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
|
|
155
|
-
("that's all", "let's wrap", "I'll let you go")
|
|
156
|
-
substantive follow-up. When
|
|
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
|
|
162
|
-
consecutive empty reads, ask the user whether the meeting
|
|
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
|
-
|
|
169
|
-
|
|
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
|
|
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
|
|
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** |
|
|
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** |
|
|
60
|
-
| **Decisions** |
|
|
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_
|
|
84
|
+
- **Evidence over claims.** Flag _claims_ vs. _demonstrations_. Push for
|
|
85
85
|
specific examples.
|
|
86
|
-
- **Coverage-aware.** Track which screening focus areas
|
|
87
|
-
|
|
88
|
-
- **Level-calibrated.** Know what the target level expects
|
|
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
|
|
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
|
|
97
|
-
commitments from
|
|
98
|
-
- **Time-conscious.** Nudge when the meeting
|
|
99
|
-
|
|
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
|
|
104
|
-
- **Channel awareness.** Channel 0 = user
|
|
105
|
-
the _guest_ 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
|
|
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
|
|
117
|
-
- **Privacy.** Coaching may appear on a shared screen
|
|
118
|
-
|
|
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`.
|