skopik

Skills

Skills are reusable capabilities that can be installed on agents. Use them when multiple agents should share the same tool behavior or workflow knowledge.

Every skill carries an editable draft file tree; publishing freezes the draft into a numbered version. Installing a skill pins a published version onto an agent, and agents.skills.sync() moves that install to a newer version later. Agents created from a template pull template updates separately with agents.syncFromTemplate().

Quick Links

Action Description
skills.list() List skills.
skills.create() Create a skill with a draft file tree.
skills.get() Fetch a single skill.
skills.update() Update skill details.
skills.archive() Archive a skill.
skills.publish() Publish the draft as a new version.
skills.duplicate() Copy a skill and its files.
skills.listAgents() List agents with a skill installed.
skills.files.list() List files in a skill tree.
skills.files.read() Read a skill file.
skills.files.write() Write a file in the draft tree.
skills.files.delete() Delete a file from the draft tree.
skills.files.move() Move or rename a draft file.
agents.skills.install() Install a skill on an agent.
agents.skills.sync() Update an installed skill to a newer version.
agents.skills.remove() Uninstall a skill from an agent.

Example

Install the latest published version of a skill on an agent:

const { operation } = await client.agents.skills.install(agentId, { skillId })

Reference

skills.list(params?)

List reusable skills.

const { data: skills } = await client.skills.list({ tag: 'research' })

Parameters

Field Type Required Notes
source string No Filter by user or curated.
tag string No Filter by tag.

Returns ListResponse<Skill> = { data: Skill[], page? } — see Skill.

skills.create(input)

Create a skill. files seeds the draft tree, which you can keep editing with files.write() before publishing.

const { skill } = await client.skills.create({
	name: 'summarize-thread',
	description: 'Summarize a long conversation into decisions and open questions.',
	tags: ['research'],
	files: [
		{ path: 'SKILL.md', content: '# Summarize thread\nExtract decisions, owners, and open questions.' },
	],
})

Parameters

Field Type Required Notes
name string Yes Skill name.
description string No Skill description.
tags string[] No Tags.
requiresConnection string No Connection provider the skill requires.
metadata object No Customer metadata.
files { path, content }[] No Seeds the draft file tree.

Returns { skill: Skill } — see Skill.

skills.get(skillId)

Fetch a single skill.

const { skill } = await client.skills.get(skillId)

Returns { skill: Skill } — see Skill.

skills.update(skillId, input)

Update skill details. All fields are optional; only the fields you pass change.

const { skill } = await client.skills.update(skillId, {
	description: 'Summarize threads into decisions, owners, and open questions.',
})

Parameters

Field Type Required Notes
name string No Skill name.
description string No Skill description.
tags string[] No Tags.
requiresConnection string No Connection provider the skill requires.
metadata object No Customer metadata.
files { path, content }[] No File entries written to the draft tree.

Returns { skill: Skill } — see Skill.

skills.archive(skillId)

Archive a skill.

await client.skills.archive(skillId)

Returns nothing — resolves when the API confirms the archive (HTTP 204).

skills.publish(skillId)

Publish the draft file tree as a new skill version. Publishing is asynchronous — the returned operation tracks it.

const { skill, operation } = await client.skills.publish(skillId)

Returns { skill: Skill, operation: Operation } — see Skill and Operation.

skills.duplicate(skillId, input?)

Copy a skill, including its files, into a new skill you own.

const { skill: copy, copiedFiles } = await client.skills.duplicate(skillId, {
	name: 'summarize-thread-v2',
})

Parameters

Field Type Required Notes
name string No Name for the copy.
description string No Description for the copy.
tags string[] No Tags for the copy.
metadata object No Customer metadata.

Returns { skill: Skill, copiedFiles: number } — see Skill.

skills.listAgents(skillId)

List the agents that currently have the skill installed. This list is single-page.

const { data: agents } = await client.skills.listAgents(skillId)

Returns ListResponse<SkillAgentRef> — one entry per agent with the skill installed.

skills.files.list(skillId, params?)

List files in a skill tree.

const { data: files } = await client.skills.files.list(skillId)

Parameters

Field Type Required Notes
version number No Published version to list. Omit for the draft tree.

Returns { version, data: CatalogFileEntry[] } — see CatalogFileEntry.

skills.files.read(skillId, filePath, params?)

Read a single skill file.

const { file } = await client.skills.files.read(skillId, 'SKILL.md')

Parameters

Field Type Required Notes
version number No Published version to read from. Omit for the draft tree.

Returns { file: CatalogFile } — see CatalogFile.

skills.files.write(skillId, filePath, input)

Write a file. Writes always target the draft tree — publish the skill to make them live.

const { file } = await client.skills.files.write(skillId, 'SKILL.md', {
	content: '# Summarize thread\nExtract decisions, owners, open questions, and deadlines.',
})

Parameters

Field Type Required Notes
content string Yes File content.

Returns { file: CatalogFileEntry } — see CatalogFileEntry.

skills.files.delete(skillId, filePath)

Delete a file from the draft tree.

await client.skills.files.delete(skillId, 'notes.md')

Returns nothing — resolves when the API confirms deletion (HTTP 204).

skills.files.move(skillId, input)

Move or rename a file in the draft tree.

const { data: files } = await client.skills.files.move(skillId, {
	from: 'notes.md',
	to: 'reference/notes.md',
})

Parameters

Field Type Required Notes
from string Yes Current file path.
to string Yes New file path.

Returns { data: CatalogFileEntry[] } — see CatalogFileEntry.

agents.skills.install(agentId, input)

Install a skill on an agent. Installation is asynchronous — the returned operation tracks it.

const { operation } = await client.agents.skills.install(agentId, {
	skillId,
	version: 3,
})

Parameters

Field Type Required Notes
skillId string Yes Skill id.
version number No Published version to install. Defaults to latest.

Returns { operation: Operation } — see Operation.

agents.skills.sync(agentId, skillId, input)

Update a skill already installed on an agent to a newer published version. Syncing is asynchronous — the returned operation tracks it.

const { operation } = await client.agents.skills.sync(agentId, skillId, { toVersion: 4 })

Parameters

Field Type Required Notes
toVersion number No Published version to sync to. Defaults to latest.

Returns { operation: Operation } — see Operation.

agents.skills.remove(agentId, skillId)

Uninstall a skill from an agent. Removal is asynchronous — the returned operation tracks it.

const { operation } = await client.agents.skills.remove(agentId, skillId)

Returns { operation: Operation } — see Operation.

Types

Skill

Field Type Notes
skillId string Skill id.
orgId string Workspace id.
name string Skill name.
description string Skill description.
tags string[] Tags.
currentVersion number Latest published version.
draftVersion number Draft version.
hasUnpublishedDraft boolean Whether a draft differs from published.
requiresConnection string | null Required connection provider.
source string user or curated source.
metadata object Customer metadata.
createdAt string ISO timestamp.
updatedAt string ISO timestamp.

CatalogFile

Field Type Notes
path string File path within the tree.
content string File content.

CatalogFileEntry

Field Type Notes
path string File path within the tree.
dir boolean Whether the entry is a directory.
size number File size in bytes.