client.skills.pull() to fetch the collection, then write the files to your project.
You can generate these exact snippets for your own collection from the dashboard: open a Skill Collection and click Pull via SDK.
Prerequisites
Set your API key in the environment:Pull as a folder of files
skills.pull() returns a response with a files map (path → text content). For provider-specific collections, those paths already include the provider prefix (.claude/..., .agents/..., or .openclaw/...), so the simplest thing to do is write each file at its returned path from your project root. Everything lands where your agent expects it.
.claude/CLAUDE.md, .claude/skills/<name>/SKILL.md, etc. For Codex, you get .agents/AGENTS.md, and for OpenClaw you get .openclaw/.... Universal collections have no prefix and land in your project root as-is.
Writing to a custom directory
If you want to rename the output directory (for example, write a Claude Code collection under.agents instead of .claude), strip the known provider prefix from each path and join the remainder to your target directory:
Pin a version or release label
Passversion= or label= to pull an immutable snapshot instead of latest.
Pull as a zip archive
Passformat="zip" to get a binary archive instead of a JSON file map. The archive already contains the provider’s on-disk layout, so unzip it at your project root.
Raw REST API
UseGET against the public API when you are not using an SDK:
File paths in the JSON response follow the same convention as the SDK: provider-specific collections include the
.claude/, .agents/, or .openclaw/ prefix; universal collections are root-relative. Zip exports always include the provider layout.
Skill Collection webhooks
Skill Collections emit askill_collection_files_changed event when a collection is created, saved, deleted, or restored. To subscribe and verify signatures, see Webhooks.

