Recording Mode
Create workflows by clicking through tasks — no coding required.
How It Works
- Start recording — Click "New Recording" in the dashboard
- Perform actions — Navigate, click, type in your browser
- Stop recording — Actions are captured as workflow steps
- Export as YAML — Save to your actions folder
Starting a Recording
From Dashboard
- Open localhost:9876
- Click "Recordings" in the sidebar
- Click "New Recording"
- The extension will indicate recording is active
Recording Status
When recording:
- Extension icon shows recording indicator
- Dashboard shows "Recording..." status
- All browser actions are captured
Captured Events
| Event | What's Recorded |
|---|---|
| Navigate | URL visited |
| Click | Element clicked (multiple selector candidates) |
| Type | Input field and text entered |
| Scroll | Direction and position |
| Key Press | Keyboard key pressed |
Selector Candidates
For each click/type action, multiple selector strategies are captured:
yaml
selectors:
- "role=button[name='Submit']" # ARIA role
- "text=Submit" # Text content
- "css=button.btn-primary" # CSS selector
- "[data-testid='submit-btn']" # Test IDThis gives you options when editing — choose the most stable selector for your use case.
Stopping and Saving
Stop Recording
- Click "Stop Recording" in the dashboard
- Or click the extension icon and select "Stop"
Review Actions
After stopping, you'll see:
- List of captured actions
- Generated YAML preview
- Option to edit before saving
Save as Workflow
- Give your recording a name
- Click "Save as Workflow"
- The file is saved to
actions/directory
Editing Recordings
Change Selectors
yaml
# Original (may be fragile)
- type: browser.click
selector: "div.sc-1234abcd > button:nth-child(2)"
# Better (more stable)
- type: browser.click
selector: "button[data-testid='submit']"Add Wait Steps
yaml
steps:
- type: browser.click
selector: ".load-more"
# Add wait for dynamic content
- type: browser.wait
selector: ".new-items"
timeout: 5000Add Parameters
yaml
# Make it reusable
params:
search_term: string
steps:
- type: browser.type
selector: "#search"
text: "{{search_term}}" # Was hardcodedAdd LLM Steps
yaml
steps:
# ... extraction steps from recording
# Add AI processing
- type: llm.generate
prompt: "Summarize: {{extracted_content}}"
as: summaryBest Practices
1. Keep Recordings Focused
Record one task at a time:
- ✅ "Search for product"
- ✅ "Add item to cart"
- ❌ "Complete entire checkout flow"
2. Use Stable Selectors
Prefer selectors in this order:
data-testidattributes- ARIA labels
- Unique IDs
- Text content
- CSS classes (least stable)
3. Add Waits for Dynamic Content
If the page loads content dynamically, add explicit waits:
yaml
- type: browser.wait
selector: ".dynamic-content"
timeout: 100004. Test After Recording
Always run the workflow to verify it works:
- Save the recording
- Navigate to a similar page
- Run from dashboard
- Check run log for errors
5. Parameterize Hardcoded Values
Replace specific values with parameters:
yaml
# Before
- type: browser.navigate
url: "https://example.com/product/12345"
# After
params:
product_id: string
steps:
- type: browser.navigate
url: "https://example.com/product/{{product_id}}"Limitations
What Can't Be Recorded
- Hover actions (may not trigger reliably)
- Drag and drop
- Complex gestures
- Actions in iframes (sometimes)
Workarounds
For unsupported actions, manually add steps:
yaml
# Add hover step manually
- type: browser.hover
selector: ".dropdown-trigger"
- type: browser.wait
ms: 500
- type: browser.click
selector: ".dropdown-menu .option"Troubleshooting
Recording doesn't start
- Is the extension connected?
- Is the server running?
- Refresh the page and try again
Actions not captured
Some pages block content scripts. Try:
- Refresh the page
- Reconnect the extension
- Check if site has strict CSP
Playback fails
Common issues:
- Selector changed (use more stable selector)
- Page structure different (add conditional logic)
- Timing issue (add wait steps)
Next Steps
- Workflow DSL — Edit recordings manually
- Step Types — Add more step types
- Embed Buttons — Inject buttons for your workflow