Skip to content

feat(skills): add skills support to advanced agents with sandboxed cli tool - #989

Open
mariadhakalUipath wants to merge 1 commit into
mainfrom
feat/uipath-skills-for-advanced
Open

feat(skills): add skills support to advanced agents with sandboxed cli tool#989
mariadhakalUipath wants to merge 1 commit into
mainfrom
feat/uipath-skills-for-advanced

Conversation

@mariadhakalUipath

Copy link
Copy Markdown

Title: Uipath Skills with Cli tool for advanced agents.

Summary

Adds skills feature for advanced agents. Agent can act on it — run uip commands, review what it ran, and verify what it scaffolded.

Copilot AI review requested due to automatic review settings July 14, 2026 21:20

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds initial “skills” plumbing to advanced agents and introduces a sandbox-oriented internal tool for running uip commands inside an agent workspace.

Changes:

  • Introduces a new create_uipath_cli_tool() (uipath_cli) StructuredTool that runs one uip command per invocation with command validation.
  • Adds unit tests covering command parsing, validation, subprocess result mapping, and timeout behavior for the new tool.
  • Extends advanced-agent builders to accept and forward a skills parameter into the underlying deepagents agent construction.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

File Description
tests/agent/tools/internal_tools/test_uipath_cli_tool.py Adds test coverage for the new sandboxed CLI tool.
src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Implements the sandboxed uipath_cli tool and its input/output schemas.
src/uipath_langchain/agent/tools/internal_tools/__init__.py Exports create_uipath_cli_tool from the internal tools package.
src/uipath_langchain/agent/advanced/agent.py Adds skills parameter propagation to deepagents agent creation/wrappers.

Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated
Comment thread tests/agent/tools/internal_tools/test_uipath_cli_tool.py
@mariadhakalUipath
mariadhakalUipath force-pushed the feat/uipath-skills-for-advanced branch from d79b0c1 to 5b5dea8 Compare July 14, 2026 21:27
@mariadhakalUipath mariadhakalUipath changed the title feat: add skills support to advanced agents with sandboxed workspace tools feat: add skills support to advanced agents with sandboxed cli tool Jul 14, 2026
@mariadhakalUipath
mariadhakalUipath force-pushed the feat/uipath-skills-for-advanced branch from 5b5dea8 to 36f2b2c Compare July 14, 2026 21:32
@mariadhakalUipath mariadhakalUipath changed the title feat: add skills support to advanced agents with sandboxed cli tool feat(skills): add skills support to advanced agents with sandboxed cli tool Jul 14, 2026
@mariadhakalUipath
mariadhakalUipath force-pushed the feat/uipath-skills-for-advanced branch from 36f2b2c to 2f7b1c1 Compare July 14, 2026 21:38

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (1)

src/uipath_langchain/agent/advanced/agent.py:45

  • The create_advanced_agent docstring documents memory but not the newly added skills parameter, which is part of the public API. Update the docstring to describe what skills does and how an empty value is handled.
    """Create a deepagents agent with planning, filesystem, and sub-agent tools.

    ``memory`` is a list of file paths loaded via deepagents' ``MemoryMiddleware``:
    each is read from ``backend`` and injected into the system prompt every turn,
    and the model maintains them with ``edit_file``. Empty disables the middleware.
    """

Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated
Comment thread tests/agent/tools/internal_tools/test_uipath_cli_tool.py
Comment thread src/uipath_langchain/agent/advanced/agent.py

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated
Comment thread src/uipath_langchain/agent/advanced/agent.py Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

src/uipath_langchain/agent/advanced/agent.py:42

  • create_advanced_agent now accepts skills, but the docstring only documents memory. Since empty skills collapses to None (disabling skills support), documenting this behavior would help callers understand how to enable/disable the feature.
    skills: Sequence[str] = (),
) -> CompiledStateGraph[Any, Any, Any, Any]:
    """Create a deepagents agent with planning, filesystem, and sub-agent tools.

    ``memory`` is a list of file paths loaded via deepagents' ``MemoryMiddleware``:

Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated
@mariadhakalUipath
mariadhakalUipath force-pushed the feat/uipath-skills-for-advanced branch 2 times, most recently from 9bbae6c to 850386e Compare July 15, 2026 18:11

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (1)

src/uipath_langchain/agent/advanced/agent.py:44

  • create_advanced_agent() now accepts skills, but the docstring still only explains memory. Since this is a public builder function, the docstring should describe what skills does (and how empty disables it) to avoid confusion for callers.
    """Create a deepagents agent with planning, filesystem, and sub-agent tools.

    ``memory`` is a list of file paths loaded via deepagents' ``MemoryMiddleware``:
    each is read from ``backend`` and injected into the system prompt every turn,
    and the model maintains them with ``edit_file``. Empty disables the middleware.

Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py
Comment thread src/uipath_langchain/agent/tools/internal_tools/__init__.py
Comment thread src/uipath_langchain/agent/advanced/agent.py
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py
@mariadhakalUipath
mariadhakalUipath force-pushed the feat/uipath-skills-for-advanced branch 2 times, most recently from 8fd9bf3 to 923cb66 Compare July 15, 2026 23:16
@sonarqubecloud

Copy link
Copy Markdown

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Comment thread src/uipath_langchain/agent/advanced/agent.py
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated
Comment thread src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py Outdated
@mariadhakalUipath
mariadhakalUipath force-pushed the feat/uipath-skills-for-advanced branch 4 times, most recently from 1c1067d to 7d9ca46 Compare August 6, 2026 20:22
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.

Suppressed comments (3)

src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py:37

  • The tool description says “A negative exit_code means the command was refused”. That’s inaccurate because real subprocess exit codes can be negative on Unix when terminated by a signal. The contract in UiPathCliOutput/test cases is specifically “exit_code == -1000 indicates refusal”, so the description should match to avoid confusing the agent.
    "Run a single UiPath `uip` command in the agent workspace; returns "
    "exit_code/stdout/stderr. Only the uip/uipath binaries, one command per call; "
    "shell chaining is refused. A negative exit_code means the command was refused "
    "before it ran and stderr explains why. Use `subdir` to target a scaffolded "
    "project folder."

src/uipath_langchain/agent/tools/internal_tools/uipath_cli_tool.py:167

  • On timeout, proc.kill() can raise ProcessLookupError if the process exits between the timeout firing and the kill call. That would crash the tool instead of returning the recoverable _REJECTED_EXIT_CODE payload.
    except asyncio.TimeoutError:
        proc.kill()
        await proc.wait()
        return _rejected(
            echoed, f"Command timed out after {_COMMAND_TIMEOUT_SECONDS}s."

src/uipath_langchain/agent/advanced/agent.py:110

  • This PR introduces a sandboxed uipath_cli tool, but create_advanced_agent only forwards the skills list into deepagents and never registers the new tool. The new tool module’s docstring says it is “injected programmatically by the agent graph builder when UiPath skills are active”, but there is currently no call site for create_uipath_cli_tool in src/ (verified by repo search). If skills are expected to prescribe uip commands, the agent needs the tool added to its tool list when skills are enabled (and a FilesystemBackend workspace exists).
        memory=list(memory) or None,
        middleware=list(middleware),
        skills=list(skills) if skills else None,

@mariadhakalUipath
mariadhakalUipath deleted the feat/uipath-skills-for-advanced branch August 6, 2026 20:40
@mariadhakalUipath
mariadhakalUipath restored the feat/uipath-skills-for-advanced branch August 6, 2026 20:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants