Quickstart
Build and run your first workflow in a few minutes. One file, two AI steps chained together, and the three ideas you reuse in every workflow after it.
A workflow is a list of steps in a single file. Each step runs one component, the steps pass their results to the steps that follow and the engine executes everything sequentially.
This page builds a small working workflow so the pieces are concrete before the deeper guides. You do not need to be a developer to follow it. If you can edit a text file, you can write a workflow.
Your first workflow
Save this as hello.yml. It asks a model for three facts about a topic, feeds those facts into a second model call that writes a short post, and saves the result to a file. Two AI steps, chained by name.
name: Topic to post
inputs:
- name: topic
type: string
actions:
- name: facts
component: inference
vars:
provider: openai
model: gpt-5
prompt: "List three surprising facts about {{ topic }}."
- name: post
component: inference
vars:
provider: openai
model: gpt-5
prompt: "Turn these facts into one short, upbeat post.\n\n{{ facts.content }}"
- name: save
component: file:write
vars:
path: ./post.txt
content: "{{ post.content }}"
outputs:
post: "{{ post.content }}"The second step reads {{ facts.content }}, the text the first step produced. That single reference is the chain. The model that writes the post never sees the topic directly, it works from what the first model returned. Wiring steps this way, a model call feeding an API call feeding a file write, is how every automation here is built.
Run it
Run the file from the command-line app.
awee run hello.yml --topic "the universe"The same file also runs unchanged over the REST API and from the web app, where its inputs become a form. You write a workflow once and reach it from all three.
The three core concepts
Everything in the rest of these docs builds on the three things this workflow already does.
- Actions. The
actionslist is the body of the workflow. Each action has anameand acomponent, and they run top to bottom. - Wiring. A step reads an earlier step's result with a
{{ name.field }}expression. This is the only glue between steps, and it is how data flows through the workflow. - Outputs. The
outputsblock names what the workflow returns to whoever ran it, built from the same expressions.
Where to go next
Read the guides in order for a full tour, or jump to what you need.
- Workflow anatomy lays out every part of a workflow and shows how a step can contain more steps.
- Templating language covers the
{{ }}expressions that wire steps together. - Inference explains calling models, tools, and forming structured outputs.
- The component reference is the full menu of steps, each with a working example.