YAML-driven workflow engine for AI agents
Project description
Agent Workflows
YAML-driven workflow engine for AI agents.
Installation
# Install globally with uvx (recommended)
uvx siili-agent-workflows --help
# Or install with pip
pip install siili-agent-workflows
# Or install locally for development
cd packages/agent-workflows
uv sync
Quick Start
# Run a workflow by name
siili-agent-workflows my-workflow --param value
# List all available workflows
siili-agent-workflows --list
# Validate a workflow without running
siili-agent-workflows my-workflow --validate
# Show help
siili-agent-workflows --help
Workflow Discovery
Workflows are discovered from multiple locations (in order):
- Current directory:
./workflow-name.yml,./workflow-name.yaml, etc. - Local workflows dir:
./.agent_workflows/workflow-name.yml - Global config:
~/.config/siili-agent-workflows/workflow-name.yml - Bundled: Workflows shipped with the package
Supported extensions: .yml, .yaml, .agent-workflow.yml, .agent-workflow.yaml
Environment Variables
Environment files are loaded in order (later overrides earlier):
~/.config/siili-agent-workflows/.env(global)./.env(current directory)--env-file <path>(explicit)
Workflow Format
Create my-workflow.yml:
name: my-workflow
env:
API_KEY: ${{ env.MY_API_KEY }}
vars:
project_name: my-project
jobs:
setup:
steps:
- uses: terminal/run
with:
command: npm install
generate:
needs: setup
steps:
- uses: agents/claude_code
with:
prompt: "Create a README for ${{ vars.project_name }}"
cwd: "."
test:
needs: generate
steps:
- uses: terminal/run
with:
command: npm test
CLI Options
| Option | Description |
|---|---|
--list |
List available workflows |
--validate |
Validate workflow without running |
--env-file PATH |
Load environment from file |
-w, --workspace DIR |
Set workspace directory |
--set PLUGIN.KEY=VALUE |
Override step values |
--var KEY=VALUE |
Set workflow variables |
--dest PATH |
Shorthand for git/download.dest |
You can also pass variables as positional args:
siili-agent-workflows apply-template --template agent --path ./my-agent
Built-in Plugins
Terminal
# Run shell commands
- uses: terminal/run
with:
command: "echo hello"
shell: true # optional, default true
continue_on_error: false # optional
timeout: 30 # optional, seconds
# Run scripts
- uses: terminal/script
with:
path: "./scripts/setup.sh"
args: ["--verbose"] # optional
interpreter: "/bin/bash" # optional
cwd: "." # optional
Git
# Clone/download from repository
- uses: git/download
with:
repo: "https://github.com/user/repo.git"
ref: "main" # optional branch/tag
files: # optional, specific files/dirs
- "templates/agent"
dest: "./output" # destination directory
# Push changes
- uses: git/push
with:
message: "chore: automated update"
branch: "main" # optional
Agents
# Claude Code agent (requires ANTHROPIC_API_KEY)
- uses: agents/claude_code
with:
prompt: "Implement feature X"
cwd: "." # working directory
# General LLM agent (returns text response only)
- uses: agents/general
with:
prompt: "Analyze this code"
system_prompt: "You are a code reviewer" # optional
output_var: analysis # variable to store response
# Structured JSON response
- uses: agents/structured
with:
prompt: "Extract topics from this text: ..."
schema:
type: object
properties:
topics:
type: array
items:
type: string
summary:
type: string
required:
- topics
- summary
output_var: extracted_data
Audio (Speech)
# Speech-to-text recording
- uses: audio/stt
with:
language: "en" # optional
output_var: "user_input" # variable to store result
# Text-to-speech
- uses: audio/tts
with:
text: "Hello, world!"
voice: "alloy" # optional
output: "./output.mp3" # optional
Variable Interpolation
Supports two syntaxes:
# GitHub Actions style
prompt: "${{ vars.name }} - ${{ env.API_KEY }}"
# Python format style
prompt: "{name} - {API_KEY}"
Custom Plugins
Create agent_workflows/plugins/my_namespace/my_plugin.py:
from typing import Any, Dict
async def execute(ctx: Dict[str, Any]) -> Dict[str, Any]:
logger = ctx['logger']
workspace = ctx['workspace']
params = ctx.get('with', {})
logger("Running my plugin...")
# Do work...
result = "some output"
# Return values are available to subsequent steps
return {"output": result}
Features
- Parallel Execution: Jobs without dependencies run concurrently
- DAG Support: Declare dependencies with
needs: - Variable Interpolation: Use
${{ vars.x }}or{x}syntax - Environment Inheritance: Global → Job → Step
- Run History: Track execution history in
.agent-workflows/history/ - Fail-fast: Stop on first error (configurable per step)
Development
cd packages/agent-workflows
uv sync --dev
uv run pytest tests/
uv run ruff check .
uv run ty check agent_workflows
License
MIT - Copyright (c) 2025 Siili Solutions Oyj
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spaik_agent_workflows-0.3.0.tar.gz.
File metadata
- Download URL: spaik_agent_workflows-0.3.0.tar.gz
- Upload date:
- Size: 25.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae6132ef72b340f19ed01dcef3a0e09357240fd65867be1ad15303465b96ab3c
|
|
| MD5 |
ab69844dbc8df0c1c77bc225be0a5e05
|
|
| BLAKE2b-256 |
5323bdea4b652bbb6cc87b20165cd62ea705a89174dafd0a31aa91a8b70b6e3e
|
File details
Details for the file spaik_agent_workflows-0.3.0-py3-none-any.whl.
File metadata
- Download URL: spaik_agent_workflows-0.3.0-py3-none-any.whl
- Upload date:
- Size: 36.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20d2b64d746f5a3bff3312289968114cdc4ccdaf40629302a4d6a5f29285ebaf
|
|
| MD5 |
92589fe7d896b5d71376cbbdd61594e3
|
|
| BLAKE2b-256 |
3109349ae1f750c66f8ff614ee952632b3373a21219df4d6fe83120a09968f66
|