Below are complete RITSU v0.1 workflow definitions you can use as starting points. Each example demonstrates a different pattern -- copy the YAML, customize the values to match your target site, and run.
Form Submission
A straightforward workflow that navigates to a login page, fills in credentials, and submits the form.
ritpiVersion: v0.1
name: simple-login
description: Sign in to a web application.
steps:
- type: navigate
url: 'https://app.example.com/login'
- type: fill
selector: '#email'
value: 'user@example.com'
- type: fill
selector: '#password'
value: 's3cureP@ss'
- type: click
selector: "button[type='submit']"Selectors are generated automatically when you record a workflow from a video. You only need to write them manually if you are authoring a workflow from scratch.
Multi-Page Data Entry
Use variables to make a workflow reusable across different inputs. The inputs block defines what the user provides at run time, and ${inputs.key} injects those values into steps.
ritpiVersion: v0.1
name: multi-page-entry
description: Fill a multi-page form with user-provided data.
inputs:
firstName:
type: string
description: 'First name of the applicant.'
lastName:
type: string
description: 'Last name of the applicant.'
email:
type: string
description: 'Contact email address.'
phone:
type: string
description: 'Phone number with country code.'
steps:
# Page 1 -- Personal information
- type: navigate
url: 'https://forms.example.com/apply'
- type: fill
selector: '#first-name'
value: '${inputs.firstName}'
- type: fill
selector: '#last-name'
value: '${inputs.lastName}'
- type: click
selector: 'button.next-page'
# Page 2 -- Contact details
- type: fill
selector: '#email'
value: '${inputs.email}'
- type: fill
selector: '#phone'
value: '${inputs.phone}'
- type: click
selector: "button[type='submit']"Variables let you run the same workflow with different data each time -- no need to record a new video for every variation.
AI Agent for Dynamic Tasks
When the page layout is unpredictable or the task requires judgment, use an agent step. The AI agent navigates the browser autonomously based on a natural-language prompt.
ritpiVersion: v0.1
name: ai-product-search
description: Use the AI agent to find and add a product to cart.
inputs:
productName:
type: string
description: 'Name or description of the product to search for.'
steps:
- type: navigate
url: 'https://shop.example.com'
- type: agent
prompt: >
Search for "${inputs.productName}" using the site's search bar.
From the results, pick the first item that closely matches the name.
Add it to the cart and proceed to the checkout page.
maxSteps: 15The maxSteps field limits how many browser actions the agent can take. Start
with 10-15 for typical tasks. Increase it only if the agent runs out of steps
before completing the goal.
Batch Registration
Combine array variables with batch execution to create many accounts or records in a single run. Each element in the array becomes one batch iteration, up to a maximum of 200 iterations per batch.
ritpiVersion: v0.1
name: batch-user-registration
description: Register multiple users in bulk.
inputs:
users:
type: array
description: 'List of users to register.'
itemSchema:
name:
type: string
description: 'Full name of the user.'
email:
type: string
description: 'Email address for the new account.'
role:
type: string
description: 'Role to assign (admin, editor, viewer).'
steps:
- type: navigate
url: 'https://admin.example.com/users/new'
- type: fill
selector: '#full-name'
value: '${inputs.users.name}'
- type: fill
selector: '#email'
value: '${inputs.users.email}'
- type: select
selector: '#role-dropdown'
value: '${inputs.users.role}'
- type: click
selector: 'button#create-user'When you start a batch run, provide the users array with up to 200 entries:
{
"users": [
{ "name": "Alice Chen", "email": "alice@example.com", "role": "editor" },
{ "name": "Bob Park", "email": "bob@example.com", "role": "viewer" },
{ "name": "Carol Diaz", "email": "carol@example.com", "role": "admin" }
]
}Batch runs execute sequentially -- each iteration completes before the next one starts. Plan your batch sizes to balance throughput and reliability.
Conditional Steps
Use if expressions to skip steps based on input values. This is useful when parts of a workflow are optional.
ritpiVersion: v0.1
name: conditional-profile-update
description: Update a user profile, optionally changing the avatar.
inputs:
bio:
type: string
description: 'New bio text.'
avatarUrl:
type: string
description: 'URL of the new avatar image. Leave empty to skip.'
steps:
- type: navigate
url: 'https://app.example.com/settings/profile'
- type: fill
selector: '#bio'
value: '${inputs.bio}'
- type: fill
selector: '#avatar-url'
value: '${inputs.avatarUrl}'
if: '${inputs.avatarUrl}'
- type: click
selector: 'button#save-profile'The if expression is evaluated before the step runs. If it resolves to an
empty string, null, or false, the step is skipped entirely.
These examples are starting points. Customize selectors, URLs, and variable names to match your target application. You can also record a video of your workflow and let Copelf generate the RITSU definition automatically.