Skip to content

Commit 0aaed75

Browse files
committed
rfd: Add Agent Skills List proposal
Proposes a mechanism for agents to advertise available skills to clients, aligned with the Agent Skills Specification (https://agentskills.io/specification). Introduces: - AvailableSkill type with name, description, license, compatibility, and allowedTools fields - AvailableSkillsUpdate session notification
1 parent 72883c7 commit 0aaed75

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed

docs/rfds/agent-skills-list.mdx

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
---
2+
title: "Agent Skills List"
3+
---
4+
5+
- Author(s): [@ignatov](https://github.com/ignatov)
6+
7+
## Elevator pitch
8+
9+
Add a mechanism for agents to advertise available [Agent Skills](https://agentskills.io/specification) to clients. Skills are reusable, composable capabilities that agents can expose, allowing clients to discover what an agent can do beyond basic prompting. This RFD proposes:
10+
1. A canonical `AvailableSkill` type describing skill schema aligned with the [Agent Skills Specification](https://agentskills.io/specification)
11+
2. An `AvailableSkillsUpdate` session notification for streaming skill availability to clients
12+
13+
## Status quo
14+
15+
Currently, the ACP protocol provides `AvailableCommand` and `AvailableCommandsUpdate` for agents to advertise executable commands. However, commands are designed for user-invoked actions within a session (e.g., `/create_plan`, `/research_codebase`), not for describing higher-level agent capabilities that:
16+
17+
- Have licensing or compatibility requirements
18+
- Need pre-approved tool access for security
19+
- Represent modular, composable functionality
20+
- Require rich metadata for discovery and filtering
21+
22+
This creates several problems:
23+
24+
- **Limited capability discovery** - Clients cannot understand what specialized skills an agent offers
25+
- **No licensing visibility** - Users cannot see license terms for specific agent capabilities
26+
- **Missing compatibility info** - No way to indicate if a skill requires specific environments, network access, or system packages
27+
- **Security blind spots** - No pre-declaration of tools a skill might use, making trust decisions difficult
28+
- **Poor extensibility** - Commands lack a metadata mechanism for custom integrations
29+
30+
## What we propose to do about it
31+
32+
Add a new `AvailableSkill` type and `AvailableSkillsUpdate` notification following the existing pattern for `AvailableCommand` and `AvailableCommandsUpdate`. The schema aligns with the [Agent Skills Specification](https://agentskills.io/specification).
33+
34+
### AvailableSkill Schema
35+
36+
| Field | Required | Constraints |
37+
|-------|----------|-------------|
38+
| `name` | Yes | Max 64 characters. Lowercase letters, numbers, and hyphens only. Must not start or end with a hyphen. No consecutive hyphens. |
39+
| `description` | Yes | Max 1024 characters. Non-empty. Describes what the skill does and when to use it. |
40+
| `license` | No | License name or reference to a bundled license file (e.g., `MIT`, `Apache-2.0`, `./licenses/my-license.txt`). |
41+
| `compatibility` | No | Max 500 characters. Indicates environment requirements (intended product, system packages, network access, etc.). |
42+
| `metadata` | No | Arbitrary string key-value mapping for additional properties. |
43+
| `allowedTools` | No | Array of pre-approved tools the skill may use (Experimental). |
44+
45+
```md
46+
---
47+
name: pdf-processing
48+
description: Extract text and tables from PDF files, fill forms, merge documents.
49+
license: Apache-2.0
50+
metadata:
51+
author: example-org
52+
version: "1.0"
53+
---
54+
```
55+
56+
### Session Notification
57+
58+
The `AvailableSkillsUpdate` notification allows agents to stream skill availability during a session:
59+
60+
```json
61+
{
62+
"jsonrpc": "2.0",
63+
"method": "session/update",
64+
"params": {
65+
"sessionId": "sess_abc123",
66+
"sessionUpdate": "available_skills_update",
67+
"availableSkills": [
68+
{
69+
"name": "code-review",
70+
"description": "Performs automated code review on staged changes...",
71+
},
72+
{
73+
"name": "test-generator",
74+
"description": "Generates unit tests for the specified code...",
75+
"allowedTools": ["Bash", "Read", "Write"]
76+
}
77+
]
78+
}
79+
}
80+
```
81+
82+
## Shiny future
83+
84+
Once this feature exists:
85+
86+
1. **Rich skill discovery** - Clients can browse available skills with detailed metadata, enabling better agent selection and capability understanding
87+
2. **License compliance** - Organizations can filter or highlight skills based on licensing requirements
88+
3. **Environment matching** - Clients can warn users when skills may not work in their environment (e.g., missing git, no network access)
89+
4. **Security pre-approval** - Users can review and pre-approve tool access for skills, reducing permission fatigue
90+
5. **Extensible integrations** - The `metadata` field enables custom integrations without protocol changes
91+
6. **Skill marketplaces** - Future tooling could aggregate skills across agents for discovery and comparison
92+
93+
Clients could implement:
94+
- Skill browser/selector UI
95+
- Automatic environment compatibility checking
96+
- License filtering for enterprise compliance
97+
- Skill-based agent recommendations
98+
99+
## Implementation details and plan
100+
101+
### Phase 1: Schema Updates
102+
103+
1. **Add `AvailableSkill` type** to schema:
104+
- `name`: Required string with validation pattern `^[a-z0-9]([a-z0-9-]*[a-z0-9])?$`, max 64 chars
105+
- `description`: Required string, max 1024 chars, minLength 1
106+
- `license`: Optional string
107+
- `compatibility`: Optional string, max 500 chars
108+
- `allowedTools`: Optional array of strings
109+
- `_meta`: Standard extensibility field, we can put metadata from the skills spec
110+
111+
2. **Add `AvailableSkillsUpdate` type**:
112+
- `availableSkills`: Required array of `AvailableSkill`
113+
- `_meta`: Standard extensibility field
114+
115+
3. **Update `SessionUpdate` enum** to include `available_skills_update` variant
116+
117+
### Phase 2: SDK Updates
118+
119+
4. **Update Rust SDK** (`src/`):
120+
- Add `AvailableSkill` struct with serde validation
121+
- Add `AvailableSkillsUpdate` struct
122+
- Update `SessionUpdate` enum
123+
124+
### Phase 3: Documentation
125+
126+
5. **Update protocol documentation**:
127+
- Document the new types
128+
- Provide usage examples
129+
- Link to [Agent Skills Specification](https://agentskills.io/specification) for skill authoring guidance
130+
131+
## Revision history
132+
133+
- **2025-01-10**: Initial draft proposal

0 commit comments

Comments
 (0)