@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.
Files changed (34) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +33216 -0
  3. package/package.json +55 -0
  4. package/plugins/looplia-core/.claude-plugin/plugin.json +10 -0
  5. package/plugins/looplia-core/commands/build-workflow.md +92 -0
  6. package/plugins/looplia-core/commands/build.md +71 -0
  7. package/plugins/looplia-core/commands/list-workflows.md +55 -0
  8. package/plugins/looplia-core/commands/run.md +50 -0
  9. package/plugins/looplia-core/hooks/hooks.json +27 -0
  10. package/plugins/looplia-core/scripts/hooks/compact-inject-state.sh +36 -0
  11. package/plugins/looplia-core/scripts/hooks/post-write-validate.sh +81 -0
  12. package/plugins/looplia-core/scripts/hooks/stop-guard.sh +56 -0
  13. package/plugins/looplia-core/skills/plugin-registry-scanner/SKILL.md +108 -0
  14. package/plugins/looplia-core/skills/plugin-registry-scanner/scripts/scan-plugins.ts +221 -0
  15. package/plugins/looplia-core/skills/plugin-registry-scanner/test/scan-plugins.test.ts +256 -0
  16. package/plugins/looplia-core/skills/search/SKILL.md +174 -0
  17. package/plugins/looplia-core/skills/skill-capability-matcher/SKILL.md +378 -0
  18. package/plugins/looplia-core/skills/workflow-executor/SKILL.md +469 -0
  19. package/plugins/looplia-core/skills/workflow-executor-inline/SKILL.md +217 -0
  20. package/plugins/looplia-core/skills/workflow-schema-composer/SCHEMA.md +214 -0
  21. package/plugins/looplia-core/skills/workflow-schema-composer/SKILL.md +373 -0
  22. package/plugins/looplia-core/skills/workflow-schema-composer/templates/workflow.md.template +44 -0
  23. package/plugins/looplia-core/skills/workflow-validator/SKILL.md +171 -0
  24. package/plugins/looplia-core/skills/workflow-validator/scripts/validate.ts +244 -0
  25. package/plugins/looplia-writer/.claude-plugin/plugin.json +10 -0
  26. package/plugins/looplia-writer/README.md +107 -0
  27. package/plugins/looplia-writer/skills/content-documenter/SKILL.md +189 -0
  28. package/plugins/looplia-writer/skills/id-generator/SKILL.md +120 -0
  29. package/plugins/looplia-writer/skills/idea-synthesis/SKILL.md +162 -0
  30. package/plugins/looplia-writer/skills/media-reviewer/SKILL.md +105 -0
  31. package/plugins/looplia-writer/skills/user-profile-reader/SKILL.md +94 -0
  32. package/plugins/looplia-writer/skills/writing-enhancer/SKILL.md +34 -0
  33. package/plugins/looplia-writer/skills/writing-kit-assembler/SKILL.md +206 -0
  34. package/plugins/looplia-writer/workflows/writing-kit.md +134 -0
@@ -0,0 +1,214 @@
1
+ # Workflow Schema v0.6.1
2
+
3
+ Complete reference for the looplia workflow-as-markdown schema.
4
+
5
+ ## Frontmatter Structure
6
+
7
+ ```yaml
8
+ ---
9
+ name: workflow-name
10
+ version: 1.0.0
11
+ description: What this workflow does
12
+
13
+ steps:
14
+ - id: step-id
15
+ skill: skill-name
16
+ mission: |
17
+ Natural language task description
18
+ input: ${{ sandbox }}/inputs/content.md
19
+ output: ${{ sandbox }}/outputs/result.json
20
+ needs: [dependency-step-id]
21
+ model: haiku
22
+ validate:
23
+ required_fields: [field1, field2]
24
+ final: true
25
+ ---
26
+ ```
27
+
28
+ ## Root Fields
29
+
30
+ | Field | Type | Required | Description |
31
+ |-------|------|----------|-------------|
32
+ | `name` | string | **Yes** | Workflow identifier (kebab-case) |
33
+ | `version` | string | **Yes** | Semantic version (e.g., "1.0.0") |
34
+ | `description` | string | **Yes** | What the workflow does |
35
+ | `steps` | array | **Yes** | Ordered list of workflow steps |
36
+
37
+ ## Step Fields
38
+
39
+ | Field | Type | Required | Description |
40
+ |-------|------|----------|-------------|
41
+ | `id` | string | **Yes** | Unique step identifier (kebab-case) |
42
+ | `skill` | string | **Yes** | Skill to execute |
43
+ | `mission` | string | **Yes** | Natural language task description |
44
+ | `input` | string/array | **Yes** | Input file path(s) |
45
+ | `output` | string | **Yes** | Output file path |
46
+ | `needs` | string[] | No | Step IDs this step depends on |
47
+ | `model` | string | No | Model override (haiku/sonnet/opus) |
48
+ | `validate` | object | No | Validation criteria |
49
+ | `final` | boolean | No | Mark as final workflow output |
50
+
51
+ ## Variable Substitution
52
+
53
+ | Variable | Description | Example |
54
+ |----------|-------------|---------|
55
+ | `${{ sandbox }}` | Current sandbox directory | `sandbox/video-2025-01-15-abc123` |
56
+ | `${{ steps.{id}.output }}` | Output path of step `{id}` | `sandbox/.../outputs/analysis.json` |
57
+
58
+ ## Validation Criteria
59
+
60
+ ```yaml
61
+ validate:
62
+ required_fields: [contentId, headline]
63
+ min_quotes: 3
64
+ min_key_points: 5
65
+ has_hooks: true
66
+ min_outline_sections: 4
67
+ ```
68
+
69
+ | Criterion | Type | Description |
70
+ |-----------|------|-------------|
71
+ | `required_fields` | string[] | JSON fields that must exist |
72
+ | `min_quotes` | number | Minimum quotes in importantQuotes |
73
+ | `min_key_points` | number | Minimum items in keyThemes |
74
+ | `has_hooks` | boolean | hooks array must not be empty |
75
+ | `min_outline_sections` | number | Minimum sections in outline |
76
+
77
+ ## Model Options
78
+
79
+ | Model | Use Case |
80
+ |-------|----------|
81
+ | `haiku` | Fast, simple tasks (analysis, extraction) |
82
+ | `sonnet` | Balanced (default, most workflows) |
83
+ | `opus` | Complex reasoning (rarely needed) |
84
+
85
+ ## Naming Conventions
86
+
87
+ ### Workflow Names
88
+ - Use kebab-case: `video-to-blog`, `content-analyzer`
89
+ - Be descriptive but concise
90
+ - Avoid generic names like `workflow-1`
91
+
92
+ ### Step IDs
93
+ - Use kebab-case: `analyze-content`, `generate-ideas`
94
+ - Start with action verb when possible
95
+ - Keep under 25 characters
96
+
97
+ ### Skills
98
+ - Match exact skill name from plugin
99
+ - Case-sensitive: `media-reviewer`, not `Media-Reviewer`
100
+
101
+ ## Dependency Rules
102
+
103
+ 1. **No forward references** - A step can only depend on steps defined before it
104
+ 2. **No circular dependencies** - A → B → A is invalid
105
+ 3. **No self-references** - A step cannot depend on itself
106
+ 4. **All references valid** - Every ID in `needs:` must exist
107
+
108
+ ## Example: Complete Workflow
109
+
110
+ ```yaml
111
+ ---
112
+ name: writing-kit
113
+ version: 2.0.0
114
+ description: Transform content into structured writing kit
115
+
116
+ steps:
117
+ - id: analyze-content
118
+ skill: media-reviewer
119
+ mission: |
120
+ Analyze content deeply. Detect source type (video/audio/text).
121
+ Extract key themes, important quotes, narrative structure.
122
+ Output comprehensive analysis as structured JSON.
123
+ input: ${{ sandbox }}/inputs/content.md
124
+ output: ${{ sandbox }}/outputs/analysis.json
125
+ model: haiku
126
+ validate:
127
+ required_fields: [contentId, headline, keyThemes, importantQuotes]
128
+
129
+ - id: generate-ideas
130
+ skill: idea-synthesis
131
+ mission: |
132
+ Read user profile for personalization context.
133
+ Generate hooks, angles, and questions based on content analysis.
134
+ Focus on user's interests and writing style preferences.
135
+ needs: [analyze-content]
136
+ input: ${{ steps.analyze-content.output }}
137
+ output: ${{ sandbox }}/outputs/ideas.json
138
+ validate:
139
+ required_fields: [contentId, hooks, angles, questions]
140
+
141
+ - id: build-writing-kit
142
+ skill: writing-kit-assembler
143
+ mission: |
144
+ Combine analysis and ideas into comprehensive writing kit.
145
+ Create structured outline with introduction, body sections, conclusion.
146
+ Include all metadata and source references.
147
+ needs: [analyze-content, generate-ideas]
148
+ input:
149
+ - ${{ steps.analyze-content.output }}
150
+ - ${{ steps.generate-ideas.output }}
151
+ output: ${{ sandbox }}/outputs/writing-kit.json
152
+ final: true
153
+ validate:
154
+ required_fields: [contentId, summary, ideas, suggestedOutline]
155
+ ---
156
+
157
+ # Writing Kit Workflow
158
+
159
+ Transform raw content into a comprehensive writing kit.
160
+
161
+ ## Usage
162
+
163
+ ```bash
164
+ looplia run writing-kit --file <content.md>
165
+ ```
166
+
167
+ ## Steps
168
+
169
+ 1. **analyze-content**: Deep analysis using media-reviewer skill
170
+ 2. **generate-ideas**: Idea synthesis with user personalization
171
+ 3. **build-writing-kit**: Assemble final writing kit
172
+ ```
173
+
174
+ ## Anti-Patterns (v0.6.1)
175
+
176
+ ### FORBIDDEN: run: syntax
177
+
178
+ ```yaml
179
+ # WRONG - Do not use
180
+ - id: summary
181
+ run: agents/content-analyzer
182
+
183
+ # CORRECT - Use skill: syntax
184
+ - id: summary
185
+ skill: media-reviewer
186
+ mission: |
187
+ Analyze and summarize the content...
188
+ ```
189
+
190
+ ### FORBIDDEN: Missing mission
191
+
192
+ ```yaml
193
+ # WRONG - Missing mission
194
+ - id: analyze
195
+ skill: media-reviewer
196
+ input: ${{ sandbox }}/inputs/content.md
197
+ output: ${{ sandbox }}/outputs/analysis.json
198
+
199
+ # CORRECT - Include mission
200
+ - id: analyze
201
+ skill: media-reviewer
202
+ mission: |
203
+ Deep analysis of the content. Extract themes and quotes.
204
+ input: ${{ sandbox }}/inputs/content.md
205
+ output: ${{ sandbox }}/outputs/analysis.json
206
+ ```
207
+
208
+ ## Migration from v0.6.0
209
+
210
+ | v0.6.0 | v0.6.1 |
211
+ |--------|--------|
212
+ | `run: agents/content-analyzer` | `skill: media-reviewer` + `mission:` |
213
+ | `run: agents/idea-generator` | `skill: idea-synthesis` + `mission:` |
214
+ | `run: agents/writing-kit-builder` | `skill: writing-kit-assembler` + `mission:` |
@@ -0,0 +1,373 @@
1
+ ---
2
+ name: workflow-schema-composer
3
+ description: |
4
+ This skill should be used when the user wants to create a new looplia workflow, generate
5
+ a workflow definition file, or compose workflow steps from skill recommendations. Use when
6
+ someone says "create a looplia workflow", "generate workflow.md", "compose workflow steps",
7
+ "build me an automation pipeline", or "/build" (final step).
8
+
9
+ Final step in looplia workflow building: transforms skill recommendations into valid v0.6.3
10
+ workflow YAML/Markdown files. Each step uses skill: + mission: syntax, following the one
11
+ workflow step → one skill-executor → multiple skills architecture.
12
+
13
+ v0.6.3: Supports input-less workflows using input-less capable skills (e.g., search).
14
+ model: claude-haiku-4-5-20251001
15
+ ---
16
+
17
+ # Workflow Schema Composer
18
+
19
+ Generate complete, valid workflow definitions from skill recommendations.
20
+
21
+ ## Purpose
22
+
23
+ Transform the output from skill-capability-matcher into a ready-to-use looplia workflow markdown file that follows the v0.6.2 schema.
24
+
25
+ ## Process
26
+
27
+ ### Step 1: Receive Inputs
28
+
29
+ From skill-capability-matcher output:
30
+ - Skill sequence with step IDs
31
+ - Mission descriptions for each step
32
+ - Data flow dependencies
33
+ - Original user requirements
34
+ - **Explicit name (if `--name` flag was provided)** - use this exact name for the workflow
35
+
36
+ ### Step 1.5: Parse User Preferences from Enriched Prompt (v0.6.4)
37
+
38
+ **CRITICAL: User preferences from wizard answers MUST be incorporated into step missions.**
39
+
40
+ When the enriched prompt contains "User clarifications: Q: ... A: ..." sections, extract each preference:
41
+
42
+ **Example enriched prompt:**
43
+ ```
44
+ /build search hackernews for AI news. User clarifications: Q: Which social media platforms? A: twitter, linkedin. Q: How many articles? A: top5. Q: Focus areas? A: llm, adoption. Q: Output format? A: posts
45
+ ```
46
+
47
+ **Extract as structured preferences:**
48
+
49
+ | Question Pattern | Preference Key | Value | Inject Into |
50
+ |-----------------|----------------|-------|-------------|
51
+ | "platforms" / "social media" | PLATFORMS | twitter, linkedin | Output/social step mission |
52
+ | "how many" / "articles" / "count" | COUNT | 5 | Search/filter step mission |
53
+ | "focus" / "areas" / "topics" | FOCUS | llm, adoption | Search and analysis missions |
54
+ | "format" / "output" / "include" | FORMAT | posts | Final output step mission |
55
+
56
+ **Preference Injection Rules:**
57
+
58
+ 1. **COUNT preferences** → Add to search/fetch step: "Find **top 5** articles..."
59
+ 2. **FOCUS preferences** → Add to search and analysis: "...focusing on **LLM and adoption** trends"
60
+ 3. **PLATFORM preferences** → Add to output step: "...optimized for **twitter and linkedin**"
61
+ 4. **FORMAT preferences** → Add to output step: "Create **posts** (not reports)..."
62
+
63
+ ### Step 2: Design Steps
64
+
65
+ For each recommended skill:
66
+
67
+ ```yaml
68
+ - id: {suggestedStepId}
69
+ skill: {skill-name}
70
+ mission: |
71
+ {mission description from matcher}
72
+ needs: [{dependencies}]
73
+ input: {input path(s)}
74
+ output: {output path}
75
+ model: {optional model override}
76
+ validate:
77
+ required_fields: [{fields}]
78
+ ```
79
+
80
+ ### Step 3: Resolve Dependencies
81
+
82
+ Use `dataFlow` from matcher:
83
+ - Steps with no dependencies: `needs:` is omitted
84
+ - Dependent steps: list all required step IDs in `needs:`
85
+ - Final step: add `final: true`
86
+
87
+ ### Step 4: Design Input/Output Paths
88
+
89
+ Use variable substitution:
90
+ - `${{ sandbox }}/inputs/content.md` - Initial input (for workflows requiring input)
91
+ - `${{ sandbox }}/outputs/{step-id}.json` - Step outputs
92
+ - `${{ steps.{id}.output }}` - Reference previous step output
93
+
94
+ #### Input-Less Capable Skills (v0.6.3)
95
+
96
+ These skills can operate WITHOUT an input field - they fetch/generate data autonomously:
97
+
98
+ | Skill | Capability |
99
+ |-------|------------|
100
+ | `search` | Web search, API queries, autonomous data fetching |
101
+
102
+ **When a workflow's first step uses an input-less capable skill:**
103
+ 1. **OMIT the `input:` field entirely** from that step
104
+ 2. The mission description drives the skill's behavior
105
+ 3. Subsequent steps reference the output: `${{ steps.{id}.output }}`
106
+
107
+ **Example input-less first step:**
108
+ ```yaml
109
+ - id: fetch-data
110
+ skill: search
111
+ mission: |
112
+ Search the web for recent technology trends.
113
+ Extract titles, URLs, and key details.
114
+ output: ${{ sandbox }}/outputs/data.json
115
+ # NO input field - search operates autonomously
116
+ ```
117
+
118
+ ### Step 5: Suggest Validation
119
+
120
+ Based on skill output type:
121
+ - Analysis skills: `required_fields: [contentId, headline, keyThemes]`
122
+ - Idea skills: `required_fields: [contentId, hooks, angles]`
123
+ - Assembly skills: `required_fields: [contentId, suggestedOutline]`
124
+
125
+ ### Step 6: Compose Frontmatter
126
+
127
+ **CRITICAL: If `--name` flag was provided, use that exact name. Do not derive or modify it.**
128
+
129
+ ```yaml
130
+ ---
131
+ name: {explicit-name OR derived-from-description}
132
+ version: 1.0.0
133
+ description: {user's original description, cleaned up}
134
+
135
+ steps:
136
+ - id: ...
137
+ ---
138
+ ```
139
+
140
+ Naming rules:
141
+ 1. If `--name article-summary` was provided → use `article-summary` exactly
142
+ 2. If no `--name` → derive from description (e.g., "analyze videos" → "video-analyzer")
143
+ 3. Always use kebab-case for names
144
+
145
+ ### Step 7: Generate Markdown Body
146
+
147
+ Add usage documentation:
148
+
149
+ **For workflows requiring input:**
150
+ ```markdown
151
+ # {Workflow Name}
152
+
153
+ {Brief description}
154
+
155
+ ## Usage
156
+
157
+ ```bash
158
+ looplia run {workflow-name} --file <content.md>
159
+ ```
160
+ ```
161
+
162
+ **For input-less workflows (v0.6.3):**
163
+ ```markdown
164
+ # {Workflow Name}
165
+
166
+ {Brief description}
167
+
168
+ ## Usage
169
+
170
+ ```bash
171
+ looplia run {workflow-name}
172
+ ```
173
+
174
+ No input required - this workflow uses autonomous skills to fetch data.
175
+ ```
176
+
177
+ **Steps section:**
178
+ ```markdown
179
+ ## Steps
180
+
181
+ 1. **{step-id}**: {brief description}
182
+ 2. ...
183
+ ```
184
+
185
+ ## Output Format
186
+
187
+ Return a JSON object:
188
+
189
+ ```json
190
+ {
191
+ "filename": "video-to-blog.md",
192
+ "content": "---\nname: video-to-blog\n..."
193
+ }
194
+ ```
195
+
196
+ ## Schema Reference
197
+
198
+ See SCHEMA.md in this skill directory for the complete v0.6.2 workflow schema.
199
+
200
+ ## Validation Rules (v0.6.3)
201
+
202
+ 1. **`skill:` is REQUIRED** - Every step must have a skill
203
+ 2. **`mission:` is REQUIRED** - Every step must have a mission
204
+ 3. **`run:` is FORBIDDEN** - Never use the old agent syntax
205
+ 4. **Step IDs must be unique** - No duplicates
206
+ 5. **Dependencies must exist** - All `needs:` references must be valid
207
+ 6. **No circular dependencies** - Validate topological ordering
208
+ 7. **Respect explicit `--name`** - If provided, use that exact name for filename and `name:` field
209
+ 8. **Input-less steps (v0.6.3)** - Steps using `search` skill may OMIT `input:` field entirely
210
+
211
+ ## Example Output
212
+
213
+ ```yaml
214
+ ---
215
+ name: video-to-blog
216
+ version: 1.0.0
217
+ description: Analyze YouTube videos and create blog outlines
218
+
219
+ steps:
220
+ - id: analyze-content
221
+ skill: media-reviewer
222
+ mission: |
223
+ Deep analysis of video transcript. Extract key themes,
224
+ important quotes with timestamps, and narrative structure.
225
+ input: ${{ sandbox }}/inputs/content.md
226
+ output: ${{ sandbox }}/outputs/analysis.json
227
+ model: haiku
228
+ validate:
229
+ required_fields: [contentId, headline, keyThemes, importantQuotes]
230
+
231
+ - id: generate-ideas
232
+ skill: idea-synthesis
233
+ mission: |
234
+ Generate hooks, angles, and questions from the analysis.
235
+ Read user profile for personalization context.
236
+ needs: [analyze-content]
237
+ input: ${{ steps.analyze-content.output }}
238
+ output: ${{ sandbox }}/outputs/ideas.json
239
+ validate:
240
+ required_fields: [contentId, hooks, angles, questions]
241
+
242
+ - id: build-outline
243
+ skill: writing-kit-assembler
244
+ mission: |
245
+ Create structured blog outline with sections, key points,
246
+ and supporting quotes from analysis and ideas.
247
+ needs: [analyze-content, generate-ideas]
248
+ input:
249
+ - ${{ steps.analyze-content.output }}
250
+ - ${{ steps.generate-ideas.output }}
251
+ output: ${{ sandbox }}/outputs/outline.json
252
+ final: true
253
+ validate:
254
+ required_fields: [contentId, suggestedOutline]
255
+ ---
256
+
257
+ # Video to Blog Workflow
258
+
259
+ Transform video content into structured blog outlines.
260
+
261
+ ## Usage
262
+
263
+ ```bash
264
+ looplia run video-to-blog --file <transcript.md>
265
+ ```
266
+
267
+ ## Steps
268
+
269
+ 1. **analyze-content**: Deep analysis using media-reviewer skill
270
+ 2. **generate-ideas**: Idea synthesis with user personalization
271
+ 3. **build-outline**: Assemble outline using writing-kit-assembler skill
272
+ ```
273
+
274
+ ## Important Rules
275
+
276
+ 1. **Always use skill: syntax** - Never use `run: agents/X`
277
+ 2. **Always include mission** - Detailed task description
278
+ 3. **Use valid YAML** - Proper indentation and quoting
279
+ 4. **Include validation** - Add `validate:` with appropriate fields
280
+ 5. **Mark final step** - Last step gets `final: true`
281
+ 6. **Respect --name flag** - If `--name X` is provided, the workflow MUST be named `X` and saved as `X.md`
282
+ 7. **Detect input-less workflows** - If first step uses `search` skill, OMIT input field
283
+ 8. **Incorporate user preferences (v0.6.4)** - Extract preferences from "User clarifications" and inject into step missions. Each preference MUST appear in at least one mission.
284
+
285
+ ## Example: Input-Less Workflow (v0.6.3)
286
+
287
+ When the workflow fetches data autonomously (no user input needed):
288
+
289
+ ```yaml
290
+ ---
291
+ name: daily-news-digest
292
+ version: 1.0.0
293
+ description: Fetch trending news and compile a digest report
294
+
295
+ steps:
296
+ - id: fetch-news
297
+ skill: search
298
+ mission: |
299
+ Search the web for today's trending technology news.
300
+ Extract title, URL, source, and brief summary for each story.
301
+ output: ${{ sandbox }}/outputs/news.json
302
+ # NO input field - search operates autonomously
303
+ validate:
304
+ required_fields: [query, mode, results]
305
+
306
+ - id: compile-digest
307
+ skill: content-documenter
308
+ mission: |
309
+ Compile the news into a formatted digest with categories and insights.
310
+ needs: [fetch-news]
311
+ input: ${{ steps.fetch-news.output }}
312
+ output: ${{ sandbox }}/outputs/digest.json
313
+ final: true
314
+ validate:
315
+ required_fields: [reportTitle, sections, summary]
316
+ ---
317
+
318
+ # Daily News Digest
319
+
320
+ Fetches and compiles trending news into a digest.
321
+
322
+ ## Usage
323
+
324
+ ```bash
325
+ looplia run daily-news-digest
326
+ ```
327
+
328
+ No input required - this workflow fetches data autonomously.
329
+ ```
330
+
331
+ ## Example: User Preference Injection (v0.6.4)
332
+
333
+ Given enriched prompt:
334
+ ```
335
+ /build search hackernews for AI news. User clarifications: Q: Which platforms? A: twitter, linkedin. Q: How many? A: top5. Q: Focus areas? A: llm, adoption. Q: Output format? A: posts
336
+ ```
337
+
338
+ **Extracted preferences:**
339
+ - PLATFORMS: twitter, linkedin
340
+ - COUNT: 5
341
+ - FOCUS: llm, adoption
342
+ - FORMAT: posts
343
+
344
+ **BAD workflow (ignores preferences):**
345
+ ```yaml
346
+ - id: fetch-news
347
+ skill: search
348
+ mission: |
349
+ Search HackerNews for AI news articles.
350
+ Extract titles and summaries.
351
+
352
+ - id: compile-output
353
+ skill: content-documenter
354
+ mission: |
355
+ Compile the news into a report.
356
+ ```
357
+
358
+ **GOOD workflow (incorporates preferences):**
359
+ ```yaml
360
+ - id: fetch-news
361
+ skill: search
362
+ mission: |
363
+ Search HackerNews for the top 5 AI news articles
364
+ focusing on LLM developments and adoption trends.
365
+ Extract titles, URLs, and key summaries.
366
+
367
+ - id: compile-output
368
+ skill: content-documenter
369
+ mission: |
370
+ Create engaging social media posts optimized for
371
+ twitter and linkedin. Focus on LLM and adoption angles.
372
+ Output as posts, not a formal report.
373
+ ```
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: {{name}}
3
+ version: 1.0.0
4
+ description: {{description}}
5
+
6
+ steps:
7
+ {{#each steps}}
8
+ - id: {{id}}
9
+ skill: {{skill}}
10
+ mission: |
11
+ {{mission}}
12
+ {{#if needs}}
13
+ needs: [{{needs}}]
14
+ {{/if}}
15
+ input: {{input}}
16
+ output: {{output}}
17
+ {{#if model}}
18
+ model: {{model}}
19
+ {{/if}}
20
+ {{#if final}}
21
+ final: true
22
+ {{/if}}
23
+ {{#if validate}}
24
+ validate:
25
+ required_fields: [{{validate.required_fields}}]
26
+ {{/if}}
27
+ {{/each}}
28
+ ---
29
+
30
+ # {{title}}
31
+
32
+ {{description}}
33
+
34
+ ## Usage
35
+
36
+ ```bash
37
+ looplia run {{name}} --file <content.md>
38
+ ```
39
+
40
+ ## Steps
41
+
42
+ {{#each steps}}
43
+ {{@index}}. **{{id}}**: {{brief}}
44
+ {{/each}}