|
| 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