About uipath-solution
uipath-solution is a skill for managing the UiPath Solution lifecycle with the `uip solution` CLI, from project setup through packaging, publishing, and deployment. It also covers refreshing resources, uploading to Studio Web, and promoting packages across environments.
Key features
- 01Initializes solutions and manages projects
- 02Refreshes solution resources
- 03Packs and publishes `.uipx` packages
- 04Runs and manages deployments
- 05Supports Studio Web upload and environment promotion
Use cases
- 01Create a solution and add automation projects
- 02Package and publish a solution for deployment
- 03Promote a package across dev, staging, and production
- 04Upload a solution to Studio Web for debugging
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ uipath/ skills --skill uipath-solutionAfter installing, type/uipath-solutionin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/activate-and-manage.mddevelop-solution.mdpack-and-deploy.mdscenarios.mdsolution-overview.mdreferences/scenarios/failure-modes.mdintra-solution-references.mdmanual-edits.mdsame-name-across-folders.mdshared-cloud-resource.mdvirtual-resource.mdDetails
From the project READMEUiPath Solution — uip solution lifecycle
Create, pack, publish, deploy, and manage UiPath Solution packages (.uipx) via the uip solution CLI surface. A Solution bundles multiple automation projects (processes, tests, agent projects, API workflows) into a single deployable unit. A library is not one of them — it is published on its own and at most declared as a Library resource (Develop a Solution § Step 2).
Use the CLI. Don't roll your own REST for solution ops. Hand-rolling HTTP calls misses the
X-UIPATH-OrganizationUnitIdfolder header, OData filter shape, pagination envelope,pipelinesInstalldeploy semantics, retry behavior, and theResult/Code/Dataoutput contract. The CLI is the source of truth.
Platform support. Solutions runs on Automation Cloud and on self-hosted Automation Suite from
2.2510.0onward; not on Standalone Orchestrator. Available project types vary by AS version (Maestro self-hosted only from2.2510.2). Compat matrix + project-type-by-version table → Solution Overview — Platform availability.
When to Use This Skill
- User has a
.uipxsolution and wants to pack / publish / deploy / activate / upload
- User wants to create a new solution (
uip solution init), add or remove projects, or refresh solution resources
- User wants to work on a solution that already exists in Studio Web, or move one to another org or tenant — start with
uip solution download(Start From an Existing Solution)
- User asks to set up a CI/CD pipeline that builds, publishes, and deploys a UiPath solution
- User mentions deploy configs, environment promotion, or activating a deployed solution
- A skill or main agent detected a
.uipxfile and redirected the user here
Skip this skill when:
- The task is PDD → SDD architecture/design (sdd.md / pdd.md) — load
uipath-planner. - The deployable is a single non-solution package (e.g., a one-off RPA library or coded app) — those use
uip rpa publish/uip codedapp publishand route throughuipath-platformor the relevant specialist. - The task is non-solution Orchestrator work (folders, jobs, assets, queues, IS connections) — load
uipath-platform.
CLI Surface Probe
Before the first uip solution … command in a session, probe the solution surface to detect pre- vs post-rename CLI:
uip solution init --help --output json
- Result
Success→ post-rename CLI (default). Use the commands and flags as documented in the references. unknown command/ non-zero exit → pre-rename CLI. Translate via the table below before each call. Re-probe on any laterunknown commanderror.
command not found/uip: not found/'uip' is not recognized→ CLI not installed. Tell the user to run the official installer (curl -fsSL https://download.uipath.com/uipath-cli/install.sh | bashon macOS/Linux;irm https://download.uipath.com/uipath-cli/install.ps1 | iexin Windows PowerShell), thenuip login, and abort the work until those succeed.
| Post-rename (default) | Pre-rename equivalent |
|---|---|
uip solution init <NAME> | uip solution new <NAME> |
uip solution deploy run --parent-folder-path <PATH> | uip solution deploy run --folder-path <PATH> |
uip solution deploy run --parent-folder-key <KEY> | uip solution deploy run --folder-key <KEY> |
uip solution projects <VERB> | uip solution project <VERB> (singular still works post-rename, but is hidden and deprecated) |
uip solution resources <VERB> | uip solution resource <VERB> |
uip solution projects import <PATH> | uip solution project import --source <PATH> |
All other solution subcommands (pack, publish, deploy activate/status/uninstall, upload, resources …, projects add/remove/list) are unchanged on both surfaces.
Critical Rules
- Probe the CLI surface before the first
uip solutioncommand in a session. Runuip solution init --help --output json.Success= post-rename CLI (default);unknown command= pre-rename CLI — translate via the fallback table above. Re-probe on any laterunknown commanderror.
- Always use
--output jsonforuip solutioncommands whose output you parse. JSON is compact and stable; the default for non-interactive runs. - Use the CLI, never roll your own REST for solution operations. Hand-rolled HTTP calls miss the
X-UIPATH-OrganizationUnitIdheader, OData filter shape, pagination envelope, andpipelinesInstalldeploy semantics. Only fall through to REST after confirming nouip solutioncommand covers the task. - Never hand-edit
resources/solution_folder/. It's auto-generated byuip solution projects add/importand auto-cleaned byprojects remove. Manual edits desync from.uipxand produce silent failure modes. See scenarios/manual-edits.md. .uipxandresources/solution_folder/must always agree on the project set. Diffing them is the fastest way to detect corrupted state. If they disagree, fix viauip solution projects add/remove— never by editing either side directly.- Run
uip solution resources refreshbeforepackorupload. Bundled artefact files anduserProfile/<userId>/debug_overwrites.jsonmust reflect current cloud state. Skipping refresh ships stale bindings. - AppV2 coded apps register in
.uipxwhen authored inside a solution.uip codedapp initis the solution-side scaffolding entry point — run it from inside a.uipxsolution. It writesproject.uiproj(ProjectType: "AppV2") +webAppManifest.json, nests source undersource/dist/, and auto-registers asType: "AppV2"— emittingresources/solution_folder/app/{Coded,CodedAction}/.uip solution projects add/uip solution projects importcover existing AppV2 folders too — both readwebAppManifest.config.isActionAppto pickCoded/CodedActionsubType (defaultsCodedfor legacy folders with no manifest).uip solution packbundles them;uip solution deploy runprovisions them. Standalone coded apps are a different lifecycle — scaffold them withnpx create-vite@latest(notuip codedapp init), keep a flatdist/at the project root, and deploy viauip codedapp pack→uip codedapp publish→uip codedapp deploy. See /uipath:uipath-coded-apps. - Verify the artifact after every CLI mutation. Read
project.json,.uipx, oruip solution deploy statusoutput — exit codes lie. Verification is additional; it does not replace requested read-only list commands. If the user asks to show or list registered projects, solution resources, packages, deployments, or statuses, run the matchinguip solution ... list/status --output jsoncommand and then inspect files only as a secondary sanity check. - A deployment in
Draftis a failed deploy, not a pending one. Validation rejected a resource and the install never completed; it never advances on its own and cannot be activated. Read the reasons —Validation:/Conflicts:land in the failure'sInstructionson every feed, since each deploy waits for its run — fix them withdeploy config set/link, and rerundeploy run --config-file <file>with the same--nameand--package-version. While the draft exists it owns the deployment: any other version is refused,deploy upgradeincluded, until the draft is finished that way or discarded (deploy upgrade <draft-key> --discard-draft, or Delete draft in Orchestrator). To look at it, rundeploy listwith the same feed flag, which is tenant-scoped without one and shows no Personal Workspace or folder-feed row at all. See A deploy that stops inDraft. - Replacing an installed resource with a link needs explicit consent. When a
deploy runconfig file (deploy config link) or the new version in adeploy upgradelinks a resource the deployment already installed, the server deletes the installed copy and its data. Newer servers ask first, and newer CLI builds then stop withDeploying '<name>' will permanently delete … installed resource(s) replaced by links: <kind> '<name>', …(Upgrading …fordeploy upgrade;ErrorCode: invalid_argument, the resources also inData.PermanentDeletionResources). Nothing was installed and the attempt is kept as a pending draft. This is not a config error to fix: confirm only if the user wants those copies and their data gone, then re-run the same command with--acknowledge-permanent-deletion— ondeploy upgradenever with--discard-draft, which drops the very links being confirmed. To keep the copies instead,deploy config unlink <file> <resource>and re-run (deploy run), ordeploy upgrade <draft-key> --discard-draft(deploy upgrade).--yesis not this consent. See Replacing an installed resource with a link. - Never pass
--forcetodeploy uninstallon your own. It sendsforceUninstall: true, which abandons uncompleted jobs and permanently deletes installed resources that were replaced by links, with their data (it also stands in for--yes). When an uninstall fails withMessage"…this deployment has uncompleted jobs; --force uninstalls anyway" or "…permanently deletes these resources and their data: '', …" (Data.JobsNotInFinalState,Data.PermanentDeletionResources,Retry: RetryWillNotFix), show the user the cause and add--forceonly when they explicitly accept it. Never add it to get past "…errors that --force cannot get past" (Retry: RetryLater): resolve that in Orchestrator and re-run without--force. See When the uninstall is refused. - For multi-environment promotion, switch tenants with
uip login tenant set <tenant>and pass a per-environment deploy config via--config-file <path>. The same packed.uipxdeploys to dev/staging/prod — the environment differs by the target tenant and the config file (generated withdeploy config get, edited withconfig set/config link), not by a different package. There is no-c <CONFIG_KEY>flag.
Workflow
The typical lifecycle for a UiPath Solution:
1. init / project add → Create solution, register projects (.uipx + resources/solution_folder/)
2. resources refresh → Sync bundled artefacts and debug overwrites with cloud state
3. (optional) restore → Resolve NuGet deps in place (incl. authenticated Orchestrator feeds); login first
4. pack → Produce deployable .zip package
5. login → uip login (if not already authenticated)
6. publish → Upload packed solution to UiPath
7. deploy run → Promote to Orchestrator (auto-activates by default)
8. (optional) activate → Use --skip-activate on deploy, then activate explicitly
restoreis an optimization, not a requirement.packrestores dependencies internally, so a separaterestorestep is only useful when you want deps resolved up front — most often in CI (login → restore → pack) to fail fast on a missing feed before the heavier pack runs.restoretakes a<solutionPath>only (solution dir with a.uipx, or a.uisfile), resolves deps in place, and does not produce a package. It needs an authenticated session to reach private Orchestrator feeds, so runuip loginbefore it.
AppV2 coded apps in the solution flow through
uip solution, notuip codedappdirectly. When a coded-app project hasType: "AppV2"in.uipx,uip solution packbundles its.nupkganduip solution deploy runprovisions it in the deployment folder — no separateuip codedapp pack/publish/deploystep. Standalone coded apps (scaffolded outside any solution vianpx create-vite, flatdist/at the project root, noproject.uiproj/webAppManifest.json) use the directcodedapppath instead. Seeuipath-coded-appsfor the standalone lifecycle and for authoring an AppV2 project inside a solution viauip codedapp init.
Two distinct distribution paths from the same source:
pack→publish→deploy run— promotes a versioned package to Orchestrator.upload— pushes the solution to Studio Web for browser-based debugging only. Does not produce a published package and cannot be deployed viadeploy run.
Authentication is a prerequisite. Check uip login status --output json before any work; if not logged in, ask the user to run uip login (interactive browser flow). See uipath-platform for full auth options (interactive OAuth, client credentials, tenant switching).
This skill is the terminal step of an SDD-driven build: after uipath-planner produces the SDD and derives the task list, and implementation specialists build the projects, the .uipx is packed and shipped here.
Start From an Existing Solution
When the solution already exists in Studio Web, download its source instead of recreating it:
uip solution download <solution-id> --destination <dir> --extract --output json
<solution-id>is the Studio Web solution GUID. Ask the user for it when they have not given it.- Work inside
Data.ExtractedTo. It holds the.uipxand the project folders. Read theAGENTS.md/CLAUDE.mdthere first;--extractadds them when the archive has none. Extract into a new or empty folder:--extractwrites over existing files, so re-running it on a copy you have edited loses those edits. Confirm with the user first. - The extracted
.uipxkeeps the Studio WebSolutionId, anduip solution uploadoverwrites the solution that has that id in the org you are logged into, or imports a new one when there is none (Develop a Solution § upload). To move the solution to another org or tenant, log in there anduploadit, orpack→publish→deploy runthere.
Reference Navigation
| File | Purpose |
|---|---|
| Solution Overview | What a Solution is, .uipx manifest, file structure, lifecycle diagram, command tree |
| Develop a Solution | uip solution init / project add / import / remove / resources refresh / resources add / resources remove / resources edit; field-tested gotchas |
| Pack and Deploy | restore / pack / publish / deploy run / feeds list, targeting a non-tenant feed (--feed / --personal-workspace), deploy configs, CI/CD pipeline patterns |
| Activate and Manage | deploy activate / status / upgrade / uninstall / delete, in-place version upgrades, environment management |
| Scenarios Index | Failure modes and edge cases — manual edits, shared resources, virtual resources, name collisions |
Anti-patterns
- Hand-rolling REST calls for
pack,publish,deploy run, oractivate. Theuip solutionCLI handles auth, folder headers, pipeline semantics, and pagination correctly. Reach for REST only after confirming no command covers the task. - Editing
resources/solution_folder/directly. It is auto-generated and auto-cleaned. Manual edits desync from.uipx. Useuip solution projects add/removeinstead. - Skipping
uip solution resources refreshbeforepackorupload. Ships stale bindings and debug-overwrite state. - Running
uip codedapp pack/publish/deployon an AppV2 project that's already registered in.uipx. Once registered asType: "AppV2", the coded app is part of the solution —uip solution pack/uip solution publish/uip solution deploy runhandle it. Directuip codedapp publishbypasses the solution's deploy config (external client ID, routing name, action schema) and creates a duplicate registration. Useuip codedappdirectly only for standalone coded apps scaffolded withnpx create-vite(no.uipxin the tree, noproject.uiproj/webAppManifest.json). - Creating a new
.uipxper environment instead of using deploy configs. One packed solution promotes to dev/staging/prod via a per-environment--config-file(anduip login tenant setto target the tenant). Different.uipxfiles per environment defeats version tracking. - Using
uip solution upload(Studio Web) as a deployment path. Upload is for browser-based debugging only — it does not produce a published package and cannot be promoted viadeploy run. Usepack→publish→deploy runfor real deploys.uploadalso lands the solution in Studio Web's Cloud workspace tab — not the Local tab; SW's Local tab is a separate registration not addressable byuip solution. - Trusting exit codes alone after a mutation. Always read the artefact (
project.json,.uipx, deploy status) — a non-zero exit may indicate partial state and a zero exit can mask warnings.