uipath-maestro-case
Always invoke for `caseplan.json` files. UiPath Case Management authoring (caseplan.json) from sdd.md, or via lightweight interview if sdd.md absent. Produces tasks.md plan, writes caseplan.json via per-plugin JSON recipes. For .xaml→uipath-rpa, .flow→uipath-maestro-flow, .bpmn→uipath-maestro-bpmn. For PDD→SDD or complex/multi-product→uipath-solution.
Skill body
UiPath Case Management Authoring Assistant
Preview — skill is under active development; surface and behavior may change.
Builds UiPath Case Management definitions from sdd.md. Generates tasks.md plan, then writes caseplan.json directly via per-plugin JSON recipes. CLI is reserved for read-only metadata fetches (registry, validate, debug, tasks describe, is describe) and solution boundary operations (uip solution new / project add / upload).
When sdd.md is absent, Phase 0 interview generates one interactively (listen → sketch → progressive ask-walk → resolve → approve, with optional HTML preview before handing off). Complex / multi-product cases redirect to uipath-solution-design — see references/phase-0-interview.md § Thresholds for caps.
Scope: new case from sdd.md (user-provided or Phase 0-generated). Modifying existing case not supported (no remote fetch tooling).
When to Use This Skill
- User provides
sdd.mdand wants Case Management project built - User asks to create new case management project but has no
sdd.md(Phase 0 interview generates one) - User asks to create new case management project or definition
- User asks to generate implementation tasks from
sdd.mdor convert spec to plan - User asks about case management JSON schema — nodes, edges, tasks, rules, SLA
- User wants to manage runtime case instances (list, pause, resume, cancel) — see references/case-commands.md
Do not use for: .xaml → uipath-rpa. .flow → uipath-maestro-flow. Standalone agents/APIs/processes outside case context → corresponding UiPath skill.
Critical Rules
- Phase 0 interview when
sdd.mdabsent. Generatesdd.mdvia a guided interview (listen → sketch → progressive ask-walk → resolve → approve); output requires explicit user approval (Approve hard-stop) before treating as Rule 2 input. Apply complexity thresholds — soft-redirect touipath-solution-designon breach. Never overwrite an existingsdd.md. See references/phase-0-interview.md § Thresholds. - sdd.md is sole input post-Phase-0. After Phase 0 approval (or when user-provided), trust as written. Skill does not validate or gap-fill. If ambiguous, use AskUserQuestion — never infer silently.
- Run
uip maestro case registry pullbefore planning. Discovery reads cache files at~/.uip/case-resources/<type>-index.jsondirectly.registry searchhas known gaps (esp. action-apps). See references/registry-discovery.md. --output jsonon every parsed read.- Follow plugin per node type. Open matching
planning.mdduring planning +impl-json.mdduring execution. Never guess JSON shapes from memory. tasks.mddeclarative only. No shell commands inside. Field names use plain identifiers (e.g.,type:,displayName:,lane:), not CLI flag syntax. One T-entry per sdd.md declaration — every stage, edge, task, trigger, condition, SLA rule, variable, and argument gets own T-number, even when value looks like default (current-stage-entered,case-entered,exit-only,is-interrupting: false,runOnlyOnce: true,marks-stage-complete: true). Never group, never silently omit. When an sdd.md row’s format is unrecognized, ambiguous, or cannot be categorized — invoke AskUserQuestion before skipping. Silent omission is forbidden. Always regenerate from scratch. Seereferences/planning.md§4.0.- HARD STOP after
tasks.md. AskUserQuestion:Approve and proceed/Request changes. Re-readtasks.mdbefore executing. - Unresolved resource → placeholder, never fabricate IDs. Keep
<UNRESOLVED: ...>markers intasks.md. Placeholder task: node withtype+displayName+ structural fields,data: {}; conditions still reference the TaskId. Exception —actionplaceholder:data.taskTitleis validator-required; populate from sdd.md task-title hint or fall back todisplayName; includedata.priority/data.recipientif known. Placeholder event trigger: node with render fields +data.uipath: { serviceType: "Intsvc.EventTrigger" }only (no otherdata.uipathkeys);entry-points.jsonentry appended; trigger-edge to first stage created. See references/placeholder-tasks.md and references/plugins/triggers/event/impl-json.md § Placeholder fallback. - Persist every registry resolution to
registry-resolved.json— search query, all matches, selected result, rationale. - Cross-task refs:
"Stage Name"."Task Name".output_namein planning, resolve to=vars.<outputId>at execution by reading source’sidfield (the resolver match key;varmirrorsidon self-declaring task outputs but.idis symmetric with the runtime resolver per io-binding validator). Discover output names viauip maestro case spec(connector tasks) oruip maestro case tasks describe(non-connector tasks) — never fabricate. See references/bindings-and-expressions.md andplugins/variables/io-binding/impl-json.md. - HARD STOP between Phase 2 (Prototyping) and Phase 3 (Implementation) — unconditional, every run. Run
validate --skeleton(structural checks only — skips tasks/SLAs/escalations/entry-exit rules), surface counts, present AskUserQuestion:Publish for review/Skip publish and continue/Abort. Do NOT halt on Phase 2 validate errors — advisory only; user inspects viaAbort. Never skip prompt for auto mode, non-interactive mode, prior approval. If harness forbids prompts, halt with error. OnPublish for review: printDesignerUrlas plain-text output BEFORE invoking the second AskUserQuestion — never embed URL only inside question body. Additional hard stops gate Phase 4 retry exhaustion (Retry with fix/Pause for manual edit/Abort), Phase 5 entry (Run debug session/Skip to Publish), and Phase 6 entry (Publish to Studio Web/Done). Full contract inreferences/phased-execution.md. - Never run
uip maestro case debugautomatically. Executes case for real — emails, messages, API calls. Explicit user consent only. - All skill artifacts: Read + Write/Edit only. Applies to
caseplan.json,sdd.md,sdd.draft.md,tasks.md,tasks/registry-resolved.json,tasks/trigger-spec-cache.json,bindings_v2.json,id-map.json,entry-points.json,build-issues.md. Nopython,node,jq,sed,awk, or scripts that open/parse/modify/save these files. Specifically forbidden (common slip):node -e "...fs.writeFileSync...",node -e "...fs.readFileSync...",node -e "..." > <artifact>,jq '...' <artifact> > <artifact>,python -c "...open(...,'w')...",sed -i,awk -i inplace, or any shell redirection (>,>>,| tee) onto a skill artifact regardless of interpreter. Writing a helper script under/tmpor anywhere else to assemble a skill artifact is also forbidden — the build-assembler pattern (/tmp/build-caseplan.js,/tmp/gen-tasks.py, etc.) is the same Rule 13 violation as inlinenode -e, regardless of “mechanical copy” or “avoid Read+Write churn” framing. Ifcaseplan.jsonexceeds ~30KB and a single Write feels too large, split into the Phase-2-skeleton-then-Phase-3-fill cadence (per case-editing-operations.md § Per-section batch write contract) — never via helper script. Bash subprocesses OK ONLY for UUID v4 generation (node -e "console.log(crypto.randomUUID())"foroperate.json.projectIdandentry-points.jsonuniqueId— subprocess MUST NOTrequire('fs')or use redirection), CLI metadata fetches, validate, debug, and solution scaffold/upload. Prefixed IDs (Stage_,t,Rule_, etc.) are picked inline by the agent — no subprocess. See references/case-editing-operations.md § Tool usage. - Always run
uip solution resource refreshbeforeuip solution uploadoruip maestro case debug— syncs resources frombindings_v2.jsonso Studio Web can resolve connector dependencies. - Never auto-invoke
uipath-solution. On Phase 0 threshold breach or stuck-round detection, print plain-text suggestion of the skill name. User re-invokes manually. No tool-call cross-skill handoff. -
Caseplan task typeenum is closed — 9 values, schema-kebab. Any task node written intocaseplan.jsonMUST havetypeexactly one of:processagentrpaactionapi-workflowcase-managementexecute-connector-activitywait-for-connectorwait-for-timer. Never write the plugin folder name (connector-activity,connector-trigger) or the CLI--typeflag value into the JSON node — those name the planning artifacts, not the schema. Never writeexternal-agent,wait-for-event, or any hallucinated value — there is no plugin to back them. See references/case-schema.md § Task type and the Plugin Index naming-asymmetry table below. - Empty registry lookup → AskUserQuestion for force pull BEFORE any placeholder fallback. When a planning-phase lookup returns 0 matches across all relevant cache files, present AskUserQuestion
Force pull and re-resolve/Skip and use placeholdersBEFORE writing any placeholder T-entries or invoking per-plugin Unresolved Fallback paths. Apply per lookup-batch (one prompt covers all empties in the batch — do not prompt per-task). Do NOT pre-judge based on resource-name heuristics (“looks vendor-specific, won’t match anyway”) — that is the user’s call. Placeholder fallback is only valid AFTER the user explicitly picksSkip. See references/registry-discovery.md § MUST: Confirm Before Placeholder Fallback. - Schema version: default v19, opt-in v20, alpha-tenant forced v20. Skill emits v19 (
{ root, nodes, edges }) by default. Emits v20 ({ id, version: "20.0.0", name, metadata, bindings, variables, nodes, edges, layout }) when ANY of: (a) Tenant override — Phase 1 Step 1’suip login status --output jsonreturnsData.BaseUrl == "https://alpha.uipath.com"(exact case-sensitive match). Forces v20 regardless of user prompt; cannot be downgraded by prompt phrasing. (b) Prompt phrase — the user message that activated the skill contains one of these case-insensitive substrings:v20 schema,schema v20,use v20,emit v20,generate v20,unified schema,schema 20.0.0. Resolution order is (a) before (b); first match wins. Detection scope for (b) is the activating message only — never infer from sdd.md content, file paths, or any subsequent message. Detection scope for (a) is the Step 1 login-status response only — do not re-query mid-build. When v20 is selected by either path, Phase 1 Step 2 writesSchema: v20as the first non-comment line oftasks.md; otherwise writesSchema: v19. Re-entry protocol re-reads this header to recover the choice across hard stops. caseplan.json self-identifies via its top-levelversionliteral. Mid-flight schema switch forbidden — user must re-run from Phase 1 (Rule 6 regenerate-from-scratch applies); changing tenant or prompt mid-build does not re-flip the header. Cached v19 artifacts cannot be in-place migrated to v20 (or vice versa) — a full Phase 1 regenerate is required. v20 mode softens Phase 4 to informational (no retry-cap hard stop) and prints downstream-CLI-may-reject warnings before Phase 5/6 prompts. Seereferences/phased-execution.md§ v20 mode andreferences/case-schema.md§ Top-level shape. - v20 layout-strip — node/edge layout state lives in top-level
layout, not on the node/edge. In v20 mode, do NOT emit node-levelposition,style,measured,width,height,zIndex. Do NOT compute stageposition.x = 100 + count * 500. Do NOT emit edgedata.waypoints. Emit top-levellayout: {}(empty object) — FE auto-layouts on canvas load. The frontend’stransformCaseInMemoryJsonToDiskJsonstrips these fields anyway when round-tripping through canvas; emitting them is harmless on read but wastes tokens. v19 mode preserves all current render-field rules (Pre-flight Checklist Items 3, 4 inreferences/case-editing-operations.md). Seereferences/case-editing-operations.md§ v20 layout-strip.
Workflow
Up to seven hard stops (Phase 0 + Phase 2 second prompt + Phase 4 conditional): Phase 0 (interview → sdd.md, only when sdd.md absent) → approve → Phase 1 Planning (sdd.md → tasks.md) → approve → Phase 2 Prototyping (placeholder) → publish-for-review stop → continue-after-publish stop (publish branch only) → Phase 3 Implementation (detail) → Phase 4 Validate (retry-cap stop on 3rd failure) → Phase 5 Debug (Run vs Skip-to-Publish stop) → Phase 6 Publish (Publish vs Done stop).
Phase 0 — Interview (conditional)
Triggered when sdd.md absent at resolved path. Read references/phase-0-interview.md for the interview modes (listen → sketch → progressive ask-walk → resolve → approve), thresholds, soft-redirect contract, resumption, and HTML preview offer. Produces:
Read budget for Phase 0. Read
phase-0-interview.md,references/sdd-generation-rules.md(the mental model + task-type reasoning the progressive walk relies on), andassets/templates/sdd-template.mdto begin the interview. Do NOT preload pluginimpl-json.mdfiles — those are needed only in Phase 2/3 and pulled in just-in-time per T-entry.
sdd.md— generated againstassets/templates/sdd-template.mdtasks/registry-resolved.json— per-task registry resolutionssdd.draft.md— intermediate, deleted at approvalsdd-viewer.html— optional, rendered fromassets/templates/sdd-viewer.htmlwhen user accepts the preview offer; Phase 1 ignores it
If sdd.md already exists: skip Phase 0, hand to Phase 1 unchanged.
Phase 1 — Planning
Read references/planning.md. Produces:
tasks/tasks.md— T-numbered entries (stages → edges → tasks → conditions → SLA)tasks/registry-resolved.json— audit trail
HARD STOP: AskUserQuestion approval. Loop on Request changes.
Phase 2 — Prototyping
Read references/implementation.md + references/phased-execution.md. Builds structural shape only:
- Solution + project + root case (Step 6)
- Triggers — manual / timer / event, including placeholder event triggers per Rule 8 (Step 6.1)
- Global variables + arguments (Step 6.2) — including In arguments whose
elementIdreferences aTriggerIdcaptured in Step 6.1 - Stages (Step 7), edges (Step 8)
- Tasks — shape only (Step 9): non-connector with full
data.inputs[]schema + empty values; connector withtypeId+connectionIdonly (nois describe); unresolved as placeholders per Rule 8 - Informational validate (Step 9.5.1) — do NOT halt on errors/warnings
- HARD STOP (Step 9.5.2–9.5.5):
Publish for review/Skip publish and continue/Abort. OnPublish:uip solution resource refresh --solution-folder <SolutionDir> --output jsonthenuip solution upload, print DesignerUrl, AskUserQuestion:Continue to phase 3/Abort. OnAbort: dumpbuild-issues.md, exit (no cleanup).
Phase 3 — Implementation
Re-read tasks.md AND caseplan.json (Step 9.6). Then:
- Connector schema + defaults (Step 9.7) —
is resources/triggers describe - I/O binding all task classes (Step 9.8) — per
plugins/variables/io-binding/impl-json.md - Conditions all 4 scopes (Step 10)
- SLA + escalation (Step 11)
No hard stop on Phase 3 exit — proceed directly to Phase 4.
Phase 4 — Validate
- Full validate (Step 12). Retry up to 3×; on 3rd failure HARD STOP AskUserQuestion:
Retry with fix/Pause for manual edit/Abort - Dump
build-issues.md(Step 12.1)
Phase 5 — Debug
Completion report + HARD STOP AskUserQuestion (Step 13): Run debug session / Skip to Publish. On Run: uip solution resource refresh then uip maestro case debug (never auto-run — Rule 12). Loop on completion until Skip to Publish.
Phase 6 — Publish
HARD STOP AskUserQuestion (Step 14): Publish to Studio Web / Done. On Publish: uip solution resource refresh then uip solution upload, print DesignerUrl (Step 15). Exit on either choice.
Reference Navigation
| I need to… | Read |
|---|---|
| Generate sdd.md interactively when none provided | references/phase-0-interview.md |
| Plan tasks from sdd.md | references/planning.md |
| Execute tasks.md into a case | references/implementation.md |
| Phase 2 → 3 → 4 → 5 → 6 split + hard stop contracts | references/phased-execution.md |
| Schema v19 vs v20 (Rules 18, 19) — mapping, layout-strip, mode behavior | references/case-schema.md § Top-level shape, references/phased-execution.md § v20 mode |
| Edit caseplan.json directly | references/case-editing-operations.md |
| Case JSON schema | references/case-schema.md |
| Surviving CLI commands (registry, validate, debug, runtime) | references/case-commands.md |
| Troubleshoot a failed case | references/troubleshooting-guide.md |
| Resolve task types from registry | references/registry-discovery.md |
| Wire inputs/outputs + cross-task refs + expression prefixes | references/bindings-and-expressions.md |
| Configure connector activity / trigger / event | references/connector-integration.md |
Construct case spec --input-details JSON |
references/case-spec-input-details.md |
| Placeholder tasks for unresolved resources | references/placeholder-tasks.md |
| Sync bindings_v2.json + connection resources | references/bindings-v2-sync.md |
Plugin Index
Structural:
| Plugin | Scope |
|---|---|
| case | Root case (T01) |
| stages | Regular and exception stages |
| edges | Edges between Trigger/Stage nodes |
| sla | Default SLA, conditional rules, escalation |
| global-vars | Case variables and arguments |
| io-binding | Task I/O wiring, cross-task refs |
| logging | Shared issue log |
Tasks (references/plugins/tasks/):
Naming asymmetry — read carefully. Three names exist for connector + timer tasks. Pick the right one by column. Schema-kebab is the only value that goes into
caseplan.jsontype(Rule 16).
sdd.md Type: value / caseplan.json type (schema-kebab) |
Plugin folder | CLI --type flag (tasks describe) |
|---|---|---|
process |
process | process |
agent |
agent | agent |
rpa |
rpa | rpa |
action |
action | action |
api-workflow |
api-workflow | api-workflow |
case-management |
case-management | case-management |
execute-connector-activity |
connector-activity | connector-activity |
wait-for-connector |
connector-trigger | connector-trigger |
wait-for-timer |
wait-for-timer | wait-for-timer (no CLI describe needed) |
Triggers (references/plugins/triggers/):
| Plugin | When |
|---|---|
| manual | User-initiated start |
| timer | Scheduled start |
| event | External connector event |
Conditions (references/plugins/conditions/):
| Plugin | Scope |
|---|---|
| stage-entry-conditions | Stage entered |
| stage-exit-conditions | Stage exits |
| task-entry-conditions | Task starts |
| case-exit-conditions | Case completes/exits |
Anti-patterns
- Do NOT leave stages without an inbound edge. Orphaned and unreachable. Every stage needs ≥1 inbound edge from Trigger or another stage.
- Do NOT validate after each T-entry. Intermediate states expected invalid. Run
validateonce at end of Phase 2 (informational) and once in Phase 4 (authoritative). tasks.md(Phase 1) uses per-section batched Edit-append — NOT per-T-entry, NOT one mega-Write. One Read + N Edit-appends per section (§4.2.1 vars, §4.3 triggers, §4.4 stages, §4.5 edges, §4.6 tasks, §4.7 conditions, §4.8 SLA). No re-Read between sibling Edits. HARD CAP: after §4.0a Step 1 Seed Write (<1KB header), single Write of wholetasks.mdis FORBIDDEN regardless of size. Single Edit-append payload >30KB also FORBIDDEN — split per section even if cumulative payload exceeds 30KB. A 96KB tasks.md Write costs ~360s in one turn (20% of session); section-batched Edit-appends spread across ~7 turns of ~50s. TaskUpdate per T-entry preserves audit trail. Recovery on interruption: re-Readtasks.md, resume from next un-applied T-entry. See planning.md § 4.0a.caseplan.json(Phase 2 + 3) uses per-section batched writes — NOT per-T-entry. One Read at section entry + one validate at section end. Tool primitive scales with section size: <10 T-entries → N Edits (one per T-entry, no re-Read between siblings); ≥10 T-entries → may use single whole-section Write covering the section’s nodes/edges array at once, AFTER composing complete section state in reasoning. Untouched siblings (other sections, root fields) MUST be preserved verbatim from the Read — drop nothing. TaskUpdate per T-entry preserves audit trail regardless of write granularity. CLI-gated sections (Phase 2 §4.6 non-connectortasks describe, Phase 3 §9.7 connectorcase spec) use gather-then-write. Recovery on interruption: re-Read both files, resume from next un-applied T-entry. Full contract in case-editing-operations.md § Per-section batch write contract and implementation.md § Per-plugin execution.- Do NOT emit standalone text-only assistant turns between tool calls. Status/progress text MUST share its turn with the next
tool_use(text block + tool_use block in the same assistant content array). Standalone narration turns each pay full inference latency + prompt cache replay (~5s + ~250K cache-read tokens per turn) for no incremental progress. Cap inline status to ≤1 sentence / ~20 tokens. Per-T-entry audit lives in TaskUpdate, NOT in narration.- HARD TOKEN CAP on any single text block: 200 tokens, no exceptions outside the allow-list below. Allow-listed text blocks (hard-stop AskUserQuestion preambles, Phase 5/6 completion reports,
Publish for reviewDesignerUrl print, post-validate result summaries) get a higher ceiling of 500 tokens — never higher. A text block >200 tokens outside the allow-list, or >500 tokens inside it, is a planning monologue, regardless of content or framing. - Forbidden announcement verbs. Text blocks (bundled or standalone) starting with
Building,Composing,Writing,Drafting,Generating,Now I'll,Next:,Next step:,Approach:,Strategy:,Plan:,Caveman push:,Big single Write:,Let me, or any other narration of the imminent tool call are FORBIDDEN regardless of length. The tool_use input shows what is being built — restating it in prose is pure cost. If the agent feels the urge to writeComposing Phase 2 caseplan.json — trigger + 64 variables + 10 stages + 6 edges, it must instead invoke the Write directly with that content as the file body. - Allow-listed exceptions (may stand alone, capped at 500 tokens): hard-stop AskUserQuestion preambles, final completion reports (Phase 5/6 exit), Phase 2
Publish for reviewDesignerUrl print (Rule 11), and post-validate result summaries (N errors, M warnings — fixing Xis fine;Composing fix for ...is not). Everything else bundles or omits.
- HARD TOKEN CAP on any single text block: 200 tokens, no exceptions outside the allow-list below. Allow-listed text blocks (hard-stop AskUserQuestion preambles, Phase 5/6 completion reports,
- One task per lane — except parallel members of a
runs-sequentiallygroup. Default: each task ownlaneindex instageNode.data.tasks[laneIndex][], lane is FE layout only. Exception: tasks sharing aruns-sequentiallytask-entry condition that are meant to run in parallel share the same lane (shared lane = parallel siblings inside the sequential group, carries execution semantics). Solo runs-sequentially tasks still get their own lane. - Do NOT edit
content/*.bpmn. Auto-generated, will be overwritten. Editcontent/*.jsononly. - Do NOT fabricate expression syntax for conditional SLA rules. Describe condition in natural language; execution phase determines exact form.
- Do NOT invoke other skills automatically. If case needs process/agent/action that doesn’t exist, emit placeholder task (Rule 8) and list missing resources in completion report. On-demand resource creation is future milestone.
Trouble? Use
/uipath-feedbackto send report.