PromptFloe Developer Docs
Build

Custom skills

Author your own @alias skills via API. Custom skills are scoped to a workspace, syncable to teammates, and runnable with the same engine as built-ins.

#Create a custom skill

const skill = await client.customSkills.create({
  alias: 'brand-voice',
  title: 'Brand voice review',
  description: 'Reviews copy for tone-of-voice fit',
  kind: 'critique',
  systemPrompt: `
You are a brand voice reviewer for Acme Corp.

Read the user's content and return a markdown report with three sections:
1. **What works** — voice elements that are on-brand
2. **What slips** — places the voice is off
3. **Concrete rewrites** — three rewritten lines

Voice: confident, plainspoken, never corporate.
`.trim(),
  sampleArgs: 'paste your hero copy here',
});

console.log('created', skill.id);

#Run it

Once created, custom skills are reachable through the same skills.run endpoint. Use the alias without the @ prefix:

const result = await client.skills.run({
  alias: 'brand-voice',                     // no @ in the API
  text: 'Welcome to your dashboard!',
});

console.log(result.markdown);

#Skill schema

FieldTypeDescription
aliasrequiredstringLowercase, hyphenated. Used after @ in the workbench. Must be unique within the workspace.
titlerequiredstringDisplay name for the Skills hub and autocomplete.
descriptionrequiredstringOne-liner shown in autocomplete. Keep under 80 chars.
kindrequired"critique" | "augmenter"Critique returns markdown; augmenter modifies files.
systemPromptrequiredstringThe instructions the LLM follows. For augmenters, must specify the strict JSON output schema.
sampleArgsstringOptional example argument shape shown in the autocomplete preview.
tagsstring[]Optional tags for grouping in the Skills hub.

#Augmenter-kind: required output schema

For kind: 'augmenter', the system prompt must instruct the LLM to emit JSON in this exact shape — the engine parses it before applying:

{
  "files": [
    { "path": "src/components/Banner.tsx", "contents": "..." },
    { "path": "src/styles/banner.css",     "contents": "..." }
  ],
  "summary": "Added a banner component and styles."
}

#List, update, delete

// list
const skills = await client.customSkills.list();

// fetch one
const skill = await client.customSkills.get('skill_abc');

// update (author only)
await client.customSkills.update('skill_abc', {
  systemPrompt: 'updated prompt…',
});

// delete (author only)
await client.customSkills.delete('skill_abc');

#Author-only edits

Anyone with workspace access can run any custom skill, but only the author can edit or delete. The API enforces this with 403 forbidden on cross-author writes.

#Where to go next

PromptFloe developer docs