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)
Methods
Core
list
list(*, category: str | None = None, search: str | None = None, tags: str | None = None, limit: int | None = None) -> SyncPaginator[Skill]
List skills with pagination and filters.
Parameters
category(str | None, optional): Filter by category.search(str | None, optional): Search by name or description.tags(str | None, optional): Comma-separated tags to filter by.limit(int | None, optional): Maximum number of items to return (default: all matching items).
create
create(*, name: <class 'str'>, content: <class 'str'>, description: str | None = None, variables: collections.abc.Sequence[collections.abc.Mapping[str, Any]] | None = None, tags: collections.abc.Sequence[str] | None = None, category: str | None = None, source: str | None = None, files: collections.abc.Sequence[collections.abc.Mapping[str, Any]] | None = None, github_url: str | None = None, mcp_tools: collections.abc.Sequence[str] | None = None, linked_ids: collections.abc.Sequence[str] | None = None) -> <class 'Skill'>
Create a new skill. Auto-detects {{variables}} and creates version 1.
Parameters
name(str): Skill name (required): kebab-case, lowercase letters, digits and hyphens, starting with a letter, up to 64 characters (unit-converter). Agents find a skill by its name; any other name is refused with a validation error.content(str): Skill content / markdown instructions (required).description(str | None, optional): Skill description.variables(Sequence[Mapping[str, Any]] | None, optional): Template variables, each a plain dict with camelCase wire keys, e.g.[{"name": "topic", "defaultValue": "AI"}].tags(Sequence[str] | None, optional): Discoverability tags.category(str | None, optional): Skill category.source(str | None, optional): Provenance label.files(Sequence[Mapping[str, Any]] | None, optional): Free-form supporting files.github_url(str | None, optional): Source GitHub URL.mcp_tools(Sequence[str] | None, optional): MCP tool names this skill uses.linked_ids(Sequence[str] | None, optional): Agents and pools (ids) the skill belongs to.
Returns
Skill: The createdSkill.
retrieve
retrieve(skill_id: <class 'str'>) -> <class 'Skill'>
Get a skill by ID with full content.
Parameters
skill_id(str): The skill ID.
update
update(skill_id: <class 'str'>, *, name: str | None = None, description: str | None = None, content: str | None = None, variables: collections.abc.Sequence[collections.abc.Mapping[str, Any]] | None = None, tags: collections.abc.Sequence[str] | None = None, category: str | None = None, linked_ids: collections.abc.Sequence[str] | None = None, change_note: str | None = None, files: collections.abc.Sequence[collections.abc.Mapping[str, Any]] | None = None, mcp_tools: collections.abc.Sequence[str] | None = None) -> dict[str, Any]
Update a skill. Content changes auto-create a new version.
Parameters
skill_id(str): The skill ID.name(str | None, optional): Updated name, kebab-case as on create. A skill named before the rule keeps its name until it is renamed.description(str | None, optional): Updated description.content(str | None, optional): Updated content (triggers a version snapshot).variables(Sequence[Mapping[str, Any]] | None, optional): Updated template variables.tags(Sequence[str] | None, optional): Updated tags.category(str | None, optional): Updated category.linked_ids(Sequence[str] | None, optional): Replace the agents and pools the skill belongs to.change_note(str | None, optional): Note about this change.files(Sequence[Mapping[str, Any]] | None, optional): Updated supporting files.mcp_tools(Sequence[str] | None, optional): Updated MCP tool names.
delete
delete(skill_id: <class 'str'>)
Delete a skill and all its versions.
Parameters
skill_id(str): The skill ID.
Other
assess
assess(skill_id: <class '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).
Parameters
skill_id(str): The skill ID to duplicate.
Returns
dict[str, Any]: Dict with new skillId.
get_file
get_file(skill_id: <class 'str'>, path: <class 'str'>) -> dict[str, Any]
Read one of a skill's files (SKILL.md included): {skill_id, path, content}.
import_from_github
import_from_github(github_url: <class 'str'>) -> dict[str, Any]
Import a skill folder from GitHub: its SKILL.md and every text file under it.
Parameters
github_url(str): The repository (https://github.com/owner/repo), a folder in it (https://github.com/owner/repo/tree/main/skills/my-skill) or a file in the folder; a URL without a branch reads the default branch.
Returns
dict[str, Any]:skillId,action(created,supersededorunchangedwhen the same skill is already in the Library),name,description,filesCount(supporting files imported) andskippedFiles(binary files, not imported).
list_files
list_files(skill_id: <class 'str'>) -> dict[str, Any]
List a skill's files: {skill_id, count, files}, each with path and size.
list_versions
list_versions(skill_id: <class 'str'>) -> list[SkillVersion]
List all versions of a skill, newest first.
Parameters
skill_id(str): The skill ID.
record_usage
record_usage(skill_id: <class 'str'>) -> <class 'int'>
Record that the skill was used; return how many times it has been used.
Parameters
skill_id(str): The skill ID.
render
render(skill_id: <class 'str'>, variables: collections.abc.Mapping[str, str]) -> <class 'SkillRenderResult'>
Render a skill with variable substitution.
Parameters
skill_id(str): The skill ID.variables(Mapping[str, str]): Mapping of variable names to substitution values.
Returns
SkillRenderResult: SkillRenderResult with rendered content.
restore_version
restore_version(skill_id: <class 'str'>, version_number: <class 'int'>) -> <class 'Skill'>
Restore a previous version (creates a new version with restored content).
Parameters
skill_id(str): The skill ID.version_number(int): Version number to restore.
search
search(*, user_turn: <class 'str'>, limit: int | None = None, tags: collections.abc.Sequence[str] | None = None, linked_ids: collections.abc.Sequence[str] | None = None) -> dict[str, Any]
Find the skills relevant to a turn, ranked, with the context_block for a prompt.
Returns {skills, count, context_block}.
Parameters
user_turn(str): The message the skills are for.tags, linked_ids(Sequence[str] | None, optional): Only skills with one of these tags, or in one of these pools.