UiPath Activity Migrator — migrate Windows-Legacy RPA projects (targetFramework: Legacy, classic ui: activities) to the Windows framework and rewrite UiPath's own classic activities into their…
Install the "uipath-activity-migrator" agent skill from https://github.com/UiPath/skills/tree/main/skills/uipath-activity-migrator into .claude/skills/uipath-activity-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uipath-activity-migrator", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add UiPath/skills --skill uipath-activity-migrator -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "uipath-activity-migrator" agent skill from https://github.com/UiPath/skills/tree/main/skills/uipath-activity-migrator into .agents/skills/uipath-activity-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uipath-activity-migrator", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add UiPath/skills --skill uipath-activity-migrator -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "uipath-activity-migrator" agent skill from https://github.com/UiPath/skills/tree/main/skills/uipath-activity-migrator into .cursor/skills/uipath-activity-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uipath-activity-migrator", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add UiPath/skills --skill uipath-activity-migrator -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "uipath-activity-migrator" agent skill from https://github.com/UiPath/skills/tree/main/skills/uipath-activity-migrator into .gemini/skills/uipath-activity-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uipath-activity-migrator", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add UiPath/skills --skill uipath-activity-migrator -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "uipath-activity-migrator" agent skill from https://github.com/UiPath/skills/tree/main/skills/uipath-activity-migrator into .github/skills/uipath-activity-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uipath-activity-migrator", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add UiPath/skills --skill uipath-activity-migrator -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "uipath-activity-migrator" agent skill from https://github.com/UiPath/skills/tree/main/skills/uipath-activity-migrator into .opencode/skills/uipath-activity-migrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uipath-activity-migrator", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
uipath-activity-migrator
GitHub stars
167
Token cost
~8.5k tokens
SKILL.md length
4,193 words
Files
14 (incl. scripts, references)
Skills in repo
28
Repo updated
First seen
Licence
MIT
At a glance
UiPath Activity Migrator — migrate Windows-Legacy RPA projects (targetFramework: Legacy, classic ui: activities) to the Windows framework and rewrite UiPath's own classic activities into their…
Works in 7 steps: Preflight and acquire the tool → Discover the project → Resolve the target package line → …
Tasks that involve Workflow automation
SKILL.md covers When to Use This Skill, Critical Rules, Workflow and Package Routing, plus 2 more sections
Runs JavaScript scripts from its folder; calls node and git
What it does
Uipath Activity Migrator is an agent skill from UiPath/skills. UiPath Activity Migrator — migrate Windows-Legacy RPA projects (targetFramework: Legacy, classic ui: activities) to the Windows framework and rewrite UiPath's own classic activities into their modern UiPath counterparts with the standalone UiPath.Upgrade.exe. Windows only. Third-party or custom packages are not rewritten, only version-moved. Acquires the tool, resolves the target UIAutomation line, runs analyze then upgrade into a sibling folder, verifies with uip rpa build, triages the SARIF. Classic UI…
Its SKILL.md is about 8.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 16 other files, including scripts and reference files (for example `references/acquisition-guide.md`, `references/build-verification-guide.md` and `references/packages/gsuite-guide.md`).
It sits in Productivity & Automation, covering Workflow automation, Mobile testing and debugging and Cloud office suites. It works with Google Workspace and Microsoft 365. The repository describes itself as: This is a repository of skills for interfacing UiPath capabilities to external developers. The licence is MIT.
When your agent uses it
Tasks that involve Workflow automation
Tasks that involve Mobile testing and debugging
Tasks that involve Cloud office suites
Example prompts
“/uipath-activity-migrator”
Requirements
Node.js
Workflow steps
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 0bada1b. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Ships 3 files in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
node
git
From the folder's file list and the shell code blocks in SKILL.md.
Network
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Uipath Activity Migrator loads about 8.5k tokens when it runs, and up to ~32k if it reads all its reference files. Until then it costs about 256 tokens; SKILL.md has 4,193 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~256
When it runs· the whole SKILL.md, loaded when a task matches
~8.5k
With references· SKILL.md plus every file in references/, read only if the agent opens them
~32k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
Download SKILL.mdSave it as .claude/skills/uipath-activity-migrator/SKILL.md (or your agent's skills folder). This skill also uses 13 other files; get the full folder from GitHub.
name
uipath-activity-migrator
description
UiPath Activity Migrator — migrate Windows-Legacy RPA projects (`targetFramework: Legacy`, classic `ui:` activities) to the Windows framework and rewrite UiPath's own classic activities into their modern UiPath counterparts with the standalone `UiPath.Upgrade.exe`. Windows only. Third-party or custom packages are not rewritten, only version-moved. Acquires the tool, resolves the target UIAutomation line, runs analyze then upgrade into a sibling folder, verifies with `uip rpa build`, triages the SARIF. Classic UI Automation→modern UIA, Outlook classic→Microsoft 365, GSuite classic→modern, Microsoft.Activities.Extensions→Invoke Code. Also the post-migration fix for migrated projects whose expression-selector targets fail or silently report not-found. Authoring or editing Legacy `.xaml`→uipath-rpa. Migration-readiness review without running the tool→uipath-review. Post-migration failures with neither marker nor annotation→uipath-troubleshoot. Maestro `instance migrate`→the Maestro skills.
when_to_use
User says 'migrate activities', 'migrate UiPath activities', 'classic UiPath activities to modern', 'migrate this project', 'upgrade from Windows-Legacy'…
UiPath Activity Migrator
Drive the standalone Activity Migrator (UiPath.Upgrade.exe) end to end: acquire, analyze, upgrade, verify, report. The tool converts a Windows-Legacy project to the Windows framework and rewrites UiPath's classic activities into their modern UiPath equivalents; third-party and custom packages are only moved to a Windows-compatible version by restore, never rewritten. It runs without Studio. It requires Windows and the .NET Desktop Runtime 8.
<!--skill-flavor:host-availability-extra:start-->
<!--skill-flavor:host-availability-extra:end-->
Read referenced files in full. This SKILL.md is a router. Before running analyze, open and read the whole package guide for every classic package the project uses (see Package Routing). Package guides add flags, config files, triage rules, and post-migration steps that the core workflow does not know.
<SKILL_DIR> below is the folder that contains this SKILL.md. <PROJECT_DIR> is the absolute path of the folder holding project.json. <OUTPUT_DIR> is the migrated copy, a sibling folder, <PROJECT_DIR>_Upgraded by default, always as an absolute path: uip rpa rejects relative ones.
When to Use This Skill
User wants to migrate, upgrade, convert, or modernize a Windows-Legacy project or its classic UiPath activities
User wants classic UiPath UI Automation activities rewritten as their modern counterparts
User wants to run the Activity Migrator or mentions UiPath.Upgrade.exe
User wants a migration dry run or migration report produced by the tool (analyze)
User wants classic Outlook mail, classic GSuite, or Microsoft.Activities.Extensions activities migrated
User wants a post-migration fix: an already-migrated project whose expression-selector targets fail at runtime or silently report not-found, or one carrying [PostMigration Action Required] annotations. The skill owns such a failure while the failing target or an enclosing construct carries one of three signals: the .ToStringWithDelimiter() marker, a [PostMigration Action Required] line, or a by uipath-activity-migrator line (Rule 12). Otherwise the failure belongs to uipath-troubleshoot
Do not use for: authoring or editing Legacy workflows (uipath-rpa, Legacy mode), a readiness review that does not run the tool (uipath-review), diagnosing a runtime failure of an already-migrated project whose failing construct carries none of the three signals above (uipath-troubleshoot), uip solution deploy upgrade, or Maestro instance migrate.
Critical Rules
Windows only. Check the OS before anything else. On macOS or Linux, stop and tell the user to run the migration from a Windows machine that holds the project. The tool is a .NET 8 desktop process and cannot run elsewhere.
Never run the tool in console mode. Always pass --output-format sarif and redirect stdout to a file. Console mode opens an HTML report in the browser and prints no machine-readable result.
Never trust the exit code. The tool exits 0 whether the migration succeeded, partially succeeded, or failed. Status comes only from the SARIF results, classified per sarif-triage-guide.md.
Analyze before upgrade, every time. Run analyze, triage it, and only then run upgrade. When the analyze triage shows no stop condition, proceed to upgrade without asking, unless the user asked only for an analysis, a report or a plan: then stop after the triage, present the findings with the proposed treatment of each needs-attention item, and run upgrade only on the user's go. Any request whose deliverable is information rather than a migrated project counts as that: analysis, report, plan, dry run, "can this be migrated", "what would change"; when the wording leaves it open, ask one yes/no before upgrade. Rule 13 governs a treatment the user chooses there. One exception: a Step 4 rerun that the build guide or a package guide prescribes with an added flag reuses the Step 3 analyze; it counts as one build-fix iteration (Rule 10), and the skill deletes the <OUTPUT_DIR> it created in this session without asking.
Never write into the source project.upgrade writes to a fresh sibling folder. Never point --output-path at <PROJECT_DIR>, never copy the output back over the source, never delete the source, and never edit a file in it, project.json included. This holds for every source project the task touches, including a library's source project. Two folders inside the source are the only exception: .upgrade/, which holds the tool's reports and the logs, summaries and config files this skill's steps write there, and .local/, the tool's restore cache.
Never pass secrets through the agent. Do not type --orchestrator-pat or --orchestrator-application-secret values yourself. When a tenant feed is required, rely on the tool's fallback to the local Studio or Robot connection; if that fails, hand the user the complete command with <PLACEHOLDER> values to run themselves.
Resolve the target UIAutomation package line explicitly. When the project uses UiPath.UIAutomation.Activities, resolve the latest stable patch of a release line per Step 2 and pass it as --uia-package-version=<UIA_VERSION>. Extension options bind only in the --name=value form; the space-separated form parses without error and is silently ignored. Accept the tool default only when the feed is unreachable, and say so in the report. The target version is settled before the migration runs; the skill never edits package versions on the output afterwards to reach it.
Verify with the modern CLI. Migration is not done until uip rpa build passes on <OUTPUT_DIR>, or the remaining errors are reported as needs-attention items after the bounded fix loop in build-verification-guide.md. Every uip rpa command this skill runs unsets UIPATH_STUDIO_PID in the syntax of the shell that runs it: in bash, the Bash tool on Windows included, prefix env -u UIPATH_STUDIO_PID; in PowerShell, put $env:UIPATH_STUDIO_PID = $null; in the same command, before uip, which removes it; a separate tool call starts a new process and loses the assignment. The PowerShell form does not unset the variable in bash, the bash prefix fails in PowerShell, and setting the variable to an empty string does not unset it. A brief to a subagent passes this rule on together with the commands, so the subagent writes the form for its own shell. Dropping it is never an acceptable translation. runtime-verification-guide.md says why.
Libraries first. When analyze reports RESTORE-CUSTOM-LIBRARY-MIGRATION-REQUIRED, stop. Tell the user to migrate and publish that library to the feed before migrating this project. The tool cannot order dependencies.
Bounded loops. At most 3 build-fix iterations in Step 5. Then report what remains.
Never run the migrated project unasked. The runtime check of Step 6 runs only after the user answers yes to its one question. An earlier explicit request to run the migrated project, given in the same task, counts as that yes, and the question is then not asked. Every fix and every rerun after it happens only through the runtime guide's fix and rerun loop, each behind one yes/no; outside that loop the check only observes. It runs in the headless Studio, never in the Studio the user has open (Rule 8).
Mark every edit. Every construct the skill edits or adds outside the tool, in the post-migration fix guide, the build loop, the runtime loop, a plan treatment or an edit delegated to the RPA authoring skill, carries the annotation line Remediated by uipath-activity-migrator on <YYYY-MM-DD>: <what changed>. It replaces the matching [PostMigration Action Required] line when there is one and is added as a new annotation otherwise. Write it as part of the edit itself, so an undone fix loses it with the backup restore and a standing fix keeps it whatever happens next. One exception: a construct whose only edit is the fix guide's rewrite of an annotation line to Verified healthy by uipath-activity-migrator carries that line as its mark and gets no Remediated line. A later failure at a construct carrying either line is this skill's to diagnose.
Plan-mode treatments. When the user asked for a plan (Rule 4), the treatment their go names is the edit, even when it differs from the one proposed. A proposal leaves open any name only a run can reveal, such as the exception an activity actually throws ("retype the Catch to the exception the run reports"); it never guesses one. Step 5a applies the chosen treatment.
Workflow
Fix-only entry. When the user asks to fix or scan a project that was already migrated, or reports a UI failure in one, none of the steps below apply. First settle ownership: grep the project's XAML for the three signals, ToStringWithDelimiter, PostMigration Action Required and by uipath-activity-migrator. When the failing construct and its ancestors carry none, or for a project-wide request no file carries any, hand the failure to uipath-troubleshoot together with that result: do not build, do not run. Otherwise run uia-post-migration-fix-guide.md with that project as <MIGRATED_DIR>, then build it with the build and fix loop in build-verification-guide.md, offer the runtime check per runtime-verification-guide.md with <MIGRATED_DIR> as its <OUTPUT_DIR>, and report once, at the end, in the shape given by the fix guide's Output section. Do not resolve a package version, do not run package-guide hooks, and do not use the Step 6 template: nothing was analyzed or upgraded.
Step 0 — Preflight and acquire the tool
Run the acquisition script with node, which Steps 2 to 4 already use for their scripts; the same command works in bash and in PowerShell. It executes no PowerShell or shell script file, so script execution policies and hosts that gate a script invocation do not apply. The script locates a cached tool, downloads and extracts it when missing, checks the .NET Desktop Runtime 8, and prints one JSON object on its last stdout line. Any run can download the archive, a first install or an update, a few hundred MB: give the command at least 10 minutes, not the host's default timeout. Every other shell command in this skill assumes Git Bash, which the Bash tool uses on Windows: the redirections and the grep pipelines are not translated, and the only PowerShell alternative given is Rule 8's variable.
bash
node "<SKILL_DIR>/scripts/ensure-migrator.mjs"
status
Action
ok
Record exe as <MIGRATOR_EXE> and version. Continue.
error, code: not-windows
Rule 1. Stop.
error, code: runtime-missing
Relay the script's message; it names the fix. Stop.
Put that assignment, as is, at the start of this script's command and of every "<MIGRATOR_EXE>" command from here on, then rerun the script. In PowerShell write it as $env:<NAME> = '<value>'; in the same command. Never drop or alter the assignment.
any other error
Show message. Stop.
Then read the flag list of this build once. It is the only authority on which flags exist.
bash
"<MIGRATOR_EXE>" analyze --help
Keep the output for Steps 3 and 4. For this run, the flags in that output are the only flags that exist: a guide-named flag is passed only when it appears there, and its absence is not a finding, not a note, and not a report item. A flag the help lists but no guide names may be used only when its help text directly addresses a problem this run has shown (a specific SARIF result or build error); pass it as --name=value and say so in the report. Never one that changes what migrates or which extensions run; those are passed only on the user's request. Behavior the help does not state (option binding, exit code, output streams, folders) is in tool-behavior-guide.md.
Summarize to the user in one line: tool version and location.
Step 1 — Discover the project
Resolve <PROJECT_DIR>: the folder containing project.json. If several exist under the working directory, ask which one, unless the user named it. For "migrate everything in this repo", see tool-behavior-guide.md § bulk.
Read project.json and record: targetFramework, expressionLanguage, dependencies. Legacy (or absent) is the primary case. Windows projects still qualify when they hold classic activities; tell the user the framework step will be a no-op.
Match dependencies against the Package Routing table. Read every matching package guide in full now.
Pick <OUTPUT_DIR>: the user's choice, else <PROJECT_DIR>_Upgraded. If it already exists, ask whether to delete it or use a different name. Never reuse it silently: the tool merges into an existing folder.
If the project is under git, run git status --short in it and mention uncommitted changes in the report. Do not commit or stash. The tool's .upgrade/ and .local/ folders will show as untracked afterwards; say so.
If the user named a line or version ("migrate to 26.10", "use 25.10.40"), resolve that and skip the question. A version below the minimum in uia-guide.md § Version gates cannot be used: say so, name the minimum, and ask for another; the tool enforces the same minimum in Step 3.
Otherwise resolve the candidate lines from the official UiPath NuGet feed. The script needs no project and no login. Do not use uip rpa packages versions here: the headless Studio host it starts refuses to open Legacy projects.
Output: the two most recent LTS lines (<year>.10) with their highest stable patch; the newest is recommended.
Ask once with AskUserQuestion: newest line first, labeled (Recommended), each option showing <line>.x → <version>. Say once that a package version runs only on Studio and robots at or above the minimum its release notes list, so the older line is the safe pick when the fleet is behind. The project's studioVersion field is not a signal: it records the Studio that last saved the Legacy project. If the user defers the choice, take the recommended line.
If the script prints error (feed unreachable), pass no version and let the tool pin its built-in default: do not ask. Step 3 sets <UIA_VERSION> from the version the tool reports, and the report line carries the suffix "(tool default, feed unreachable)".
Record the chosen version as <UIA_VERSION>.
Step 3 — Analyze
Assemble <PACKAGE_FLAGS> from every package guide read in Step 1 (Hook 1 sections). Then:
Omit --uia-package-version when the project has no UIAutomation dependency or when Step 2 fell back to the tool default; never pass the flag with an empty value. The summarizer prints a short summary (status, counts, blockers, a Reason: line for a failed without blockers or an unknown, step failures, what needs attention grouped by reason and by file) and writes the full per-item report to the --out file. Show the user the short summary as is.
Read the UiPath.UIAutomation.Activities entry on the summarizer's Packages: line. Its to value, the version after → or the one marked (unchanged), is what <OUTPUT_DIR>/project.json will hold. Decide by what the entry says, first matching row wins:
Packages: entry
Meaning
Action
to equals <UIA_VERSION>
The flag bound
Continue
Step 2 fell back, no flag was passed
Tool default
Set <UIA_VERSION> to the to value now; the report line carries "(tool default, feed unreachable)"
(requested <UIA_VERSION>, raised to the tool minimum <Y>)
The tool refused the version and used its minimum
Tell the user <UIA_VERSION> cannot be used and <Y> is the lowest possible; ask whether to migrate to <Y> or abort. On yes, <UIA_VERSION> is <Y> from here on; the analyze results already describe that version, so no rerun is needed. Never compensate by editing package versions on the output afterwards
<Y> (unchanged) with <Y> above <UIA_VERSION>
The project already holds a newer version; the tool keeps it
Set <UIA_VERSION> to <Y> and say so in the report
to differs from <UIA_VERSION> and nothing above applies
The flag did not bind, almost always the space-separated form (--uia-package-version 25.10.39), which the tool accepts and ignores
Fix the command to the = form and rerun analyze
Then apply the stop conditions:
Analyze outcome
Action
No stop condition
Continue to Step 4 without asking. When the user asked only for an analysis, a report or a plan (Rule 4), stop here instead: present the summary with the proposed treatment of each needs-attention item, and continue to Step 4 only on the user's go. A treatment the user chose there that edits the output follows Rule 13 and Step 5a.
Stop. Explain which package, offer the Orchestrator-feed command with placeholders (Rule 6) or --ignore-missing-dependencies with its consequences. Rerun analyze after the user acts.
RESTORE-CUSTOM-LIBRARY-MIGRATION-REQUIRED
Rule 9. Stop.
Package guide stop condition
Follow the guide.
Summarizer exits 2 (cannot parse, no .sarif files)
The tool wrote no log: it died or rejected the command line. Read <PROJECT_DIR>/.upgrade/analyze-latest.err and the exit code, fix the cause, rerun analyze. A crash is not yours to fix: stop and report it with the .err content.
status: failed or status: unknown for any other reason
Stop. Show the blockers or the Reason: line and the .upgrade log path. Never continue to Step 4.
Show full SKILL.md (1,447 more words)Show less
Step 4 — Upgrade
Same flags as the analyze run, plus the output path:
Confirm <OUTPUT_DIR>/project.json exists and its targetFramework is Windows. If the summarizer cannot parse the log or the status is failed or unknown, report and stop: <OUTPUT_DIR> may be partially written, so delete or rename it before any rerun (Step 1 item 4). Do not retry with different flags unless a package guide says so.
Build passes: continue. Build fails: validate the offending files, fix per the guide's rules, rebuild, at most 3 iterations (Rule 10). Package guides list build errors that call for a rerun of Step 4 with an extra flag rather than a hand fix. If uip is unavailable, skip verification and say so prominently in the report.
Step 5a — Apply a plan-chosen treatment
Only when Rule 13 applies; otherwise continue to Step 6.
Back the file up as edit 1 under <PROJECT_DIR>/.upgrade/runtime-fixes/1/, make the edit, then validate and build with that loop's step 3 commands. The edit does not count toward the loop's limit of 3 fixes.
Nothing runs here, even when the user already asked for a run: the run happens in Step 6, where that earlier request counts as its yes (Rule 11).
The edit carries its Remediated line as Rule 12 says, written with the edit itself, never after validate and build pass. The line records the change made; the run in Step 6 is what verifies it.
Report the edit under Fixes applied with the source requested.
Step 6 — Post-migration and report
Run every matching package guide's Hook 3 section (annotations, delegated fix skills, manual follow-ups).
Offer the runtime check when the conditions in runtime-verification-guide.md hold: one yes/no question, default no, no time limit proposed. On yes, run it as the guide says, attribute a failure with its table, offer the guide's fix and rerun loop for a migration-related failure, and fill the Runtime check block below.
Report once, at the end: after the runtime check's question was answered and any run and its fix loop ended. Report only what the reader must act on or decide, under these rules:
Success is one line with counts. Detail exists only for what needs attention, grouped, never one line per activity.
<L> is the summarizer's left-classic count. Activities the tool left classic are not defects: they compile and run as classic, so they are the <L> count on the status line and entries in the full list, never lines. No left-classic activity is named anywhere in the report: not as a Needs attention item, not in a Next steps line, not in a sentence after the last block that lists or explains them. The full list the status line points to is where the reader finds them.
<M> is built in this order:
Start from the summarizer's needs-attention items.
Remove each item whose report key matches a finding the fix guide reported as fixed or healthy. The report key is the file plus the DisplayName the tool reported, which for a generated card is the wrapped child, never the card. One item per finding, never per annotation line rewritten. A finding that matches no item removes nothing; a fixed one still appears under Fixes applied, a healthy one appears nowhere.
Add every item a package guide's Hook 3 left open and every build error the Step 5 loop left unfixed.
Add every defect introduced by the skill's own edit that is still open.
<M> is never below zero. The by-reason and by-file lines are derived from the remaining items only.
<status> is the summarizer's, copied as printed. One promotion exists: partial becomes success only when <L> = 0 and <M> = 0 after rule 3, both at once. When <L> > 0 the status stays partial whatever <M> is: an activity left classic is not a defect, but it is not migrated either, and success would claim it is. failed and unknown are never promoted.
Report only what the tool reported or the build showed: no speculation about how migrated activities will behave at runtime, no description of the migration mechanics, no table of what changed. Name a specific replacement activity only when the tool's message names one. Do not list constructions that were checked and left alone, and do not restate that edited files validated; the build result covers it.
The report is these blocks and nothing else: no sentences before, between or after them. A lead-in line before the heading and a closing paragraph after the last block are padding, whatever they explain. Shape:
markdown
## Migration result: <status>
<N> activities migrated, <L> left classic, <M> need attention, build <passed|failed|not verified>. Output: <OUTPUT_DIR>. UIAutomation <from> → <UIA_VERSION>. <- append " (tool default, feed unreachable)" after the version when Step 2 fell back
Full list: <PROJECT_DIR>/.upgrade/upgrade-latest.md · Tool report: <PROJECT_DIR>/.upgrade/<name>-<id>.html <- only when L + M > 0; left-classic activities still run as classic and are listed there
### Needs attention (<M>) <- only when M > 0
- By reason: <reason> ×<n>, <reason> ×<n>
- By file: <file> (<n>), <file> (<n>), … <k> more files
<items inline only when M ≤ 10: - <file>: <activity> — <what to do>>
### Fixes applied (<F>) <- only when the post-migration fix or the runtime loop edited the output
- <file>: <activity> — <what was changed> <- one line per fix, no sub-bullets; loop fixes end with (fix <n>, fix guide | annotation | hypothesis | requested)
- <k> annotations rewritten to Verified healthy (no structural change) <- one line, only when k > 0
### Runtime check <- only when the user said yes
<Passed in <duration> | Passed on run <n> after <k> <fix or fixes> | Failed at <file>: <activity> — <exception type>: <first line of message>, after <k> <fix or fixes>, <u> undone | Stopped at <last logged step> | Not started: <reason>> <- this line only; no workflow output
- <migration-related | not migration-related>: <why>. <what to do> <- only when failed
### Next steps <- these lines only; when the runtime check did not run, one more line saying what makes it possible
- Open <OUTPUT_DIR> with Studio 2024.10 or later and run the main workflow once in Debug. <- drop the Debug clause when the runtime check passed
- <package-specific runtime prerequisites, only when a package guide lists one>
Package Routing
Match project.json dependencies to guides; the dependency is the only routing key. Do not pre-scan XAML for classic activities: no pattern is exhaustive, and the analyze run reports every affected activity per file anyway. Every guide has three hook sections the workflow calls: Hook 1 (flags and config before analyze), Hook 2 (triage rules for that extension's SARIF results), Hook 3 (post-migration steps). Adding a package to this skill means adding one guide with those three sections and one row here.
Project depends on Microsoft.Activities.Extensions or Microsoft.Activities
scripts/ensure-migrator.mjs
Step 0
scripts/summarize-sarif.mjs
Steps 3 and 4. Node script, no dependencies
scripts/resolve-package-lines.mjs
Step 2 and package guides. Lists release lines of a package from the official feed; no project or login needed
Anti-patterns
Running UiPath.Upgrade.exe without --output-format sarif, or reading its exit code as a verdict
Running upgrade without an analyze triage first, or pointing --output-path at the source project
Pasting a PAT or client secret into a command line
Hand-converting classic activities in XAML instead of letting the tool do it, or "finishing" activities the tool left classic by rewriting them blind
Reworking or "improving" a selector that carries the .ToStringWithDelimiter() marker instead of running the post-migration fix procedure; the defect is structural and the rewrite destroys the variable binding
Accepting the tool's default UIAutomation version when the feed was reachable
Passing an extension option space-separated (--uia-package-version 25.10.39); only --uia-package-version=25.10.39 binds
Raising the UIAutomation package on the migrated output with uip rpa packages install to reach the requested line instead of fixing the flag or asking the user
Resolving package versions with uip rpa packages versions against a Legacy project; the headless Studio host cannot open it
Pre-scanning the XAML for classic activities (grep on <ui: prefixes) before or after analyze; the SARIF is the only complete inventory, and the ui: prefix also covers System and Excel activities
Skipping the package guides and passing no package flags for a project that uses Outlook classic or GSuite classic activities
Declaring success because upgrade finished, without uip rpa build on the output
Running the migrated project without the user's yes, or repairing and rerunning outside the runtime guide's fix and rerun loop; every fix and every rerun sits behind one yes/no. The runtime check's other anti-patterns are in runtime-verification-guide.md § Anti-patterns, read with that guide
Editing the SARIF summary by hand instead of rerunning the summarizer after a rerun
Padding the report with checks that found nothing, a classic-to-modern mapping table, or guesses about how the migrated activities will behave at runtime. Typical offenders: "both edited files validate with 0 errors", "left alone (valid cross-window probes)", "the project now mixes two package lines", "the framework step was a no-op", a closing paragraph that names the activities left classic and explains why they stayed classic
Uipath Activity Migrator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Uipath Activity Migrator compared with similar skills
Detect compromised O365 and Google Workspace email accounts by analyzing Unified Audit Logs and Azure AD sign-in logs for impossible travel, inbox rule creation/deletion (Set-InboxRule…
UiPath Coded Functions — deterministic Python or TypeScript/JavaScript units built with the uip function CLI (new -l py|ts|js, init, serve, run, pack, publish); the functions map in uipath.json…
TRIGGER for authoring UiPath Maestro Case plans as <Name.case.ts with the reference-mode TypeScript builder SDK (@uipath/maestro-builder-sdk/case), compiling to caseplan.json, and running the uip…
UiPath Activity Migrator — migrate Windows-Legacy RPA projects (targetFramework: Legacy, classic ui: activities) to the Windows framework and rewrite UiPath's own classic activities into their…. Uipath Activity Migrator is an agent skill from UiPath/skills.exe.
When should I use Uipath Activity Migrator?
Uipath Activity Migrator fits situations like: tasks that involve Workflow automation; tasks that involve Mobile testing and debugging; tasks that involve Cloud office suites.
How do I install Uipath Activity Migrator in Claude Code?
Run `npx skills add UiPath/skills --skill uipath-activity-migrator -a claude-code`. Or copy the skill folder (skills/uipath-activity-migrator in UiPath/skills) into .claude/skills/uipath-activity-migrator in your project. Claude Code loads it when a task matches its description.
How do I install Uipath Activity Migrator in Codex?
Run `npx skills add UiPath/skills --skill uipath-activity-migrator -a codex`. Or copy the skill folder (skills/uipath-activity-migrator in UiPath/skills) into .agents/skills/uipath-activity-migrator in your project. Codex loads it when a task matches its description.
Can I use Uipath Activity Migrator in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add UiPath/skills --skill uipath-activity-migrator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/uipath-activity-migrator, .gemini/skills/uipath-activity-migrator, .github/skills/uipath-activity-migrator and .opencode/skills/uipath-activity-migrator in your project.
What does Uipath Activity Migrator need to run?
Going by SKILL.md and its folder, Uipath Activity Migrator needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node and git). Our summary lists: Node.js.
Does Uipath Activity Migrator access the network?
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Is Uipath Activity Migrator safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
What licence does Uipath Activity Migrator use?
Uipath Activity Migrator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Uipath Activity Migrator use?
About 8.5k tokens (SKILL.md is roughly 34k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 24k tokens, read only when the agent opens those files.
What are the alternatives to Uipath Activity Migrator?
Skills that share tags, products or a category with Uipath Activity Migrator: Detecting Email Account Compromise (mukul975/Anthropic-Cybersecurity-Skills, 34k stars), Google Workspace (yc-software/qm, 15k stars), Gog (trpc-group/trpc-agent-go, 1.9k stars) and Google (letta-ai/lettabot, 327 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Uipath Activity Migrator?
UiPath (a GitHub organization) maintains it in UiPath/skills, which has 167 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 10, 2026.
Source: UiPath/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.