@uipath/skills 1.195.0 → 1.196.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CODEOWNERS +16 -10
  4. package/README.md +39 -4
  5. package/assets/skill-status.json +189 -0
  6. package/assets/uip-catalog-snapshot.json +67 -97
  7. package/commands/install-permissions.md +46 -2
  8. package/hooks/suggest-permissions.sh +0 -0
  9. package/hooks/validate-skill-descriptions.sh +0 -0
  10. package/package.json +1 -1
  11. package/skills/uipath-admin/SKILL.md +6 -7
  12. package/skills/uipath-admin/references/audit-commands.md +32 -10
  13. package/skills/uipath-admin/references/audit-workflow-guide.md +25 -6
  14. package/skills/uipath-admin/references/ip-restriction/ip-restriction-commands.md +1 -1
  15. package/skills/uipath-agents/SKILL.md +5 -3
  16. package/skills/uipath-agents/references/coded/embedding-in-flows.md +6 -0
  17. package/skills/uipath-agents/references/coded/flow-integration.md +1 -0
  18. package/skills/uipath-agents/references/coded/frameworks/langgraph-integration.md +2 -2
  19. package/skills/uipath-agents/references/coded/frameworks/llamaindex-integration.md +1 -1
  20. package/skills/uipath-agents/references/coded/frameworks/openai-agents-integration.md +5 -1
  21. package/skills/uipath-agents/references/coded/lifecycle/build.md +1 -0
  22. package/skills/uipath-agents/references/coded/lifecycle/evaluate.md +8 -6
  23. package/skills/uipath-agents/references/coded/quickstart.md +17 -12
  24. package/skills/uipath-agents/references/lowcode/agent-definition.md +17 -16
  25. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/analyze-attachments.md +2 -2
  26. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/batch-transform/impl-json.md +1 -1
  27. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/built-in-tools.md +4 -4
  28. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/deeprag/impl-json.md +1 -1
  29. package/skills/uipath-agents/references/lowcode/capabilities/context/context.md +1 -1
  30. package/skills/uipath-agents/references/lowcode/capabilities/context/datafabric.md +1 -1
  31. package/skills/uipath-agents/references/lowcode/capabilities/context/index.md +12 -12
  32. package/skills/uipath-agents/references/lowcode/capabilities/escalation/escalation.md +14 -14
  33. package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +1 -1
  34. package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails.md +23 -20
  35. package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +27 -26
  36. package/skills/uipath-agents/references/lowcode/capabilities/integration-service/integration-service.md +12 -13
  37. package/skills/uipath-agents/references/lowcode/capabilities/mcp/mcp.md +133 -0
  38. package/skills/uipath-agents/references/lowcode/capabilities/memory/memory.md +9 -9
  39. package/skills/uipath-agents/references/lowcode/capabilities/process/process.md +25 -24
  40. package/skills/uipath-agents/references/lowcode/capabilities/process/solution-files.md +6 -6
  41. package/skills/uipath-agents/references/lowcode/critical-rules.md +17 -17
  42. package/skills/uipath-agents/references/lowcode/debug.md +55 -0
  43. package/skills/uipath-agents/references/lowcode/evaluations/evaluate.md +6 -6
  44. package/skills/uipath-agents/references/lowcode/evaluations/evaluation-sets.md +1 -1
  45. package/skills/uipath-agents/references/lowcode/evaluations/evaluators.md +3 -3
  46. package/skills/uipath-agents/references/lowcode/evaluations/running-evaluations.md +8 -8
  47. package/skills/uipath-agents/references/lowcode/lowcode.md +18 -12
  48. package/skills/uipath-agents/references/lowcode/model-selection-guide.md +3 -3
  49. package/skills/uipath-agents/references/lowcode/project-lifecycle.md +53 -33
  50. package/skills/uipath-agents/references/lowcode/solution-resources.md +8 -8
  51. package/skills/uipath-api-workflow/SKILL.md +32 -83
  52. package/skills/uipath-api-workflow/references/cli-reference.md +40 -26
  53. package/skills/uipath-api-workflow/references/connector-activity-discovery.md +75 -23
  54. package/skills/uipath-api-workflow/references/troubleshooting.md +4 -12
  55. package/skills/uipath-automation-discovery/SKILL.md +234 -0
  56. package/skills/uipath-automation-discovery/references/intake-guide.md +85 -0
  57. package/skills/uipath-automation-discovery/references/mining-guide.md +156 -0
  58. package/skills/uipath-automation-discovery/references/report-template.md +95 -0
  59. package/skills/uipath-coded-apps/SKILL.md +0 -2
  60. package/skills/uipath-data-fabric/SKILL.md +0 -2
  61. package/skills/uipath-feedback/SKILL.md +1 -1
  62. package/skills/uipath-governance/SKILL.md +0 -2
  63. package/skills/uipath-human-in-the-loop/SKILL.md +2 -3
  64. package/skills/uipath-maestro-bpmn/.maintenance/check-all.sh +0 -0
  65. package/skills/uipath-maestro-bpmn/.maintenance/check-anchors.sh +0 -0
  66. package/skills/uipath-maestro-bpmn/.maintenance/check-depth.sh +0 -0
  67. package/skills/uipath-maestro-bpmn/.maintenance/check-link-text.sh +0 -0
  68. package/skills/uipath-maestro-bpmn/.maintenance/check-links.sh +0 -0
  69. package/skills/uipath-maestro-bpmn/.maintenance/check-orphans.sh +0 -0
  70. package/skills/uipath-maestro-bpmn/.maintenance/check-plugin-pairs.sh +0 -0
  71. package/skills/uipath-maestro-bpmn/.maintenance/check-template.sh +0 -0
  72. package/skills/uipath-maestro-bpmn/.maintenance/check-uip-commands.sh +0 -0
  73. package/skills/uipath-maestro-bpmn/.maintenance/check-validation-fixtures.py +0 -0
  74. package/skills/uipath-maestro-bpmn/.maintenance/check-validation-fixtures.sh +0 -0
  75. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/api-workflow.md +1 -1
  76. package/skills/uipath-maestro-bpmn/references/operate/references/run.md +1 -1
  77. package/skills/uipath-maestro-bpmn/references/shared/local-metadata-regeneration-guide.md +2 -2
  78. package/skills/uipath-maestro-bpmn/references/shared/wrapper-shells.md +1 -1
  79. package/skills/uipath-maestro-case/SKILL.md +22 -27
  80. package/skills/uipath-maestro-case/references/bindings-and-expressions.md +7 -1
  81. package/skills/uipath-maestro-case/references/bindings-v2-sync.md +7 -16
  82. package/skills/uipath-maestro-case/references/case-commands.md +9 -9
  83. package/skills/uipath-maestro-case/references/case-editing-operations.md +51 -67
  84. package/skills/uipath-maestro-case/references/case-schema.md +74 -138
  85. package/skills/uipath-maestro-case/references/connector-integration.md +32 -5
  86. package/skills/uipath-maestro-case/references/connector-trigger-common.md +39 -12
  87. package/skills/uipath-maestro-case/references/evals/evals.json +9 -23
  88. package/skills/uipath-maestro-case/references/implementation.md +24 -24
  89. package/skills/uipath-maestro-case/references/phased-execution.md +24 -38
  90. package/skills/uipath-maestro-case/references/placeholder-tasks.md +9 -9
  91. package/skills/uipath-maestro-case/references/planning.md +20 -79
  92. package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +15 -122
  93. package/skills/uipath-maestro-case/references/plugins/case/planning.md +3 -1
  94. package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +10 -22
  95. package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +7 -5
  96. package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +2 -0
  97. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +5 -5
  98. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +1 -1
  99. package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +4 -4
  100. package/skills/uipath-maestro-case/references/plugins/logging/impl-json.md +10 -0
  101. package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +10 -42
  102. package/skills/uipath-maestro-case/references/plugins/sla/planning.md +5 -5
  103. package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +8 -79
  104. package/skills/uipath-maestro-case/references/plugins/stages/planning.md +7 -14
  105. package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +1 -1
  106. package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +3 -2
  107. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +1 -1
  108. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +3 -2
  109. package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +1 -1
  110. package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +4 -3
  111. package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +2 -2
  112. package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +12 -7
  113. package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +1 -1
  114. package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +2 -0
  115. package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +1 -1
  116. package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +4 -3
  117. package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +1 -1
  118. package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +4 -3
  119. package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +3 -0
  120. package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +6 -7
  121. package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +4 -2
  122. package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +4 -27
  123. package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +8 -20
  124. package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +6 -11
  125. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +15 -30
  126. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +4 -4
  127. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +8 -7
  128. package/skills/uipath-maestro-case/references/registry-discovery.md +4 -4
  129. package/skills/uipath-maestro-case/references/sdd-generation-rules.md +12 -10
  130. package/skills/uipath-maestro-case/references/troubleshooting-guide.md +1 -1
  131. package/skills/uipath-maestro-flow/.maintenance/check-all.sh +0 -0
  132. package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +0 -0
  133. package/skills/uipath-maestro-flow/.maintenance/check-depth.sh +0 -0
  134. package/skills/uipath-maestro-flow/.maintenance/check-link-text.sh +0 -0
  135. package/skills/uipath-maestro-flow/.maintenance/check-links.sh +0 -0
  136. package/skills/uipath-maestro-flow/.maintenance/check-orphans.sh +0 -0
  137. package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +0 -0
  138. package/skills/uipath-maestro-flow/.maintenance/check-template.sh +0 -0
  139. package/skills/uipath-maestro-flow/.maintenance/check-uip-commands.sh +0 -0
  140. package/skills/uipath-maestro-flow/.maintenance/check-versions.sh +0 -0
  141. package/skills/uipath-maestro-flow/SKILL.md +9 -6
  142. package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +4 -4
  143. package/skills/uipath-maestro-flow/references/author/references/brownfield.md +17 -2
  144. package/skills/uipath-maestro-flow/references/author/references/editing-operations-cli.md +1 -1
  145. package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +3 -3
  146. package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +9 -9
  147. package/skills/uipath-maestro-flow/references/author/references/greenfield.md +13 -10
  148. package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +75 -5
  149. package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +2 -1
  150. package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +14 -4
  151. package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md +20 -4
  152. package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/impl.md +5 -5
  153. package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/planning.md +5 -5
  154. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-connector.md +81 -0
  155. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-manual.md +63 -0
  156. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl.md +59 -57
  157. package/skills/uipath-maestro-flow/references/author/references/plugins/http/planning.md +8 -7
  158. package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +23 -23
  159. package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/planning.md +2 -2
  160. package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +1 -1
  161. package/skills/uipath-maestro-flow/references/diagnose/references/failure-modes.md +6 -6
  162. package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +2 -2
  163. package/skills/uipath-maestro-flow/references/evaluate/references/upload-safety.md +1 -1
  164. package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +8 -8
  165. package/skills/uipath-maestro-flow/references/operate/references/run.md +2 -2
  166. package/skills/uipath-maestro-flow/references/operate/references/ship.md +7 -7
  167. package/skills/uipath-maestro-flow/references/shared/cli-commands.md +19 -17
  168. package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +1 -1
  169. package/skills/uipath-maestro-flow/references/shared/file-format.md +1 -1
  170. package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +7 -7
  171. package/skills/uipath-planner/SKILL.md +110 -74
  172. package/skills/{uipath-solution → uipath-planner}/assets/templates/agent-sdd-template.md +3 -3
  173. package/skills/{uipath-solution → uipath-planner}/assets/templates/api-workflow-sdd-template.md +4 -4
  174. package/skills/{uipath-solution → uipath-planner}/assets/templates/case-sdd-template.md +4 -4
  175. package/skills/{uipath-solution → uipath-planner}/assets/templates/coded-app-sdd-template.md +3 -3
  176. package/skills/{uipath-solution → uipath-planner}/assets/templates/flow-sdd-template.md +4 -4
  177. package/skills/{uipath-solution → uipath-planner}/assets/templates/rpa-sdd-template.md +11 -11
  178. package/skills/uipath-planner/references/multi-skill-patterns-guide.md +3 -3
  179. package/skills/uipath-planner/references/non-pdd-lane-guide.md +10 -6
  180. package/skills/uipath-planner/references/pdd-driven-lane-guide.md +17 -7
  181. package/skills/uipath-planner/references/plan-and-tasks-format.md +2 -2
  182. package/skills/{uipath-solution/references/design → uipath-planner/references}/product-selection-guide.md +8 -8
  183. package/skills/{uipath-solution/references/design → uipath-planner/references}/rpa-product-guide.md +1 -1
  184. package/skills/{uipath-solution/references/design → uipath-planner/references}/sdd-generation-guide.md +26 -39
  185. package/skills/{uipath-solution/references/design → uipath-planner/references}/tenant-library-search-guide.md +7 -7
  186. package/skills/uipath-platform/SKILL.md +21 -48
  187. package/skills/uipath-platform/references/integration-service/http-request.md +5 -2
  188. package/skills/uipath-platform/references/integration-service/reference-resolution.md +19 -1
  189. package/skills/uipath-platform/references/integration-service/triggers.md +21 -5
  190. package/skills/uipath-platform/references/licensing/consumables-report.md +1 -1
  191. package/skills/uipath-platform/references/licensing/tenant-allocations.md +1 -1
  192. package/skills/uipath-platform/references/licensing/user-licenses-allocations.md +1 -1
  193. package/skills/uipath-platform/references/{resources → orchestrator}/manage-assets.md +37 -34
  194. package/skills/uipath-platform/references/orchestrator/manage-sessions.md +1 -1
  195. package/skills/uipath-platform/references/orchestrator/orchestrator.md +4 -31
  196. package/skills/uipath-platform/references/{resources → orchestrator}/process-queues.md +61 -50
  197. package/skills/uipath-platform/references/{resources → orchestrator}/resources.md +21 -21
  198. package/skills/uipath-platform/references/orchestrator/run-jobs.md +26 -14
  199. package/skills/uipath-platform/references/orchestrator/setup-environment.md +20 -16
  200. package/skills/uipath-platform/references/orchestrator/tenant-admin.md +7 -7
  201. package/skills/uipath-platform/references/{resources → orchestrator}/triggers-and-webhooks.md +41 -37
  202. package/skills/uipath-platform/references/{resources → orchestrator}/work-with-storage.md +56 -34
  203. package/skills/uipath-platform/references/uip-commands.md +20 -19
  204. package/skills/uipath-review/SKILL.md +81 -7
  205. package/skills/uipath-review/references/agents/agent-common-issues.md +42 -0
  206. package/skills/uipath-review/references/agents/agent-review-checklist.md +79 -57
  207. package/skills/uipath-review/references/agents/agents-coded-rules.md +160 -0
  208. package/skills/uipath-review/references/agents/agents-common-rules.md +32 -0
  209. package/skills/uipath-review/references/agents/agents-lowcode-rules.md +128 -0
  210. package/skills/uipath-review/references/platform/platform-resources-checklist.md +2 -2
  211. package/skills/uipath-review/references/review-workflow-guide.md +1 -1
  212. package/skills/uipath-review/references/rpa/rpa-review-checklist.md +2 -2
  213. package/skills/uipath-review/references/rule-catalog-workflow.md +90 -0
  214. package/skills/uipath-review/references/rule-format.md +91 -0
  215. package/skills/uipath-rpa/SKILL.md +16 -6
  216. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/CreateEntityRecord.md +149 -0
  217. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/CreateMultipleEntityRecords.md +67 -0
  218. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/DeleteEntityRecord.md +44 -0
  219. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/DeleteFileFromRecordField.md +56 -0
  220. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/DeleteMultipleEntityRecords.md +65 -0
  221. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/DownloadFileFromRecordField.md +115 -0
  222. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/GetEntityRecordById.md +50 -0
  223. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/QueryEntityRecords.md +69 -0
  224. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/UpdateEntityRecord.md +120 -0
  225. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/UpdateMultipleEntityRecords.md +67 -0
  226. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/activities/UploadFileToRecordField.md +103 -0
  227. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/guides/data-service-filter-builder-guide.md +461 -0
  228. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/overview.md +355 -0
  229. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/AppendRangeX.md +1 -1
  230. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/AutoFillX.md +1 -1
  231. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/AutoFitX.md +1 -1
  232. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ChangeDataRangeModification.md +1 -1
  233. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ChangePivotTableDataSourceX.md +1 -1
  234. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ClearRangeX.md +1 -1
  235. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/CopyPasteRangeX.md +1 -1
  236. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/CreatePivotTableXv2.md +1 -1
  237. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/CreateTableX.md +1 -1
  238. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/DeleteColumnX.md +1 -1
  239. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/DeleteRowsX.md +1 -1
  240. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/DeleteSheetX.md +1 -1
  241. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/DuplicateSheetX.md +1 -1
  242. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ExecuteMacroArgumentX.md +1 -1
  243. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ExecuteMacroX.md +1 -1
  244. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ExportExcelToCsvX.md +1 -1
  245. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FillRangeX.md +1 -1
  246. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FilterPivotTableX.md +1 -1
  247. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FilterX.md +1 -1
  248. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FindFirstLastDataRowX.md +1 -1
  249. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FindReplaceValueX.md +1 -1
  250. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/FormatRangeX.md +2 -2
  251. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InsertColumnX.md +1 -1
  252. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InsertExcelChartX.md +1 -1
  253. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InsertRowsX.md +1 -1
  254. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InsertSheetX.md +1 -1
  255. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InvokeVBAArgumentX.md +1 -1
  256. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/InvokeVBAX.md +1 -1
  257. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/LookupX.md +1 -1
  258. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/PivotTableFieldX.md +1 -1
  259. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ProtectSheetX.md +1 -1
  260. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ReadCellFormulaX.md +1 -1
  261. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/ReadCellValueX.md +1 -1
  262. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/RefreshPivotTableX.md +1 -1
  263. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/RemoveDuplicatesX.md +1 -1
  264. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/RenameSheetX.md +1 -1
  265. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/SaveAsPdfX.md +1 -1
  266. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/SaveExcelFileX.md +1 -1
  267. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/SortColumnX.md +1 -1
  268. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/SortX.md +1 -1
  269. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/UnprotectSheetX.md +1 -1
  270. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/UpdateChartX.md +1 -1
  271. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/VLookupX.md +1 -1
  272. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/WriteCellX.md +1 -1
  273. package/skills/uipath-rpa/references/activity-docs/UiPath.Excel.Activities/3.5/activities/overview.md +2 -2
  274. package/skills/uipath-rpa/references/activity-docs/UiPath.GSuite.Activities/3.8/activities/overview.md +2 -2
  275. package/skills/uipath-rpa/references/activity-docs/UiPath.Mail.Activities/2.8/activities/overview.md +2 -2
  276. package/skills/uipath-rpa/references/activity-docs/UiPath.MicrosoftOffice365.Activities/3.8/activities/SendMailConnections.md +1 -1
  277. package/skills/uipath-rpa/references/activity-docs/UiPath.MicrosoftOffice365.Activities/3.8/activities/overview.md +3 -3
  278. package/skills/uipath-rpa/references/activity-docs/UiPath.Presentations.Activities/2.5/activities/overview.md +2 -2
  279. package/skills/uipath-rpa/references/activity-docs/UiPath.System.Activities/25.10/activities/overview.md +1 -1
  280. package/skills/uipath-rpa/references/activity-docs/UiPath.Word.Activities/2.5/activities/overview.md +2 -2
  281. package/skills/uipath-rpa/references/cli-reference.md +108 -554
  282. package/skills/uipath-rpa/references/coded/coding-guidelines.md +1 -1
  283. package/skills/uipath-rpa/references/coded/operations-guide.md +3 -3
  284. package/skills/uipath-rpa/references/coded/third-party-packages-guide.md +1 -1
  285. package/skills/uipath-rpa/references/connector-capabilities.md +3 -2
  286. package/skills/uipath-rpa/references/debugging.md +43 -36
  287. package/skills/uipath-rpa/references/environment-setup.md +3 -3
  288. package/skills/uipath-rpa/references/is-connector-xaml-guide.md +3 -3
  289. package/skills/uipath-rpa/references/library-authoring-guide.md +226 -0
  290. package/skills/uipath-rpa/references/project-structure-guide.md +43 -0
  291. package/skills/uipath-rpa/references/publishing-guide.md +5 -5
  292. package/skills/uipath-rpa/references/tenant-library-search-guide.md +18 -14
  293. package/skills/uipath-rpa/references/testing-guide.md +6 -6
  294. package/skills/uipath-rpa/references/trigger-pattern-guide.md +2 -2
  295. package/skills/uipath-rpa/references/ui-automation-guide.md +43 -6
  296. package/skills/uipath-rpa/references/uia-configure-target-workflows.md +2 -2
  297. package/skills/uipath-rpa/references/uia-prerequisites.md +1 -1
  298. package/skills/uipath-rpa/references/validation-guide.md +4 -4
  299. package/skills/uipath-rpa/references/xaml/canvas-layout-guide.md +4 -1
  300. package/skills/uipath-rpa/references/xaml/common-pitfalls.md +18 -6
  301. package/skills/uipath-rpa/references/xaml/long-running-workflow-guide.md +304 -0
  302. package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +3 -0
  303. package/skills/uipath-solution/SKILL.md +23 -125
  304. package/skills/uipath-solution/references/{operate/activate-and-manage.md → activate-and-manage.md} +1 -1
  305. package/skills/uipath-solution/references/{operate/develop-solution.md → develop-solution.md} +43 -37
  306. package/skills/uipath-solution/references/{operate/pack-and-deploy.md → pack-and-deploy.md} +3 -3
  307. package/skills/uipath-solution/references/{operate/scenarios → scenarios}/intra-solution-references.md +2 -2
  308. package/skills/uipath-solution/references/{operate/scenarios → scenarios}/manual-edits.md +4 -4
  309. package/skills/uipath-solution/references/{operate/scenarios → scenarios}/same-name-across-folders.md +2 -2
  310. package/skills/uipath-solution/references/{operate/scenarios → scenarios}/shared-cloud-resource.md +3 -3
  311. package/skills/uipath-solution/references/{operate/scenarios → scenarios}/virtual-resource.md +4 -4
  312. package/skills/uipath-solution/references/{operate/scenarios.md → scenarios.md} +5 -5
  313. package/skills/uipath-solution/references/{operate/solution-overview.md → solution-overview.md} +3 -3
  314. package/skills/uipath-tasks/SKILL.md +0 -2
  315. package/skills/uipath-test/SKILL.md +26 -7
  316. package/skills/uipath-troubleshoot/agents/triage.md +6 -4
  317. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/overview.md +55 -0
  318. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/add-queue-item-failed.md +58 -0
  319. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/application-launch-failed.md +56 -0
  320. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/browser-open-or-attach-failed.md +59 -0
  321. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/file-operation-failed.md +60 -0
  322. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/foreach-row-failed.md +56 -0
  323. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/image-target-not-found.md +56 -0
  324. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/invoke-code-failed.md +54 -0
  325. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/invoke-workflow-failed.md +58 -0
  326. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/kill-process-failed.md +49 -0
  327. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/ui-activity-configuration-error.md +80 -0
  328. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/ui-activity-timeout.md +61 -0
  329. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/ui-element-interaction-failed.md +61 -0
  330. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/ui-element-not-found.md +64 -0
  331. package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/summary.md +24 -0
  332. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/read-range-file-locked.md +142 -0
  333. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/read-range-file-not-found.md +140 -0
  334. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/read-range-null-reference.md +119 -0
  335. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/read-range-sheet-not-found.md +146 -0
  336. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/write-cell-failures.md +131 -0
  337. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/summary.md +5 -0
  338. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/investigation_guide.md +1 -0
  339. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/overview.md +16 -0
  340. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/activity-configuration-error.md +42 -0
  341. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/ambiguous-selector.md +131 -0
  342. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/application-not-found.md +84 -0
  343. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/application-open-failed.md +46 -0
  344. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/browser-navigation-failed.md +45 -0
  345. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/click-coordinate-off-screen.md +120 -0
  346. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/disabled-element.md +0 -2
  347. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/element-found-not-actionable.md +43 -0
  348. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/healing-agent-no-license.md +12 -12
  349. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/healing-agent-orch-issues.md +108 -0
  350. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/inject-js-failed.md +41 -0
  351. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/scope-container-wrong-page.md +7 -0
  352. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/select-item-no-items.md +37 -0
  353. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/selector-failure-manual.md +2 -0
  354. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/timeout-issue.md +2 -2
  355. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/verify-execution-failure.md +120 -0
  356. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/wrong-target-application.md +41 -0
  357. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/summary.md +12 -0
  358. package/skills/uipath-troubleshoot/references/products/agents/playbooks/guardrail-violation.md +111 -0
  359. package/skills/uipath-troubleshoot/references/products/agents/playbooks/is-connection-disabled.md +90 -0
  360. package/skills/uipath-troubleshoot/references/products/agents/playbooks/is-invalid-credentials.md +123 -0
  361. package/skills/uipath-troubleshoot/references/products/agents/playbooks/is-invalid-element-instance.md +96 -0
  362. package/skills/uipath-troubleshoot/references/products/agents/playbooks/llm-insufficient-information.md +1 -1
  363. package/skills/uipath-troubleshoot/references/products/agents/summary.md +4 -0
  364. package/skills/uipath-troubleshoot/references/products/orchestrator/investigation_guide.md +7 -7
  365. package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-pending-no-host.md +3 -1
  366. package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-pending-stale-dispatch.md +2 -0
  367. package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-stopped-exit-code-0x40010004.md +104 -0
  368. package/skills/uipath-troubleshoot/references/products/orchestrator/summary.md +1 -0
  369. package/skills/uipath-troubleshoot/references/summary.md +10 -1
  370. package/version-manifest.json +2 -2
  371. package/skills/uipath-ixp/SKILL.md +0 -84
  372. package/skills/uipath-ixp/references/cli-reference.md +0 -113
  373. package/skills/uipath-ixp/references/improve-prompts-guide.md +0 -283
  374. package/skills/uipath-ixp/references/label-documents-guide.md +0 -175
  375. package/skills/uipath-ixp/references/project-setup-guide.md +0 -90
  376. package/skills/uipath-maestro-case/references/plugins/edges/impl-json.md +0 -152
  377. package/skills/uipath-maestro-case/references/plugins/edges/planning.md +0 -93
  378. /package/skills/{uipath-solution/references/design → uipath-planner/references}/package-selection-guide.md +0 -0
  379. /package/skills/{uipath-solution/references/design → uipath-planner/references}/pdd-analysis-guide.md +0 -0
  380. /package/skills/uipath-solution/references/{operate/scenarios → scenarios}/failure-modes.md +0 -0
@@ -0,0 +1,160 @@
1
+ # Agents — Coded Judgment Rule Catalog
2
+
3
+ Judgment rules for **coded** agents (Python — `main.py` + framework config). Each rule requires the agent to read source and reason — what a regex/AST-emulation/file-walk cannot decide reliably. Same row schema as elsewhere — see [`../rule-format.md`](../rule-format.md).
4
+
5
+ > **This catalog is judgment-only.** Run `uip codedagent review "<PROJECT_DIR>" --output json` **first** (SKILL.md Step 2.5) — it returns the deterministic coded findings (pyproject/dependency/python-version gates, import & secret regex, framework symbol existence, bare-except, eval-run analysis, `.venv` packaging, git-tracked secrets) in the same rule format. Then apply the rules below, which the CLI cannot do.
6
+
7
+ Read [`../rule-format.md`](../rule-format.md) and [`../rule-catalog-workflow.md`](../rule-catalog-workflow.md) first.
8
+
9
+ Companion files:
10
+
11
+ - [`agents-common-rules.md`](agents-common-rules.md) — judgment rule shared with low-code agents (schema-description informativeness)
12
+ - [`agents-lowcode-rules.md`](agents-lowcode-rules.md) — low-code judgment rules (for the agent-builder coded layout that ships both `agent.json` and `main.py`)
13
+
14
+ ## Framework detection
15
+
16
+ Many rules below gate on framework. Detect once and reuse:
17
+
18
+ | Signal | Framework |
19
+ |---|---|
20
+ | `langgraph.json` at project root | `LANGGRAPH` |
21
+ | `llama_index.json` | `LLAMAINDEX` |
22
+ | `openai_agents.json` | `OPENAI_AGENTS` |
23
+ | `google_adk.json` | `GOOGLE_ADK` |
24
+ | `pydantic_ai.json` | `PYDANTIC_AI` |
25
+ | `agent_framework.json` | `AGENT_FRAMEWORK` |
26
+ | `uipath.json` with `.functions` and no framework config above | `FUNCTION` |
27
+
28
+ Rules marked `(<FRAMEWORK> only)` in `trigger` skip on other frameworks.
29
+
30
+ ## Agent shapes
31
+
32
+ - **Workflow** — one agent, one system prompt (zero for Simple Function), one tool surface, one entry point.
33
+ - **Coded workflow** — multiple agents in one project; an orchestrator decides which agent handles which input. Detected when `create_react_agent(...)` is called ≥2 times, or there's a `StateGraph` supervisor over multiple agents, or OpenAI Agents `handoffs=[...]` over multiple `Agent` instances.
34
+
35
+ Rules in the `## GeneralChecker` section tagged `(coded_workflow only)` skip on single-agent projects.
36
+
37
+ ## How to read this file
38
+
39
+ One H2 section per checker class groups related rules for navigation. Every row's `detection_method` is the **judgment form**: read the named source, reason about it, emit when the criteria hold. Log the reasoning in the finding's `description`. Each section's last row is a `CODED_*_ISSUE` category bucket — use **only** when no specific rule fits the observation; do not bend specific rules to use a bucket.
40
+
41
+ ---
42
+
43
+ ## EvalsChecker
44
+
45
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
46
+ |---|---|---|---|---|---|
47
+ | `CODED_EVAL_TRAJECTORY_SPECIFICITY` | warning | evals | Agent with 3+ tool calls has trajectory evaluators with generic `expectedAgentBehavior` | Read tools (AST-detected) + eval set. Assess: for agents with 3+ tool calls in a typical flow, do trajectory evaluators have `expectedAgentBehavior` specific enough to catch wrong tool sequences? `"Agent should process the input and return a response"` is too generic. Good: names tools, ordering, decisions. Emit per generic description. file = eval set JSON, element = evaluator id. | Rewrite `expectedAgentBehavior` to name the specific tool sequence and decisions. |
48
+ | `CODED_EVAL_ARCHETYPE_FIT` | warning | evals | Chosen evaluators don't match the agent's archetype (LLM-only on tool agent, exact-match on free-form text, etc.) | Read agent source + eval evaluators. Classify the agent archetype: calculator/deterministic, text generator, multi-step orchestrator, API integration, classifier. Compare against [Archetype quick reference](#archetype-quick-reference) below. Emit per mismatch. file = eval set JSON. | Pick evaluators per the archetype reference: deterministic agents → exact-match/JSON-similarity; orchestrators → trajectory; classifiers → multiclass. |
49
+ | `CODED_EVAL_SET_ORGANISATION` | info | evals | Mixed scenario concerns within one eval set, or unrelated agents share one set | Read eval sets. Assess: does one set mix happy-path + intentional-failure datapoints that distort the pass rate, or exercise unrelated agents in the same project? DO NOT fire on file-naming conventions (e.g. `set-1.json` is fine). Emit on content or ownership problems only. file = eval set JSON. | Split mixed sets by scenario type or agent; document the intent of each set in its filename or metadata. |
50
+ | `CODED_EVAL_BEHAVIOR_DESCRIPTION` | warning | evals | `expectedAgentBehavior` is generic, not specific | Read each eval entry's `expectedAgentBehavior`. Assess: does it name the specific tools, steps, or decisions the agent should take? Strings like `"Agent should handle the request appropriately"` fail. file = eval set JSON, element = datapoint id. | Name the specific tools, steps, or decisions in the description. |
51
+ | `CODED_EVAL_FORMAT_MISMATCH` | warning | evals | Expected-output string format doesn't match the agent's runtime serialization | Read eval `expectedOutput` strings + agent's output type (Pydantic / dataclass / JSON). Assess concrete mismatches: Python single-quoted dict (`"{'temperature': 25.0}"`) when runtime emits JSON; trailing-comma JSON; bytes-vs-string; regex anchors on a non-regex evaluator. Don't speculate — fire only on inspectable inconsistencies. file = eval set JSON, element = datapoint id. | Reformat `expectedOutput` to match the agent's actual serialization. |
52
+ | `CODED_EVAL_COVERAGE_GAP` | warning | evals | Registered evaluator never referenced by an eval set, OR a code path never exercised by any datapoint | Read evaluator configs + eval-set `evaluationCriterias` keys. Assess: is each evaluator config referenced by ≥1 eval entry? Symmetrically, read agent source — does each declared code branch (platform-vs-local, error handler, rejection route) get exercised by ≥1 eval input? Emit per concrete gap. file = evaluator config or source file. | Either add eval entries that reference the evaluator / exercise the path, or remove the unused config. |
53
+ | `CODED_EVAL_GROUND_TRUTH_MISLABELED` | warning | evals | Datapoint's expected class demonstrably contradicts input content | Read each datapoint's `.inputs` + `.expectedOutput` / `.expectedClass`. Assess: does the label unambiguously contradict input semantics (e.g., email body "I want to refund" labeled `expectedClass: "spam"`)? Borderline labels are eval-author judgment — skip. Emit on clear contradictions only. file = eval set JSON, element = datapoint id. | Correct the label, or split the datapoint into separate scenarios. |
54
+ | `CODED_EVAL_DATASET_SINGLE_CLASS` | warning | evals | Multiclass evaluator paired with ≥3-datapoint dataset where all labels are identical | Read evaluator types + eval set labels. Assess: is the evaluator multi-class shape (`uipath-multiclass-classification`, custom balanced-accuracy with `classCounts: {…}`)? AND does the dataset have ≥3 datapoints all sharing the same label? Skip when evaluator is single-class by design (`uipath-binary-classification` for one-class detection) or when dataset has <3 datapoints. file = eval set JSON. | Add datapoints with the other classes, or switch to `uipath-binary-classification` for one-class detection. |
55
+ | `CODED_EVAL_ISSUE` | warning | evals | Eval-infrastructure observation that no specific rule above fits | Use ONLY when no specific Evals rule fits. Walk all rules in this section first. Emit with concrete description + suggested fix. file = source of the observation. | (Defined per finding.) |
56
+
57
+ ### Archetype quick reference
58
+
59
+ | Agent archetype | Primary evaluator | Secondary | Mismatch to flag |
60
+ |---|---|---|---|
61
+ | Calculator / deterministic | `uipath-exact-match` or `file://` | — | LLM judge on deterministic output with no deterministic evaluator |
62
+ | Text generator / summariser | `uipath-llm-judge-output-semantic-similarity` | `uipath-contains` | `exact-match` on free-form text |
63
+ | Multi-step orchestrator | `uipath-llm-judge-trajectory-similarity` | `uipath-tool-call-order` | No trajectory evaluator |
64
+ | API integration | `uipath-json-similarity` or `file://` | `uipath-exact-match` | No structured comparison |
65
+ | Classifier | `uipath-binary-classification` / `uipath-multiclass-classification` or `file://` | — | `exact-match` on classification output |
66
+
67
+ LLM-judge-only is acceptable when the agent has no tools, no classification output, and emits free-form text. Otherwise prefer pairing with a deterministic baseline.
68
+
69
+ ---
70
+
71
+ ## SchemaChecker
72
+
73
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
74
+ |---|---|---|---|---|---|
75
+ | `CODED_SCHEMA_COMPLETENESS` | warning | schema | `StateGraph` input/output schema is technically present but the fields are insufficient for the agent's contract | Read `StateGraph(input=..., output=...)` (or `_schema=` variants). Read the agent's actual behavior. Assess: are declared input/output fields meaningful and sufficient? An agent that needs `customer_history` + `recent_invoices` but only declares `query: str` is incomplete. file = source file. | Expand the schema to carry the context the agent actually needs / returns. |
76
+ | `CODED_SCHEMA_FIELD_NO_VALIDATION` | warning | schema | Constrained-value field declared as bare `str` (no `Literal`/`Enum`/regex pattern) | Read Pydantic / dataclass models. Assess per field: does the name suggest a constrained set (`category`, `status`, `severity`, `role`, `intent`, `classification`, `priority`)? AND is the type bare `str` (no `Literal`, no `Enum`, no validator)? AND does the agent's logic visibly map to a small enumerated set? Emit per concrete case. file = source file, element = `<Model>.<field>`. | Type the field as `Literal["a", "b", "c"]` or `Enum`, or add `Field(..., pattern="...")`. |
77
+ | `CODED_OUTPUT_ENUM_MISSING_ON_CLASSIFIER` | warning | schema | Classifier-shaped output field declared without enum | Read output schema (Pydantic field, `StateGraph` output annotation, dataclass). Identify classifier-shape fields by name (`class`, `classification`, `label`, `category`, `intent`, `severity`, `priority`, `status`) with `type: str`. Assess: is there a `Literal[...]` / `Enum` / pattern constraint? Both this rule and `CODED_SCHEMA_FIELD_NO_VALIDATION` can fire on the same field — the more-specific firing clarifies the issue. file = source file, element = field name. | Add `Literal[...]` / `Enum` / pattern constraint to the classifier output field. |
78
+ | `CODED_SCHEMA_ISSUE` | warning | schema | Schema observation that no specific rule above fits | Use ONLY when no specific Schema rule fits. Emit with concrete description + suggested fix. file = source of the observation. | (Defined per finding.) |
79
+
80
+ ---
81
+
82
+ ## ToolsChecker
83
+
84
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
85
+ |---|---|---|---|---|---|
86
+ | `CODED_TOOL_DOCSTRING_QUALITY` | warning | tools | Tool docstring missing, generic, or missing parameter mention | Read each tool-surface function (passed to `bind_tools`, `@tool`-decorated, registered via `Tool(...)`). Assess docstring: is it missing or <20 chars? Does it state what the tool does in plain language? Does it mention every declared parameter? Is it generic boilerplate? Fire when **at least one** of these holds. Don't fire when the docstring names every param and either describes the return shape or gives a usage cue. file = source file, element = function name. | Write a docstring that names every parameter, describes the return shape, and gives a usage cue (preconditions, side effects, example). |
87
+ | `CODED_PROMPT_TOOL_COVERAGE` | warning | tools | Fewer than half the registered tools are mentioned in the system prompt | Read system prompt (passed to `UiPathChat`/`UiPathAzureChatOpenAI`/`Agent(instructions=...)`). Read tool registrations. Assess: is each tool mentioned by name or described by purpose? Emit when `<50%` are referenced. file = source file. | Reference each tool by name in the system prompt with guidance on when to use it. |
88
+ | `CODED_PROMPT_REFERENCES_NONEXISTENT_TOOL` | warning | tools | System prompt names a tool that's not registered | Read system prompt. Extract tool names cited (backticked, quoted, "the X tool"). Build registered tool set (`@tool`-decorated, `Tool(...)` registered, `bind_tools` entries). Emit per cited name not in registered set. Skip prose references like "use a search tool" without specific identifiers. file = source file, element = missing tool name. | Either rename the tool, register the cited tool, or remove the prompt reference. |
89
+ | `CODED_TOOLS_ISSUE` | warning | tools | Tools observation that no specific rule above fits | Use ONLY when no specific Tools rule fits. Emit with concrete description + suggested fix. file = source of the observation. | (Defined per finding.) |
90
+
91
+ ---
92
+
93
+ ## GuardrailsChecker
94
+
95
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
96
+ |---|---|---|---|---|---|
97
+ | `CODED_GUARDRAILS_ISSUE` | warning | guardrails | Guardrails / safety / PII observation that no specific rule fits | Use ONLY when no specific rule fits. Coded agents have most safety concerns covered under `## SecurityChecker` (`CODED_PROMPT_USER_INPUT_UNSANITIZED`, `CODED_PII_IN_TRACES`) and the deterministic secret/`.env` checks in the review CLI. Reach here only for guardrail / policy observations none of those cover. | (Defined per finding.) |
98
+
99
+ ---
100
+
101
+ ## CodeChecker
102
+
103
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
104
+ |---|---|---|---|---|---|
105
+ | `PYPROJECT_PLACEHOLDER` | warning | code | `name`, `description`, or `authors` are leftover scaffold defaults, not real metadata | Read `pyproject.toml` `[project]` `name` / `description` / `authors`. Assess: are these real project metadata or scaffold defaults left unchanged (`my-agent`, `app`, `Add your description here`, `Your Name <you@example.com>`)? Code cannot reliably tell a real value from a leftover placeholder — this is a semantic read. file = `pyproject.toml`, element = field name. | Replace placeholder values with project-specific metadata. |
106
+ | `LANGGRAPH_GRAPH_NOT_COMPILED` | error | code | Exported graph symbol is a `StateGraph(...)` never `.compile()`d (`LANGGRAPH` only) | Read the module `langgraph.json` points to. Assess: is the exported graph symbol the result of a `.compile()` call? A top-level `graph = StateGraph(...)` with no trailing `.compile()` (on the same or a later line, directly or via a helper) ships an uncompiled graph the runtime can't execute. Reason about aliasing/indirection a regex would miss. file = source file, element = graph symbol. | Chain `.compile()` onto the `StateGraph(...)` (or compile it before export). |
107
+ | `STATEGRAPH_MISSING_INPUT_OUTPUT` | warning | code | `StateGraph(...)` built without explicit input/output schemas (`LANGGRAPH` only) | Read the `StateGraph(...)` construction. Assess: are explicit `input=`/`input_schema=` and `output=`/`output_schema=` schemas passed? Without them the graph's external contract is the full internal state, leaking intermediate fields. file = source file. | Pass `input_schema=` and `output_schema=` to `StateGraph(...)`. |
108
+ | `LLAMAINDEX_SYNC_STEP` | error | code | `@step`-decorated method is not `async def` (`LLAMAINDEX` only) | Read the workflow source. Assess: is every `@step`-decorated method declared `async def`? A synchronous `@step` breaks the LlamaIndex workflow runtime. file = source file, element = method name. | Add `async` to the step method. |
109
+ | `OPENAI_AGENTS_UNSUPPORTED_FEATURE` | error | code | LangGraph-only feature called in an OpenAI Agents project (`OPENAI_AGENTS` only) | Read source. Assess: does it call `interrupt`, `MemorySaver`, or `InvokeProcess` — LangGraph-specific features unsupported under OpenAI Agents? Resolve import aliasing (`from x import interrupt as y`) the way a regex cannot. file = source file, element = unsupported call. | Remove the unsupported call — these are LangGraph-specific. |
110
+ | `CODED_HELPER_TRACING` | info | code | LangGraph helpers outside the graph lack `@traced()` (`LANGGRAPH` only) | Read source. Identify functions called outside graph nodes (post-processing, formatting). Assess: do they have `@traced()`? Without it, helper execution won't appear in traces. Emit per untraced helper. file = source file, element = function name. | Decorate helper functions outside the graph with `@traced()`. |
111
+ | `CODED_DEAD_CODE` | info | code | Unreachable conditional branch in agent logic | Read source. Assess: are there conditionals where one branch can never execute (`if x > y: do_a; if x > 0: do_b` — second branch unreachable when `x > y > 0`)? Skip merely-redundant-but-reachable defensive checks. Emit per concrete unreachable branch. file = source file, element = `<function>:<line>`. | Remove the unreachable branch, or fix the condition that makes it unreachable. |
112
+ | `CODED_LLM_OUTPUT_UNVALIDATED` | warning | code | LLM completion used downstream without value-space validation | Read code paths that consume LLM responses (`response.content`, `chat_async(...).strip()`, `client.invoke(...)`). Assess per use site: (a) is the output constrained (`Literal`, `Enum`, fixed string set, JSON schema)? AND (b) is there no validation between the LLM call and the use site? Skip when consumed via `Output.model_validate(...)` or `Enum`-checked. Emit per concrete case. file = source file. | Validate the LLM response against the expected schema/Enum before downstream use. |
113
+ | `CODED_ERROR_HANDLING` | warning | code | Risky external-call site without try/except, fallback, retry, or error surfacing | Read source. Identify external boundaries that can fail in production (LLM `ainvoke`, retriever `ainvoke`, attachment / queues / entities / processes API, HITL `interrupt`, HTTP/DB). Assess per call site: is there a `try/except`, fallback, retry, or error-state surfacing? Skip pure-Python helpers. The multi-agent supervisor variant is `CODED_MULTI_AGENT_ERROR_HANDLING`. Emit per concrete case. file = source file. | Wrap the call in try/except with a fallback path or surface the error in the agent's output state. |
114
+ | `CODED_INVOKEPROCESS_NO_FALLBACK` | warning | code | `interrupt(InvokeProcess(...))` call without branching on `result.status` | Read source. Fire only when source actually imports or calls `InvokeProcess` / `InvokeProcessEvent`. Assess: does the code branch on `status` (`if status ==`, `match` on `.status`, `result.get('status')`)? Without it, `failed`/`faulted` returns malformed data. For general LLM / HTTP / SDK retry use `CODED_ERROR_HANDLING` instead. file = source file. | Branch on `result.status`: handle `"success"` / `"failed"` / `"faulted"` distinctly. |
115
+ | `CODED_CODE_ISSUE` | warning | code | Code observation that no specific rule above fits | Use ONLY when no specific Code rule fits. Emit with concrete description + suggested fix. file = source of the observation. | (Defined per finding.) |
116
+
117
+ ---
118
+
119
+ ## GeneralChecker
120
+
121
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
122
+ |---|---|---|---|---|---|
123
+ | `CODED_FRAMEWORK_FIT` | info | general | Framework chosen is a genuine mismatch for the task | Read source + framework config. Assess: is the framework appropriate? Real mismatches: LangGraph used for a deterministic pipeline with no branching; Simple Function used for a multi-step orchestrator that needs persistent state; LlamaIndex used for an agent with no retrieval. **Fire ONLY on real mismatch** — never as a commentary slot when the framework genuinely fits. file = framework config. | Switch to the framework that matches the task pattern. |
124
+ | `CODED_UIPATH_JSON_FIELD_DRIFT` | warning | general | `uipath.json` field demonstrably wrong (`entryPoint` mismatch, `isConversational` wrong, `includeUvLock: false`, …) | Read `uipath.json` + source. Assess per field: does the declared value contradict the actual code shape or break the runtime contract? `entryPoint: main.py:classify` when the function is `main`; `isConversational: true` on a stateless agent; `packOptions.includeUvLock: false` (deployment-blocker). Skip stylistic preferences. file = `uipath.json`, element = field name. | Correct the field to match the code reality. |
125
+ | `CODED_DOC_CODE_DRIFT` | info | general | README / docstring describes a feature the code doesn't implement | Read README + main docstrings. Assess: do they mention integrations, evaluators, or behaviors absent from source? Trust hazard for future contributors. Skip outdated inline comments inside functions (different concern) and "Future work" / "Roadmap" sections. file = README or docstring source. | Update the doc to match what the code actually does, or implement the documented feature. |
126
+ | `CODED_PROMPT_QUALITY` | warning | general | System prompt has internal contradictions, circular logic, or ambiguous instructions | Read any system prompt embedded in coded source (`UiPathChat`/`UiPathAzureChatOpenAI`, `Agent(instructions=...)`, `ChatPromptTemplate` strings). Assess: (a) internal contradictions ("Always respond in JSON" + "Write as a friendly paragraph"); (b) circular logic (rule X says "see Y", Y says "see X"); (c) ambiguous instructions two readers would interpret differently. DO NOT fire merely because the prompt is long. Bar: literal reading produces inconsistent behaviour. file = source file. | Reconcile contradictions, break circular references, or disambiguate. |
127
+ | `CODED_MULTI_AGENT_HUMANMESSAGE_NAME` | info | general | (coded_workflow only) Worker `HumanMessage(...)` returns lack `name="<worker_name>"` | Read worker functions in a multi-agent / supervisor setup. Assess: do they return `HumanMessage(content=..., name="<worker_name>")`? Without `name`, the supervisor cannot attribute responses. file = source file, element = worker name. | Add `name="<worker_name>"` to each worker's `HumanMessage(...)`. |
128
+ | `CODED_MULTI_AGENT_ROUTING_COHERENCE` | warning | general | (coded_workflow only) Supervisor routing description doesn't match each worker's actual capability | Read supervisor routing prompt + each worker's system prompt. Assess: does the routing description match what each worker actually does? "Researcher handles fact-finding" + worker actually generates code → routing will be unreliable. file = supervisor source. | Reconcile routing description with worker capabilities; or rename / repurpose workers. |
129
+ | `CODED_MULTI_AGENT_ERROR_HANDLING` | warning | general | (coded_workflow only) Multi-agent project lacks supervisor-level error handling | Read supervisor. Assess: project has ≥2 sub-agents (workers / handoffs) AND supervisor lacks fallback edges, try/except, or error states in routing logic. An unhandled worker exception terminates the entire graph. For single-agent error handling use `CODED_ERROR_HANDLING`. file = supervisor source. | Add fallback edges / try-except at the supervisor level. |
130
+ | `CODED_MULTI_AGENT_CROSS_SCHEMA` | warning | general | (coded_workflow only) `sdk.processes.invoke(...)` targeting a sibling agent has cross-schema mismatch | Read source. For each `sdk.processes.invoke()` targeting another agent in the same repo, read both the call's `input_arguments` and the target agent's declared input schema. Assess: are keys + types consistent? Emit per concrete mismatch. file = source file. | Reconcile `input_arguments` with the target agent's input schema. |
131
+ | `CODED_SUB_AGENT_PROMPT_DUPLICATION` | warning | general | (coded_workflow only) Two or more sub-agent prompts are substantively the same (paraphrase-equivalent) | Read each sub-agent's system prompt (`create_react_agent` workers, `Agent[Ctx]` instances). Assess pairwise: are any two prompts paraphrase-equivalent (not literal byte-match)? Routing becomes unreliable when worker capabilities are indistinguishable. file = source file, element = `<agent_a>,<agent_b>`. | Differentiate prompts so each worker has a distinct, scoped responsibility. |
132
+ | `CODED_GENERAL_ISSUE` | warning | general | General-category observation that no specific rule above fits | Use ONLY when no other category fits — repository hygiene, documentation drift, project structure. Emit with concrete description + suggested fix. file = source of the observation. | (Defined per finding.) |
133
+
134
+ ---
135
+
136
+ ## SecurityChecker
137
+
138
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
139
+ |---|---|---|---|---|---|
140
+ | `CODED_PROMPT_USER_INPUT_UNSANITIZED` | warning | security | User-controlled input interpolated into LLM prompt without sanitization | Read source. Identify user-controlled fields (function params from `input.X`, request body, attachment content, conversational history). Assess per use: (a) does the field reach a prompt template via concatenation / f-string (`f"Classify this email: {input.email_body}"`)? AND (b) is no `prompt_injection` guardrail registered? AND (c) is no sanitization helper (allowlist match, length cap, `html.escape`, regex-strip) between input and prompt? file = source file. | Sanitize the input before interpolation, or register a `prompt_injection` guardrail. |
141
+ | `CODED_PII_IN_TRACES` | warning | security | `@traced()` on a function receiving PII-suggesting fields without redaction | Read `@traced`-decorated function signatures. Assess: do params have names suggesting PII (`email_body`, `customer_email`, `personal_*`, `*_ssn`, `customer_name`)? AND does the decorator lack `hide_input=True` / `input_processor=...`? Skip when the function only handles non-PII data (item IDs, timestamps). Emit per concrete case. file = source file, element = function name. | Pass `hide_input=True` or `input_processor=<redaction_fn>` to `@traced(...)`. |
142
+
143
+ ---
144
+
145
+ ## RuntimeQuirksChecker
146
+
147
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
148
+ |---|---|---|---|---|---|
149
+ | `LIST_ACCUMULATOR_NOT_FORWARDED` | warning | runtime | LangGraph reducer-typed state key returned by a node without forwarding prior items (`LANGGRAPH` only) | Read the LangGraph state class + every node return. Assess: for each state key typed `Annotated[list[...], operator.add]` (a reducer), does any node return that key with only its new items instead of forwarding prior state? This is a whole-program dataflow read with no reliable regex — reason about it. **Advisory, not gating.** file = source file, element = state key. | Forward the accumulator: return `{"items": [*state.get("items", []), "new"]}` instead of `{"items": ["new"]}`. |
150
+
151
+ ---
152
+
153
+ ## What this catalog cannot do
154
+
155
+ The agent applies these rules from the project source as it is *checked into the repo*. It cannot:
156
+
157
+ - Verify runtime behavior (whether the LLM follows the prompt, picks the right tool, routes correctly).
158
+ - Verify multi-agent correctness at runtime — routing logic can look structurally sound and still produce wrong results.
159
+ - Verify external dependencies (process schemas, connection IDs, index names).
160
+ - Catch deep code logic bugs (field-name mismatches, arithmetic errors) — those are for linters and human code review.
@@ -0,0 +1,32 @@
1
+ # Agents — Common Rules (both formats)
2
+
3
+ Judgment rules that apply to **both** coded and low-code agents. Read [`../rule-format.md`](../rule-format.md) and [`../rule-catalog-workflow.md`](../rule-catalog-workflow.md) first.
4
+
5
+ > **This catalog is judgment-only.** Deterministic agent checks (eval counts, tool counts, schema-property presence, set-membership, regex, run-artifact analysis) run in the `uip agent review` / `uip codedagent review` CLI, which the reviewer invokes **first** (SKILL.md Step 2.5). The CLI returns those findings in the same rule format. This file holds only rules that require an LLM to read source and reason — what a regex or count cannot decide reliably.
6
+
7
+ Companion files:
8
+
9
+ - [`agents-lowcode-rules.md`](agents-lowcode-rules.md) — low-code judgment rules
10
+ - [`agents-coded-rules.md`](agents-coded-rules.md) — coded judgment rules
11
+
12
+ ---
13
+
14
+ ## SchemaChecker
15
+
16
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
17
+ |---|---|---|---|---|---|
18
+ | `SCHEMA_NO_DESCRIPTIONS` | judgment | schema | Input/output schema properties lack **informative** descriptions | Locate the schema (see [Schema location](#schema-location)). Read each property's `description`. Assess — not mere presence: is each description informative enough for the LLM to populate / consume the field correctly and for Studio Web to render a useful hint? A field named `id` described as `"the id"` adds no signal; a missing description on a non-obvious field is worse. Emit when a meaningful share of properties are undescribed or described with content that restates the field name. file = schema source. (The deterministic `>50%-missing` count runs in the review CLI; this rule judges informativeness.) | Add a `description` to each property that states what it holds, valid values, and format — Studio Web shows these as field hints and the LLM uses them as semantic signals. |
19
+
20
+ ### Schema location
21
+
22
+ - **Coded** — Read `entry-points.json` if present; else `uipath.json` → `.entryPoints[0].input` / `.entryPoints[0].output`. The finding's `file` points to whichever source was read.
23
+ - **Low-code normalized** — Read the normalized JSON. Use `.input_schema` and `.output_schema`.
24
+ - **Low-code agent-builder** — Read `entry-points.json`. Use `.entryPoints[0].input` and `.entryPoints[0].output`.
25
+
26
+ Assess input and output schema independently — emit a separate finding per schema when each is weak.
27
+
28
+ ---
29
+
30
+ ## What this catalog cannot do
31
+
32
+ The agent applies these rules from the project source as it is *checked into the repo*. It cannot verify runtime behaviour (whether the LLM follows the prompt, whether tool selection is correct, whether guardrails fire) or validate live IDs (connection IDs, index names, recipients) — those require running the agent or calling APIs.
@@ -0,0 +1,128 @@
1
+ # Agents — Low-code Judgment Rule Catalog
2
+
3
+ Judgment rules for **low-code** agents (`agent.json`). Each rule requires the agent to read source and reason — what a regex/count/schema-walk cannot decide reliably. Same row schema as elsewhere — see [`../rule-format.md`](../rule-format.md).
4
+
5
+ > **This catalog is judgment-only.** Run `uip agent review "<PROJECT_DIR>" --output json` **first** (SKILL.md Step 2.5) — it returns the deterministic low-code findings (structural gates, schema-property presence, placeholder cross-refs, eval counts/diversity, version/runtime/location checks) in the same rule format. Then apply the rules below, which the CLI cannot do.
6
+
7
+ Read [`../rule-format.md`](../rule-format.md) and [`../rule-catalog-workflow.md`](../rule-catalog-workflow.md) first.
8
+
9
+ Companion file:
10
+
11
+ - [`agents-common-rules.md`](agents-common-rules.md) — judgment rule shared with coded agents (schema-description informativeness)
12
+
13
+ ## Layouts
14
+
15
+ Low-code agents exist in two layouts. Detect first, then apply the right `Read` path in each rule.
16
+
17
+ | Layout | Identifier | Key files |
18
+ |---|---|---|
19
+ | **Normalized** | A single JSON file with snake_case top-level keys (`system_prompt`, `tools`, `datasets`, `input_schema`, `output_schema`, `user_prompt`) | The single JSON file |
20
+ | **Agent-builder** | `agent.json` at project root with camelCase keys + sibling `entry-points.json`, `project.uiproj`, `resources/<Name>/resource.json` | `agent.json`, `entry-points.json`, `resources/*/resource.json`, `evals/eval-sets/*.json`, `evals/evaluators/*.json` |
21
+
22
+ Rules tagged `(agent-builder only)` skip silently on the normalized layout; `(normalized only)` skip on agent-builder. Untagged rules apply to both with layout-aware `detection_method`.
23
+
24
+ ## How to read this file
25
+
26
+ One H2 section per checker class (`EvalsChecker`, `SchemaChecker`, `ToolsChecker`, `GuardrailsChecker`, `GeneralChecker`) groups related rules for navigation. Every row's `detection_method` is the **judgment form**: read the named source, reason about it, emit when the criteria hold. Log the reasoning in the finding's `description`.
27
+
28
+ ---
29
+
30
+ ## EvalsChecker
31
+
32
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
33
+ |---|---|---|---|---|---|
34
+ | `LC_EVAL_GROUND_TRUTH_SWAPPED` | warning | evals | ≥2 eval datapoints share substantially overlapping input shape but disagree on `expectedOutput` (suggests label swap) | Read `evals/eval-sets/*.json`. For each pair of datapoints, compare `inputs` content overlap (e.g., `email_subject` + `email_body` substring overlap > 80%). Assess: when inputs are near-identical but expected outputs differ, this is a likely label swap (the *opposite* failure pattern from the deterministic duplicate-output check). Emit one finding per swapped pair, element = `<id_1>,<id_2>`. file = eval set JSON. | Inspect both datapoints; correct the swapped label, or split them into clearly distinct scenarios. |
35
+ | `LC_EVAL_JUDGE_FOR_CLOSED_CLASS` | warning | evals | LLM-judge evaluator applied to a closed-class output field | Read eval set's `evaluatorRefs`. Read agent's `outputSchema.properties`. Assess: if any output property has `.enum` (closed set) AND an evaluator referenced by the eval set is an LLM-judge (`evaluatorTypeId: "uipath-llm-judge-output-semantic-similarity"` or similar), the LLM judge is the wrong tool — `uipath-multiclass-classification` / `uipath-exact-match` gives 100% of the signal at zero variance. Emit one finding per (eval-set, judge-evaluator) pair. file = eval set JSON. | Replace the LLM-judge with `uipath-multiclass-classification` or `uipath-exact-match` for closed-class outputs. |
36
+
37
+ ---
38
+
39
+ ## SchemaChecker
40
+
41
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
42
+ |---|---|---|---|---|---|
43
+ | `LC_OUTPUT_FORMAT_PROMPT_DRIFT` | warning | schema | System prompt instructs an output shape that conflicts with `outputSchema` | Read system prompt + `outputSchema`. Assess: does the prompt instruct a shape (`"respond with a single sentence"`, `"answer in markdown"`) that conflicts with the schema's structure (structured JSON, flat string, etc.)? Emit when prompt-vs-schema drift is present. file = system prompt source. | Align the prompt's output-format instructions with `outputSchema` — pick one source of truth and have the other reference it. |
44
+ | `LC_INPUT_SCHEMA_OVERLAP` | warning | schema | Input schema has ≥2 fields with semantically overlapping names or descriptions | Read `inputSchema.properties`. Assess: are there fields with semantically overlapping names (`query` vs `question` vs `text` vs `prompt` vs `input`) or descriptions? Emit when ≥2 fields could reasonably hold the same content and the LLM would have to disambiguate at runtime. file = schema source, element = `<field_a>,<field_b>`. | Merge overlapping fields, or differentiate them with clear names + descriptions that scope each one. |
45
+ | `LC_OUTPUT_ENUM_VS_PROMPT_DRIFT` | warning | schema | Output enum disagrees with the prompt's category list (either side has extras) | Read `outputSchema.properties.<X>.enum` and the system prompt's classification list (`"Classify into: A, B, C"`). Assess: do the two sets agree? Emit when either has extras: prompt names a class the schema doesn't accept (runtime validation rejects), OR schema accepts a class the prompt never mentions (LLM never produces it). file = schema or prompt source. | Reconcile the prompt's class list with `outputSchema.enum`. |
46
+ | `LC_OUTPUT_CLASSIFIER_NO_ENUM` | warning | schema | Classifier-shaped agent has no `enum` constraint on the primary output field | Read `outputSchema`. Assess: is this a classifier? Heuristic — `outputSchema` has a single primary string field whose name matches `class` / `classification` / `label` / `category` / `intent` / `decision`, OR the system prompt enumerates fewer than 10 categories. Emit when that field has no `enum`. file = schema source, element = field name. | Add `"enum": [...]` to the field — without it, the LLM produces free-form strings the runtime can't disambiguate. |
47
+
48
+ ---
49
+
50
+ ## ToolsChecker
51
+
52
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
53
+ |---|---|---|---|---|---|
54
+ | `VAGUE_TOOL_DESCRIPTION` | judgment | tools | Tool description missing or too vague for the LLM to choose the tool correctly | Walk tools (normalized: `.tools[]`; agent-builder: each `resources/*/resource.json` with `.type == "tool"`). Read each `.description`. Assess: does it state purpose, side effects, and when to use vs not use — enough that the model can pick this tool over its siblings? A blank description, or boilerplate like `"Process invoice"` that names no effect or selection cue, fires; a 2-3 sentence description covering purpose + effects + usage does not. (The crude `<20-char` length check runs in the review CLI; this rule judges sufficiency.) file = tool source, element = tool name. | Write a 2-3 sentence description covering purpose, side effects, and when to use vs not use the tool. |
55
+ | `LC_TOOL_MINIMALITY_SUFFICIENCY` | warning | tools | Tools exist that the prompt never names, OR the prompt describes responsibilities with no tool to fulfill them | Read tool list + system prompt. Assess two directions: (a) every configured tool maps to a clearly stated responsibility in the prompt; (b) every prompt-stated responsibility has at least one tool to fulfill it. Emit one finding per gap, with `description` naming the unmapped tool or unmet responsibility. file = system prompt source. | Either add the responsibility to the prompt (for orphan tools), add a tool (for orphan responsibilities), or remove the unused tool. |
56
+ | `LC_TOOL_OVERLAP` | warning | tools | Two or more tools have substantially similar descriptions or overlapping input schemas | Read all tool descriptions + `inputSchema`s. Assess pairwise: do any two tools have descriptions a user could plausibly apply to the same request, or input schemas that look interchangeable? Emit one finding per overlapping pair, element = `<tool_a>,<tool_b>`. file = tool source. | Differentiate the tools — sharpen descriptions to make selection unambiguous, or merge if truly redundant. |
57
+ | `LC_TOOL_DANGEROUS_COMBINATION` | warning | tools | Tool combination creates risk no individual tool creates alone (e.g., read tool + write tool with no guardrail) | Read full tool list. Assess pairwise / N-wise: do any combinations create capabilities none of the individual tools has alone? Classic example: a read tool (search, retrieve, query) + a write tool (send email, create record, call API) with no output guardrail = data-exfiltration path. Emit per dangerous combination. file = tool source, element = `<tool_a>,<tool_b>`. | Add a guardrail (e.g., output `pii_detection`, scope-restriction policy) that breaks the dangerous flow, or remove one tool. |
58
+ | `LC_TOOL_DELEGATION_DEPTH` | warning | tools | Tool with `type: "agent"` has no prompt guidance on when to delegate vs handle directly | Read tool resources. Identify any with `.type == "agent"`. Read system prompt. Assess: does the prompt include delegation criteria? Emit when missing. file = tool source, element = tool name. | Add delegation criteria to the system prompt: when to call the sub-agent vs handle the query directly. |
59
+ | `LC_TOOL_DESCRIPTION_MISLEADING` | info | tools | Tool description contradicts its declared `inputSchema` or `outputSchema` | For each tool, read `.description`, `.inputSchema`, `.outputSchema`. Assess: does the description claim behavior that contradicts the schemas (e.g., "returns the customer's full name" but `outputSchema` is `{type: "boolean"}`, or "takes a customer ID and email" but `inputSchema.properties` lists only `id`)? Emit per clear semantic mismatch (return type, field set, or arg count). file = tool source, element = tool name. | Reconcile the description with the actual schemas — pick the source of truth and update the other. |
60
+ | `LC_MULTI_TOOL_NO_SEQUENCING` | warning | tools | Tools with implicit ordering exist together but the prompt establishes no order | Read tool list. Identify canonical ordered pairs: `search*` + `summarize*`; `get*` + `create*`; `validate` + `submit`. Read system prompt. Assess: does the prompt establish ordering with words like `first`, `then`, `after`, or numbered steps? Emit when tools-with-implicit-order exist together but no ordering language appears. file = system prompt source. | Add numbered steps or sequencing language to the system prompt. |
61
+ | `LC_TOOL_RESPONSE_NOT_GROUNDED` | warning | tools | Agent has RAG-shaped retrieval but no grounding instruction in prompt or context resource | First confirm RAG shape: a tool whose output is unstructured prose intended to be cited, OR a Context Grounding index resource (`$resourceType: "context"` with `contextType: "index"`). Structured-record tools (`searchOrders`, `lookupCustomer`) do NOT trigger. When RAG-shaped, read system prompt AND every context resource's `description` / `query.description`. Assess: does grounding instruction (`"answer based only on retrieved content"` / `"cite the source"` / `"if no result, say I don't know"`) appear in either location? Emit when missing. file = system prompt or context resource. | Add a grounding instruction either to the system prompt or to the context resource's description. |
62
+
63
+ ---
64
+
65
+ ## GuardrailsChecker
66
+
67
+ > **Validator name authority.** Not all validators have the same documentation status. Use only names you are confident the target layout supports:
68
+ >
69
+ > **SDK-documented built-ins** (confirmed by `uipath-python` SDK docs):
70
+ >
71
+ > | Validator | When it's needed | Valid scope | Valid stage |
72
+ > |---|---|---|---|
73
+ > | `pii_detection` | Agent handles personal data (names, emails, addresses, health info) | Agent, Llm, Tool | Pre or Post |
74
+ > | `prompt_injection` | Agent accepts free-text user input | Llm only | PreExecution only |
75
+ >
76
+ > **Agent Builder platform-documented** (not in `uipath-python` public SDK docs):
77
+ >
78
+ > | Validator | When it's needed | Valid scope | Valid stage |
79
+ > |---|---|---|---|
80
+ > | `harmful_content` | Agent generates open-ended content | Agent, Llm, Tool | Pre or Post |
81
+ > | `intellectual_property` | Agent generates code or text | Agent, Llm only | PostExecution only |
82
+ > | `user_prompt_attacks` | User-facing agent, jailbreak risk | Llm only | PreExecution only |
83
+ >
84
+ > When recommending the three "platform-documented" types, do NOT cite them by name unless the specific validator is already present in the project's `guardrails` array or agent-builder schema. Instead say: *"Add an appropriate content-safety guardrail supported by this agent layout."*
85
+
86
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
87
+ |---|---|---|---|---|---|
88
+ | `LC_GUARDRAIL_PII_MISSING` | warning | guardrails | Agent processes personal data but has no `pii_detection` guardrail | Read `inputSchema`, `outputSchema`, system prompt. Assess: does the agent process personal data? Infer from field names + descriptions (names, emails, addresses, IDs, health info, financial info). When yes, check `.guardrails[]` for `pii_detection`. Emit when absent. file = `agent.json` (or normalized JSON). | Add a `pii_detection` guardrail (SDK-confirmed; cite by name). |
89
+ | `LC_GUARDRAIL_INJECTION_MISSING` | warning | guardrails | User-facing free-text input but no `prompt_injection` guardrail | Read `inputSchema`. Assess: does it have free-text string fields users can fill with arbitrary content? When yes, check guardrails for `prompt_injection`. Emit when absent. Do NOT recommend `user_prompt_attacks` by name unless already present in the project's config — see validator authority note above. file = `agent.json`. | Add a `prompt_injection` guardrail (SDK-confirmed) or an appropriate injection-protection guardrail supported by this agent layout. |
90
+ | `LC_GUARDRAIL_EVALS_CONSISTENCY` | judgment | guardrails | `enabledForEvals: true` may interfere with the eval set's intent | Read guardrails. For each with `enabledForEvals: true`, read the eval set. Assess: is the eval set testing guardrail behavior (intentional) or testing agent behavior (where guardrails may interfere)? Emit when intent unclear; reason in the description. file = guardrail source, element = guardrail name. | Set `enabledForEvals: false` for agent-behavior tests, or document that the eval set is specifically testing guardrail behavior. |
91
+
92
+ ---
93
+
94
+ ## GeneralChecker
95
+
96
+ Covers system-prompt quality, settings fit, no-flow failure modes, and prompt-vs-schema concerns that need reasoning.
97
+
98
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
99
+ |---|---|---|---|---|---|
100
+ | `LC_PROMPT_ROLE_DEFINITION` | warning | general | System prompt does not open with a clear role / persona statement | Read system prompt. Assess: does the opening paragraph state what the agent is and what it does? Emit when missing. file = system prompt source. | Add an opening sentence: `"You are an X that does Y."` |
101
+ | `LC_PROMPT_WHEN_GUIDANCE` | warning | general | Prompt explains tool capabilities but not when to use each tool | Read prompt + tool list. Assess per tool: does the prompt explain *when* to use it, not just *what* it does? `"Use SearchKB when the user asks a factual question about company policy"` is good; `"SearchKB: searches the knowledge base"` is not. Emit per tool lacking WHEN guidance. file = system prompt source, element = tool name. | For each tool, add a "use this when …" sentence to the prompt. |
102
+ | `LC_PROMPT_SCOPE_BOUNDARIES` | warning | general | Prompt does not explicitly state what the agent should NOT do | Read system prompt. Assess: does it contain explicit boundaries (`"Do not …"`, `"Only handle questions about X"`, `"If unsure, escalate"`)? Emit when absent. file = system prompt source. | Add a "Scope & Boundaries" section listing what is in and out of scope. |
103
+ | `LC_PROMPT_OUTPUT_FORMAT` | warning | general | `outputSchema` is structured but prompt has no output-format instruction | Read `outputSchema`. Read system prompt. Assess: if the schema has specific named fields (not just a string), does the prompt instruct the agent how to populate them? Emit when missing. file = system prompt source. | Add an "Output Format" section showing the expected structure (or a sample). |
104
+ | `LC_PROMPT_INSTRUCTION_CONFLICTS` | warning | general | Prompt contains internally contradictory instructions | Read system prompt. Assess: are there contradictions (`"Always respond in JSON"` alongside `"Write your response as a friendly paragraph"`)? Emit per contradiction. file = system prompt source. | Pick one instruction; remove or reconcile the other. |
105
+ | `LC_PROMPT_OVERSPECIFICATION` | info | general | Prompt is so specific about exact phrases that it will break on reasonable paraphrase | Read system prompt. Assess: does it handle dozens of exact phrases that paraphrase trivially? A 3-page prompt with 47 explicit phrases is brittle. file = system prompt source. | Generalize the prompt — describe categories of input rather than enumerating phrases. |
106
+ | `LC_PROMPT_STOPPING_CRITERIA` | warning | general | Prompt has no explicit stopping criteria for unresolvable cases | Read system prompt. Assess: is there a soft stop (`"If you cannot determine the answer after 3 attempts, respond with what you have"`)? Without one the agent relies entirely on `maxIterations`. Emit when missing. file = system prompt source. | Add an explicit stopping instruction for the "I cannot resolve this" case. |
107
+ | `LC_SETTINGS_MAXITERATIONS_FIT` | judgment | general | `maxIterations` value inconsistent with the agent's stated purpose | Read `.settings.maxIterations` + system prompt. Assess: a simple classifier rarely needs >3-5; a complex multi-tool research agent may need 20-30. Extreme values inconsistent with the agent's purpose are flagged. Emit with reasoning. file = `agent.json` or normalized source. | Adjust `maxIterations` to match the agent's actual loop complexity. |
108
+ | `LC_SETTINGS_TEMPERATURE_FIT` | judgment | general | `temperature` value inappropriate for task | Read `.settings.temperature` + system prompt. Assess: temperature 0 fits deterministic tasks (classification, extraction); non-zero on a classifier produces inconsistent labels. Emit with reasoning. file = `agent.json` or normalized source. | Set temperature to 0 for deterministic tasks; raise to 0.3-0.7 for conversational generation. |
109
+ | `LC_FAILURE_HALLUCINATE_ARGS` | warning | general | Tool `inputSchema` has required fields with no descriptions, and the LLM must guess values | Walk tools. For each, read required fields. Assess: are required fields self-explanatory, or do they need descriptions to be filled correctly? Emit when the LLM would have to guess valid values. file = tool source, element = `<tool_name>:<param>`. | Add `description` to each required parameter explaining valid values and format. |
110
+ | `LC_FAILURE_WRONG_TOOL` | warning | general | ≥2 tools have descriptions the LLM could reasonably apply to the same user request | Read all tool descriptions. Assess from a user's perspective: could any two be selected for the same request? Emit per ambiguous pair. file = tool source, element = `<tool_a>,<tool_b>`. | Sharpen descriptions to make tool selection unambiguous. |
111
+ | `LC_FAILURE_PROMPT_INJECTION` | warning | general | Tool-output injection risk OR system-prompt-as-injection (jailbreak fragments) | Two shapes, fire on either: (a) **Tool-output injection** — a tool returns user-controlled content re-inserted into context without sanitisation, and no `prompt_injection` guardrail is active. (b) **System-prompt-as-injection** — the system prompt itself attempts to override platform safety, contains DAN-style markers (`"ignore previous"`, `"no restrictions"`, `"do anything now"`), or instructs the model to behave as another assistant (`"As ChatGPT, …"`). file = source of risk. | (a) Add `prompt_injection` guardrail and/or sanitize tool output. (b) Rewrite the system prompt to remove adversarial markers. |
112
+ | `LC_FAILURE_IRREVERSIBLE_ACTION` | warning | general | Tools that create / delete / modify records exist alongside no escalation resource and no prompt confirmation requirement | Walk tools. Identify create/delete/modify capabilities. Read escalation resources + system prompt. Assess: is there an escalation path or prompt instruction to confirm before destructive actions? Emit when absent. file = tool source. | Add an escalation resource gating destructive actions, or add a confirmation requirement to the system prompt. |
113
+ | `LC_FAILURE_AUTHORITY_ESCALATION` | warning | general | Agent has admin-level tools but no prompt restriction on context of use | Walk tools. Identify admin-level capabilities (process invocation, queue manipulation, entity modification). Read system prompt. Assess: does the prompt restrict the context in which these are used? Emit when unrestricted. file = system prompt source. | Restrict admin-level tools in the system prompt to specific user roles / scenarios, or add a guardrail. |
114
+ | `LC_ESCALATION_OVERBROAD` | warning | general | Escalation description uses universal quantifiers without a narrowing condition | Read escalation resource `description`s (and channel `description`s). Assess: does it use universal quantifiers (`"always escalate"`, `"every classification"`, `"all responses"`, `"any output"`, `"regardless of intent"`) near the start AND lack a narrowing condition (`"if confidence < X"`, `"when classification is Uncertain"`, `"only for"`)? Emit when both hold. file = escalation source, element = escalation name. | Add a narrowing condition to the escalation description; if the intent really is to escalate everything, document why. |
115
+ | `LC_PROMPT_FEW_SHOT_MISSING` | warning | general | Structured `outputSchema` (≥3 fields, or ≥2 with nested) but system prompt has no concrete output example | Read `outputSchema` (count fields, check for nested). Read system prompt. Assess: when schema is rich (≥3 fields OR ≥2 with at least one nested), does the prompt include a concrete example (`Example: {…}`, an `Output format:` block with values, in-prompt sample)? 1-2 flat fields don't trigger. Emit when missing. file = system prompt source. | Add a concrete example output to the system prompt — few-shot lifts structured-output accuracy on rich schemas. |
116
+ | `LC_PROMPT_NEGATIVE_HEAVY` | warning | general | >50% of distinct prompt instructions are negative (`do not`, `never`, `avoid`, `must not`, `don't`) | Read system prompt. Tokenize into instructions (sentences, bullets). Assess: what fraction are negative? Emit when >50%. file = system prompt source. | Rewrite negative instructions as positive ones — LLMs follow `"always do X"` more reliably than `"never do not-X"`. |
117
+ | `LC_USER_PROMPT_BIASED_EXAMPLE` | warning | general | User-role message ends with an example output containing a specific concrete class value, unconditioned on input | Read user-role message. Assess (must hold all three): (1) contains `"Example of correct output:"` / `"Example output:"` / `"For example:"` / `"Sample output:"` (or similar header); (2) the example body is JSON-shaped with specific concrete values for classification fields (`"classification": "Accepted"`, `"intent": "approve"`); (3) the template doesn't condition the example on the input (`"for an acceptance email, …"`, `"if the user is asking about billing, …"`). When all three hold, the LLM treats the example's class as the de-facto answer for ambiguous inputs. file = user message source. | Either remove the example, move it to the **system** prompt as one of several balanced examples, or condition it on input shape. |
118
+
119
+ ---
120
+
121
+ ## What this catalog cannot do
122
+
123
+ The agent applies these rules from the project source as it is *checked into the repo*. It cannot:
124
+
125
+ - Verify the LLM actually follows the prompt at runtime — prompt quality is assessed; LLM compliance can only be confirmed by running the agent.
126
+ - Verify whether tool selection is correct at runtime — overlapping descriptions are flagged as risk; actual selection behavior requires running.
127
+ - Verify whether guardrails fire correctly — structural configuration is checked; whether the underlying service catches a given input is a runtime question.
128
+ - Validate live IDs (connection IDs, index names, recipient addresses) — these require API calls.
@@ -30,7 +30,7 @@ Quality checklist for UiPath Orchestrator resources — assets, queues, storage
30
30
 
31
31
  | Check | Severity | How to Verify |
32
32
  |---|---|---|
33
- | Assets follow consistent naming convention | Warning | `uip resource assets list <FOLDER_ID> --output json` |
33
+ | Assets follow consistent naming convention | Warning | `uip or assets list --folder-path <FOLDER> --output json` |
34
34
  | Recommended pattern: `[Department]_[Process]_[AssetName]` | Info | Review asset names |
35
35
  | No duplicate asset names in the same folder | Warning | Check for duplicates |
36
36
  | Asset descriptions populated | Info | Check description fields |
@@ -65,7 +65,7 @@ Quality checklist for UiPath Orchestrator resources — assets, queues, storage
65
65
 
66
66
  | Check | Severity | How to Verify |
67
67
  |---|---|---|
68
- | Queue names follow consistent convention | Warning | `uip resource queues list <FOLDER_ID> --output json` |
68
+ | Queue names follow consistent convention | Warning | `uip or queues list --folder-path <FOLDER> --output json` |
69
69
  | Recommended pattern: `[Department]_[Process]_QueueName` | Info | Review queue names |
70
70
  | Max retries configured (1-50, typically 3) | Warning | Check max retry setting |
71
71
  | Auto-retry enabled for application exceptions | Warning | Check auto-retry setting |
@@ -131,7 +131,7 @@ cat "<PROJECT_DIR>/project.json" | python3 -c "import json,sys; d=json.load(sys.
131
131
 
132
132
  ```bash
133
133
  # Run for EACH entry point file discovered above
134
- uip rpa validate --file-path "<ENTRY_FILE>" --project-dir "<PROJECT_DIR>" --output json --use-studio
134
+ uip rpa validate --file-path "<ENTRY_FILE>" --project-dir "<PROJECT_DIR>" --output json
135
135
  ```
136
136
 
137
137
  **Step 3 — Report ALL results:**
@@ -55,7 +55,7 @@ Comprehensive quality checklist for UiPath RPA projects — coded workflows (C#)
55
55
 
56
56
  | Check | Severity | How to Verify |
57
57
  |---|---|---|
58
- | All referenced packages are installable | Critical | `uip rpa packages install --use-studio` |
58
+ | All referenced packages are installable | Critical | `uip rpa packages install` |
59
59
  | No unused packages | Warning | Workflow Analyzer rule ST-USG-010 |
60
60
  | Version constraints use proper syntax (`[1.0.0]`, `[1.0.0, 2.0.0)`) | Warning | Read project.json dependencies |
61
61
  | No package version conflicts | Critical | Check for multiple versions of same package family |
@@ -99,7 +99,7 @@ Comprehensive quality checklist for UiPath RPA projects — coded workflows (C#)
99
99
 
100
100
  | Check | Severity | How to Verify |
101
101
  |---|---|---|
102
- | All `.xaml` files pass validation | Critical | `uip rpa validate --file-path "<FILE>" --project-dir "<DIR>" --output json --use-studio` |
102
+ | All `.xaml` files pass validation | Critical | `uip rpa validate --file-path "<FILE>" --project-dir "<DIR>" --output json` |
103
103
  | Expression language in all XAML files matches `project.json` setting | Critical | Check `expressionLanguage` consistency |
104
104
  | No C# syntax in VB.NET projects | Warning | If `expressionLanguage` is `VisualBasic`, grep all `.xaml` for C# patterns: `!=`, `&&`, `\|\|`, `null` (VB uses `Nothing`), `$"` (interpolated strings), `=>` (lambda), `//` (comments), `typeof()` (VB uses `GetType()`). These compile-fail or silently misbehave. |
105
105
  | No activities with default display names ("Sequence", "Assign", "If") | Warning | Workflow Analyzer rule ST-MRD-002 |
@@ -0,0 +1,90 @@
1
+ # Rule Catalog — Workflow (SKILL.md Step 2.5)
2
+
3
+ Step 2.5 of the review workflow. Runs **after** Step 2 (`uip agent validate` and related CLI validation) and **before** Step 3 (manual checklist review). Adds rule-ID-level findings to the report from two sources, in order:
4
+
5
+ 1. **The review CLI** (`uip agent review` / `uip codedagent review`) — all deterministic static checks.
6
+ 2. **The judgment catalog** (`agents-*-rules.md`) — checks that require the agent to read source and reason.
7
+
8
+ ## Procedure
9
+
10
+ ### 2.5a — Run the review CLI first
11
+
12
+ Run the review command for the agent type, once, capturing JSON:
13
+
14
+ | Agent type | Command |
15
+ |---|---|
16
+ | Low-code (`agent.json`) | `uip agent review "<PROJECT_DIR>" --output json` |
17
+ | Coded (`main.py` + framework config) | `uip codedagent review "<PROJECT_DIR>" --output json` |
18
+
19
+ Parse the JSON. Findings live under `Data.Issues[]`; each issue is:
20
+
21
+ ```json
22
+ {
23
+ "RuleId": "LOWCODE_ENTRY_POINTS_MISSING",
24
+ "Category": "schema",
25
+ "Severity": "error",
26
+ "Description": "...",
27
+ "File": "entry-points.json",
28
+ "SuggestedFix": "..."
29
+ }
30
+ ```
31
+
32
+ The response also carries `Data.Verdict` (PASS/FAIL), `Data.Score`, `Data.Grade`, and `Data.Stats` — report the verdict/score if useful, but the `Issues[]` are the findings. Carry each issue into the report **verbatim**; do not re-derive, rename, or re-rank. These `RuleId`s are authoritative as the CLI emits them and are **not** duplicated in the skill catalog.
33
+
34
+ If the review command is unavailable (CLI not installed, or a version without `agent review` / `codedagent review`), record one line in the report's "Rules Skipped" subsection with `reason: "uip agent review / codedagent review CLI not available"`, then continue with 2.5b.
35
+
36
+ ### 2.5b — Apply the judgment catalog
37
+
38
+ 1. **Identify which catalog files apply.** Use the detection table below.
39
+ 2. **Read each catalog file in full.**
40
+ 3. **Apply each rule's `detection_method`** (always the judgment form): read the named source material, reason about it, emit a finding when the criteria hold. Log the reasoning in the finding's `description`.
41
+ 4. **Track skipped rules.** If a rule cannot apply (`status: deferred`, missing optional file, no eval set to assess against), record `rule_id` + reason for the report's "Rules Skipped" subsection. **Never silently skip.**
42
+ 5. **Merge findings into the Step 5 report** under the "Rule Findings" subsection. Use the canonical line format:
43
+
44
+ ```
45
+ [<prefix><n>] `<rule_id>` — <file> — <description>. Fix: <suggested_fix>.
46
+ ```
47
+
48
+ where prefix is `C-D-` (Critical), `W-D-` (Warning), or `I-D-` (Info) per the severity mapping in [`rule-format.md`](rule-format.md).
49
+
50
+ ## Detection table
51
+
52
+ Maps project signals to the judgment catalog files that must be loaded. Extend this table when adding new artifact types — do not edit SKILL.md.
53
+
54
+ | Signals present | Project type | Catalog files |
55
+ |---|---|---|
56
+ | `agent.json` AND no `main.py` AND no `pyproject.toml` | Agent (low-code) | `agents/agents-common-rules.md` + `agents/agents-lowcode-rules.md` |
57
+ | `pyproject.toml` + `main.py` + any framework config (`langgraph.json` / `llama_index.json` / `openai_agents.json` / `google_adk.json` / `pydantic_ai.json` / `agent_framework.json`) | Agent (coded) | `agents/agents-common-rules.md` + `agents/agents-coded-rules.md` |
58
+ | `pyproject.toml` + `main.py` + `uipath.json[functions]` only (no framework config) | Agent (coded — Simple Function) | same as Agent (coded) |
59
+ | `agent.json` + `pyproject.toml` + `main.py` (agent-builder coded layout) | Agent (low-code + coded) | all three: common + lowcode + coded; tag each finding with its source file |
60
+ | `project.json` + `.xaml` / `.cs` | RPA | *(phase 2 — catalog not yet authored)* |
61
+ | `*.flow` + `project.uiproj` with `ProjectType: "Flow"` | Flow | *(phase 2)* |
62
+ | `.uipath/` or `app.config.json` | Coded App | *(phase 2)* |
63
+ | None of the above with no agent signal | unknown | Skip Step 2.5; flag in the report's "Notes" section that no catalog matched. |
64
+
65
+ ## Why the split
66
+
67
+ Deterministic checks (file presence, schema walks, counts, set-membership, regex, run-artifact analysis) are faster and byte-reproducible in code, so they live in the review CLI — the agent does not re-implement them. The catalog carries only what code cannot decide reliably: prompt quality, tool-selection ambiguity, framework fit, semantic schema/eval mismatches, whole-program dataflow. Running the CLI first means the catalog never re-litigates a deterministic finding.
68
+
69
+ ## Coexistence with manual checklists (Step 3)
70
+
71
+ - The CLI + judgment catalog cover what can be checked mechanically or with focused judgment. The checklists in `references/<type>/<type>-review-checklist.md` cover broader semantic / contextual checks (PDD alignment, business-logic correctness, architectural fit).
72
+ - Checklist rows that overlap with a rule are tagged like `*(rule: \`RULE_ID\`)*` — when reviewing, that rule (CLI or judgment) already covered it; do not re-flag.
73
+ - Findings from the CLI + judgment catalog appear in the "Rule Findings" subsection; findings from manual review use the Critical / Warning / Info sections.
74
+
75
+ ## Determinism contract
76
+
77
+ Two consecutive runs over the same project produce identical findings *for the review-CLI checks*. Judgment-catalog rules are best-effort identical — the agent should reason from the same evidence in the same order, but minor wording variation in `description` is acceptable.
78
+
79
+ - Sort findings by (severity, category, rule_id, file, line) — never by discovery order.
80
+ - Do not include timestamps in finding text.
81
+ - Use relative paths from project root in finding `file` values; absolute paths in project metadata only.
82
+
83
+ ## Anti-patterns
84
+
85
+ 1. **Do not invent rule IDs.** If you observe a real issue covered by neither the review CLI nor the judgment catalog, surface it under the Critical / Warning / Info sections as a normal finding — do not promote it to a `rule_id`.
86
+ 2. **Do not re-rank severities.** The CLI's `Severity` and the catalog's `severity` are authoritative for `error` / `warning` / `info`. For `judgment` rows, log the reasoning when picking the report band.
87
+ 3. **Do not silently skip rules.** Every skip belongs in the report's "Rules Skipped" subsection with a reason.
88
+ 4. **Do not run the catalog before the CLI.** Run `uip agent review` / `uip codedagent review` first (2.5a), then `uip agent validate` is assumed already passed (Step 2) — so the judgment catalog focuses only on reasoning the CLI cannot do.
89
+ 5. **Do not load catalog files outside the detection table.** Loading low-code rules against a non-agent project produces false positives.
90
+ 6. **Do not re-implement deterministic checks inline.** Counts, regex, schema-presence, and set-membership are the review CLI's job. The skill itself ships no executable code.
@@ -0,0 +1,91 @@
1
+ # Rule Catalog — Row Format
2
+
3
+ Schema for every row in the `agents-*-rules.md` judgment catalogs. The catalog is the contract — the agent applies each rule by reasoning and emits findings using its `rule_id`, `severity`, and `suggested_fix`.
4
+
5
+ The catalog is **judgment-only**: every rule requires the agent (itself an LLM) to read source and reason — prompt quality, tool-selection ambiguity, framework fit, semantic schema/eval mismatches. Deterministic checks (file presence, schema walks, counts, regex, run-artifact analysis) are **not** in the catalog; they run in the `uip agent review` / `uip codedagent review` CLI (SKILL.md Step 2.5a), which emits its findings in the same shape (`RuleId`, `Severity`, `Category`, `Description`, `File`, `SuggestedFix`).
6
+
7
+ ## Row schema
8
+
9
+ Each catalog file uses one H2 section per logical checker (e.g., `## SchemaChecker`, `## ToolsChecker`). Inside each section, rules sit in one uniform table:
10
+
11
+ ```markdown
12
+ | rule_id | severity | category | trigger | detection_method | suggested_fix |
13
+ ```
14
+
15
+ | Column | Type | Source |
16
+ |---|---|---|
17
+ | `rule_id` | UPPER_SNAKE_CASE identifier in backticks | Stable contract. Never rename. |
18
+ | `severity` | One of `error` / `warning` / `info` / `judgment` (always a single value) | Mapped at report time (see below). |
19
+ | `category` | `evals` / `schema` / `tools` / `guardrails` / `general` / `code` / `security` / `runtime` | Drives report grouping. |
20
+ | `trigger` | Short condition phrase | What the rule fires on. |
21
+ | `detection_method` | The **judgment form** (see below) | The concrete evidence to read and how to reason about it. |
22
+ | `suggested_fix` | One imperative sentence | The remediation. |
23
+
24
+ ## Severity mapping (catalog → report)
25
+
26
+ | Catalog `severity` | Report band (from SKILL.md Step 5) | Finding ID prefix |
27
+ |---|---|---|
28
+ | `error` | Critical | `C-D-` |
29
+ | `warning` | Warning | `W-D-` |
30
+ | `info` | Info | `I-D-` |
31
+ | `judgment` | Warning (default; agent picks Critical / Warning / Info based on contextual severity) | `W-D-` (or `C-D-` / `I-D-` when the agent escalates / de-escalates with reasoning logged in the finding's `description`) |
32
+
33
+ The `-D-` infix marks the finding as rule-driven (vs `-V-` for Step 2 validation output, or no infix for manual checklist findings). Review-CLI findings carry the `RuleId` the CLI emits and are reported in the same "Rule Findings" subsection.
34
+
35
+ ## Detection method — the judgment form
36
+
37
+ Every catalog row's `detection_method` is the judgment form:
38
+
39
+ > **Judgment** — `Read <files>; assess whether <condition>; emit when <criteria>.` The agent reads the relevant source material (system prompt, tool descriptions, eval datapoints, schema, code) and applies the rule by reasoning. The `trigger` column states the rule; `detection_method` states the concrete evidence to inspect; the agent decides whether the rule fires and logs its reasoning in the finding's `description`.
40
+
41
+ Deterministic forms (Glob, Read+JSON walk, Grep, Bash, count/threshold, set-membership) do **not** appear in catalog rows — those checks live in the review CLI. If a check can be made a reliable single-file regex, count, or schema walk, it belongs in the CLI, not here.
42
+
43
+ ## Status field (optional 7th column)
44
+
45
+ A rule MAY add a `status` column for deferred or experimental rules:
46
+
47
+ ```markdown
48
+ | rule_id | severity | category | trigger | detection_method | suggested_fix | status |
49
+ ```
50
+
51
+ Allowed `status` values:
52
+
53
+ - (omitted / blank) — active. Apply the rule.
54
+ - `deferred` — documented for traceability; do not apply. Record in the report's "Rules Skipped" section with reason "deferred (status: deferred)".
55
+
56
+ ## The review CLI (deterministic findings)
57
+
58
+ The agent runs the review command once per agent, capturing JSON:
59
+
60
+ ```bash
61
+ uip agent review "<PROJECT_DIR>" --output json # low-code
62
+ uip codedagent review "<PROJECT_DIR>" --output json # coded
63
+ ```
64
+
65
+ It returns `Data.Issues[]` — deterministic findings keyed by `RuleId`, in the same severity/category/description/file/fix shape as a catalog row. The agent carries these into the report verbatim. The catalog does not list these `RuleId`s; the CLI's registry is their source of truth.
66
+
67
+ ## Constants section
68
+
69
+ Judgment rows reference thresholds inline as soft cues (e.g. "a `<20-char` description is almost always too thin") rather than as hard constants — the agent reasons about sufficiency, not a fixed cutoff. A catalog file MAY still add a `## Constants` H2 if a kept rule genuinely needs a named threshold.
70
+
71
+ ## Worked examples
72
+
73
+ **Judgment (prompt quality):**
74
+
75
+ ```markdown
76
+ | `LC_PROMPT_ROLE_DEFINITION` | warning | general | System prompt does not open with a clear role / persona statement | Read the system prompt. Assess whether the opening paragraph states what the agent is and what it does. Emit when missing. file = system prompt source. | Add an opening sentence: `"You are an X that does Y."` |
77
+ ```
78
+
79
+ **Judgment (tool sufficiency):**
80
+
81
+ ```markdown
82
+ | `VAGUE_TOOL_DESCRIPTION` | judgment | tools | Tool description missing or too vague for the LLM to choose the tool correctly | Walk tools; read each `.description`. Assess: is it specific enough — purpose, side effects, when to use vs not — that the model can pick this tool over its siblings? Blank or boilerplate fires; a 2-3 sentence description does not. file = tool source, element = tool name. | Write a 2-3 sentence description covering purpose, side effects, and when to use vs not use the tool. |
83
+ ```
84
+
85
+ ## Reading order for the agent
86
+
87
+ 1. Read this file once.
88
+ 2. Read [`rule-catalog-workflow.md`](rule-catalog-workflow.md) for the Step 2.5 procedure (run the review CLI first, then the judgment catalog).
89
+ 3. Run the review CLI; capture `Data.Issues[]`.
90
+ 4. Read the catalog files indicated by the detection table for the current project type.
91
+ 5. Apply rows; emit findings using the canonical line format from SKILL.md Step 5.