Skip to content

Skills

Skills are named, versioned, sandboxed execution units — think of them as the agent's procedural memory. Where tools are individual operations, skills package multi-step workflows, tool combinations, and conditional logic into a callable unit that can be discovered, invoked, and tracked for performance.

Overview

Skills are higher-level, sandboxed execution units compared to tools. While tools are primitive operations, skills can be multi-step procedures with LLM integration, custom instructions, and streaming execution events.

Protocol Messages (5 types)

Type StringModelDirection
skill/discover/reqSkillDiscoverRequestAgent → Host
skill/discover/respSkillDiscoverResponseHost → Agent
skill/call/reqSkillCallRequestAgent → Host
skill/call/respSkillCallResponseHost → Agent
skill/eventSkillEventHost → Agent (streaming)

SkillDefinition

Comprehensive skill manifest:

FieldTypeDescription
namestrUnique skill name
versionstrSkill version
descriptionstrWhat the skill does
triggerslist[str]When to activate this skill
toolslist[str]Required tools
toolkitslist[str]Required toolkits
statusSkillStatusCreated, Blocked, Published, Archived
input_schemadictJSON Schema for input
output_schemadictJSON Schema for output
instructionsstrLLM instructions/prompt
file_pathstrSkill file location
llm_configLLMConfigLLM provider settings
argumentsdictDefault arguments
when_to_usestrUsage hint
argument_hintstrArgument guidance
sourcestrOrigin
categorystrSkill category
tagslist[str]Search tags
max_turnsintMax execution turns
timeout_secondsfloatExecution timeout
iconstrDisplay icon
metadatadictExtra metadata

SkillResult

FieldTypeDescription
successboolExecution succeeded
datadictResult data
summarystrHuman-readable summary
truncatedboolOutput truncated
errorstrError message
error_codeSkillErrorCodeUNKNOWN_SKILL, SKILL_ERROR, RUNTIME_ERROR
duration_msintExecution time
eventslist[SkillEvent]Streaming events collected

SkillEvent (extends A2EEvent)

Streaming events during skill execution with kinds: skill.started, tool.started, tool.completed, tool.failed, llm.started, llm.token, llm.completed, skill.completed, skill.failed.

LLMConfig

FieldTypeDescription
provider_namestrLLM provider (e.g. "anthropic")
provider_credentialsdictAPI keys
provider_configdictProvider-specific settings
is_defaultboolUse as default LLM

SkillPlugin ABC

python
class SkillPlugin(A2EPlugin):
    @abstractmethod
    def _list_skills(self) -> list[SkillDefinition]: ...

    @abstractmethod
    def _execute_skill(self, name, arguments, context) -> SkillResult: ...

    def discover(self, msg):
        # List skills then filter by tags and categories

    def call(self, msg):
        # Execute skill with streaming support
        # Creates inner emit_event() closure
        # Passes context dict: {emit_event, llm_override, metadata, streaming}

SkillAPI (Client)

python
from a2e.caps.skills.client import SkillAPI

skills = SkillAPI(client)

# Discover available skills
skill_list = skills.discover(tags=["analysis"], categories=["data"])

# Call a skill
result = skills.call(
    name="example-analysis",
    arguments={"data": "sample"},
    streaming=True,
    on_event=lambda event: print(f"Event: {event.kind}"),
    timeout=60.0
)

if result.success:
    print(result.data)

A2E Protocol v1.0 — Released under the MIT License.