YAML workflows
One YAML file defines config, named models, flows, and steps. Version control friendly and easy to review.
Telize is a flow runner for agentic automation: one YAML file defines your flows and steps — shell, files, LLM, Python, nested flows — validated before execution, with live progress in your terminal.
pip install telize
models:
default:
model: qwen3.5:4b
api_url: http://localhost:11434
flows:
main:
steps:
- name: fetch
uses: shell
run: |
cd /path/to/data
cat ./data.txt
- name: summarize
uses: llm
model: default
prompt: |
Summarize:
{{ steps.fetch.output }}
output_to: /path/to/data/summary.md
Features
Compose agentic automation as explicit flows—without giving up your stack, data, or models.
One YAML file defines config, named models, flows, and steps. Version control friendly and easy to review.
Mix input, llm, shell, python, flow, and yaml actions in any pipeline.
Wire step outputs together with {{ steps.name.output }} and environment variables at load time.
Split lists, repeat steps, call sub-flows—flows composing flows with loop and nested uses: flow.
Pydantic models catch schema errors before any step runs. Use --validate-only in CI.
Progress bars, step panels, and clear errors—built on Rich for a polished terminal experience.
How flows run
Load a flow definition, validate it, then execute steps in order—with loops and sub-flows when you need them.
config.entrypoint runs first.Get started
Python 3.12+ required. Pull a model for agentic (llm) steps—Ollama or compatible API.
pip install telize
git clone https://github.com/telize-ai/telize.git
cd telize
uv sync
uv pip install -e .
telize --version
ollama pull qwen3.5:4b
hello.yamlconfig:
entrypoint: main
models:
default:
provider: openai
model: qwen3.5:4b
api_url: http://localhost:11434
flows:
main:
steps:
- name: greet
uses: llm
model: default
prompt: Say hello in one friendly sentence.
telize -f hello.yaml
Validate without running: telize -f hello.yaml --validate-only
Documentation
YAML schema for config, models, and flows at a glance. Full details in the README.
| Key | Description |
|---|---|
config | Global settings: entrypoint (which flow runs first) |
models | Named LLM profiles: provider, model, temperature, api_url, optional api_key and system_prompt |
flows | Named flows; config.entrypoint must match one key |
uses)| uses | Description |
|---|---|
input | Read a file or directory (with glob include) |
llm | Send a prompt using a named model from models; optional output_to, loop |
shell | Run run commands; optional envs (supports templates) |
python | Call call (module.function) with args |
flow | Run another flow via run |
yaml | Run an external workflow from file (own models and config); optional input map for the child |
{{ env.VAR }} — expanded when the file is parsed
{{ steps.<name>.output }}, {{ models.<name>.model }}, {{ input.<key> }}, {{ item }} in loops
- name: fetch_data
uses: shell
run: cat ./data.txt
- name: summarize
uses: llm
model: default
prompt: |
Summarize this:
{{ steps.fetch_data.output }}
usage: telize [-h] [--version] [-f FILE] [--validate-only]
options:
-h, --help show help
--version show version
-f, --file FILE path to workflow YAML
--validate-only parse and validate without running steps
Examples
Clone the repo and run bundled flow files from the project root.
Minimal flow: one LLM step with a default model profile.
telize -f examples/minimal_llm.yamlChain shell output into an LLM prompt with Jinja templates.
telize -f examples/shell_to_llm.yamlRun an LLM step per item using loop and split_by.
Read files from a directory with input, then summarize with an LLM step.
Community
Bug reports, documentation, and pull requests are welcome.
PR guidelines, development setup, and code standards.
Report bugs or discuss features before large changes.
Automated tests on every push—pytest, ruff, mypy.
Release notes and version history.
uv sync
uv run pytest
uv run ruff check .
uv run ruff format .
uv run mypy
Install Telize, point it at a YAML flow file, and automate with LLM, shell, and code—on your machine.