Skills
The Skill Library stores reusable, versioned agent skills. Use this resource for CRUD, versioning, rendering, GitHub import, and sharing.
Access it as client.skills on a Strongly client, or the same path on AsyncStrongly with await. All methods exist on both with identical signatures.
Quick start
from strongly import Strongly
client = Strongly()
# List (auto-paginates as you iterate) # filters: category, search, tags
for skill in client.skills.list():
print(skill.id)
# Create
created = client.skills.create(
name="...",
content="...",
)
print(created.id)
# Read it back
fetched = client.skills.retrieve(created.id)
# Delete (returns None; raises on failure)
client.skills.delete(created.id)
Methods
Core
list
list(*, category: Optional[str] = None, search: Optional[str] = None, tags: Optional[str] = None, limit: Optional[int] = None) -> SyncPaginator[Skill]
List skills with pagination and filters.
Args: category: Filter by category. search: Search by name or description. tags: Comma-separated tags to filter by. limit: Maximum number of items to return (default: all matching items).
create
create(*, name: str, content: str, description: Optional[str] = None, variables: Optional[Sequence[Mapping[str, Any]]] = None, tags: Optional[Sequence[str]] = None, category: Optional[str] = None, source: Optional[str] = None, files: Optional[Sequence[Mapping[str, Any]]] = None, github_url: Optional[str] = None, mcp_tools: Optional[Sequence[str]] = None, scope: Optional[Mapping[str, Any]] = None) -> Skill
Create a new skill. Auto-detects {{variables}} and creates version 1.
Args:
name: Skill name (required).
content: Skill content / markdown instructions (required).
description: Skill description.
variables: Template variables, each a plain dict with camelCase wire keys.
tags: Discoverability tags.
category: Skill category.
source: Provenance label.
files: Free-form supporting files, each a plain dict.
github_url: Source GitHub URL.
mcp_tools: MCP tool names this skill uses.
scope: Isolation scope ({agentId?, appId?, workflowId?}).
Returns:
The created Skill.
variables and files are plain dicts with camelCase wire keys you pass in the list:
created = client.skills.create(
name="Summarizer",
content="Summarize {{topic}} in {{style}} style.",
variables=[
{"name": "topic", "description": "What to summarize", "isRequired": True},
{"name": "style", "defaultValue": "concise", "isRequired": False},
],
files=[
{"path": "examples/sample.md", "content": "# Example"},
],
)
retrieve
retrieve(skill_id: <class 'str'>) -> <class 'Skill'>
Get a skill by ID with full content.
Args: skill_id: The skill ID.
update
update(skill_id: str, *, name: Optional[str] = None, description: Optional[str] = None, content: Optional[str] = None, variables: Optional[Sequence[Mapping[str, Any]]] = None, tags: Optional[Sequence[str]] = None, category: Optional[str] = None, change_note: Optional[str] = None, files: Optional[Sequence[Mapping[str, Any]]] = None, mcp_tools: Optional[Sequence[str]] = None) -> Dict[str, Any]
Update a skill. Content changes auto-create a new version.
Args: skill_id: The skill ID. name: Updated name. description: Updated description. content: Updated content (triggers a version snapshot). variables: Updated template variables. tags: Updated tags. category: Updated category. change_note: Note about this change. files: Updated supporting files. mcp_tools: Updated MCP tool names.
delete
delete(skill_id: <class 'str'>)
Delete a skill and all its versions.
Args: skill_id: The skill ID.
Sharing & scope
update_scope
update_scope(skill_id: <class 'str'>, scope: Optional[Dict[str, Any]] = None) -> Dict[str, Any]
PATCH /skills/:id/scope - re-scope a skill (Phase 4). Owner-only.
Empty scope (or None) moves the row to user-global. Returns
{success, scope} with the resolved scope tuple.
Other
assess
assess(skill_id: str) -> Dict[str, Any]
Run an automated quality assessment on a skill.
duplicate
duplicate(skill_id: <class 'str'>) -> Dict[str, Any]
Duplicate a skill (creates a copy owned by the current user).
Args: skill_id: The skill ID to duplicate.
Returns: Dict with new skillId.
import_from_github
import_from_github(github_url: <class 'str'>) -> Dict[str, Any]
Import a skill from a GitHub repository containing SKILL.md.
Args: github_url: Full GitHub URL (e.g., https://github.com/owner/repo).
Returns: Dict with skillId.
list_versions
list_versions(skill_id: <class 'str'>) -> List[SkillVersion]
List all versions of a skill, newest first.
Args: skill_id: The skill ID.
record_usage
record_usage(skill_id: <class 'str'>)
Record a usage event for analytics.
Args: skill_id: The skill ID.
render
render(skill_id: <class 'str'>, variables: Dict[str, str]) -> <class 'SkillRenderResult'>
Render a skill with variable substitution.
Args: skill_id: The skill ID. variables: Dict mapping variable names to values.
Returns: SkillRenderResult with rendered content.
restore_version
restore_version(skill_id: <class 'str'>, version_number: <class 'int'>) -> Dict[str, Any]
Restore a previous version (creates a new version with restored content).
Args: skill_id: The skill ID. version_number: Version number to restore.