UiPath Documentation
uipath-cli
latest
false
UiPath CLI user guide

uip codedagent

Syntax and options for `uip codedagent`, a bridge to the Python UiPath CLI for building and running Coded Agents.

uip codedagent is a thin bridge to the Python-based UiPath Coded Agents workflow. It detects a suitable Python interpreter, confirms the uipath Python package is installed, and forwards a fixed whitelist of subcommands into the Python CLI — so new, dev, pack, publish, and other lifecycle verbs come from the Python package rather than this tool. review is the one exception: it's a native command implemented directly in this tool, not forwarded.

Refer to Tools (plugins) for how thin wrappers differ from full tools.

Synopsis​

uip codedagent setup [--force]
uip codedagent review [path] [--checks <categories>]
uip codedagent <whitelisted-command> [args...]
uip codedagent setup [--force]
uip codedagent review [path] [--checks <categories>]
uip codedagent <whitelisted-command> [args...]

setup, review, and any forwarded command honor the global options (--output, --output-filter, --log-level, --log-file). Exit codes follow the standard contract.

uip codedagent review​

Review a coded agent project against a deterministic rule set — no Python interpreter needed, this runs natively in the CLI. Returns a verdict (PASS/FAIL), a score (0-100), a letter grade (A+...F), and a list of issues.

Arguments​

NameRequiredPurpose
[path]noAgent project directory. Default: ..

Options​

  • --checks <categories> — Comma-separated rule categories to run. Omit to run all rules. Known categories include evals, schema, tools, guardrails, code, general (run uip codedagent review --help for the live list).

Examples​

uip codedagent review ./my-coded-agent
uip codedagent review --checks code
uip codedagent review ./my-coded-agent
uip codedagent review --checks code

Data shape (--output json)​

{
  "Code": "CodedAgentReview",
  "Data": {
    "ProjectDir": "./my-coded-agent",
    "Verdict": "PASS",
    "Score": 100,
    "Grade": "A+",
    "Issues": [],
    "Strengths": [],
    "Stats": {
      "errors": 0,
      "warnings": 0,
      "infos": 0,
      "byCategory": { "evals": 0, "schema": 0, "tools": 0, "guardrails": 0, "code": 0, "general": 0 }
    }
  }
}
{
  "Code": "CodedAgentReview",
  "Data": {
    "ProjectDir": "./my-coded-agent",
    "Verdict": "PASS",
    "Score": 100,
    "Grade": "A+",
    "Issues": [],
    "Strengths": [],
    "Stats": {
      "errors": 0,
      "warnings": 0,
      "infos": 0,
      "byCategory": { "evals": 0, "schema": 0, "tools": 0, "guardrails": 0, "code": 0, "general": 0 }
    }
  }
}

An unrecognized --checks value fails with Code: "CodedAgentReviewInvalidChecks", listing the known categories.

uip codedagent setup​

Detect Python and verify the uipath package is installed. Results are cached in a per-user file so subsequent codedagent commands can resolve the Python binary instantly. The cache is shared with uip function setup, so running either command configures Python for both.

When a virtual environment is active (VIRTUAL_ENV is set), setup binds the Python interpreter and the uipath executable from that environment. A cached result whose uipath executable is outside the active virtual environment is detected again.

Arguments​

None.

Options​

  • --force — Re-run detection even if a cached result is present.

Examples​

uip codedagent setup
uip codedagent setup --force
uip codedagent setup
uip codedagent setup --force

Data shape (--output json)​

{
  "Code": "CodedAgentsSetup",
  "Data": {
    "PythonPath": "/usr/bin/python3.11",
    "Package": "uipath",
    "PackageInstalled": "Yes",
    "PackageVersion": "1.0.0",
    "UipathPath": "/home/me/my-agent/.venv/bin/uipath",
    "Source": "venv"
  }
}
{
  "Code": "CodedAgentsSetup",
  "Data": {
    "PythonPath": "/usr/bin/python3.11",
    "Package": "uipath",
    "PackageInstalled": "Yes",
    "PackageVersion": "1.0.0",
    "UipathPath": "/home/me/my-agent/.venv/bin/uipath",
    "Source": "venv"
  }
}
FieldDescription
PythonPathPython interpreter that setup bound.
PackagePython package that setup checked.
PackageInstalledYes or No.
PackageVersionInstalled package version, or N/A.
UipathPathPath to the uipath executable that forwarded commands run.
SourceWhere the interpreter came from: venv (the virtual environment active through VIRTUAL_ENV during setup) or path (an interpreter found by name on PATH).

Environment checks​

  • Allowed Python versions are configured via the environment variable PYTHON_TOOL_PYTHON_VERSIONS. An empty list raises Failure at setup time.
  • When a virtual environment is active but the uipath package is not installed in it, setup fails and asks you to install the package inside that environment, then re-run uip codedagent setup --force.
  • If a .venv directory exists in the current working directory but no virtual environment is activated (VIRTUAL_ENV is not set), setup refuses to run and suggests activating it first (.venv\Scripts\activate on Windows, source .venv/bin/activate elsewhere).

Forwarded commands​

A fixed whitelist of subcommand names is forwarded to the uipath Python CLI as codedagent exec <subcommand> ...: add, debug, deploy, dev, eval, init, invoke, list-models, new, pack, publish, pull, push, register, run. Anything outside this list — including a typo — is rejected by Commander as an unknown command before any forwarding is attempted; it is not passed through to Python.

Examples​

# Hand off to the Python CLI's new command
uip codedagent new my-agent

# Run the Python CLI's help for a sub-verb
uip codedagent init --help

# Execute a dev loop defined by the Python package
uip codedagent dev
# Hand off to the Python CLI's new command
uip codedagent new my-agent

# Run the Python CLI's help for a sub-verb
uip codedagent init --help

# Execute a dev loop defined by the Python package
uip codedagent dev
Note:

Because these commands are defined by the uipath Python package, their flags and output shape are whatever that package emits — not the CLI's standard Code/Data envelope. Treat the CLI here as a transport. For the argument surface, run uip codedagent <command> --help, which forwards into Python. Bare uip codedagent help is not forwarded — codedagent-tool never registers a help command, so it shows Commander's own generated help for this tool instead.

Auth relay: before forwarding, the CLI reads the session created by uip login and injects these environment variables into the Python subprocess so the SDK picks them up automatically:

  • UIPATH_ACCESS_TOKEN
  • UIPATH_URL (composed as <baseUrl>/<org>/<tenant>)
  • UIPATH_ORGANIZATION_ID, UIPATH_ORGANIZATION_NAME
  • UIPATH_TENANT_ID, UIPATH_TENANT_NAME

If you are not logged in, forwarding still works; the Python CLI runs without those variables.

--force is always stripped: this tool defines no command-specific rules for --force, so it is unconditionally and silently stripped from every forwarded command's arguments before they reach the Python CLI. It never reaches Python, and no error is emitted — passing --force to a forwarded subcommand is simply a no-op.

push requires UIPATH_PROJECT_ID — a required environment variable, checked natively (in this tool, before forwarding to Python), not something the Python CLI enforces on its own. Set it once per project:

echo "UIPATH_PROJECT_ID=<id>" >> .env
uip codedagent push
echo "UIPATH_PROJECT_ID=<id>" >> .env
uip codedagent push

Get <id> from an existing Coded Agent project in Studio Web. The check is skipped for uip codedagent push --help.

deploy/publish --my-workspace (or -w) requires a personal-workspace-capable login scope — another native, pre-forwarding check. It reads your current uip login access token and requires the umbrella OrchestratorApiUserAccess scope or the granular OR.Users or OR.Users.Read scope (any one satisfies it); a token missing all of them fails before anything reaches Python:

{
  "Result": "Failure",
  "Message": "Current login token is missing the OrchestratorApiUserAccess (or granular OR.Users.Read) scope required for --my-workspace.",
  "Instructions": "The personal workspace publish path calls Orchestrator GetCurrentUserExtended and requires either the umbrella OrchestratorApiUserAccess scope or the granular OR.Users.Read scope. If you are using the default client, run `uip login` again — IdentityServer attaches OrchestratorApiUserAccess to issued tokens automatically. ..."
}
{
  "Result": "Failure",
  "Message": "Current login token is missing the OrchestratorApiUserAccess (or granular OR.Users.Read) scope required for --my-workspace.",
  "Instructions": "The personal workspace publish path calls Orchestrator GetCurrentUserExtended and requires either the umbrella OrchestratorApiUserAccess scope or the granular OR.Users.Read scope. If you are using the default client, run `uip login` again — IdentityServer attaches OrchestratorApiUserAccess to issued tokens automatically. ..."
}

The default uip login client picks up OrchestratorApiUserAccess automatically, so this only bites custom clients or a restricted scope list. Skip the check entirely by deploying to the tenant feed instead: uip codedagent deploy --tenant. This check only applies to deploy/publish when --my-workspace/-w is passed — it does not run for a plain deploy/publish or any other whitelisted command.

Exit codes​

Standard exit codes apply. The forwarded subprocess's exit code is relayed directly to the parent shell, so a Python-side failure exits uip codedagent with the same non-zero status.

  • Tools (plugins) — thin-wrapper tool model.
  • uip login — creates the session that is relayed to the Python runtime.
  • uip tools — install, update, uninstall the codedagent-tool package itself.

Was this page helpful?

Connect

Need help? Support(opens in new window)

Want to learn? UiPath Academy(opens in new window)

Have questions? UiPath Forum(opens in new window)

Stay updated