From looplia
Composes valid looplia v0.7.0 workflow YAML/Markdown files from skill recommendations and user preferences. Final step for /build commands, workflow creation, or automation pipelines.
How this skill is triggered — by the user, by Claude, or both
Slash command
/looplia:workflow-schema-composerhaikuThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate complete, valid workflow definitions from skill recommendations.
Generate complete, valid workflow definitions from skill recommendations.
Transform the output from skill-capability-matcher into a ready-to-use looplia workflow markdown file that follows the v0.6.2 schema.
From skill-capability-matcher output:
--name flag was provided) - use this exact name for the workflowCRITICAL: User preferences from wizard answers MUST be incorporated into step missions.
When the enriched prompt contains "User clarifications: Q: ... A: ..." sections, extract each preference:
Example enriched prompt:
/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
Extract as structured preferences:
| Question Pattern | Preference Key | Value | Inject Into |
|---|---|---|---|
| "platforms" / "social media" | PLATFORMS | twitter, linkedin | Output/social step mission |
| "how many" / "articles" / "count" | COUNT | 5 | Search/filter step mission |
| "focus" / "areas" / "topics" | FOCUS | llm, adoption | Search and analysis missions |
| "format" / "output" / "include" | FORMAT | posts | Final output step mission |
Preference Injection Rules:
For each recommended skill:
- id: {suggestedStepId}
skill: {skill-name}
mission: |
{mission description from matcher}
needs: [{dependencies}]
input: {input path(s)}
output: {output path}
model: {optional model override}
validate:
required_fields: [{fields}]
Use dataFlow from matcher:
needs: is omittedneeds:final: trueUse variable substitution:
${{ sandbox }}/inputs/content.md - Initial input (for workflows requiring input)${{ sandbox }}/outputs/{step-id}.json - Step outputs${{ steps.{id}.output }} - Reference previous step outputThese skills can operate WITHOUT an input field - they fetch/generate data autonomously:
| Skill | Capability |
|---|---|
search | Web search, API queries, autonomous data fetching |
When a workflow's first step uses an input-less capable skill:
input: field entirely from that step${{ steps.{id}.output }}Example input-less first step:
- id: fetch-data
skill: browser-research
mission: |
Search the web for recent technology trends.
Extract titles, URLs, and key details.
output: ${{ sandbox }}/outputs/data.json
# NO input field - browser-research operates autonomously
Based on skill output type:
required_fields: [contentId, headline, keyThemes]required_fields: [contentId, hooks, angles]required_fields: [contentId, suggestedOutline]CRITICAL: If --name flag was provided, use that exact name. Do not derive or modify it.
---
name: {explicit-name OR derived-from-description}
version: 1.0.0
description: {user's original description, cleaned up}
# v0.7.0: Explicit skills declaration for selective plugin loading
skills:
- {skill-name-1}
- {skill-name-2}
- ...
steps:
- id: ...
---
Skills Declaration (v0.7.0):
Extract unique skill names from all step recommendations and list them in the skills: field.
This enables selective plugin loading at runtime - only required skills are loaded.
Naming rules:
--name article-summary was provided → use article-summary exactly--name → derive from description (e.g., "analyze videos" → "video-analyzer")skills: field with all unique skills from stepsAdd usage documentation:
For workflows requiring input:
# {Workflow Name}
{Brief description}
## Usage
```bash
looplia run {workflow-name} --file <content.md>
**For input-less workflows (v0.6.3):**
```markdown
# {Workflow Name}
{Brief description}
## Usage
```bash
looplia run {workflow-name}
No input required - this workflow uses autonomous skills to fetch data.
**Steps section:**
```markdown
## Steps
1. **{step-id}**: {brief description}
2. ...
Return a JSON object (v0.7.3: used by CLI for artifact persistence):
{
"filename": "video-to-blog.md",
"content": "---\nname: video-to-blog\nversion: 1.0.0\n...\n---\n\n# Video to Blog Workflow\n..."
}
Important: content MUST be the complete, ready-to-write markdown file including:
--- delimiters)The CLI writes this content directly to {workspace}/workflows/{filename}.
See SCHEMA.md in this skill directory for the complete v0.6.2 workflow schema.
skill: is REQUIRED - Every step must have a skillmission: is REQUIRED - Every step must have a missionrun: is FORBIDDEN - Never use the old agent syntaxneeds: references must be valid--name - If provided, use that exact name for filename and name: fieldsearch skill may OMIT input: field entirely---
name: video-to-blog
version: 1.0.0
description: Analyze YouTube videos and create blog outlines
# v0.7.0: Explicit skills declaration for selective plugin loading
skills:
- media-reviewer
- idea-synthesis
- writing-kit-assembler
steps:
- id: analyze-content
skill: media-reviewer
mission: |
Deep analysis of video transcript. Extract key themes,
important quotes with timestamps, and narrative structure.
input: ${{ sandbox }}/inputs/content.md
output: ${{ sandbox }}/outputs/analysis.json
model: haiku
validate:
required_fields: [contentId, headline, keyThemes, importantQuotes]
- id: generate-ideas
skill: idea-synthesis
mission: |
Generate hooks, angles, and questions from the analysis.
Read user profile for personalization context.
needs: [analyze-content]
input: ${{ steps.analyze-content.output }}
output: ${{ sandbox }}/outputs/ideas.json
validate:
required_fields: [contentId, hooks, angles, questions]
- id: build-outline
skill: writing-kit-assembler
mission: |
Create structured blog outline with sections, key points,
and supporting quotes from analysis and ideas.
needs: [analyze-content, generate-ideas]
input:
- ${{ steps.analyze-content.output }}
- ${{ steps.generate-ideas.output }}
output: ${{ sandbox }}/outputs/outline.json
final: true
validate:
required_fields: [contentId, suggestedOutline]
---
# Video to Blog Workflow
Transform video content into structured blog outlines.
## Usage
```bash
looplia run video-to-blog --file <transcript.md>
## Important Rules
1. **Always use skill: syntax** - Never use `run: agents/X`
2. **Always include mission** - Detailed task description
3. **Use valid YAML** - Proper indentation and quoting
4. **Include validation** - Add `validate:` with appropriate fields
5. **Mark final step** - Last step gets `final: true`
6. **Respect --name flag** - If `--name X` is provided, the workflow MUST be named `X` and saved as `X.md`
7. **Detect input-less workflows** - If first step uses `search` skill, OMIT input field
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.
9. **Include skills declaration (v0.7.0)** - Always add `skills:` field listing all unique skill names from steps. This enables selective plugin loading at runtime.
## Example: Input-Less Workflow (v0.6.3)
When the workflow fetches data autonomously (no user input needed):
```yaml
---
name: daily-news-digest
version: 1.0.0
description: Fetch trending news and compile a digest report
# v0.7.0: Explicit skills declaration
skills:
- browser-research
- content-documenter
steps:
- id: fetch-news
skill: browser-research
mission: |
Search the web for today's trending technology news.
Extract title, URL, source, and brief summary for each story.
output: ${{ sandbox }}/outputs/news.json
# NO input field - browser-research operates autonomously
validate:
required_fields: [query, mode, results]
- id: compile-digest
skill: content-documenter
mission: |
Compile the news into a formatted digest with categories and insights.
needs: [fetch-news]
input: ${{ steps.fetch-news.output }}
output: ${{ sandbox }}/outputs/digest.json
final: true
validate:
required_fields: [reportTitle, sections, summary]
---
# Daily News Digest
Fetches and compiles trending news into a digest.
## Usage
```bash
looplia run daily-news-digest
No input required - this workflow fetches data autonomously.
## Example: User Preference Injection (v0.6.4)
Given enriched prompt:
/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
**Extracted preferences:**
- PLATFORMS: twitter, linkedin
- COUNT: 5
- FOCUS: llm, adoption
- FORMAT: posts
**BAD workflow (ignores preferences):**
```yaml
- id: fetch-news
skill: browser-research
mission: |
Search HackerNews for AI news articles.
Extract titles and summaries.
- id: compile-output
skill: content-documenter
mission: |
Compile the news into a report.
GOOD workflow (incorporates preferences):
- id: fetch-news
skill: browser-research
mission: |
Search HackerNews for the top 5 AI news articles
focusing on LLM developments and adoption trends.
Extract titles, URLs, and key summaries.
- id: compile-output
skill: content-documenter
mission: |
Create engaging social media posts optimized for
twitter and linkedin. Focus on LLM and adoption angles.
Output as posts, not a formal report.
npx claudepluginhub memorysaver/looplia-core --plugin looplia-coreExecutes looplia workflows from Markdown files by iterating steps with general-purpose subagent calls. Use for /run commands, workflow.md processing, and multi-step skill orchestration.
Generates Dify workflow DSL files (YAML/JSON) from natural language descriptions, with correct node schemas, edges, and layout for direct import.
Interactively designs plain-text workflows with stages, entities, and a first-officer agent, then generates markdown files and launches a pilot run.