workflow-schema-composer
This skill should be used when the user wants to create a new looplia workflow, generate a workflow definition file, or compose workflow steps from skill recommendations. Use when someone says "create a looplia workflow", "generate workflow.md", "compose workflow steps", "build me an automation pipeline", or "/build" (final step). Final step in looplia workflow building: transforms skill recommendations into valid v0.7.0 workflow YAML/Markdown files. Each step uses skill: + mission: syntax, following the one workflow step → one skill-executor → multiple skills architecture. v0.7.0: Generates explicit `skills:` declaration for selective plugin loading. v0.6.3: Supports input-less workflows using input-less capable skills (e.g., search).
What this skill does
# Workflow Schema Composer
Generate complete, valid workflow definitions from skill recommendations.
## Purpose
Transform the output from skill-capability-matcher into a ready-to-use looplia workflow markdown file that follows the v0.6.2 schema.
## Process
### Step 1: Receive Inputs
From skill-capability-matcher output:
- Skill sequence with step IDs
- Mission descriptions for each step
- Data flow dependencies
- Original user requirements
- **Explicit name (if `--name` flag was provided)** - use this exact name for the workflow
### Step 1.5: Parse User Preferences from Enriched Prompt (v0.6.4)
**CRITICAL: 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:**
1. **COUNT preferences** → Add to search/fetch step: "Find **top 5** articles..."
2. **FOCUS preferences** → Add to search and analysis: "...focusing on **LLM and adoption** trends"
3. **PLATFORM preferences** → Add to output step: "...optimized for **twitter and linkedin**"
4. **FORMAT preferences** → Add to output step: "Create **posts** (not reports)..."
### Step 2: Design Steps
For each recommended skill:
```yaml
- 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}]
```
### Step 3: Resolve Dependencies
Use `dataFlow` from matcher:
- Steps with no dependencies: `needs:` is omitted
- Dependent steps: list all required step IDs in `needs:`
- Final step: add `final: true`
### Step 4: Design Input/Output Paths
Use 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 output
#### Input-Less Capable Skills (v0.6.3)
These 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:**
1. **OMIT the `input:` field entirely** from that step
2. The mission description drives the skill's behavior
3. Subsequent steps reference the output: `${{ steps.{id}.output }}`
**Example input-less first step:**
```yaml
- 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
```
### Step 5: Suggest Validation
Based on skill output type:
- Analysis skills: `required_fields: [contentId, headline, keyThemes]`
- Idea skills: `required_fields: [contentId, hooks, angles]`
- Assembly skills: `required_fields: [contentId, suggestedOutline]`
### Step 6: Compose Frontmatter (v0.7.0)
**CRITICAL: If `--name` flag was provided, use that exact name. Do not derive or modify it.**
```yaml
---
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:
1. If `--name article-summary` was provided → use `article-summary` exactly
2. If no `--name` → derive from description (e.g., "analyze videos" → "video-analyzer")
3. Always use kebab-case for names
4. Always include `skills:` field with all unique skills from steps
### Step 7: Generate Markdown Body
Add usage documentation:
**For workflows requiring input:**
```markdown
# {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. ...
```
## Output Format
Return a JSON object (v0.7.3: used by CLI for artifact persistence):
```json
{
"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:
- Full YAML frontmatter (between `---` delimiters)
- Markdown body (usage docs, steps section)
The CLI writes this content directly to `{workspace}/workflows/{filename}`.
## Schema Reference
See SCHEMA.md in this skill directory for the complete v0.6.2 workflow schema.
## Validation Rules (v0.6.3)
1. **`skill:` is REQUIRED** - Every step must have a skill
2. **`mission:` is REQUIRED** - Every step must have a mission
3. **`run:` is FORBIDDEN** - Never use the old agent syntax
4. **Step IDs must be unique** - No duplicates
5. **Dependencies must exist** - All `needs:` references must be valid
6. **No circular dependencies** - Validate topological ordering
7. **Respect explicit `--name`** - If provided, use that exact name for filename and `name:` field
8. **Input-less steps (v0.6.3)** - Steps using `search` skill may OMIT `input:` field entirely
## Example Output
```yaml
---
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 struRelated in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.