thoth-plugin 1.2.3 → 1.2.5
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 +17 -1
- package/defaults/skill/cal-grid/SKILL.md +168 -0
- package/defaults/skill/cal-grid/cal-grid-template.md +106 -0
- package/defaults/skill/context-discovery/SKILL.md +253 -0
- package/defaults/skill/context-discovery/discovery.prose +143 -0
- package/defaults/skill/context-onboarding/SKILL.md +370 -0
- package/{dist/defaults/skill/_legacy/email-draft/skill.md → defaults/skill/email-draft/SKILL.md} +33 -30
- package/defaults/skill/evening-close/SKILL.md +93 -61
- package/defaults/skill/evening-close/evening-close-template.md +42 -0
- package/{dist/defaults/skill/_legacy → defaults/skill}/gardener/SKILL.md +3 -3
- package/{dist/defaults/skill/_legacy → defaults/skill}/google-chat-scan/SKILL.md +7 -0
- package/{dist/defaults/skill/_legacy → defaults/skill}/leadership-coach/SKILL.md +9 -8
- package/defaults/skill/mail-triage/SKILL.md +272 -15
- package/defaults/skill/mail-triage/mail-triage-template.md +90 -0
- package/defaults/skill/morning-boot/SKILL.md +214 -25
- package/defaults/skill/morning-boot/daily-log-template.md +98 -0
- package/defaults/skill/morning-boot/morning-boot.prose +98 -0
- package/defaults/skill/{_legacy/onboarding → onboarding}/SKILL.md +7 -6
- package/defaults/skill/open-prose/SKILL.md +373 -0
- package/defaults/skill/open-prose/antipatterns.md +852 -0
- package/defaults/skill/open-prose/docs.md +2676 -0
- package/defaults/skill/open-prose/patterns.md +610 -0
- package/defaults/skill/open-prose/prose.md +950 -0
- package/{dist/defaults/skill/_legacy → defaults/skill}/post-meeting-drill/SKILL.md +90 -95
- package/defaults/skill/post-meeting-drill/examples.md +130 -0
- package/defaults/skill/post-meeting-drill/post-meeting-drill-template.md +111 -0
- package/defaults/skill/skill-generator/SKILL.md +217 -0
- package/defaults/skill/skill-generator/skill-template.md +163 -0
- package/defaults/skill/slack-pulse/SKILL.md +211 -14
- package/defaults/skill/slack-pulse/slack-pulse-template.md +98 -0
- package/defaults/skill/slack-write/skill.md +184 -0
- package/defaults/skill/thought-router/SKILL.md +7 -8
- package/dist/cli.js +137 -3
- package/dist/config/schema.d.ts +0 -2
- package/dist/defaults/skill/cal-grid/SKILL.md +168 -0
- package/dist/defaults/skill/cal-grid/cal-grid-template.md +106 -0
- package/dist/defaults/skill/context-discovery/SKILL.md +253 -0
- package/dist/defaults/skill/context-discovery/discovery.prose +143 -0
- package/dist/defaults/skill/context-onboarding/SKILL.md +370 -0
- package/{defaults/skill/_legacy/email-draft/skill.md → dist/defaults/skill/email-draft/SKILL.md} +33 -30
- package/dist/defaults/skill/evening-close/SKILL.md +93 -61
- package/dist/defaults/skill/evening-close/evening-close-template.md +42 -0
- package/{defaults/skill/_legacy → dist/defaults/skill}/gardener/SKILL.md +3 -3
- package/{defaults/skill/_legacy → dist/defaults/skill}/google-chat-scan/SKILL.md +7 -0
- package/{defaults/skill/_legacy → dist/defaults/skill}/leadership-coach/SKILL.md +9 -8
- package/dist/defaults/skill/mail-triage/SKILL.md +272 -15
- package/dist/defaults/skill/mail-triage/mail-triage-template.md +90 -0
- package/dist/defaults/skill/morning-boot/SKILL.md +214 -25
- package/dist/defaults/skill/morning-boot/daily-log-template.md +98 -0
- package/dist/defaults/skill/morning-boot/morning-boot.prose +98 -0
- package/dist/defaults/skill/{_legacy/onboarding → onboarding}/SKILL.md +7 -6
- package/dist/defaults/skill/open-prose/SKILL.md +373 -0
- package/dist/defaults/skill/open-prose/antipatterns.md +852 -0
- package/dist/defaults/skill/open-prose/docs.md +2676 -0
- package/dist/defaults/skill/open-prose/patterns.md +610 -0
- package/dist/defaults/skill/open-prose/prose.md +950 -0
- package/{defaults/skill/_legacy → dist/defaults/skill}/post-meeting-drill/SKILL.md +90 -95
- package/dist/defaults/skill/post-meeting-drill/examples.md +130 -0
- package/dist/defaults/skill/post-meeting-drill/post-meeting-drill-template.md +111 -0
- package/dist/defaults/skill/skill-generator/SKILL.md +217 -0
- package/dist/defaults/skill/skill-generator/skill-template.md +163 -0
- package/dist/defaults/skill/slack-pulse/SKILL.md +211 -14
- package/dist/defaults/skill/slack-pulse/slack-pulse-template.md +98 -0
- package/dist/defaults/skill/slack-write/skill.md +184 -0
- package/dist/defaults/skill/thought-router/SKILL.md +7 -8
- package/dist/hooks/index.d.ts +0 -1
- package/dist/index.js +26 -189
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/sentinel-service.d.ts +0 -1
- package/dist/sdk/test-harness.d.ts +90 -0
- package/dist/sdk/thoth-client.d.ts +1 -0
- package/dist/shared/index.d.ts +0 -1
- package/dist/specialization/prompt-sections.d.ts +1 -1
- package/package.json +1 -1
- package/defaults/skill/_legacy/cal-grid/SKILL.md +0 -16
- package/defaults/skill/_legacy/skill-generator/SKILL.md +0 -362
- package/dist/defaults/skill/_legacy/cal-grid/SKILL.md +0 -16
- package/dist/defaults/skill/_legacy/skill-generator/SKILL.md +0 -362
- package/dist/hooks/temporal-awareness.d.ts +0 -31
- package/dist/hooks/temporal-awareness.test.d.ts +0 -1
- /package/defaults/skill/{_legacy/capsule-init → capsule-init}/SKILL.md +0 -0
- /package/defaults/skill/{_legacy/cross-linker → cross-linker}/SKILL.md +0 -0
- /package/defaults/skill/{_legacy/gardener → gardener}/confidence-tiers.md +0 -0
- /package/defaults/skill/{_legacy/gardener → gardener}/repair-workflow.md +0 -0
- /package/defaults/skill/{_legacy/handover → handover}/SKILL.md +0 -0
- /package/defaults/skill/{_legacy/interview-prep → interview-prep}/SKILL.md +0 -0
- /package/defaults/skill/{_legacy/link-retrofit → link-retrofit}/SKILL.md +0 -0
- /package/defaults/skill/{_legacy/restore-environment → restore-environment}/SKILL.md +0 -0
- /package/defaults/skill/{_legacy/scorecard-synthesis → scorecard-synthesis}/SKILL.md +0 -0
- /package/defaults/skill/{_legacy/skill-generator → skill-generator}/testing-protocol.md +0 -0
- /package/defaults/skill/{_legacy/system-init → system-init}/SKILL.md +0 -0
- /package/dist/defaults/skill/{_legacy/capsule-init → capsule-init}/SKILL.md +0 -0
- /package/dist/defaults/skill/{_legacy/cross-linker → cross-linker}/SKILL.md +0 -0
- /package/dist/defaults/skill/{_legacy/gardener → gardener}/confidence-tiers.md +0 -0
- /package/dist/defaults/skill/{_legacy/gardener → gardener}/repair-workflow.md +0 -0
- /package/dist/defaults/skill/{_legacy/handover → handover}/SKILL.md +0 -0
- /package/dist/defaults/skill/{_legacy/interview-prep → interview-prep}/SKILL.md +0 -0
- /package/dist/defaults/skill/{_legacy/link-retrofit → link-retrofit}/SKILL.md +0 -0
- /package/dist/defaults/skill/{_legacy/restore-environment → restore-environment}/SKILL.md +0 -0
- /package/dist/defaults/skill/{_legacy/scorecard-synthesis → scorecard-synthesis}/SKILL.md +0 -0
- /package/dist/defaults/skill/{_legacy/skill-generator → skill-generator}/testing-protocol.md +0 -0
- /package/dist/defaults/skill/{_legacy/system-init → system-init}/SKILL.md +0 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-generator
|
|
3
|
+
description: Use when creating a new skill, editing an existing skill, or when asked to document a reusable process or technique
|
|
4
|
+
triggers:
|
|
5
|
+
created: 2026-01-07
|
|
6
|
+
updated: 2026-01-10
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!--
|
|
10
|
+
ARCHITECTURE REFERENCE: docs/concepts/skill-architecture.md
|
|
11
|
+
AUTHORING GUIDE: docs/guides/skill-authoring-guide.md
|
|
12
|
+
TEMPLATES: skill-template.md (in this folder)
|
|
13
|
+
-->
|
|
14
|
+
|
|
15
|
+
# Skill Generator
|
|
16
|
+
|
|
17
|
+
**Core principle:** No skill without baseline failure first. TDD for process documentation.
|
|
18
|
+
|
|
19
|
+
**Violating the letter of this process is violating the spirit of this process.**
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Iron Law
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
NO SKILL FILE CREATED UNTIL RED PHASE SUBAGENT COMPLETES
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
If you create SKILL.md before documenting a baseline failure, delete it. Start over. No exceptions.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Quick Reference: The Phases
|
|
34
|
+
|
|
35
|
+
| Phase | Action | Gate |
|
|
36
|
+
|-------|--------|------|
|
|
37
|
+
| 0 | Check exists, classify type | — |
|
|
38
|
+
| 1 RED | Subagent WITHOUT skill → document failure | Must have failure |
|
|
39
|
+
| 2 GREEN | Write skill in thoth-core | — |
|
|
40
|
+
| 3 GREEN | Subagent WITH skill → verify fix | Must pass |
|
|
41
|
+
| 4 REFACTOR | Symlink, build, quality checks | All pass |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Phase 0: Setup
|
|
46
|
+
|
|
47
|
+
**Check exists:** `ls defaults/skill/ | grep -i {name}`
|
|
48
|
+
|
|
49
|
+
**Classify type:**
|
|
50
|
+
- **Discipline** — Rules resisting rationalization
|
|
51
|
+
- **Workflow** — Multi-step with checkpoints
|
|
52
|
+
- **Technique** — Concrete method
|
|
53
|
+
- **Reference** — API docs
|
|
54
|
+
|
|
55
|
+
**Determine requirements:**
|
|
56
|
+
- Structured output? → Create template file
|
|
57
|
+
- Needs user email? → Add context discovery
|
|
58
|
+
- Needs config? → Add `config:` frontmatter
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Phase 1: RED — Baseline Test (MANDATORY)
|
|
63
|
+
|
|
64
|
+
Dispatch subagent WITHOUT the skill:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
task(
|
|
68
|
+
subagent_type="general",
|
|
69
|
+
description="Baseline test for {skill-name}",
|
|
70
|
+
prompt="""
|
|
71
|
+
You are testing baseline behavior WITHOUT a skill.
|
|
72
|
+
|
|
73
|
+
**Task:** {Describe the task}
|
|
74
|
+
**Context:** {Relevant context}
|
|
75
|
+
|
|
76
|
+
Complete the task using your best judgment. Do NOT load any skills.
|
|
77
|
+
|
|
78
|
+
**Report:** What approach? What output? What assumptions?
|
|
79
|
+
"""
|
|
80
|
+
)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Document:** What went wrong? What rationalizations? What must skill teach?
|
|
84
|
+
|
|
85
|
+
**GATE:** Do not proceed without documented failure.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Phase 2: GREEN — Write Skill
|
|
90
|
+
|
|
91
|
+
### Location: thoth-core (MANDATORY)
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
cd /path/to/thoth-core
|
|
95
|
+
mkdir -p defaults/skill/{skill-name}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Never create directly in thoth-kb. Symlink comes in Phase 4.
|
|
99
|
+
|
|
100
|
+
### Create SKILL.md
|
|
101
|
+
|
|
102
|
+
See `skill-template.md` in this folder for the complete template.
|
|
103
|
+
|
|
104
|
+
**Required frontmatter:**
|
|
105
|
+
```yaml
|
|
106
|
+
---
|
|
107
|
+
name: skill-name
|
|
108
|
+
description: Use when [triggers]. No workflow summary.
|
|
109
|
+
triggers:
|
|
110
|
+
- "phrase that activates"
|
|
111
|
+
created: YYYY-MM-DD
|
|
112
|
+
updated: YYYY-MM-DD
|
|
113
|
+
---
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Required sections:** Core principle, When to Use, Quick Reference, Process, Common Mistakes, Red Flags, Verification Checklist
|
|
117
|
+
|
|
118
|
+
**If skill produces output:** Create `skill-name-template.md` with `{{PLACEHOLDER}}` syntax.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Phase 3: GREEN — Verify (MANDATORY)
|
|
123
|
+
|
|
124
|
+
Dispatch subagent WITH the skill:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
task(
|
|
128
|
+
subagent_type="general",
|
|
129
|
+
description="Skill-guided test for {skill-name}",
|
|
130
|
+
prompt="""
|
|
131
|
+
You are testing a skill.
|
|
132
|
+
|
|
133
|
+
**REQUIRED SKILL:**
|
|
134
|
+
---
|
|
135
|
+
{Paste skill content}
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
**Task:** {Same as baseline}
|
|
139
|
+
|
|
140
|
+
Follow the skill exactly. Report: What approach? Did you follow completely?
|
|
141
|
+
"""
|
|
142
|
+
)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Verify:** Avoided baseline mistakes? New rationalizations? Ambiguities?
|
|
146
|
+
|
|
147
|
+
**GATE:** Do not proceed until agent performs correctly.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Phase 4: REFACTOR — Deploy
|
|
152
|
+
|
|
153
|
+
### Symlink to thoth-kb
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
cd /path/to/thoth-kb/.opencode/skill
|
|
157
|
+
ln -s ../../../thoth-core/defaults/skill/{skill-name} {skill-name}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Build and verify
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
cd /path/to/thoth-core && bun run build
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Quality Checklist
|
|
167
|
+
|
|
168
|
+
- [ ] Baseline failure documented (Phase 1)
|
|
169
|
+
- [ ] Skill-guided test passed (Phase 3)
|
|
170
|
+
- [ ] Name: lowercase, hyphens only
|
|
171
|
+
- [ ] Description: "Use when...", no workflow summary
|
|
172
|
+
- [ ] Triggers: list of activation phrases
|
|
173
|
+
- [ ] Architecture comment after frontmatter
|
|
174
|
+
- [ ] Template file if structured output
|
|
175
|
+
- [ ] Under 500 lines (under 200 if frequent)
|
|
176
|
+
- [ ] Symlink created and verified
|
|
177
|
+
- [ ] Build succeeds
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Rationalization Table
|
|
182
|
+
|
|
183
|
+
| Excuse | Reality |
|
|
184
|
+
|--------|---------|
|
|
185
|
+
| "Too simple for structure" | Simple skills need discoverability. Follow format. |
|
|
186
|
+
| "I'll add sections later" | Later never comes. Add now. |
|
|
187
|
+
| "Baseline is overkill" | Baseline reveals what you'll skip. Mandatory. |
|
|
188
|
+
| "I already know what will fail" | You're guessing. Run the subagent. |
|
|
189
|
+
| "I'll test after writing" | That's not TDD. RED before GREEN. |
|
|
190
|
+
| "Description can summarize workflow" | Claude follows descriptions instead of reading. Never summarize. |
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Red Flags - STOP
|
|
195
|
+
|
|
196
|
+
- Creating SKILL.md before RED phase completes
|
|
197
|
+
- Skipping baseline for ANY skill type
|
|
198
|
+
- Description summarizes workflow
|
|
199
|
+
- Missing `triggers:` in frontmatter
|
|
200
|
+
- Hardcoded user email (use context-discovery)
|
|
201
|
+
- Skill created in thoth-kb instead of thoth-core
|
|
202
|
+
- Proceeding to Phase 4 without Phase 3 verification
|
|
203
|
+
|
|
204
|
+
**All mean: STOP. Go back.**
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Related
|
|
209
|
+
|
|
210
|
+
- `skill-template.md` — SKILL.md and output templates
|
|
211
|
+
- `testing-protocol.md` — Detailed testing by skill type
|
|
212
|
+
- `docs/concepts/skill-architecture.md` — Architecture reference
|
|
213
|
+
- `docs/guides/skill-authoring-guide.md` — Comprehensive guide
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
*Skill Generator v3.1 | Condensed TDD enforcement*
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
---
|
|
2
|
+
created: 2026-01-10
|
|
3
|
+
updated: 2026-01-10
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill Templates
|
|
7
|
+
|
|
8
|
+
Reference templates for creating new skills. Copy and customize.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## SKILL.md Template
|
|
13
|
+
|
|
14
|
+
```markdown
|
|
15
|
+
---
|
|
16
|
+
name: skill-name
|
|
17
|
+
description: Use when [triggers]. Third person. No workflow summary.
|
|
18
|
+
triggers:
|
|
19
|
+
- "trigger phrase"
|
|
20
|
+
- "another phrase"
|
|
21
|
+
template: skill-name-template.md # If produces output
|
|
22
|
+
config: # If needs external config
|
|
23
|
+
- path: work/operations/config.md
|
|
24
|
+
as: config_name
|
|
25
|
+
created: YYYY-MM-DD
|
|
26
|
+
updated: YYYY-MM-DD
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
<!--
|
|
30
|
+
ARCHITECTURE REFERENCE: docs/concepts/skill-architecture.md
|
|
31
|
+
This skill can be invoked standalone OR as a subagent context template.
|
|
32
|
+
-->
|
|
33
|
+
|
|
34
|
+
# Skill Name
|
|
35
|
+
|
|
36
|
+
**Core principle:** {one sentence}
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Context Requirements (If Needed)
|
|
41
|
+
|
|
42
|
+
**Step 0 — Get Identity:**
|
|
43
|
+
|
|
44
|
+
1. **Check if passed in context**: If `context.identity.email` exists, use it.
|
|
45
|
+
2. **If not passed**: Call `skill({ name: "context-discovery" })`.
|
|
46
|
+
|
|
47
|
+
**If discovery fails**: Stop and report error.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## When to Use
|
|
52
|
+
|
|
53
|
+
- {symptom or trigger}
|
|
54
|
+
|
|
55
|
+
**Do NOT use when:**
|
|
56
|
+
- {exclusion}
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Quick Reference
|
|
61
|
+
|
|
62
|
+
| Task | Command/Action |
|
|
63
|
+
|------|----------------|
|
|
64
|
+
| {task} | {how} |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Process
|
|
69
|
+
|
|
70
|
+
{Main content — address failures from baseline test}
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Output Format (If Template)
|
|
75
|
+
|
|
76
|
+
**Template:** `skill-name-template.md`
|
|
77
|
+
**Output path:** `{path}`
|
|
78
|
+
|
|
79
|
+
| Placeholder | Value |
|
|
80
|
+
|-------------|-------|
|
|
81
|
+
| `{{DATE}}` | Today's date |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Common Mistakes
|
|
86
|
+
|
|
87
|
+
| Mistake | Prevention |
|
|
88
|
+
|---------|------------|
|
|
89
|
+
| {from baseline} | {fix} |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Red Flags - STOP
|
|
94
|
+
|
|
95
|
+
- {warning sign}
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Verification Checklist
|
|
100
|
+
|
|
101
|
+
- [ ] {check}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Output Template Example
|
|
107
|
+
|
|
108
|
+
For skills that produce structured output:
|
|
109
|
+
|
|
110
|
+
```markdown
|
|
111
|
+
---
|
|
112
|
+
type: {output-type}
|
|
113
|
+
created: {{DATE}}
|
|
114
|
+
updated: {{DATE}}
|
|
115
|
+
tags: [{tags}]
|
|
116
|
+
summary: "{Summary} — {{DATE}}"
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
# Title — {{DATE}}
|
|
120
|
+
|
|
121
|
+
**Generated:** {{TIME}}
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Section
|
|
126
|
+
|
|
127
|
+
{{CONTENT}}
|
|
128
|
+
|
|
129
|
+
## Data
|
|
130
|
+
|
|
131
|
+
| Column A | Column B |
|
|
132
|
+
|----------|----------|
|
|
133
|
+
{{DATA_TABLE}}
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
*Generated by {skill-name} skill*
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Placeholder Conventions
|
|
143
|
+
|
|
144
|
+
| Pattern | Purpose | Example |
|
|
145
|
+
|---------|---------|---------|
|
|
146
|
+
| `{{UPPER_SNAKE}}` | Simple value | `{{DATE}}`, `{{TIME}}` |
|
|
147
|
+
| `{{*_TABLE}}` | Multi-row table | `{{ACTION_ITEMS_TABLE}}` |
|
|
148
|
+
| `{{*_COUNT}}` | Numeric count | `{{EMAIL_COUNT}}` |
|
|
149
|
+
| `{{#if COND}}...{{/if}}` | Conditional | `{{#if COUNT > 0}}` |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Frontmatter Quick Reference
|
|
154
|
+
|
|
155
|
+
| Field | Required | Rules |
|
|
156
|
+
|-------|----------|-------|
|
|
157
|
+
| `name` | Yes | lowercase, hyphens, max 64 chars |
|
|
158
|
+
| `description` | Yes | "Use when...", third person, no workflow summary |
|
|
159
|
+
| `triggers` | Yes | Phrases that auto-invoke skill |
|
|
160
|
+
| `template` | If output | Filename in skill folder |
|
|
161
|
+
| `config` | If external config | `path` + `as` |
|
|
162
|
+
| `created` | Yes | YYYY-MM-DD (hook-enforced) |
|
|
163
|
+
| `updated` | Yes | YYYY-MM-DD (hook-enforced) |
|
|
@@ -1,26 +1,223 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: slack-pulse
|
|
3
|
-
|
|
4
|
-
description: Lookback window in hours
|
|
3
|
+
description: Scan Slack for mentions, DMs, and high-value channel activity requiring attention.
|
|
5
4
|
triggers:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
default: 4
|
|
11
|
-
output:
|
|
5
|
+
template: slack-pulse-template.md
|
|
6
|
+
config:
|
|
7
|
+
- path: work/operations/slack-map.md
|
|
8
|
+
as: slack_config
|
|
12
9
|
created: 2026-01-09
|
|
13
10
|
updated: 2026-01-09
|
|
14
11
|
---
|
|
15
12
|
|
|
13
|
+
<!--
|
|
14
|
+
ARCHITECTURE REFERENCE: docs/concepts/skill-architecture.md
|
|
15
|
+
This skill can be invoked standalone OR as a subagent context template.
|
|
16
|
+
-->
|
|
17
|
+
|
|
16
18
|
# Slack Pulse Skill
|
|
17
19
|
|
|
18
|
-
You are the Real-Time Pulse Monitor for
|
|
20
|
+
You are the Real-Time Pulse Monitor. Your mission is to scan Slack for messages requiring attention and surface what matters.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Context Requirements (EXECUTE FIRST)
|
|
25
|
+
|
|
26
|
+
This skill requires the user's identity AND Slack channel configuration.
|
|
27
|
+
|
|
28
|
+
**Step 0 — Get Identity:**
|
|
29
|
+
|
|
30
|
+
1. **Check if passed in context**: If you received `context.identity`, use it directly.
|
|
31
|
+
|
|
32
|
+
2. **If not passed, invoke context-discovery skill**: Call `skill({ name: "context-discovery" })` and use the returned context.
|
|
33
|
+
|
|
34
|
+
3. **Store `kb_root`** for loading Slack config in Step 1.
|
|
35
|
+
|
|
36
|
+
**If discovery fails**: Stop and report the error from context-discovery.
|
|
37
|
+
|
|
38
|
+
**Step 1 — Load Slack Configuration:**
|
|
39
|
+
|
|
40
|
+
Read the Slack channel map:
|
|
41
|
+
```
|
|
42
|
+
Read: {kb_root}/work/operations/slack-map.md
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Parse the configuration to extract:
|
|
46
|
+
- **Priority Channels**: Channel IDs to always scan (e.g., `C09QGBFUR4G`)
|
|
47
|
+
- **Tier 0 DMs**: Leadership chain usernames (scan 7 days)
|
|
48
|
+
- **Team DM Anchors**: Team member usernames (scan 2 days)
|
|
49
|
+
- **Stakeholder DM Anchors**: Key stakeholder usernames (scan 2 days)
|
|
50
|
+
- **Exclusion Patterns**: Patterns to skip (e.g., `#in-*`, `#alerts-*`)
|
|
51
|
+
|
|
52
|
+
**If slack-map.md not found**: Fall back to basic mention scanning only.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## When to Use
|
|
57
|
+
|
|
58
|
+
- Morning boot Slack scan
|
|
59
|
+
- "Check my Slack"
|
|
60
|
+
- "Any messages I need to respond to?"
|
|
61
|
+
- "What's happening on Slack?"
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Tools Required
|
|
66
|
+
|
|
67
|
+
| Action | Tool | Parameters |
|
|
68
|
+
|--------|------|------------|
|
|
69
|
+
| List channels | slack_channels_list | `channel_types: "public_channel,private_channel,im,mpim"` |
|
|
70
|
+
| Get channel history | slack_conversations_history | `channel_id`, `limit: "1d"` or `"7d"` |
|
|
71
|
+
| Get thread replies | slack_conversations_replies | `channel_id`, `thread_ts` |
|
|
72
|
+
| Search messages | slack_conversations_search_messages | `filter_date_during: "today"` |
|
|
73
|
+
| Write output | write | `work/operations/daily-log/YYYY-MM-DD/slack-pulse.md` |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Execution Protocol
|
|
78
|
+
|
|
79
|
+
### Phase 1: Identify Channels to Scan
|
|
80
|
+
|
|
81
|
+
Use the parsed `slack-map.md` configuration:
|
|
82
|
+
|
|
83
|
+
| Source | Config Section | Lookback |
|
|
84
|
+
|--------|----------------|----------|
|
|
85
|
+
| Priority Channels | `Priority Channels` table | 1 day |
|
|
86
|
+
| Leadership DMs | `Tier 0: Critical DMs` table | 7 days |
|
|
87
|
+
| Team DMs | `Team DM Anchors` table | 2 days |
|
|
88
|
+
| Stakeholder DMs | `Stakeholder DM Anchors` table | 2 days |
|
|
89
|
+
| All mentions | Search | 1 day |
|
|
90
|
+
|
|
91
|
+
**For Priority Channels** (those with Channel IDs):
|
|
92
|
+
```
|
|
93
|
+
slack_conversations_history(
|
|
94
|
+
channel_id={channel_id}, # e.g., "C09QGBFUR4G"
|
|
95
|
+
limit="1d"
|
|
96
|
+
)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**For DMs** (use @username):
|
|
100
|
+
```
|
|
101
|
+
slack_conversations_history(
|
|
102
|
+
channel_id="@{username}", # e.g., "@vasco.taveira"
|
|
103
|
+
limit="7d" # or "2d" for team/stakeholder
|
|
104
|
+
)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Phase 2: Scan for Mentions
|
|
108
|
+
|
|
109
|
+
Search for messages mentioning the user:
|
|
110
|
+
```
|
|
111
|
+
slack_conversations_search_messages(
|
|
112
|
+
filter_date_during="today",
|
|
113
|
+
filter_users_with="@me"
|
|
114
|
+
)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Phase 3: Scan Priority DMs
|
|
118
|
+
|
|
119
|
+
For each Tier 0/1 DM or channel:
|
|
120
|
+
```
|
|
121
|
+
slack_conversations_history(
|
|
122
|
+
channel_id={channel_id},
|
|
123
|
+
limit="1d"
|
|
124
|
+
)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Phase 4: Fetch Thread Context
|
|
128
|
+
|
|
129
|
+
For items needing response, get full thread:
|
|
130
|
+
```
|
|
131
|
+
slack_conversations_replies(
|
|
132
|
+
channel_id={channel_id},
|
|
133
|
+
thread_ts={thread_ts}
|
|
134
|
+
)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Phase 5: Classify Messages
|
|
138
|
+
|
|
139
|
+
For each message, determine action needed:
|
|
140
|
+
|
|
141
|
+
| Classification | Criteria | Action |
|
|
142
|
+
|----------------|----------|--------|
|
|
143
|
+
| **RESPOND** | Direct question, request, blocking issue | Needs reply |
|
|
144
|
+
| **MONITOR** | FYI, discussion to track | Watch but no action |
|
|
145
|
+
| **IGNORE** | Noise, already handled | Skip |
|
|
146
|
+
|
|
147
|
+
**Priority Boosters:**
|
|
148
|
+
|
|
149
|
+
| Signal | Boost |
|
|
150
|
+
|--------|-------|
|
|
151
|
+
| From manager or skip-level | +2 |
|
|
152
|
+
| From direct report | +1 |
|
|
153
|
+
| Contains "urgent", "blocker", "help" | +1 |
|
|
154
|
+
| Unanswered >4 hours | +1 |
|
|
155
|
+
| Thread with multiple replies | +1 |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Output Format
|
|
160
|
+
|
|
161
|
+
**Template:** Read `slack-pulse-template.md` from this skill folder.
|
|
162
|
+
|
|
163
|
+
**Output path:** `work/operations/daily-log/YYYY-MM-DD/slack-pulse.md`
|
|
164
|
+
|
|
165
|
+
Fill the template placeholders with scan results:
|
|
166
|
+
|
|
167
|
+
| Placeholder | Value |
|
|
168
|
+
|-------------|-------|
|
|
169
|
+
| `{{DATE}}` | Today's date (YYYY-MM-DD) |
|
|
170
|
+
| `{{TIME}}` | Scan completion time (HH:MM) |
|
|
171
|
+
| `{{CHANNELS_SCANNED}}` | Number of channels scanned |
|
|
172
|
+
| `{{DMS_CHECKED}}` | Number of DMs checked |
|
|
173
|
+
| `{{RESPOND_COUNT}}` | Items needing response |
|
|
174
|
+
| `{{MONITOR_COUNT}}` | Items to monitor |
|
|
175
|
+
| `{{NOISE_COUNT}}` | Items filtered as noise |
|
|
176
|
+
| `{{RESPOND_ITEMS_TABLE}}` | Table rows for RESPOND items |
|
|
177
|
+
| `{{MONITOR_ITEMS_TABLE}}` | Table rows for MONITOR items |
|
|
178
|
+
| `{{ANCHOR_CANDIDATES_TABLE}}` | Table rows for anchor candidates |
|
|
179
|
+
| `{{PRIORITY_CHANNELS_TABLE}}` | Scan summary per priority channel |
|
|
180
|
+
| `{{TIER0_DMS_TABLE}}` | Scan summary per leadership DM |
|
|
181
|
+
| `{{TEAM_DMS_TABLE}}` | Scan summary per team DM |
|
|
182
|
+
| `{{STAKEHOLDER_DMS_TABLE}}` | Scan summary per stakeholder DM |
|
|
183
|
+
| `{{IMMEDIATE_ACTIONS}}` | Bulleted list of urgent responses |
|
|
184
|
+
| `{{WATCH_LIST}}` | Bulleted list of items to monitor |
|
|
185
|
+
| `{{CHANNEL_HEALTH_NOTES}}` | Any observations about channel usage |
|
|
186
|
+
|
|
187
|
+
**Critical:** Output MUST include `## SCAN_DATA_START` and `## SCAN_DATA_END` markers for parsing.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Completion Checklist
|
|
192
|
+
|
|
193
|
+
- [ ] Context discovery completed
|
|
194
|
+
- [ ] Channels listed and prioritized
|
|
195
|
+
- [ ] Mentions scanned
|
|
196
|
+
- [ ] Priority DMs checked
|
|
197
|
+
- [ ] Thread context fetched for RESPOND items
|
|
198
|
+
- [ ] Messages classified (RESPOND/MONITOR/IGNORE)
|
|
199
|
+
- [ ] Output written to `work/operations/daily-log/YYYY-MM-DD/slack-pulse.md`
|
|
200
|
+
- [ ] SCAN_DATA markers included
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Error Handling
|
|
205
|
+
|
|
206
|
+
| Error | Action |
|
|
207
|
+
|-------|--------|
|
|
208
|
+
| No Slack access | Report OAuth/token needed, stop |
|
|
209
|
+
| Rate limited | Wait and retry with smaller batch |
|
|
210
|
+
| Channel not found | Skip and note in output |
|
|
211
|
+
|
|
212
|
+
---
|
|
19
213
|
|
|
20
|
-
##
|
|
214
|
+
## Channel Discovery
|
|
21
215
|
|
|
22
|
-
|
|
23
|
-
2. **Execute**: Follow the protocol exactly as defined in the master file.
|
|
24
|
-
3. **Synthesize**: Provide the pulse report and the required raw data block.
|
|
216
|
+
If you encounter high-signal messages from unknown channels, flag them as "Anchor Candidates" for future Tier 1 monitoring:
|
|
25
217
|
|
|
26
|
-
|
|
218
|
+
```markdown
|
|
219
|
+
### Anchor Candidates
|
|
220
|
+
| Channel | Reason | Recommendation |
|
|
221
|
+
|---------|--------|----------------|
|
|
222
|
+
| #new-project | Multiple relevant discussions | Add to Tier 1 |
|
|
223
|
+
```
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: operations
|
|
3
|
+
hemisphere: work
|
|
4
|
+
created: {{DATE}}
|
|
5
|
+
updated: 2026-01-09
|
|
6
|
+
tags: [slack-pulse, daily-log]
|
|
7
|
+
summary: Slack Pulse — {{DATE}}
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Slack Pulse — {{DATE}}
|
|
11
|
+
|
|
12
|
+
**Scan Time:** {{TIME}}
|
|
13
|
+
**Channels Scanned:** {{CHANNELS_SCANNED}}
|
|
14
|
+
**DMs Checked:** {{DMS_CHECKED}}
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Summary
|
|
19
|
+
|
|
20
|
+
| Metric | Count |
|
|
21
|
+
|--------|-------|
|
|
22
|
+
| **Needs Response** | {{RESPOND_COUNT}} |
|
|
23
|
+
| **Monitor/Review** | {{MONITOR_COUNT}} |
|
|
24
|
+
| **Noise Filtered** | {{NOISE_COUNT}} |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## SCAN_DATA_START
|
|
29
|
+
|
|
30
|
+
### RESPOND_ITEMS
|
|
31
|
+
|
|
32
|
+
| Priority | Source | From | Preview | Action Needed |
|
|
33
|
+
|----------|--------|------|---------|---------------|
|
|
34
|
+
{{RESPOND_ITEMS_TABLE}}
|
|
35
|
+
|
|
36
|
+
### MONITOR_ITEMS
|
|
37
|
+
|
|
38
|
+
| Source | From | Preview | Relevance |
|
|
39
|
+
|--------|------|---------|-----------|
|
|
40
|
+
{{MONITOR_ITEMS_TABLE}}
|
|
41
|
+
|
|
42
|
+
### ANCHOR_CANDIDATES
|
|
43
|
+
|
|
44
|
+
| Channel/Topic | Reason | Recommendation |
|
|
45
|
+
|---------------|--------|----------------|
|
|
46
|
+
{{ANCHOR_CANDIDATES_TABLE}}
|
|
47
|
+
|
|
48
|
+
## SCAN_DATA_END
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Scan Coverage
|
|
53
|
+
|
|
54
|
+
### Priority Channels
|
|
55
|
+
|
|
56
|
+
| Channel | Messages | Items Found |
|
|
57
|
+
|---------|----------|-------------|
|
|
58
|
+
{{PRIORITY_CHANNELS_TABLE}}
|
|
59
|
+
|
|
60
|
+
### Leadership DMs (Tier 0)
|
|
61
|
+
|
|
62
|
+
| Person | Role | Messages | Status |
|
|
63
|
+
|--------|------|----------|--------|
|
|
64
|
+
{{TIER0_DMS_TABLE}}
|
|
65
|
+
|
|
66
|
+
### Team DMs
|
|
67
|
+
|
|
68
|
+
| Person | Domain | Messages | Status |
|
|
69
|
+
|--------|--------|----------|--------|
|
|
70
|
+
{{TEAM_DMS_TABLE}}
|
|
71
|
+
|
|
72
|
+
### Stakeholder DMs
|
|
73
|
+
|
|
74
|
+
| Person | Context | Messages | Status |
|
|
75
|
+
|--------|---------|----------|--------|
|
|
76
|
+
{{STAKEHOLDER_DMS_TABLE}}
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Action Items
|
|
81
|
+
|
|
82
|
+
### Immediate Response Needed
|
|
83
|
+
|
|
84
|
+
{{IMMEDIATE_ACTIONS}}
|
|
85
|
+
|
|
86
|
+
### Watch List
|
|
87
|
+
|
|
88
|
+
{{WATCH_LIST}}
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Channel Health
|
|
93
|
+
|
|
94
|
+
{{CHANNEL_HEALTH_NOTES}}
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
*Generated by slack-pulse skill at {{TIME}}*
|