Compare commits

..

4 Commits

Author SHA1 Message Date
Hermes Pipeline ff7389e0de Add Skill: multi-agent-workflow-execution
Extracted from: https://github.com/redhat-community-ai-tools/UnifAI.git
Score: 1.0
2026-08-05 17:03:56 +00:00
Epictetus d81ddeda88 Scout window: 6 months (Feb-Aug 2026)
- pushed_after: 2026-02-01 (was 2024-06-01)
- Keeps scope tight on recent, relevant repos
2026-08-05 16:44:22 +00:00
Epictetus a14f09bec2 Add 2 new skills + dedup fix
New skills:
- langgraph-workflow-creation (from LangGraphProjects)
- agent-supervisor (from multi_agent_workflow_demo_in_langgraph)

Fixes:
- Publisher dedup: skip existing skills
- Older repos: pushed_after 2024-06-01 (was 2026-05-01)
- Lower stars: 10 (was 15)
2026-08-05 15:55:36 +00:00
Epictetus 7f496feb90 Publisher dedup check + run.py skip display
- Skip skills already in skills/ directory (no duplicate PRs)
- Run.py shows SKIP status with reason
- Fixed: was re-publishing same 5 skills every run
2026-08-05 15:49:57 +00:00
22 changed files with 505 additions and 119 deletions
+2 -2
View File
@@ -34,8 +34,8 @@ scout:
- 'rag agent workflow'
- 'tool calling workflow'
filters:
stars_min: 15
pushed_after: 2026-05-01
stars_min: 10
pushed_after: 2026-02-01
language: Python
archived: false
size_max_kb: 10000
+12
View File
@@ -52,6 +52,18 @@ def publish_skill(review_result, config):
subprocess.run(["git", "config", "user.email", "hermes@agent.local"], cwd=repo_dir)
subprocess.run(["git", "config", "user.name", "Hermes Pipeline"], cwd=repo_dir)
# Check for duplicates in skills/ directory
skills_dir = os.path.join(repo_dir, "skills")
existing_skills = []
if os.path.isdir(skills_dir):
existing_skills = [d for d in os.listdir(skills_dir) if os.path.isdir(os.path.join(skills_dir, d))]
if skill_name in existing_skills:
return {
"status": "SKIP",
"reason": f"Skill '{skill_name}' already exists in skills/ directory",
}
# Create skill directory
skill_dir = os.path.join(repo_dir, "skills", skill_name)
os.makedirs(skill_dir, exist_ok=True)
+2
View File
@@ -137,6 +137,8 @@ def main():
if publish_output.get("status") == "PUBLISHED":
print(f" ✓ Published! PR: {publish_output.get('pr_url', '')}")
results["published"] += 1
elif publish_output.get("status") == "SKIP":
print(f" ⏸ Skipped: {publish_output.get('reason', '')}")
else:
print(f" ! {publish_output.get('status', '?')}: {publish_output.get('message', publish_output.get('error', ''))[:100]}")
@@ -1,73 +0,0 @@
---
name: agent-creation-and-management
version: 1.0.0
description: Create and manage workplace AI agents using PipesHub's no-code agent
builder.
inputs:
- Agent name with description
- Action to perform (e.g., 'Gather facts about a company')
steps:
- 'Step 1: Open the PipesHub UI at http://localhost:3000'
- 'Step 2: Navigate to the Agents section and click on ''Create Agent'''
- 'Step 3: Enter the agent name and description in the form'
- 'Step 4: Define the actions for the agent, such as ''Gather facts about a company'',
using PipesHub''s no-code interface'
- 'Step 5: Save and deploy the agent'
outputs:
- Agent created and deployed
- Access URL for the new agent
tags: []
metadata:
source_repo: https://github.com/pipeshub-ai/pipeshub-ai.git
extracted_at: ''
confidence: 0.95
---
# agent-creation-and-management
Create and manage workplace AI agents using PipesHub's no-code agent builder.
## Setup
**Setup steps:**
1. Ensure Docker and Compose are installed
1. Clone the repository: git clone https://github.com/pipeshub-ai/pipeshub-ai.git
1. Run the installer: ./install.sh
## Key Files
- `N/A - Workflow implemented via UI`
## Steps
1. Step 1: Open the PipesHub UI at http://localhost:3000
2. Step 2: Navigate to the Agents section and click on 'Create Agent'
3. Step 3: Enter the agent name and description in the form
4. Step 4: Define the actions for the agent, such as 'Gather facts about a company', using PipesHub's no-code interface
5. Step 5: Save and deploy the agent
## Implementation Details
```python
N/A - Workflow implemented via UI
```
## Inputs
- Agent name with description
- Action to perform (e.g., 'Gather facts about a company')
## Outputs
- Agent created and deployed
- Access URL for the new agent
## Failure Modes
- If the agent creation fails due to missing required fields, ensure all necessary details are provided correctly
## Source
Extracted from: [https://github.com/pipeshub-ai/pipeshub-ai.git](https://github.com/pipeshub-ai/pipeshub-ai.git)
Confidence: 0.95
@@ -1,6 +0,0 @@
# Commands: agent-creation-and-management
## Available Commands
- `/skill agent-creation-and-management` — Load this skill
- `/run agent-creation-and-management` — Execute workflow
@@ -1,10 +0,0 @@
# Examples: agent-creation-and-management
## Usage Example
```python
# How to use this skill
# Inputs: Agent name with description, Action to perform (e.g., 'Gather facts about a company')
# Process: Step 1: Open the PipesHub UI at http://localhost:3000 → Step 2: Navigate to the Agents section and click on 'Create Agent' → Step 3: Enter the agent name and description in the form
# Outputs: Agent created and deployed, Access URL for the new agent
```
@@ -1,27 +0,0 @@
{
"name": "agent-creation-and-management",
"version": "1.0.0",
"goal": "Create and manage workplace AI agents using PipesHub's no-code agent builder.",
"inputs": [
"Agent name with description",
"Action to perform (e.g., 'Gather facts about a company')"
],
"steps": [
"Step 1: Open the PipesHub UI at http://localhost:3000",
"Step 2: Navigate to the Agents section and click on 'Create Agent'",
"Step 3: Enter the agent name and description in the form",
"Step 4: Define the actions for the agent, such as 'Gather facts about a company', using PipesHub's no-code interface",
"Step 5: Save and deploy the agent"
],
"outputs": [
"Agent created and deployed",
"Access URL for the new agent"
],
"failure_modes": [
"If the agent creation fails due to missing required fields, ensure all necessary details are provided correctly"
],
"confidence": 0.95,
"explanation": "This workflow is specific but can be adapted for different agents and actions within PipesHub's platform.",
"source_repo": "https://github.com/pipeshub-ai/pipeshub-ai.git",
"score": 1.0
}
+84
View File
@@ -0,0 +1,84 @@
---
name: agent-supervisor
version: 1.0.0
description: Demonstrate a supervisor-worker architecture for intelligent task delegation
and real-time decision-making.
inputs:
- name: OPENAI_API_KEY
description: OpenAI API key for language models.
- name: TAVILY_API_KEY
description: Tavily API key for search functionality.
steps:
- step: 1
action: Load environment variables.
details: Set the OPENAI_API_KEY and TAVILY_API_KEY environment variables.
- step: 2
action: Configure LangChain tools.
details: Initialize TavilySearchResults and PythonREPLTool.
- step: 3
action: Define agent nodes.
details: Create functions for the Researcher and Coder agents that process state
through their respective tasks.
- step: 4
action: Set up supervisor agent.
details: Create a supervisor agent function that decides which worker should act
next based on user input.
- step: 5
action: Build state graph.
details: Construct the state graph with nodes for each agent and edges connecting
them to the supervisor node.
- step: 6
action: Add conditional edges.
details: Define conditions for transitioning between agents based on their responses.
- step: 7
action: Compile graph.
details: Compile the state graph into a runnable workflow.
- step: 8
action: Run example queries.
details: Stream through the workflow with example inputs to demonstrate its functionality.
outputs:
- name: 'Example 1: Code Hello World'
description: A demonstration of coding a simple hello world program.
- name: 'Example 2: Research Report'
description: A demonstration of researching and writing a brief report on pikas.
tags: []
metadata:
source_repo: https://github.com/extrawest/multi_agent_workflow_demo_in_langgraph.git
extracted_at: ''
confidence: 0.9
---
# agent-supervisor
Demonstrate a supervisor-worker architecture for intelligent task delegation and real-time decision-making.
## Steps
1. {'step': 1, 'action': 'Load environment variables.', 'details': 'Set the OPENAI_API_KEY and TAVILY_API_KEY environment variables.'}
2. {'step': 2, 'action': 'Configure LangChain tools.', 'details': 'Initialize TavilySearchResults and PythonREPLTool.'}
3. {'step': 3, 'action': 'Define agent nodes.', 'details': 'Create functions for the Researcher and Coder agents that process state through their respective tasks.'}
4. {'step': 4, 'action': 'Set up supervisor agent.', 'details': 'Create a supervisor agent function that decides which worker should act next based on user input.'}
5. {'step': 5, 'action': 'Build state graph.', 'details': 'Construct the state graph with nodes for each agent and edges connecting them to the supervisor node.'}
6. {'step': 6, 'action': 'Add conditional edges.', 'details': 'Define conditions for transitioning between agents based on their responses.'}
7. {'step': 7, 'action': 'Compile graph.', 'details': 'Compile the state graph into a runnable workflow.'}
8. {'step': 8, 'action': 'Run example queries.', 'details': 'Stream through the workflow with example inputs to demonstrate its functionality.'}
## Inputs
- {'name': 'OPENAI_API_KEY', 'description': 'OpenAI API key for language models.'}
- {'name': 'TAVILY_API_KEY', 'description': 'Tavily API key for search functionality.'}
## Outputs
- {'name': 'Example 1: Code Hello World', 'description': 'A demonstration of coding a simple hello world program.'}
- {'name': 'Example 2: Research Report', 'description': 'A demonstration of researching and writing a brief report on pikas.'}
## Failure Modes
- {'mode': 'Invalid API keys', 'description': 'The workflow may fail if the provided API keys are invalid or expired.'}
- {'mode': 'Insufficient permissions', 'description': 'The workflow may fail if the user does not have sufficient permissions to use the Tavily search functionality.'}
## Source
Extracted from: [https://github.com/extrawest/multi_agent_workflow_demo_in_langgraph.git](https://github.com/extrawest/multi_agent_workflow_demo_in_langgraph.git)
Confidence: 0.9
+6
View File
@@ -0,0 +1,6 @@
# Commands: agent-supervisor
## Available Commands
- `/skill agent-supervisor` — Load this skill
- `/run agent-supervisor` — Execute workflow
+10
View File
@@ -0,0 +1,10 @@
# Examples: agent-supervisor
## Usage Example
```python
# How to use this skill
# Inputs: {'name': 'OPENAI_API_KEY', 'description': 'OpenAI API key for language models.'}, {'name': 'TAVILY_API_KEY', 'description': 'Tavily API key for search functionality.'}
# Process: {'step': 1, 'action': 'Load environment variables.', 'details': 'Set the OPENAI_API_KEY and TAVILY_API_KEY environment variables.'} → {'step': 2, 'action': 'Configure LangChain tools.', 'details': 'Initialize TavilySearchResults and PythonREPLTool.'} → {'step': 3, 'action': 'Define agent nodes.', 'details': 'Create functions for the Researcher and Coder agents that process state through their respective tasks.'}
# Outputs: {'name': 'Example 1: Code Hello World', 'description': 'A demonstration of coding a simple hello world program.'}, {'name': 'Example 2: Research Report', 'description': 'A demonstration of researching and writing a brief report on pikas.'}
```
+81
View File
@@ -0,0 +1,81 @@
{
"name": "agent-supervisor",
"version": "1.0.0",
"goal": "Demonstrate a supervisor-worker architecture for intelligent task delegation and real-time decision-making.",
"inputs": [
{
"name": "OPENAI_API_KEY",
"description": "OpenAI API key for language models."
},
{
"name": "TAVILY_API_KEY",
"description": "Tavily API key for search functionality."
}
],
"steps": [
{
"step": 1,
"action": "Load environment variables.",
"details": "Set the OPENAI_API_KEY and TAVILY_API_KEY environment variables."
},
{
"step": 2,
"action": "Configure LangChain tools.",
"details": "Initialize TavilySearchResults and PythonREPLTool."
},
{
"step": 3,
"action": "Define agent nodes.",
"details": "Create functions for the Researcher and Coder agents that process state through their respective tasks."
},
{
"step": 4,
"action": "Set up supervisor agent.",
"details": "Create a supervisor agent function that decides which worker should act next based on user input."
},
{
"step": 5,
"action": "Build state graph.",
"details": "Construct the state graph with nodes for each agent and edges connecting them to the supervisor node."
},
{
"step": 6,
"action": "Add conditional edges.",
"details": "Define conditions for transitioning between agents based on their responses."
},
{
"step": 7,
"action": "Compile graph.",
"details": "Compile the state graph into a runnable workflow."
},
{
"step": 8,
"action": "Run example queries.",
"details": "Stream through the workflow with example inputs to demonstrate its functionality."
}
],
"outputs": [
{
"name": "Example 1: Code Hello World",
"description": "A demonstration of coding a simple hello world program."
},
{
"name": "Example 2: Research Report",
"description": "A demonstration of researching and writing a brief report on pikas."
}
],
"failure_modes": [
{
"mode": "Invalid API keys",
"description": "The workflow may fail if the provided API keys are invalid or expired."
},
{
"mode": "Insufficient permissions",
"description": "The workflow may fail if the user does not have sufficient permissions to use the Tavily search functionality."
}
],
"confidence": 0.9,
"explanation": "This workflow demonstrates a hierarchical multi-agent system where a supervisor agent makes routing decisions based on user input, delegating tasks to specialized worker agents (Researcher and Coder). It is designed to be reusable for similar task delegation scenarios.",
"source_repo": "https://github.com/extrawest/multi_agent_workflow_demo_in_langgraph.git",
"score": 1.0
}
@@ -1,4 +1,4 @@
# Tests: agent-creation-and-management
# Tests: agent-supervisor
## Test Checklist
@@ -0,0 +1,83 @@
---
name: langgraph-workflow-creation
version: 1.0.0
description: Create a LangGraph workflow to gather facts using SerperDevTool and process
them with an AI agent.
inputs:
- API Key for SerperDevTool
- Search Query
steps:
- 'Step 1: Import necessary modules from langgraph and langchain libraries'
- 'Step 2: Create a LangGraph agent using `langgraph.create_react_agent` function
with SerperDevTool as the tool node'
- 'Step 3: Define the search query and pass it to the agent for fact gathering'
- 'Step 4: Process the gathered facts within the AI agent'
outputs:
- Processed Facts
tags: []
metadata:
source_repo: https://github.com/jkmaina/LangGraphProjects.git
extracted_at: ''
confidence: 0.95
---
# langgraph-workflow-creation
Create a LangGraph workflow to gather facts using SerperDevTool and process them with an AI agent.
## Setup
**Dependencies:**
```text
pip install langchain serperdev
```
**Setup steps:**
1. Install required libraries: pip install langchain serperdev
1. Add API key to .env file: OPENAPI_API_KEY=your_api_key
## Key Files
- `agent.py - Contains the LangGraph agent creation logic`
- `tool_node.py - Defines the SerperDevTool node`
## Steps
1. Step 1: Import necessary modules from langgraph and langchain libraries
2. Step 2: Create a LangGraph agent using `langgraph.create_react_agent` function with SerperDevTool as the tool node
3. Step 3: Define the search query and pass it to the agent for fact gathering
4. Step 4: Process the gathered facts within the AI agent
## Implementation Details
```python
import langgraph
from serperdev import SerperDevTool
def create_agent(api_key, query):
tool = SerperDevTool(api_key)
agent = langgraph.create_react_agent(tool=tool)
facts = agent.run(query)
return process_facts(facts)
```
## Inputs
- API Key for SerperDevTool
- Search Query
## Outputs
- Processed Facts
## Failure Modes
- API Key not provided
- Invalid Search Query
## Source
Extracted from: [https://github.com/jkmaina/LangGraphProjects.git](https://github.com/jkmaina/LangGraphProjects.git)
Confidence: 0.95
@@ -0,0 +1,6 @@
# Commands: langgraph-workflow-creation
## Available Commands
- `/skill langgraph-workflow-creation` — Load this skill
- `/run langgraph-workflow-creation` — Execute workflow
@@ -0,0 +1,10 @@
# Examples: langgraph-workflow-creation
## Usage Example
```python
# How to use this skill
# Inputs: API Key for SerperDevTool, Search Query
# Process: Step 1: Import necessary modules from langgraph and langchain libraries → Step 2: Create a LangGraph agent using `langgraph.create_react_agent` function with SerperDevTool as the tool node → Step 3: Define the search query and pass it to the agent for fact gathering
# Outputs: Processed Facts
```
@@ -0,0 +1,26 @@
{
"name": "langgraph-workflow-creation",
"version": "1.0.0",
"goal": "Create a LangGraph workflow to gather facts using SerperDevTool and process them with an AI agent.",
"inputs": [
"API Key for SerperDevTool",
"Search Query"
],
"steps": [
"Step 1: Import necessary modules from langgraph and langchain libraries",
"Step 2: Create a LangGraph agent using `langgraph.create_react_agent` function with SerperDevTool as the tool node",
"Step 3: Define the search query and pass it to the agent for fact gathering",
"Step 4: Process the gathered facts within the AI agent"
],
"outputs": [
"Processed Facts"
],
"failure_modes": [
"API Key not provided",
"Invalid Search Query"
],
"confidence": 0.95,
"explanation": "This workflow is specific to fact gathering and can be adapted for different search queries or tools.",
"source_repo": "https://github.com/jkmaina/LangGraphProjects.git",
"score": 1.0
}
@@ -0,0 +1,9 @@
# Tests: langgraph-workflow-creation
## Test Checklist
- [ ] Workflow has at least 3 steps
- [ ] All inputs are defined
- [ ] All outputs are defined
- [ ] Failure modes are documented
- [ ] Skill can be loaded without errors
@@ -0,0 +1,113 @@
---
name: multi-agent-workflow-execution
version: 1.0.0
description: Execute multi-agent AI workflows defined in YAML blueprints by creating
sessions, submitting user prompts, and polling for completion until final answers
are returned.
inputs:
- Blueprint ID or name (to identify the workflow to execute)
- User shortcut (authentication identifier for the user)
- User question or prompt (input to the workflow)
- Base URL of the UnifAI API (endpoint for session management)
- Polling interval (seconds between status checks during execution)
steps:
- Resolve the blueprint ID from either direct ID or name lookup via the API, handling
cases where the blueprint is not found or not unique
- Create a new session from the resolved blueprint using the session creation endpoint
- Submit the session with the user's prompt to start the multi-agent workflow execution
- Poll the session status at regular intervals until the session completes, fails,
or is cancelled
- Retrieve and return the final answer from the completed workflow
outputs:
- Final workflow result or answer (text or structured data)
- Session status (completed, failed, or cancelled)
- Error details if the workflow execution fails or times out
tags: []
metadata:
source_repo: https://github.com/redhat-community-ai-tools/UnifAI.git
extracted_at: ''
confidence: 0.95
---
# multi-agent-workflow-execution
Execute multi-agent AI workflows defined in YAML blueprints by creating sessions, submitting user prompts, and polling for completion until final answers are returned.
## Setup
**Dependencies:**
```text
pip install requests urllib3 python-langgraph temporalio
```
**Setup steps:**
1. Install Python 3.11+ and required packages (requests, langgraph, temporalio)
1. Configure API base URL and user credentials in environment variables or config
1. Define or select a blueprint from the available workflows in the system
1. Run the execution_workflow.py script with blueprint ID/name and user prompt
## Key Files
- `scripts/execution_workflow.py - Main workflow execution script`
- `multi-agent/lib/mas/engine/ - LangGraph-based orchestration modules`
- `multi-agent/lib/mas/elements/ - Node definitions (custom_agent_node, merger_node, etc.)`
- `multi-agent/lib/mas/blueprints/ - Blueprint resolution and validation logic`
## Steps
1. Resolve the blueprint ID from either direct ID or name lookup via the API, handling cases where the blueprint is not found or not unique
2. Create a new session from the resolved blueprint using the session creation endpoint
3. Submit the session with the user's prompt to start the multi-agent workflow execution
4. Poll the session status at regular intervals until the session completes, fails, or is cancelled
5. Retrieve and return the final answer from the completed workflow
## Implementation Details
```python
resolve_blueprint_id() - Resolves blueprint by ID or name lookup with error handling
```
```python
create_session() - Creates a new session from a blueprint via POST /user.session.create
```
```python
submit_session() - Submits user prompt to start workflow via POST /user.session.submit
```
```python
poll_session_status() - Polls session.stream.status at configurable intervals
```
```python
get_final_answer() - Retrieves final output via GET /session.chat.get
```
## Inputs
- Blueprint ID or name (to identify the workflow to execute)
- User shortcut (authentication identifier for the user)
- User question or prompt (input to the workflow)
- Base URL of the UnifAI API (endpoint for session management)
- Polling interval (seconds between status checks during execution)
## Outputs
- Final workflow result or answer (text or structured data)
- Session status (completed, failed, or cancelled)
- Error details if the workflow execution fails or times out
## Failure Modes
- Blueprint not found or not unique - script exits with an error listing available blueprints
- Session creation fails - may be due to invalid blueprint ID, authentication issues, or rate limiting
- Session submission fails - could be due to network issues, invalid parameters, or API rate limits
- Polling loop times out - session may be stuck in a long-running state without progress
- Final answer retrieval fails - could be due to session cleanup or network issues after completion
## Source
Extracted from: [https://github.com/redhat-community-ai-tools/UnifAI.git](https://github.com/redhat-community-ai-tools/UnifAI.git)
Confidence: 0.95
@@ -0,0 +1,6 @@
# Commands: multi-agent-workflow-execution
## Available Commands
- `/skill multi-agent-workflow-execution` — Load this skill
- `/run multi-agent-workflow-execution` — Execute workflow
@@ -0,0 +1,10 @@
# Examples: multi-agent-workflow-execution
## Usage Example
```python
# How to use this skill
# Inputs: Blueprint ID or name (to identify the workflow to execute), User shortcut (authentication identifier for the user), User question or prompt (input to the workflow), Base URL of the UnifAI API (endpoint for session management), Polling interval (seconds between status checks during execution)
# Process: Resolve the blueprint ID from either direct ID or name lookup via the API, handling cases where the blueprint is not found or not unique → Create a new session from the resolved blueprint using the session creation endpoint → Submit the session with the user's prompt to start the multi-agent workflow execution
# Outputs: Final workflow result or answer (text or structured data), Session status (completed, failed, or cancelled), Error details if the workflow execution fails or times out
```
@@ -0,0 +1,35 @@
{
"name": "multi-agent-workflow-execution",
"version": "1.0.0",
"goal": "Execute multi-agent AI workflows defined in YAML blueprints by creating sessions, submitting user prompts, and polling for completion until final answers are returned.",
"inputs": [
"Blueprint ID or name (to identify the workflow to execute)",
"User shortcut (authentication identifier for the user)",
"User question or prompt (input to the workflow)",
"Base URL of the UnifAI API (endpoint for session management)",
"Polling interval (seconds between status checks during execution)"
],
"steps": [
"Resolve the blueprint ID from either direct ID or name lookup via the API, handling cases where the blueprint is not found or not unique",
"Create a new session from the resolved blueprint using the session creation endpoint",
"Submit the session with the user's prompt to start the multi-agent workflow execution",
"Poll the session status at regular intervals until the session completes, fails, or is cancelled",
"Retrieve and return the final answer from the completed workflow"
],
"outputs": [
"Final workflow result or answer (text or structured data)",
"Session status (completed, failed, or cancelled)",
"Error details if the workflow execution fails or times out"
],
"failure_modes": [
"Blueprint not found or not unique - script exits with an error listing available blueprints",
"Session creation fails - may be due to invalid blueprint ID, authentication issues, or rate limiting",
"Session submission fails - could be due to network issues, invalid parameters, or API rate limits",
"Polling loop times out - session may be stuck in a long-running state without progress",
"Final answer retrieval fails - could be due to session cleanup or network issues after completion"
],
"confidence": 0.95,
"explanation": "The UnifAI repository contains a concrete, reusable workflow pattern for executing multi-agent AI workflows. The scripts/execution_workflow.py script demonstrates a complete pipeline: resolving blueprints by ID or name, creating sessions from blueprints, submitting user prompts to start workflows, polling session status until completion, and retrieving final answers. This pattern can be adapted to any multi-agent workflow defined in the YAML blueprint system, making it reusable across different use cases and teams.",
"source_repo": "https://github.com/redhat-community-ai-tools/UnifAI.git",
"score": 1.0
}
@@ -0,0 +1,9 @@
# Tests: multi-agent-workflow-execution
## Test Checklist
- [ ] Workflow has at least 3 steps
- [ ] All inputs are defined
- [ ] All outputs are defined
- [ ] Failure modes are documented
- [ ] Skill can be loaded without errors