@looplia/looplia-cli 0.6.6
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/dist/index.d.ts +2 -0
- package/dist/index.js +33216 -0
- package/package.json +55 -0
- package/plugins/looplia-core/.claude-plugin/plugin.json +10 -0
- package/plugins/looplia-core/commands/build-workflow.md +92 -0
- package/plugins/looplia-core/commands/build.md +71 -0
- package/plugins/looplia-core/commands/list-workflows.md +55 -0
- package/plugins/looplia-core/commands/run.md +50 -0
- package/plugins/looplia-core/hooks/hooks.json +27 -0
- package/plugins/looplia-core/scripts/hooks/compact-inject-state.sh +36 -0
- package/plugins/looplia-core/scripts/hooks/post-write-validate.sh +81 -0
- package/plugins/looplia-core/scripts/hooks/stop-guard.sh +56 -0
- package/plugins/looplia-core/skills/plugin-registry-scanner/SKILL.md +108 -0
- package/plugins/looplia-core/skills/plugin-registry-scanner/scripts/scan-plugins.ts +221 -0
- package/plugins/looplia-core/skills/plugin-registry-scanner/test/scan-plugins.test.ts +256 -0
- package/plugins/looplia-core/skills/search/SKILL.md +174 -0
- package/plugins/looplia-core/skills/skill-capability-matcher/SKILL.md +378 -0
- package/plugins/looplia-core/skills/workflow-executor/SKILL.md +469 -0
- package/plugins/looplia-core/skills/workflow-executor-inline/SKILL.md +217 -0
- package/plugins/looplia-core/skills/workflow-schema-composer/SCHEMA.md +214 -0
- package/plugins/looplia-core/skills/workflow-schema-composer/SKILL.md +373 -0
- package/plugins/looplia-core/skills/workflow-schema-composer/templates/workflow.md.template +44 -0
- package/plugins/looplia-core/skills/workflow-validator/SKILL.md +171 -0
- package/plugins/looplia-core/skills/workflow-validator/scripts/validate.ts +244 -0
- package/plugins/looplia-writer/.claude-plugin/plugin.json +10 -0
- package/plugins/looplia-writer/README.md +107 -0
- package/plugins/looplia-writer/skills/content-documenter/SKILL.md +189 -0
- package/plugins/looplia-writer/skills/id-generator/SKILL.md +120 -0
- package/plugins/looplia-writer/skills/idea-synthesis/SKILL.md +162 -0
- package/plugins/looplia-writer/skills/media-reviewer/SKILL.md +105 -0
- package/plugins/looplia-writer/skills/user-profile-reader/SKILL.md +94 -0
- package/plugins/looplia-writer/skills/writing-enhancer/SKILL.md +34 -0
- package/plugins/looplia-writer/skills/writing-kit-assembler/SKILL.md +206 -0
- package/plugins/looplia-writer/workflows/writing-kit.md +134 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: content-documenter
|
|
3
|
+
description: |
|
|
4
|
+
Generate structured ContentSummary JSON from analyzed content.
|
|
5
|
+
Use after media-reviewer to produce final output with all 16 fields.
|
|
6
|
+
tools: Read, Write
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Content Documenter Skill
|
|
10
|
+
|
|
11
|
+
Transforms media-reviewer analysis into structured JSON documentation.
|
|
12
|
+
|
|
13
|
+
## What This Skill Does
|
|
14
|
+
|
|
15
|
+
Takes your media-reviewer analysis and produces ContentSummary JSON
|
|
16
|
+
with all 16 required fields.
|
|
17
|
+
|
|
18
|
+
## Input
|
|
19
|
+
|
|
20
|
+
You should have already used media-reviewer skill which provides:
|
|
21
|
+
- Deep understanding of content structure
|
|
22
|
+
- Core ideas and their connections
|
|
23
|
+
- Narrative flow analysis
|
|
24
|
+
- Key moments and quotes with timestamps
|
|
25
|
+
- Thematic patterns
|
|
26
|
+
|
|
27
|
+
## Output Fields
|
|
28
|
+
|
|
29
|
+
### Core Fields (7)
|
|
30
|
+
|
|
31
|
+
1. **contentId** (string)
|
|
32
|
+
- Copy from input file frontmatter id field
|
|
33
|
+
|
|
34
|
+
2. **headline** (string, 10-200 chars)
|
|
35
|
+
- One compelling sentence capturing the essence
|
|
36
|
+
- Should make someone want to read more
|
|
37
|
+
- Focus on the unique value or insight
|
|
38
|
+
|
|
39
|
+
3. **tldr** (string, 20-500 chars)
|
|
40
|
+
- 3-5 sentence summary
|
|
41
|
+
- Cover the main points concisely
|
|
42
|
+
- Answer: "What is this about and why does it matter?"
|
|
43
|
+
|
|
44
|
+
4. **bullets** (string[], 1-10 items)
|
|
45
|
+
- Key points as bullet list
|
|
46
|
+
- Each bullet = one distinct insight
|
|
47
|
+
- Ordered by importance or logical flow
|
|
48
|
+
|
|
49
|
+
5. **tags** (string[], 1-20 items)
|
|
50
|
+
- Topic tags for categorization
|
|
51
|
+
- Include broad tags (e.g., "AI") and specific (e.g., "Constitutional AI")
|
|
52
|
+
- Lowercase, no special characters
|
|
53
|
+
|
|
54
|
+
6. **sentiment** ("positive" | "neutral" | "negative")
|
|
55
|
+
- Overall tone of content
|
|
56
|
+
- Based on language and framing, not topic
|
|
57
|
+
|
|
58
|
+
7. **category** (string)
|
|
59
|
+
- Content type: article, video, podcast, tutorial, interview, etc.
|
|
60
|
+
|
|
61
|
+
8. **score.relevanceToUser** (number, 0-1)
|
|
62
|
+
- Based on user-profile.json topics
|
|
63
|
+
- 1.0 = perfectly matches user interests
|
|
64
|
+
- 0.0 = no relevance to user interests
|
|
65
|
+
- Calculate: sum(matched topic weights) / sum(all topic weights)
|
|
66
|
+
|
|
67
|
+
### Documentary Fields (8)
|
|
68
|
+
|
|
69
|
+
9. **overview** (string, min 50 chars)
|
|
70
|
+
- 2-3 rich paragraphs introducing the material
|
|
71
|
+
- Write for someone unfamiliar with the content
|
|
72
|
+
- Cover: what it is, who it's for, why it matters
|
|
73
|
+
- Set the stage for detailed analysis
|
|
74
|
+
|
|
75
|
+
10. **keyThemes** (string[], 3-7 items)
|
|
76
|
+
- Main topics/themes identified
|
|
77
|
+
- Broader than tags, more conceptual
|
|
78
|
+
- Examples: "The tension between safety and capability"
|
|
79
|
+
|
|
80
|
+
11. **detailedAnalysis** (string, min 100 chars)
|
|
81
|
+
- Documentary-style breakdown
|
|
82
|
+
- Follow the content's structure
|
|
83
|
+
- Explain each major section/segment
|
|
84
|
+
- Include specific details and examples
|
|
85
|
+
|
|
86
|
+
12. **narrativeFlow** (string, min 50 chars)
|
|
87
|
+
- How the content progresses
|
|
88
|
+
- Explain the arc and transitions
|
|
89
|
+
- Show how ideas build on each other
|
|
90
|
+
- Note pacing and structure choices
|
|
91
|
+
|
|
92
|
+
13. **coreIdeas** (CoreIdea[], 1-10 items)
|
|
93
|
+
Each item has:
|
|
94
|
+
- concept: string - the idea name
|
|
95
|
+
- explanation: string (min 10 chars) - what it means in this context
|
|
96
|
+
- examples?: string[] - specific examples from content
|
|
97
|
+
|
|
98
|
+
14. **importantQuotes** (Quote[], 0-20 items)
|
|
99
|
+
Each item has:
|
|
100
|
+
- text: string - EXACT verbatim quote (never paraphrase!)
|
|
101
|
+
- timestamp?: string - HH:MM:SS or MM:SS format (for video/audio)
|
|
102
|
+
- context?: string - what was being discussed when this was said
|
|
103
|
+
|
|
104
|
+
15. **context** (string, min 20 chars)
|
|
105
|
+
- Background needed to understand the content
|
|
106
|
+
- Prerequisites or prior knowledge assumed
|
|
107
|
+
- Historical or situational context
|
|
108
|
+
- Related work or references mentioned
|
|
109
|
+
|
|
110
|
+
16. **relatedConcepts** (string[], 0-15 items)
|
|
111
|
+
- Related topics mentioned or implied
|
|
112
|
+
- Connections to other ideas or fields
|
|
113
|
+
- What someone might want to learn next
|
|
114
|
+
|
|
115
|
+
## Timestamp Format
|
|
116
|
+
|
|
117
|
+
For video/audio content:
|
|
118
|
+
- `0:30` - 30 seconds
|
|
119
|
+
- `2:45` - 2 minutes 45 seconds
|
|
120
|
+
- `1:30:00` - 1 hour 30 minutes
|
|
121
|
+
- Always use the format from the source (don't normalize)
|
|
122
|
+
|
|
123
|
+
## JSON Output Example
|
|
124
|
+
|
|
125
|
+
```json
|
|
126
|
+
{
|
|
127
|
+
"contentId": "abc123",
|
|
128
|
+
"headline": "Constitutional AI introduces a novel approach to aligning language models through self-critique",
|
|
129
|
+
"tldr": "This video explains Constitutional AI, Anthropic's method for training helpful and harmless AI assistants. The approach uses a set of principles (a 'constitution') to guide the model's self-improvement, reducing the need for human feedback while maintaining safety.",
|
|
130
|
+
"bullets": [
|
|
131
|
+
"Constitutional AI uses self-critique guided by explicit principles",
|
|
132
|
+
"The method reduces reliance on human feedback for safety training",
|
|
133
|
+
"Models learn to identify and correct their own harmful outputs"
|
|
134
|
+
],
|
|
135
|
+
"tags": ["ai", "safety", "alignment", "constitutional-ai", "anthropic", "rlhf"],
|
|
136
|
+
"sentiment": "positive",
|
|
137
|
+
"category": "video",
|
|
138
|
+
"score": { "relevanceToUser": 0.85 },
|
|
139
|
+
"overview": "This comprehensive video from Anthropic introduces Constitutional AI...",
|
|
140
|
+
"keyThemes": [
|
|
141
|
+
"AI Safety and Alignment",
|
|
142
|
+
"Self-supervised learning for safety",
|
|
143
|
+
"Reducing human feedback requirements",
|
|
144
|
+
"Explicit principles for AI behavior"
|
|
145
|
+
],
|
|
146
|
+
"detailedAnalysis": "The video opens with a clear problem statement...",
|
|
147
|
+
"narrativeFlow": "The presentation follows a classic problem-solution structure...",
|
|
148
|
+
"coreIdeas": [
|
|
149
|
+
{
|
|
150
|
+
"concept": "Constitutional AI",
|
|
151
|
+
"explanation": "An alignment approach where AI models critique and revise their own outputs based on explicit principles",
|
|
152
|
+
"examples": ["A model generating a harmful response, then self-critiquing"]
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
"importantQuotes": [
|
|
156
|
+
{
|
|
157
|
+
"text": "The key insight is that we can use AI to supervise AI",
|
|
158
|
+
"timestamp": "12:34",
|
|
159
|
+
"context": "Explaining the core mechanism that makes Constitutional AI scalable"
|
|
160
|
+
}
|
|
161
|
+
],
|
|
162
|
+
"context": "This video builds on prior work in RLHF...",
|
|
163
|
+
"relatedConcepts": ["RLHF", "red teaming", "scalable oversight", "AI alignment"]
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Quality Checklist
|
|
168
|
+
|
|
169
|
+
Before outputting, verify:
|
|
170
|
+
- All 16 fields are present
|
|
171
|
+
- All minimum lengths are met
|
|
172
|
+
- Quotes are exact (verbatim)
|
|
173
|
+
- Timestamps are included for video/audio
|
|
174
|
+
- contentId matches input file
|
|
175
|
+
- relevanceToUser is calculated from user profile
|
|
176
|
+
- JSON is valid
|
|
177
|
+
|
|
178
|
+
## Important Rules
|
|
179
|
+
|
|
180
|
+
- Include ALL 16 fields - never omit any
|
|
181
|
+
- Use exact verbatim quotes - never paraphrase
|
|
182
|
+
- Include timestamps when source has them
|
|
183
|
+
- Meet all minimum character requirements
|
|
184
|
+
- Follow the JSON schema exactly
|
|
185
|
+
- Base relevanceToUser on actual user profile
|
|
186
|
+
- Never paraphrase quotes
|
|
187
|
+
- Never add interpretation beyond source
|
|
188
|
+
- Never omit required fields
|
|
189
|
+
- Never guess timestamps - only include if known
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: id-generator
|
|
3
|
+
description: Generate intelligent session IDs based on detected content source type.
|
|
4
|
+
Analyzes ContentSummary and creates meaningful IDs (podcast-xyz, transcript-abc, etc.).
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ID Generator Skill
|
|
8
|
+
|
|
9
|
+
Expert at generating meaningful session IDs based on content source type and characteristics.
|
|
10
|
+
|
|
11
|
+
## What This Skill Does
|
|
12
|
+
|
|
13
|
+
- Reads ContentSummary JSON with detectedSource field
|
|
14
|
+
- Analyzes source type and main topic/theme
|
|
15
|
+
- Generates human-readable, meaningful session ID
|
|
16
|
+
- Returns ID with confidence score and rationale
|
|
17
|
+
- Enables reusable content identification
|
|
18
|
+
|
|
19
|
+
## ID Generation Process
|
|
20
|
+
|
|
21
|
+
Follow these 5 steps:
|
|
22
|
+
|
|
23
|
+
### Step 1: Validate Input
|
|
24
|
+
- Confirm ContentSummary has required fields
|
|
25
|
+
- Check if detectedSource field exists
|
|
26
|
+
- Note the content's main topic/headline/category
|
|
27
|
+
|
|
28
|
+
### Step 2: Analyze Source Type
|
|
29
|
+
- Review detectedSource value (podcast, transcript, article, youtube, twitter, text, other)
|
|
30
|
+
- Consider content characteristics:
|
|
31
|
+
- **Podcast**: Audio transcript with timestamps, speaker markers, conversational flow
|
|
32
|
+
- **Transcript**: Conversational content, dialogue, timestamps, multiple speakers
|
|
33
|
+
- **Article**: Written structure, sections, headlines, formal tone
|
|
34
|
+
- **YouTube**: Video description, channel info, timestamps
|
|
35
|
+
- **Twitter**: Social media context, short-form, engagement metrics
|
|
36
|
+
- **Text**: Unstructured thoughts, raw content, raw notes
|
|
37
|
+
- **Other**: Any other content type
|
|
38
|
+
|
|
39
|
+
### Step 3: Extract Topic Keywords
|
|
40
|
+
- Identify main topic from headline, category, or keyThemes
|
|
41
|
+
- Select 1-2 most significant keywords
|
|
42
|
+
- Avoid generic terms, prefer specific subject matter
|
|
43
|
+
- Examples: "healthcare", "ai", "python", "productivity"
|
|
44
|
+
|
|
45
|
+
### Step 4: Generate Base ID
|
|
46
|
+
- Format: `{source-type}-{date}-{topic}`
|
|
47
|
+
- Source prefix from detectedSource (lowercase)
|
|
48
|
+
- Date in YYYY-MM-DD format
|
|
49
|
+
- Topic as 1-2 words (hyphen-separated, lowercase)
|
|
50
|
+
- Example: `podcast-2024-12-08-ai-healthcare`
|
|
51
|
+
|
|
52
|
+
### Step 5: Quality Check & Return
|
|
53
|
+
- Ensure ID is lowercase, hyphen-separated
|
|
54
|
+
- Validate length (20-50 characters preferred)
|
|
55
|
+
- Return JSON with:
|
|
56
|
+
- `contentId`: Generated ID
|
|
57
|
+
- `detectedSource`: Confirmed source type
|
|
58
|
+
- `sourceConfidence`: 0.0-1.0 confidence in source detection
|
|
59
|
+
- `rationale`: Brief explanation of why this source type
|
|
60
|
+
|
|
61
|
+
## ID Generation Rules
|
|
62
|
+
|
|
63
|
+
### Source-Based Naming
|
|
64
|
+
- **Podcast**: `podcast-{date}-{topic}`
|
|
65
|
+
- **Transcript**: `transcript-{date}-{topic}`
|
|
66
|
+
- **Article**: `article-{date}-{topic}`
|
|
67
|
+
- **YouTube**: `youtube-{date}-{topic}`
|
|
68
|
+
- **Twitter**: `tweet-{date}-{topic}`
|
|
69
|
+
- **Text**: `text-{date}-{topic}`
|
|
70
|
+
- **Other**: `content-{date}-{topic}`
|
|
71
|
+
|
|
72
|
+
### Topic Selection
|
|
73
|
+
- Extract from headline (first 2-3 words)
|
|
74
|
+
- If headline too generic, use category or first keyTheme
|
|
75
|
+
- Avoid articles (a, the, and, or)
|
|
76
|
+
- Use only letters, numbers, hyphens
|
|
77
|
+
- Maximum 3 words
|
|
78
|
+
|
|
79
|
+
### Date Handling
|
|
80
|
+
- Use current date in YYYY-MM-DD format
|
|
81
|
+
- Or extract from context field if content has original date
|
|
82
|
+
- Format consistently
|
|
83
|
+
|
|
84
|
+
### Examples
|
|
85
|
+
```
|
|
86
|
+
Input: Podcast about AI in Healthcare (2024-12-08)
|
|
87
|
+
Output: podcast-2024-12-08-ai-healthcare
|
|
88
|
+
|
|
89
|
+
Input: Whisper transcript of React conference talk (2024-12-07)
|
|
90
|
+
Output: transcript-2024-12-07-react-conference
|
|
91
|
+
|
|
92
|
+
Input: Article on productivity hacks (2024-12-06)
|
|
93
|
+
Output: article-2024-12-06-productivity-hacks
|
|
94
|
+
|
|
95
|
+
Input: YouTube tutorial on Python (2024-12-05)
|
|
96
|
+
Output: youtube-2024-12-05-python-tutorial
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Output Format
|
|
100
|
+
|
|
101
|
+
Return structured JSON:
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"contentId": "podcast-2024-12-08-ai-healthcare",
|
|
105
|
+
"detectedSource": "podcast",
|
|
106
|
+
"sourceConfidence": 0.95,
|
|
107
|
+
"rationale": "Audio transcript with speaker markers, timestamps, and conversational flow indicates podcast source."
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Important Rules
|
|
112
|
+
|
|
113
|
+
- Always return valid JSON
|
|
114
|
+
- Confidence score reflects certainty in source detection (0.5-1.0 typical range)
|
|
115
|
+
- Rationale should be brief (1-2 sentences)
|
|
116
|
+
- ID must be unique and reusable
|
|
117
|
+
- Never include spaces or special characters (except hyphens)
|
|
118
|
+
- Generate ID even if source confidence is moderate (>0.5)
|
|
119
|
+
- Prefer readable IDs over random strings
|
|
120
|
+
- Keep ID length under 60 characters when possible
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: idea-synthesis
|
|
3
|
+
description: |
|
|
4
|
+
Looplia writer skill for generating content ideas with personalization.
|
|
5
|
+
Reads user profile for context. Generates hooks, angles, and thought-provoking questions.
|
|
6
|
+
Use after media-reviewer to transform analysis into creative content ideas.
|
|
7
|
+
tools: Read, Skill
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Idea Synthesis Skill
|
|
11
|
+
|
|
12
|
+
Generate creative content ideas from analyzed content, personalized for the user.
|
|
13
|
+
|
|
14
|
+
## Purpose
|
|
15
|
+
|
|
16
|
+
Transform content analysis into actionable writing ideas:
|
|
17
|
+
- Attention-grabbing hooks
|
|
18
|
+
- Unique angles/perspectives
|
|
19
|
+
- Thought-provoking questions
|
|
20
|
+
|
|
21
|
+
## Process
|
|
22
|
+
|
|
23
|
+
### Step 1: Read User Profile
|
|
24
|
+
|
|
25
|
+
Use the user-profile-reader skill to get user context:
|
|
26
|
+
- Topics of interest and expertise levels
|
|
27
|
+
- Preferred writing style
|
|
28
|
+
- Target audience
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
Skill("user-profile-reader")
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Step 2: Read Content Analysis
|
|
35
|
+
|
|
36
|
+
Read the input file containing content analysis from media-reviewer:
|
|
37
|
+
- Key themes
|
|
38
|
+
- Important quotes
|
|
39
|
+
- Narrative structure
|
|
40
|
+
- Core ideas
|
|
41
|
+
|
|
42
|
+
### Step 3: Generate Hooks
|
|
43
|
+
|
|
44
|
+
Create 3-5 attention-grabbing openers:
|
|
45
|
+
|
|
46
|
+
| Hook Type | Description | Example |
|
|
47
|
+
|-----------|-------------|---------|
|
|
48
|
+
| Question | Opens with a compelling question | "What if everything you knew about X was wrong?" |
|
|
49
|
+
| Statistic | Leads with surprising data | "90% of writers miss this critical step..." |
|
|
50
|
+
| Story | Starts with a brief narrative | "When I first discovered X, I was skeptical..." |
|
|
51
|
+
| Contrast | Highlights a surprising contradiction | "Most experts say X, but the data shows Y..." |
|
|
52
|
+
| Bold Statement | Makes a provocative claim | "X is dead. Here's what's replacing it..." |
|
|
53
|
+
|
|
54
|
+
### Step 4: Generate Angles
|
|
55
|
+
|
|
56
|
+
Create 3-5 unique perspectives on the content:
|
|
57
|
+
|
|
58
|
+
For each angle:
|
|
59
|
+
- **Perspective**: What viewpoint does this take?
|
|
60
|
+
- **Approach**: How would you develop this angle?
|
|
61
|
+
- **Target**: Who would this appeal to?
|
|
62
|
+
|
|
63
|
+
### Step 5: Generate Questions
|
|
64
|
+
|
|
65
|
+
Create 5-7 discussion starters:
|
|
66
|
+
|
|
67
|
+
| Depth | Description |
|
|
68
|
+
|-------|-------------|
|
|
69
|
+
| Surface | Basic comprehension questions |
|
|
70
|
+
| Medium | Application and analysis questions |
|
|
71
|
+
| Deep | Synthesis and evaluation questions |
|
|
72
|
+
|
|
73
|
+
### Step 6: Personalize
|
|
74
|
+
|
|
75
|
+
Apply user profile:
|
|
76
|
+
- Emphasize topics matching user interests
|
|
77
|
+
- Adjust complexity to user's expertise level
|
|
78
|
+
- Align with user's writing style
|
|
79
|
+
|
|
80
|
+
### Step 7: Write Output
|
|
81
|
+
|
|
82
|
+
Output JSON with all generated ideas.
|
|
83
|
+
|
|
84
|
+
## Input
|
|
85
|
+
|
|
86
|
+
Content analysis JSON from media-reviewer containing:
|
|
87
|
+
- `contentId`
|
|
88
|
+
- `keyThemes`
|
|
89
|
+
- `importantQuotes`
|
|
90
|
+
- `coreIdeas`
|
|
91
|
+
|
|
92
|
+
## Output Schema
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"contentId": "string",
|
|
97
|
+
"hooks": [
|
|
98
|
+
{
|
|
99
|
+
"text": "What if the key to X isn't Y, but Z?",
|
|
100
|
+
"type": "question"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"text": "According to new research, 80% of...",
|
|
104
|
+
"type": "statistic"
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"angles": [
|
|
108
|
+
{
|
|
109
|
+
"perspective": "Skeptic's view",
|
|
110
|
+
"approach": "Challenge the main premise with counterexamples",
|
|
111
|
+
"target": "Readers who question conventional wisdom"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"perspective": "Beginner's guide",
|
|
115
|
+
"approach": "Break down complex concepts for newcomers",
|
|
116
|
+
"target": "People new to this topic"
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"questions": [
|
|
120
|
+
{
|
|
121
|
+
"text": "What would happen if we applied this to everyday life?",
|
|
122
|
+
"depth": "medium"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"text": "How does this change our understanding of X?",
|
|
126
|
+
"depth": "deep"
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"personalization": {
|
|
130
|
+
"matchedTopics": ["ai", "productivity"],
|
|
131
|
+
"adjustedFor": "intermediate expertise"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Quality Guidelines
|
|
137
|
+
|
|
138
|
+
### Good Hooks
|
|
139
|
+
- Specific, not generic
|
|
140
|
+
- Create curiosity
|
|
141
|
+
- Promise value
|
|
142
|
+
- Match content tone
|
|
143
|
+
|
|
144
|
+
### Good Angles
|
|
145
|
+
- Unique perspective
|
|
146
|
+
- Actionable approach
|
|
147
|
+
- Clear target audience
|
|
148
|
+
- Connected to content themes
|
|
149
|
+
|
|
150
|
+
### Good Questions
|
|
151
|
+
- Open-ended (not yes/no)
|
|
152
|
+
- Thought-provoking
|
|
153
|
+
- Multiple valid answers
|
|
154
|
+
- Encourage discussion
|
|
155
|
+
|
|
156
|
+
## Important Rules
|
|
157
|
+
|
|
158
|
+
1. **Always read user profile first** - Personalization is key
|
|
159
|
+
2. **Include all hook types** - Variety in approaches
|
|
160
|
+
3. **Cover all depth levels** - Questions for different readers
|
|
161
|
+
4. **Stay true to content** - Ideas must derive from source
|
|
162
|
+
5. **Be specific** - Avoid generic, cookie-cutter ideas
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: media-reviewer
|
|
3
|
+
description: |
|
|
4
|
+
Deep content analysis for structure, themes, narrative flow,
|
|
5
|
+
key moments, and important quotes. Use before content-documenter.
|
|
6
|
+
tools: Read, Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Media Reviewer Skill
|
|
10
|
+
|
|
11
|
+
Expert at analyzing media content to understand structure, ideas, and narrative flow.
|
|
12
|
+
|
|
13
|
+
## What This Skill Does
|
|
14
|
+
|
|
15
|
+
- Reads content materials (text, captions, transcripts)
|
|
16
|
+
- Understands ideas and concepts being presented
|
|
17
|
+
- Identifies narrative structure and progression
|
|
18
|
+
- Discovers key moments, turning points, and themes
|
|
19
|
+
- Recognizes content organization patterns
|
|
20
|
+
|
|
21
|
+
## Analysis Process
|
|
22
|
+
|
|
23
|
+
Follow these 9 steps in order:
|
|
24
|
+
|
|
25
|
+
### Step 1: Read Everything
|
|
26
|
+
- Read the complete content file
|
|
27
|
+
- Note the metadata (title, source, date, type)
|
|
28
|
+
- Don't skim - read thoroughly
|
|
29
|
+
- If content is truncated, note what's missing
|
|
30
|
+
|
|
31
|
+
### Step 2: Understand Context
|
|
32
|
+
- What is this content about?
|
|
33
|
+
- Who created it and why?
|
|
34
|
+
- What's the intended audience?
|
|
35
|
+
- What's the publication context?
|
|
36
|
+
- When was it created?
|
|
37
|
+
|
|
38
|
+
### Step 3: Identify Structure
|
|
39
|
+
- How is the content organized?
|
|
40
|
+
- What are the main sections/segments?
|
|
41
|
+
- How long is each part?
|
|
42
|
+
- What's the logical flow?
|
|
43
|
+
- Are there chapters, timestamps, or markers?
|
|
44
|
+
|
|
45
|
+
### Step 4: Extract Core Ideas
|
|
46
|
+
- What are the 3-7 main concepts?
|
|
47
|
+
- How are they explained?
|
|
48
|
+
- What examples are given?
|
|
49
|
+
- How do ideas connect to each other?
|
|
50
|
+
- What's the central thesis?
|
|
51
|
+
|
|
52
|
+
### Step 5: Track Narrative Flow
|
|
53
|
+
- How does content progress?
|
|
54
|
+
- What's the arc (intro → development → conclusion)?
|
|
55
|
+
- Where are the key transitions?
|
|
56
|
+
- How do ideas build on each other?
|
|
57
|
+
- What's the pacing?
|
|
58
|
+
|
|
59
|
+
### Step 6: Find Key Moments
|
|
60
|
+
- What are the most important points?
|
|
61
|
+
- Where are the "aha" moments?
|
|
62
|
+
- What would someone quote from this?
|
|
63
|
+
- What's most memorable?
|
|
64
|
+
- What's surprising or novel?
|
|
65
|
+
|
|
66
|
+
### Step 7: Extract Quotes + Timestamps
|
|
67
|
+
- Find 5-20 verbatim quotes
|
|
68
|
+
- For video/audio: note exact timestamps (HH:MM:SS or MM:SS)
|
|
69
|
+
- Capture the most insightful statements
|
|
70
|
+
- Include context for each quote
|
|
71
|
+
- Never paraphrase - exact words only
|
|
72
|
+
|
|
73
|
+
### Step 8: Identify Themes
|
|
74
|
+
- What recurring topics emerge?
|
|
75
|
+
- What patterns appear throughout?
|
|
76
|
+
- What's the underlying message?
|
|
77
|
+
- What values or perspectives are expressed?
|
|
78
|
+
|
|
79
|
+
### Step 9: Documentary Angle
|
|
80
|
+
- If making a documentary about this, how would you structure it?
|
|
81
|
+
- What's the narrative hook that draws people in?
|
|
82
|
+
- What makes this content unique?
|
|
83
|
+
- What's the emotional arc?
|
|
84
|
+
|
|
85
|
+
## Output
|
|
86
|
+
|
|
87
|
+
Your analysis is IMPLICIT - it stays in your thinking.
|
|
88
|
+
The content-documenter skill will use your analysis to produce structured output.
|
|
89
|
+
Do NOT output JSON directly from this skill.
|
|
90
|
+
|
|
91
|
+
Focus on understanding deeply so content-documenter can produce rich output.
|
|
92
|
+
|
|
93
|
+
## Important Rules
|
|
94
|
+
|
|
95
|
+
- Be thorough and comprehensive
|
|
96
|
+
- Understand the material deeply
|
|
97
|
+
- Preserve nuance and detail
|
|
98
|
+
- Note what makes this content unique
|
|
99
|
+
- Always include timestamps for video/audio
|
|
100
|
+
- Read the ENTIRE content before analyzing
|
|
101
|
+
- Don't add interpretation or opinion
|
|
102
|
+
- Don't skip important details
|
|
103
|
+
- Don't oversimplify complex concepts
|
|
104
|
+
- Don't paraphrase quotes - keep verbatim
|
|
105
|
+
- Don't rush - thoroughness over speed
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: user-profile-reader
|
|
3
|
+
description: |
|
|
4
|
+
Read user profile from workspace and calculate content relevance.
|
|
5
|
+
Use to personalize output based on user interests.
|
|
6
|
+
tools: Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# User Profile Reader Skill
|
|
10
|
+
|
|
11
|
+
Read and interpret user preferences for content personalization.
|
|
12
|
+
|
|
13
|
+
## What This Skill Does
|
|
14
|
+
|
|
15
|
+
- Reads `user-profile.json` from workspace root
|
|
16
|
+
- Provides user context to other processing
|
|
17
|
+
- Calculates relevance scores for content
|
|
18
|
+
|
|
19
|
+
## User Profile Location
|
|
20
|
+
|
|
21
|
+
`~/.looplia/user-profile.json`
|
|
22
|
+
|
|
23
|
+
## User Profile Schema
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"userId": "string",
|
|
28
|
+
"topics": [
|
|
29
|
+
{ "topic": "string", "interestLevel": 1-5 }
|
|
30
|
+
],
|
|
31
|
+
"style": {
|
|
32
|
+
"tone": "beginner" | "intermediate" | "expert" | "mixed",
|
|
33
|
+
"targetWordCount": 100-10000,
|
|
34
|
+
"voice": "first-person" | "third-person" | "instructional"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Relevance Scoring Algorithm
|
|
40
|
+
|
|
41
|
+
Calculate `score.relevanceToUser` (0-1):
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
1. For each user topic:
|
|
45
|
+
- weight = interestLevel / 5
|
|
46
|
+
- matched = content tags/themes contain topic (case-insensitive)
|
|
47
|
+
|
|
48
|
+
2. Calculate score:
|
|
49
|
+
- matchedWeight = sum of weights for matched topics
|
|
50
|
+
- totalWeight = sum of all topic weights
|
|
51
|
+
- score = matchedWeight / totalWeight
|
|
52
|
+
|
|
53
|
+
3. If no user topics defined:
|
|
54
|
+
- score = 0.5 (neutral)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Example Calculation
|
|
58
|
+
|
|
59
|
+
User profile:
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"topics": [
|
|
63
|
+
{ "topic": "AI", "interestLevel": 5 },
|
|
64
|
+
{ "topic": "productivity", "interestLevel": 3 },
|
|
65
|
+
{ "topic": "cooking", "interestLevel": 2 }
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Content tags: ["AI", "safety", "alignment"]
|
|
71
|
+
|
|
72
|
+
Calculation:
|
|
73
|
+
- AI: matched, weight = 5/5 = 1.0 (contributes to matchedWeight)
|
|
74
|
+
- productivity: not matched, weight = 3/5 = 0.6 (contributes to totalWeight only)
|
|
75
|
+
- cooking: not matched, weight = 2/5 = 0.4 (contributes to totalWeight only)
|
|
76
|
+
- matchedWeight = 1.0
|
|
77
|
+
- totalWeight = 1.0 + 0.6 + 0.4 = 2.0
|
|
78
|
+
- score = 1.0 / 2.0 = 0.5
|
|
79
|
+
|
|
80
|
+
## Usage in Other Skills
|
|
81
|
+
|
|
82
|
+
When content-documenter needs relevance score:
|
|
83
|
+
1. Read user-profile.json
|
|
84
|
+
2. Compare content tags/themes to user topics
|
|
85
|
+
3. Apply algorithm above
|
|
86
|
+
4. Return score in `score.relevanceToUser` field
|
|
87
|
+
|
|
88
|
+
## Handling Edge Cases
|
|
89
|
+
|
|
90
|
+
- **No user profile file:** Use score = 0.5
|
|
91
|
+
- **Empty topics array:** Use score = 0.5
|
|
92
|
+
- **Invalid JSON:** Use score = 0.5, log warning
|
|
93
|
+
- **All topics matched:** score = 1.0
|
|
94
|
+
- **No topics matched:** score = 0.0
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: writing-enhancer
|
|
3
|
+
description: Rephrase or completely rewrite content matching user's preferred tone, voice, and style.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Writing Enhancer Skill
|
|
7
|
+
|
|
8
|
+
Transform writing to match user's style preferences.
|
|
9
|
+
|
|
10
|
+
## What This Skill Does
|
|
11
|
+
|
|
12
|
+
- Reads WritingKit + UserProfile
|
|
13
|
+
- Rephrases content in user's preferred tone/voice
|
|
14
|
+
- Generates complete article draft (future feature)
|
|
15
|
+
|
|
16
|
+
## Input
|
|
17
|
+
|
|
18
|
+
- WritingKit JSON
|
|
19
|
+
- UserProfile JSON
|
|
20
|
+
|
|
21
|
+
## Output
|
|
22
|
+
|
|
23
|
+
Enhanced content matching:
|
|
24
|
+
- tone: beginner, intermediate, expert, mixed
|
|
25
|
+
- voice: first-person, third-person, instructional
|
|
26
|
+
- targetWordCount: Desired article length
|
|
27
|
+
|
|
28
|
+
## Important Rules
|
|
29
|
+
|
|
30
|
+
✅ Preserve original meaning and facts
|
|
31
|
+
✅ Match user's preferred style
|
|
32
|
+
✅ Maintain accuracy of quotes and data
|
|
33
|
+
❌ Don't add information not in source
|
|
34
|
+
❌ Don't change factual claims
|