uipath-maestro-flow
Always invoke for `.flow` files OR when the user asks what IxP / document-extraction models are available in Maestro. UiPath Maestro Flow (.flow) — build, edit, run, debug, fix, evaluate. Create, connect nodes; connector, approval, script, subflow, ixp; list IxP / document-extraction models for a flow; triggers, schedules; validate. Upload, publish, manage runs, instances. Diagnose errors, incidents, traces. Design eval sets, evaluators, run Studio Web evals via `uip maestro flow eval`. `uip maestro flow` CLI. For C#/XAML→uipath-rpa. For agents→uipath-agents.
Skill body
UiPath Flow Skill
Comprehensive guide for creating, editing, validating, debugging, publishing, diagnosing, and evaluating UiPath Flow projects using the uip CLI and .flow file format. The skill is organized into four capabilities — Author, Operate, Diagnose, Evaluate — each with its own index doc.
When to use this skill
Author — building or editing a .flow file. Read references/author/CAPABILITY.md.
- Create a new Flow project (
uip maestro flow init) - Edit a
.flowfile — add nodes, edges, variables, subflows, transforms, triggers - Explore available node types via the registry
- Validate or format a Flow file locally
- Apply Node ownership — Edit/Write for user-owned nodes, CLI for CLI-owned nodes (see Author capability)
- Configure connector, connector-trigger, or managed HTTP nodes; scaffold inline-agent projects
- Plan a complex flow before building
Operate — publishing, running, or managing a deployed flow. Read references/operate/CAPABILITY.md.
- Push a flow to Studio Web (
uip solution upload) - Deploy a flow to Orchestrator (
uip maestro flow pack+uip solution publish) - Debug a flow end-to-end against real systems
- Trigger a deployed process
- Check job status or stream traces
- Pause, resume, cancel, or retry a running instance
Diagnose — investigating a failed or misbehaving run. Read references/diagnose/CAPABILITY.md.
- Triage a failed
flow debugor deployed process run - Read incidents, runtime variables, deployed BPMN
- Recognize known failure modes (MST-9107, MST-9061, HITL-stuck, reused reference IDs, single-nested layout)
Evaluate — designing and running evaluations against a deployed flow. Read references/evaluate/CAPABILITY.md.
- Create evaluators (
exact-match,json-similarity,contains,llm-judge-*) for a Flow project - Create eval sets, add data points (test cases), pin entry points
- Start Studio Web eval runs, poll status, fetch results, compare runs
- Decide whether to call
uip solution upload(almost always: don’t auto-run; ask first)
Capability router
| I want to… | Read |
|---|---|
| Create a new flow or edit an existing one | references/author/CAPABILITY.md |
| Publish, deploy, debug, or manage a flow’s lifecycle | references/operate/CAPABILITY.md |
| Diagnose a failed or misbehaving flow run | references/diagnose/CAPABILITY.md |
Design and run evaluations (uip maestro flow eval) |
references/evaluate/CAPABILITY.md |
| Look up CLI command syntax | references/shared/cli-commands.md |
Look up CLI conventions (--output json, login, FOLDER_KEY) |
references/shared/cli-conventions.md |
Understand the .flow JSON format |
references/shared/file-format.md |
Understand variables and =js: expressions |
references/shared/variables-and-expressions.md |
| Wire one node’s output into another node’s input | references/shared/node-output-wiring.md |
Look up action-node boilerplate shared across plugin impl.mds |
references/shared/action-nodes.md |
| Narrate progress + maintain todos (opt-in — when user wants verbosity) | references/shared/ux-narration-and-todos.md |
Critical rules (universal)
These rules apply across all three capabilities. Each capability index adds capability-scoped rules on top.
- ALWAYS use
--output jsonon alluipcommands when parsing output programmatically. - Do NOT run
flow debugwithout explicit user consent — debug executes the flow for real (sends emails, posts messages, calls APIs). - Resource discovery order — search before creating. When the prompt references an existing resource by name (“use the X agent”, “call the Y API workflow”, “invoke the Z RPA process”), follow this order strictly before deciding the resource doesn’t exist:
- Tenant registry search —
uip maestro flow registry search "<name>" --output json. Requiresuip login; returns published resources. - In-solution local discovery —
uip maestro flow registry list --local --output json. No login required; returns sibling projects in the same.uipxsolution. - Only then create/scaffold — scaffold an inline agent, mock, or create-new-resource only when both searches return no match AND either the user explicitly asks to embed/inline/create, or no published resource can satisfy the requirement.
The words “coded” and “low-code” describe the implementation style of a published agent — they are NOT synonyms for “inline”.
uipath.agent.autonomous(inline) is only correct when the user explicitly asks to embed/inline/create a new agent inside this flow. Only usecore.logic.mockwhen the resource is not in the same solution and not yet published. See the relevant resource plugin’simpl.md(e.g., rpa, agent).The same “search before deciding it doesn’t exist” discipline applies to connector connections. The connector key MUST come from a
registry searchnode type (uipath.connector.<connector-key>.<activity>) — never inferred from the service’s brand name. The registry key is frequently prefixed or qualified differently than the product name, so a guessed key silently misses the real connector. Anyuip is connections listused for discovery MUST pass--all-folders. An empty result from an unverified key or without--all-foldersis a false negative, never authoritative — do not conclude “no connection exists” or ask the user to create one until both hold. - Tenant registry search —
- Never invoke other skills automatically — when a flow needs an RPA process, agent, or app, identify the gap and provide handoff instructions. Let the user decide when to switch skills.
- Always present user questions as a dropdown with a “Something else” escape hatch — Whenever this skill needs a decision from the user (which solution to use, publish vs debug vs deploy, which connector to pick, which trigger type, which resource to bind, etc.), use the
AskUserQuestiontool with the enumerated choices as options AND include “Something else” as the last option so the user can supply free-form string input. Never ask open-ended questions in chat when a finite set of sensible defaults exists. If the user picks “Something else”, parse their string answer and continue. - A Flow project MUST live inside a solution — always scaffold the solution first (
uip solution init <Name>), thencd <Name>and runuip maestro flow init <Name>. The correct layout is always<Solution>/<Project>/<Project>.flow(double-nested). Runninguip maestro flow initin a bare directory produces a single-nested<Project>/<Project>.flowlayout that fails Studio Web upload, packaging, and downstream tooling. See author/greenfield.md Step 2. - Narrate progress in plain English only when the user has opted into verbosity — silent by default. Engage when the user asks for narration / progress (“walk me through it”, “show your steps”, “verbose”, “be detailed”) or signals a verbosity preference; otherwise work quietly and surface only decisions, failures, consent gates, and the final result. When engaged: one short line per logical step, in user terms (“checking your tenant login”, “adding the Slack node and wiring its inputs”, “running validate”) — no flag-level or JSON-structure-level detail, applied uniformly across
uipCLI calls, shell builtins, file edits, and bulk searches. See shared/ux-narration-and-todos.md §When to engage. - Maintain a user-facing
TodoWritelist only when the user has opted into progress tracking / verbosity. In silent mode there is no user-facing todo list (the agent MAY track privately). When engaged: any journey above the trivial threshold gets a granular list — one logical step ≈ one todo, granularity per-step not per-phase. The count emerges from the journey’s actual steps; do not target a number. Bash plumbing inside a step (registry lookups, JSON parsing, intermediate file reads) is invisible — do not surface as todos. See shared/ux-narration-and-todos.md for the engage triggers, granularity rules, threshold table, and pivot rules. - Every node has exactly one author — Edit/Write or CLI, never both. Connector activities (
uipath.connector.<key>.<op>), connector triggers (uipath.connector.trigger.<key>.<trigger>), and managed HTTP (core.action.http.v2) are CLI-owned — useuip maestro flow node add+uip maestro flow node configure. Every other node type — triggers, control flow, logic, HITL, patterns, agents, resource nodes, queue — is user-owned: author the.flowJSON directly withEdit/Write.inputs.detailon CLI-owned nodes is a=jsonString:essentialConfigurationenvelope that the validator rejects when hand-authored. Inline-agent CLI is limited to agent project lifecycle (uip agent init / validate / migrate --inline-in-flow); theuipath.agent.autonomousflow node itself is user-owned. Scripting languages (python,node,jq,sed,awk, inline shell heredocs) are a last resort for user-owned edits and require explicit user approval after the trade-offs (state bypass, opaque diff, no interruption point) are surfaced. Canonical source of truth: author/CAPABILITY.md — Node ownership (full table); author/editing-operations.md — Tool Selection Ladder (per-operation ladder).
Anti-patterns (universal)
- Never use
--format jsonon anyuipcommand — the flag is--output json(rule #1).--formatproduceserror: unknown option '--format'and exit code 3 on everyuipsubcommand, not a helpful message pointing you at--output. - Never run
flow debugas a validation step — debug executes the flow with real side effects (rule #2). Useflow validatefor checking correctness. - Never silently pick the first match from
uip maestro flow registry search. When a search returns multiple connectors for the same intent, apply the canonical Connector Disambiguation ladder via connector/planning.md — Disambiguation, which defers to the Integration Service rules. - Never conclude “no connection exists” from a bare
uip is connections list— discovery requires--all-foldersand a connector key derived fromregistry search, not a brand name (rule #3). Without both, “No connections found” is a false negative; do not surface it as an Open Question or ask the user to create one. - Never write
customFieldsRequestDetails.parameterValuesas a JSON object map — Studio Web’s TS port emitsMap<string,string|null>viaArray.from(entries()), so the on-wire shape is[[key, value], ...]tuples. Object-form{key: value}is rejected by the CLI at validate time. Inner keys are camelCase (objectActionName,parameterValues), not PascalCase. See connector/impl.md Step 6c.
Trouble? If something didn’t work as expected, use
/uipath-feedbackto send a report.