A complete workflow
Workflow: SummarizePage
Description: Fetches a page and answers a question about it.
Triggers:
- New: Ask
Schema:
type: object
required: [Prompt, Url]
properties:
Prompt: { type: string }
Url: { type: string }
Instructions: Answer the question using the fetched page.
Operations:
- Tool: Fetch
Locator: embedded://momor.ai/services/tools/fetchPage
Output: Content
Steps:
- ExecuteTool: Read
Operations: [Fetch]
Input:
url: { Field: Trigger.Url }
- DeliverResults: HandOverExecuteTool fetches the page, DeliverResults puts it into the run’s conversation, and because the conversation then ends on a result, the engine asks the model to reply to it. That reply is the workflow’s Content answer.
Writing a step
A step is written under its kind, and the value of that key is the step’s name: - ModelCall: Triage. The name is optional, and only needed where a later step reads the step’s output. Names are unique within a workflow. The same form names every list entry: - New: Ask for a trigger, - Tool: Fetch for an operation, - Hook: Title for a hook.
Step kinds
The fields of every kind are listed in the YAML reference. A step kind the engine does not know is refused when the workflow is uploaded.
Data between steps
- The feed. Each step receives the value the step before it produced. The request that opened the turn is the first value in the feed.
- Named outputs. A named step’s output stays readable for the rest of the turn: { Field: Triage.Topic } reads the Topic field of the step named Triage. Trigger reads the request: { Field: Trigger.Url }.
- Input mappings. A step with an Input mapping reads that instead of the feed. The keys are the target’s own field names, so they follow the tool’s or the called workflow’s schema.
- The conversation. Model steps read the run’s conversation, not the feed. The opening request is its first message; DeliverResults adds tool results to it.