From uipath
Scaffolds, builds, debugs, and deploys UiPath Coded Web Apps and Coded Action Apps using the uip CLI and @uipath/uipath-typescript SDK. Handles app.config.json, action-schema.json, and full publish/deploy pipeline.
How this skill is triggered — by the user, by Claude, or both
Slash command
/uipath:uipath-coded-appsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Build, debug, and deploy UiPath Coded Web Applications and Coded Action Apps using the `uip codedapp` CLI and `@uipath/uipath-typescript` SDK.
assets/templates/action-app-template.mdassets/templates/action-app/app-template.cssassets/templates/action-app/document-tab-template.cssassets/templates/action-app/form-template.cssassets/templates/action-app/index-template.cssassets/templates/web-app-template.mdreferences/commands-reference.mdreferences/create-action-app.mdreferences/create-web-app.mdreferences/debug.mdreferences/file-sync.mdreferences/oauth-client-setup.mdreferences/oauth-scopes.mdreferences/pack-publish-deploy.mdreferences/patterns.mdreferences/sdk/action-center.mdreferences/sdk/conversational-agent.mdreferences/sdk/data-fabric.mdreferences/sdk/feedback.mdreferences/sdk/imports.mdBuild, debug, and deploy UiPath Coded Web Applications and Coded Action Apps using the uip codedapp CLI and @uipath/uipath-typescript SDK.
uip codedapp commands, .uipath/ directory, app.config.json, or action-schema.json@uipath/uipath-typescript SDK from a coded app| Type | Description | Key Difference |
|---|---|---|
| Coded Web App | React/Vue/other frontend hosted on UiPath CDN | User-facing app accessed via a URL |
| Coded Action App | React form wired to UiPath Action Center | Rendered inside human task reviews in Maestro/Agent workflows |
Coded apps are not registered in
.uipxsolutions. They have noproject.uiproj/project.json, souip solution project adddoes not apply. A coded app can live alongside a solution directory but deploys independently viauip codedapp publish(anduip codedapp deploy), not viauip solution pack/publish/deploy.
uip login status --output json before any cloud command. If not logged in, run uip login.npm run build after scaffolding (to verify the scaffold compiles) and again before pack or push (to produce the deployable dist/). Verify dist/ exists each time.-t Action on publish. Run uip codedapp publish -t Action (not the default Web type).uip login and supported uip codedapp commands; the CLI manages authentication.https://api.uipath.com not https://cloud.uipath.com. See the table below.vite.config.ts must always set base: './'. The platform handles URL routing — apps must use relative asset paths. Do not use a routing name or a sub-path here.getAppBase() from @uipath/uipath-typescript for any absolute URL constructed at runtime — router basename, image src, fetch paths. Deployed apps mount at a non-root prefix; /-rooted paths work locally but 404 after deploy. Vite's base: './' only fixes import-time references.uip codedapp deploy must run non-interactively. Pass the folder key as --folder-key <GUID> (or as UIPATH_FOLDER_KEY=<GUID> env-var prefix — either works). The interactive folder picker fails in non-TTY contexts (CI, agent shells). If the user provides a folder name, resolve it to a key with uip or folders list --output json and match on the Name field (output rows are { Key, Name, Path, Description, Type, ParentKey }). The uip or ... commands require the Orchestrator tool — install once via uip tools install @uipath/orchestrator-tool (check first with uip tools list).uip df entities get <ENTITY_ID> --output json to inspect fields and types. At runtime, use entities.getById(<id>) from the app's authenticated session. DF doesn't behave like a typical RDBMS; see sdk/data-fabric.md "Anti-shapes & gotchas".getAll, getAllRecords, queryRecordsById, getFileMetaData, etc. getAll() with no options does NOT return all rows; the SDK sends no pageSize and the server applies its own cap, wrapped in a misleadingly-named NonPaginatedResponse. To list every row from a source that may exceed the cap, you MUST loop the cursor: while (page.hasNextPage) { page = await getAll({ cursor: page.nextCursor }) } and accumulate items. Reading result.items.length after a single call is almost always a bug. See sdk/pagination.md.VITE_UIPATH_SCOPE already includes the required scope. Write operations, action methods (Jobs.stop, Tasks.complete, ProcessInstances.cancel, etc.), or first use of a new service typically need broader scopes than read-only flows. Mismatched scopes fail silently with 401 / 403 on the first call. See oauth-scopes.md for the per-method scope table.sdk.initialize() in an action app. That is web-app-only — it starts a PKCE OAuth redirect. Action apps run in Action Center's iframe with a host-injected session: construct new UiPath() (no args, no .env) and use it directly. See create-action-app.md src/uipath.ts.| I want to... | Read this |
|---|---|
| Create a new Coded Web App | references/create-web-app.md |
| Create a new Coded Action App | references/create-action-app.md |
| Debug auth or config issues | references/debug.md |
| Push/pull code to Studio Web | references/file-sync.md |
| Package and deploy | references/pack-publish-deploy.md |
| Full CLI command reference | references/commands-reference.md |
| Embed the DU Validation Station widget | references/widgets/validation-station.md |
| OAuth scopes for SDK services | references/oauth-scopes.md |
| SDK: Import paths & subpath exports | references/sdk/imports.md |
| SDK: Assets, Queues, Buckets, Processes, Jobs, Attachments | references/sdk/orchestrator.md |
| SDK: Data Fabric (Entities, ChoiceSets) | references/sdk/data-fabric.md |
| SDK: Maestro (Processes, Cases) | references/sdk/maestro.md |
| SDK: Action Center (Tasks) | references/sdk/action-center.md |
| SDK: Conversational Agent | references/sdk/conversational-agent.md |
| SDK: Agent Feedback | references/sdk/feedback.md |
| SDK: Pagination | references/sdk/pagination.md |
| UI Patterns (polling, BPMN, HITL, text overflow, table pagination) | references/patterns.md |
# Install the UiPath CLI (run once)
npm install -g @uipath/cli
# Install the coded apps tool
uip tools install @uipath/codedapp-tool
# Install the Orchestrator tool (needed to resolve folder name → key for deploy)
uip tools install @uipath/orchestrator-tool
# Verify both are installed
uip tools list
# Resolve uip if not on PATH
UIP=$(command -v uip 2>/dev/null || npm root -g 2>/dev/null | sed 's|/node_modules$||')/bin/uip
$UIP --version
Authenticate before any cloud command:
uip login status --output json # check if logged in
uip login # interactive OAuth (opens browser)
uip login --authority https://alpha.uipath.com # non-production environments
| Variable | Used By | Description |
|---|---|---|
VITE_UIPATH_CLIENT_ID | Web App SDK | OAuth Client ID from External Application |
VITE_UIPATH_SCOPE | Web App SDK | Space-separated OAuth scopes |
VITE_UIPATH_ORG_NAME | Web App SDK | UiPath organization slug |
VITE_UIPATH_TENANT_NAME | Web App SDK | UiPath tenant name |
VITE_UIPATH_BASE_URL | Web App SDK | Must use API subdomain (see below) |
UIPATH_PROJECT_ID | push / pull | Studio Web project ID |
Base URL by environment:
| Environment | Correct Base URL |
|---|---|
| Production (cloud) | https://api.uipath.com |
| Staging | https://staging.api.uipath.com |
| Alpha | https://alpha.api.uipath.com |
Do NOT pause between steps to ask "should I continue?" — execute the full pipeline. Only stop if you need auth credentials or an app name.
uip login status --output json. If not logged in, ask the user for their environment and run uip login.npm run build. Verify ls dist/.uip codedapp pack dist -n <name> --version <version>. Produces .uipath/<name>.<version>.nupkg. Bump version if previously published.uip codedapp publish (add -t Action for action apps). Verify cat .uipath/app.config.json.uip codedapp deploy -n <name> --folder-key <GUID>. Resolve the GUID from a user-provided folder name via uip or folders list --output json. Never let the command go interactive. Share the app URL with the user.See references/sdk/imports.md for the subpath ↔ class mapping, type import conventions, and anti-pattern examples. Core rules are listed under Anti-patterns below.
.uipath/app.config.json)Created by publish, consumed by deploy. Contains appName, systemName, appType, deploymentId, appUrl. Do not delete .uipath/ between publish and deploy.
action-schema.json)Action apps define a data contract between the form and the Maestro/Agent workflow. It has four sections: inputs (read-only data from automation), outputs (user-filled fields), inOuts (pre-populated but editable), and outcomes (submission buttons like Approve/Reject).
See references/debug.md for detailed diagnosis steps.
| Error | Cause | Fix |
|---|---|---|
Not authenticated | No valid session | Run uip login |
dist/ not found | App not built | Run npm run build |
Version already exists | Same version re-published | Bump version in pack |
Folder key required / deploy hangs on prompt | Missing folder for CLI deploy | Resolve folder name → key via uip or folders list --output json (match on Name, read Key), then run uip codedapp deploy --folder-key <GUID> .... See pack-publish-deploy.md. |
No packages found | No .nupkg in .uipath/ | Run pack first |
| Login fails / redirect error | OAuth misconfiguration | See debug.md |
| API calls fail with 401/CORS | Wrong base URL | Use https://api.uipath.com not cloud.uipath.com |
Folder identifier names differ across CLI and SDK. The CLI uses
UIPATH_FOLDER_KEY/--folder-key(string) and applies only touip codedapp deploy. SDK methods use different parameters: Maestro services (MaestroProcesses,ProcessInstances,Cases) takefolderKey(string GUID), Orchestrator services (Assets,Queues,Buckets,Processes) takefolderId(number). Do not pass the CLI env var into SDK calls. To bridge from a MaestrofolderKeyto an OrchestratorfolderId, see sdk/maestro.md — and neverparseInt(folderKey), the GUID is not numeric.
When you finish a task, report only what's applicable to the work actually done:
dist/ — if npm run build was run.uipath/<name>.<version>.nupkg — if pack was run.uipath/app.config.json with deploymentId — if publish was runappUrl from app.config.json) — if deploy was runcd <app-name> && npm run dev to run locallyuip codedapp pack when the user wants to deployuip codedapp deploy to go liveIf a later stage was requested but skipped (e.g., user asked to deploy but only publish succeeded), call it out explicitly in the next-steps section.
These pitfalls are not already covered by the Critical Rules. For rules stated as positive requirements, see the Critical Rules section at the top.
@uipath/uipath-typescript/assets).sdk.entities.getAll() — use constructor DI: new Entities(sdk)..uipath/ between publish and deploy — deploy reads app.config.json written by publish.npx claudepluginhub uipath/skills --plugin uipathManages UiPath Solution packages (.uipx) via the `uip solution` CLI: init, pack, publish, deploy, activate, upload, and manage projects/resources. Bundles multiple automation projects into a single deployable unit.
Creates React and Vite code apps for Power Apps. Scaffolds projects, checks prerequisites like Node.js and pac CLI, authenticates, builds, and deploys to Power Platform.
Orchestrates the Falcon Foundry app lifecycle from requirements through deployment using CLI commands. Triggers when creating, planning, or building a Foundry app.