One agent.yaml. Multiple SKILL.md files. Skills run in sequence โ automatically or after you approve. No orchestration code, no framework. Just a folder and YAML.
A skills pipeline lets you wire multiple AI skills together in a single agent.yaml. Each skill is a folder containing a SKILL.md file. Skills execute in order โ and you control what runs automatically vs what waits for your approval.
OE Runtime supports two skill trigger types:
Both trigger types work the same way across all three run interfaces: CLI (terminal), HTTP server, and MCP (Claude Code, Cursor, Windsurf). Everything is configured in one agent.yaml โ no separate chain files, no project registry.
A pipeline with three skills in one folder:
npx, or the OE Runtime binary from openenthrium.com/runtimeCreate a folder called skill-pipeline/ with this structure:
This is the only orchestration file you need. It lists all three skills in order with their trigger types:
agent.yamlname: My Skills Pipeline
description: Runs three skills in sequence โ two auto, one manual.
skills:
- path: ./main-task
trigger_type: auto
- path: ./followup
trigger_type: auto
- path: ./review
trigger_type: manual
Each path points to a folder containing a SKILL.md file. The runtime appends /SKILL.md automatically โ write path: ./main-task, not path: ./main-task/SKILL.md.
---
name: main-task
description: Greets you and shares a fun fact about today in history.
license: Apache-2.0
metadata:
author: Open Enthrium
version: "1.0"
---
You are a helpful assistant.
## Step 1: Greet
Say hello, mention today's date, and give one fun fact about today in history.
followup/SKILL.md
---
name: followup
description: Runs automatically after main-task. Summarises its output.
license: Apache-2.0
metadata:
author: Open Enthrium
version: "1.0"
---
You are a summarizer assistant.
## Step 1: Summarize
The previous skill just ran and sent you its output as context.
Summarize it in one sentence and say "Auto skill complete โ
".
review/SKILL.md
---
name: review
description: Runs only after you approve. Confirms the task with context from previous skills.
license: Apache-2.0
metadata:
author: Open Enthrium
version: "1.0"
---
You are an assistant that confirms tasks.
## Step 1: Confirm
The human approved running this skill.
Acknowledge it, briefly reference what the previous skills output,
and say "Manual approval skill complete โ
".
Step 4
{
"llm": {
"provider": "openai",
"model": "gpt-4o",
"apiKey": "sk-..."
}
}
Replace sk-... with your actual API key. Anthropic users: set "provider": "anthropic" and "model": "claude-sonnet-5".
The same folder works in all three delivery modes. Pick the one that fits your workflow.
One command runs the pipeline. Auto skills fire immediately; manual skills prompt you for approval.
npx -y @openenthrium/oe-runtime@latest skill-pipeline/agent.yaml
What you will see:
Type y to approve or n to skip. Approving runs the review skill with the full prior context.
Add a server block to oe-config.json and start the server:
{
"llm": {
"provider": "openai",
"model": "gpt-4o",
"apiKey": "sk-..."
},
"server": {
"enabled": true,
"port": 3333,
"apiKey": "your-secret"
}
}
npx -y @openenthrium/oe-runtime@latest --serve --config oe-config.json
Run the pipeline via /run-agent โ pass the absolute path to agent.yaml:
curl -X POST http://localhost:3333/run-agent \
-H "x-api-key: your-secret" \
-H "Content-Type: application/json" \
-d '{"file":"/path/to/skill-pipeline/agent.yaml"}'
The response includes the output of the last completed skill and the pending manual skill:
{
"success": true,
"output": "The previous skill greeted you... Auto skill complete โ
",
"pending_skill_chain": {
"chain_id": "lc9f2kx4m",
"skill_name": "review"
},
"duration_ms": 3241
}
Auto skills ran and their output flowed forward. The manual review skill is waiting with a chain_id. Approve it with /approve-chain:
curl -X POST http://localhost:3333/approve-chain \
-H "x-api-key: your-secret" \
-H "Content-Type: application/json" \
-d '{"chain_id":"lc9f2kx4m","approved":true}'
Response:
{
"success": true,
"approved": true,
"output": "The human approved! ... Manual approval skill complete โ
",
"pending_skill_chain": null,
"duration_ms": 1876
}
To skip a manual skill, send "approved": false. To abort the entire pipeline, send "abort": true.
Each chain_id is one-time use. Once you call /approve-chain, the ID is consumed. Pending skills are held in memory โ if the server restarts, they are lost.
If you have OE MCP connected, you can run the pipeline directly from chat:
Say "approve" and Claude calls approve_chain for you:
Three MCP tools handle the full skills pipeline:
| Tool | What it does |
|---|---|
| run_agent | Run an agent.yaml โ executes auto skills, returns output and any pending manual skill |
| list_pending_skills | See all manual skills currently waiting for approval |
| approve_chain | Approve, skip, or abort a pending skill by chain_id |
OE MCP works in any MCP-enabled AI app: Claude Code, Cursor, Windsurf, and more. The same three tools behave identically across all of them.
When the runtime processes an agent.yaml, it walks the skills: list in order:
pending_skill_chain object with a chain_id is returned. In MCP, the result describes the pending skill.You can mix any number of auto and manual skills in one pipeline. A common pattern: auto-process first, then pause before an irreversible action (sending an email, writing to a database, posting to Slack).
skills:
- path: ./skill-folder # directory containing SKILL.md
trigger_type: auto # fires immediately after previous skill
- path: ./another-folder
trigger_type: manual # pauses for human approval
path โ directory containing SKILL.md, relative to agent.yamltrigger_type โ auto or manual (defaults to auto if omitted){{param}} placeholders if params are declared in agent.yamlDownload OE Runtime and start building multi-skill workflows today โ no code required.
Get OE Runtime โ