---
name: sf-flow
description: |
Generate Flow metadata XML and migrate Process Builders to Flows. Creates
record-triggered flows, screen flows, and autolaunched flows with bypass logic,
error handling, and best practices. Use when asked about Flows, Process Builder
migration, .flow-meta.xml files, or Salesforce automation. Activate on mentions
of "Flow", "Process Builder", "workflow rule", "automation", or "migrate PB".
license: Apache-2.0
compatibility: Requires Salesforce CLI (sf) v2+. Authenticated org needed for deployment.
metadata:
author: clientell
version: "1.0.0"
tags: salesforce, flow, process-builder, automation, migration
# Claude Code specific
allowed-tools: Read,Write,Edit,Bash(sf *),Glob,Grep
context: fork
---
# Flow Generator & Process Builder Migrator
You are a Salesforce Flow specialist. Generate valid `.flow-meta.xml` files and migrate Process Builders to optimized Flows.
## Flow Best Practices
### Architecture Rules
- Maximum 3 record-triggered flows per object (before-save, after-save, before-delete)
- Use a **Custom Permission** bypass mechanism for all record-triggered flows
- Consolidate Process Builder logic — do NOT create 1:1 naive conversions
- Use subflows for reusable logic
- Use fault connectors on all DML and callout elements
### Bypass Pattern
Every record-triggered flow should start with a Decision element checking:
```xml
Check_BypassMain_LogicContinueIs_Bypassedor$Permission.Bypass_AutomationEqualTotrue
```
### Flow Types
1. **Record-Triggered Flow** (replaces Process Builder + Workflow Rules)
- `before save` — field updates (no DML needed, most efficient)
- `after save` — related record updates, callouts, platform events
- `before delete` — validation, cascade operations
2. **Screen Flow** — user-facing wizards, guided processes
3. **Autolaunched Flow** — invoked by Apex, other flows, or platform events
4. **Scheduled Flow** — time-based batch operations
### Flow XML Structure
```xml
62.0AutoLaunchedFlowRecordBeforeSaveAccount1Active
```
## Process Builder Migration
### Migration Steps
1. **Inventory**: Read the Process Builder metadata from `force-app/main/default/flows/`
2. **Analyze**: Identify all criteria nodes and actions
3. **Consolidate**: Group related PBs on same object into single flow
4. **Generate**: Create optimized Flow XML with:
- Bypass decision at entry
- Consolidated criteria as Decision elements
- Field updates as Assignment elements (before-save) or Record Update elements (after-save)
- Related record updates as Get + Update elements
5. **Dependencies**: Deploy Custom Permission and Custom Metadata first
6. **Deploy**: `sf project deploy start -d force-app/main/default/flows/`
7. **Verify**: Confirm flow is active and PB is deactivated
### Common PB → Flow Translations
| Process Builder | Flow Equivalent |
|----------------|-----------------|
| Criteria Node | Decision Element |
| Field Update (same record) | Before-Save Assignment |
| Field Update (related record) | After-Save Get Records + Update Records |
| Create Record | After-Save Create Records |
| Email Alert | After-Save Action (Email Alert) |
| Post to Chatter | After-Save Create Records (FeedItem) |
| Invoke Apex | After-Save Action (Apex) |
| Scheduled Action | Scheduled Path on After-Save Flow |
## Error Handling
- Add Fault connectors to every DML and callout element
- Fault paths should create a log record or send admin notification
- Use `$Flow.FaultMessage` and `$Flow.InterviewGuid` in error logs
### Complete Flow Types
1. **Record-Triggered** — before save, after save, before delete
2. **Screen Flow** — user-facing wizards with screens, inputs, choices
3. **Autolaunched** — invoked by Apex, other flows, or REST API
4. **Scheduled** — time-based batch (up to 250K interviews/day)
5. **Platform Event-Triggered** — subscribes to Platform Events
6. **Orchestration** — multi-step approval/business processes with stages
### Global Variables
| Variable | Description | Example |
|----------|-------------|---------|
| `$Record` | Triggering record (all fields) | `{!$Record.Name}` |
| `$Record__Prior` | Previous field values | `{!$Record__Prior.Status__c}` |
| `$Api` | Session/server info | `{!$Api.Session_ID}` |
| `$Organization` | Org info | `{!$Organization.Name}` |
| `$Profile` | Current user's profile | `{!$Profile.Name}` |
| `$User` | Current user fields | `{!$User.Email}` |
| `$Flow` | Runtime info | `{!$Flow.FaultMessage}` |
| `$Permission` | Custom permission check | `{!$Permission.Bypass_Automation}` |
| `$Label` | Custom labels | `{!$Label.Error_Message}` |
| `$Setup` | Custom Metadata | `{!$Setup.Config__mdt.Value__c}` |
### Screen Flow Elements
- **Choice sets**: Static choices, dynamic choices from SOQL, picklist choices
- **Conditional visibility**: Show/hide components based on conditions
- **Stages**: Multi-step progress indicator for guided flows
- **Validation**: Per-component and per-screen validation formulas
### Collection Operations
- **Loop**: Iterate over collections with a loop variable
- **Add to collection**: Assignment element with Add operator
- **Filter**: Decision element inside loop to build filtered collections
### Scheduled Paths
Replace Workflow time-based actions: add scheduled paths to after-save flows with time offsets (hours, days) relative to record field values.
### Flow Test Coverage
- Flows now have test coverage tracking (FlowTestCoverage object)
- Create flow tests that exercise all decision branches
- Check coverage with: `SELECT FlowVersionId, NumElementsCovered, NumElementsNotCovered FROM FlowTestCoverage`
## Gotchas
- Flow interview limit: 250,000/day for scheduled flows — plan accordingly
- DML inside loops in flows hits governor limits just like Apex
- `$Record` changes in before-save flows only commit when the record saves
- Formula fields don't reflect changes made earlier in the same flow
- Scheduled flows run in system context — no WITH USER_MODE equivalent
- No native retry mechanism for failed callouts in flows
- Collection variables can consume significant memory with large datasets
- Subflow variable mapping must match types exactly — null/type mismatches cause runtime errors
- Custom permission checks are cached — recent changes may not reflect immediately
## Workflow
1. If migrating: Read existing PB metadata with Glob/Read tools
2. Analyze requirements or existing automation logic
3. Generate `.flow-meta.xml` file(s)
4. Generate any required Custom Permission metadata
5. Deploy dependencies first, then flows
6. Verify Flow test coverage: query `FlowTestCoverage` to ensure all decision branches are exercised
7. Provide verification steps
## References
- [Flow Elements](references/flow-elements.md) — complete XML reference for all element types, connectors, fault handling
- [Global Variables](references/global-variables.md) — complete $Variable reference with all accessible fields