3.3 KiB
3.3 KiB
Skill Registry
The Skill Registry provides persistent storage for skill definitions in
CleverAgents. Skills are namespaced, reusable collections of tools
registered via YAML config and persisted to the skills and
skill_items database tables.
Registration Behavior
Skills are registered with a namespaced name (namespace/short_name)
as the unique identifier. The registry enforces:
- Name uniqueness: Duplicate names are rejected with
DuplicateSkillError. - Name validation: Names must match
^[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+$. - Cascading deletes: Removing a skill cascades to all child
skill_itemsrows.
Skill Items
Each skill stores its components as ordered items in the skill_items
table. The item_type discriminator distinguishes:
| item_type | Description |
|---|---|
tool_ref |
Reference to a named tool in the registry |
include |
Recursive inclusion of another skill |
inline_tool |
Anonymous tool defined inline |
mcp_source |
MCP server tool source |
agent_source |
Agent Skills Standard folder source |
Items are stored with a stable item_order to preserve definition
ordering across round-trips.
Filters
The SkillRegistryService.list_skills() method supports:
- Namespace filter: Pass
namespace="local"to list only skills in thelocalnamespace.
Service API
from cleveragents.application.services import SkillRegistryService
from cleveragents.infrastructure.database.repositories import SkillRepository
svc = SkillRegistryService(skill_repo=SkillRepository(session_factory))
# Register
svc.add_skill(skill)
# Retrieve
skill = svc.get_skill("local/code-tools")
# List with filter
skills = svc.list_skills(namespace="local")
# Update
svc.update_skill(updated_skill)
# Remove
svc.remove_skill("local/code-tools")
Database Schema
skills
| Column | Type | Description |
|---|---|---|
| name | String(255) | PK, namespaced name |
| namespace | String(100) | Extracted namespace |
| short_name | String(150) | Extracted short name |
| description | Text | Skill description |
| version | String(50) | Optional version string |
| metadata_json | Text | JSON metadata (overrides, etc.) |
| created_at | String(30) | ISO-8601 creation timestamp |
| updated_at | String(30) | ISO-8601 update timestamp |
skill_items
| Column | Type | Description |
|---|---|---|
| id | Integer | Auto-increment PK |
| skill_name | String(255) | FK to skills.name (CASCADE) |
| item_type | String(30) | Discriminator (tool_ref, etc.) |
| item_name | String(500) | Item identifier or name |
| item_config | Text | Optional JSON configuration |
| item_order | Integer | Stable ordering index |
| created_at | String(30) | ISO-8601 creation timestamp |