Custom skills
Author your own skills with a @alias prefix. Custom skills are scoped to your workspace, syncable to teammates, and run with the same engine as built-ins.
#When to author a custom skill
Built-ins cover the obvious workflows. You'll want a custom skill when you have a repeated task that built-ins don't quite cover — things like:
- A brand-specific tone-of-voice review.
- An internal launch checklist that depends on your team's process.
- A migration script-generator for your house framework conventions.
- A pre-merge review with your engineering principles baked in.
A custom skill is essentially a saved, named system prompt + a handful of metadata. Each runs through the same execution loop as a built-in.
#Authoring a skill
Open the skill editor
Go to /skills and click + New skill, or navigate directly to /skills/new.
Fill in the metadata
| Field | Type | Description |
|---|---|---|
| Alias | string | Used after @. Lowercase, hyphenated. Example: brand-voice. |
| Title | string | Display name shown in autocomplete and the Skills hub. |
| Description | string | One-liner shown in autocomplete. Keep it under 80 chars. |
| Kind | critique | augmenter | Critique returns markdown; augmenter modifies files. |
| System prompt | string | The prompt the LLM runs against your message. This is where the skill's logic lives. |
| Sample args | string? | Optional. Shown in the autocomplete preview. |
Write the system prompt
The system prompt is the actual instructions the LLM follows. For critique skills, write a role + format expectation. For augmenter skills, you must end with the strict JSON schema the engine expects.
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. Words to avoid:
"synergy", "leverage", "solution".Save and test
Click Save. The skill is written to your local store immediately and synced to the backend in the background. Open /chat and run @your-alias to try it.
#The save lifecycle
When you save a custom skill, two things happen:
- Optimistic local save — written to localStorage via Zustand
persist. Available immediately for use. - Background server sync — POSTed to
/api/v1/custom-skills. The Skills hub shows a small sync indicator until it lands.
#Sharing with teammates
Custom skills are workspace-scoped. Anyone with access to your workspace can run any custom skill in it — but only the author can edit or delete. Use shared workspaces (rather than copying skills across personal workspaces) for team-wide standards.
#Custom augmenters
You can author augmenter-kind custom skills too. The system prompt must instruct the LLM to return strict JSON in the exact shape the engine expects:
{
"files": [
{ "path": "src/components/Banner.tsx", "contents": "..." },
{ "path": "src/styles/banner.css", "contents": "..." }
],
"summary": "Added a banner component and styles."
}The engine is tolerant of code-fence wrappers and surrounding prose — it extracts the first JSON object — but the keys and types must match. Files are written verbatim; partial patches aren't supported.