Skip to main content

Overview

Remote skills provide a declarative way to expose skills hosted in the AgentKit Skills Sandbox as individual tools on an agent. You describe each remote skill — its name, description, and input schema — in a JSON manifest, and VeADK generates a corresponding tool function for each one. When the agent calls a tool, the framework forwards the request to the remote sandbox through invoke_skill and poll_skill; the actual skill code runs only on the remote side and is never loaded or executed locally. Remote skills are useful when you want to:
  • Expose remote skills as standalone tools so the agent can invoke them by name with structured arguments;
  • Control the timeout for each skill individually;
  • Manage the skill list through a declarative manifest instead of writing tool functions one by one in code.
Remote skills reuse the sandbox infrastructure and credential configuration of execute_skills. Environment variables, Tool IDs, and other prerequisites are the same as those described on the Code sandboxes page.

Prerequisites

Complete skills sandbox setup, ensure the target Skill Space contains executable skills, and save the JSON in Manifest format as remote-skills.json in the current directory. A manifest only describes capabilities; it does not upload or deploy a skill. Names and inputs must match deployed remote skills. Loading definitions and building tools do not contact the cloud. Calling the default executor requires a valid tool context, model, and sandbox configuration.

Usage

Import path:
Steps:
  1. Write a JSON manifest describing the remote skills to expose;
  2. Call load_remote_skill_definitions to load the manifest into a list of RemoteSkillDefinition;
  3. Call build_remote_skill_tools to convert the definitions into tool functions;
  4. Pass the tool functions to the Agent tools parameter.
remote_skills_agent.py
You can also pass a JSON string directly instead of a file path:

Manifest format

The manifest is a JSON object containing a remote_skills array. Each element describes one remote skill:
remote-skills.json

Skill fields

name and description must be non-empty strings, and input_schema must be a JSON object; otherwise loading raises an error. timeout (or timeout_seconds) must be between 1 and 1800. Duplicate name values are not allowed in the same manifest.

Generated tool function

build_remote_skill_tools generates one tool function per RemoteSkillDefinition. The function name is taken from the skill’s name, and the docstring contains the description and input schema. The generated tool function signature is:
When the tool runs, the framework assembles skill_name, query, arguments, and an auto-generated request_id into a query input, sends it to the remote sandbox through invoke_skill and poll_skill, and enforces the timeout configured on the skill definition.
tool_context is marked optional in the signature but is required at call time; omitting it raises an error. VeADK injects it automatically during agent execution — you do not need to pass it manually.

API

RemoteSkillDefinition

RemoteSkillDefinition is the runtime definition of a skill, holding its name, description, input schema, and timeout configuration.

load_remote_skill_definitions

Returns a list of RemoteSkillDefinition. When the value starts with {, it is parsed as a JSON string; otherwise it is read as a file path.

build_remote_skill_tools

Returns a list of tool functions that can be passed directly to the Agent tools parameter.

Input validation and custom executors

input_schema is included in the tool description for the model; the current proxy does not automatically perform full JSON Schema validation before execution. Enforce required fields, enums, and business constraints in the application or remote skill. The manifest loader checks names, descriptions, object structure, and duplicate names. Direct construction of RemoteSkillDefinition does not imply those loader checks ran. The default execute_remote_skill executor calls invoke_skill, then polls with poll_skill, returning text only after completion. Input-required or authentication-required states end the current wait with an error. A timeout does not guarantee the remote task was canceled. A custom executor accepts workflow text plus tool_context and timeout keyword arguments, and returns a string. This example prepares an executor that inspects serialized input without executing a remote skill:
Register functions using Agent(tools=functions) to use the custom executor in an agent; the runtime injects context. The example builds tools and directly checks the custom executor input and output, without calling a model or sandbox.
Last modified on September 19, 2026