Skills
Learn how Skills in CodeCourier package multi-file domain knowledge into versioned assets that are injected into the .claude/skills/ directory of agent sandboxes.
Skills are the primary mechanism for packaging and distributing domain knowledge to AI agents in CodeCourier. Each skill is a named collection of files - markdown documents, code examples, API references, best-practice guides - that are injected into the .claude/skills/ directory of the sandbox before the CLI tool starts. When an agent reads those files, it gains expert-level knowledge about a specific technology or practice area.
Skills support multiple files, which means a single skill can contain a thorough, multi-document knowledge base rather than a single monolithic file. Each skill is independently versioned, enabling you to update domain knowledge without touching unrelated skills.
What Skills Are
Think of skills as the library that you hand to an AI agent when it sits down to work. Rather than hoping the agent’s training data contains the right patterns for your specific stack, you provide curated, accurate, up-to-date reference material at session start.
Example skills and what they contain:
| Skill Name | Category | Typical Contents |
|---|---|---|
frontend-design | frontend | React 19 patterns, Tailwind v4 conventions, shadcn/ui component guide, accessibility rules |
convex-implementation | backend | Convex schema patterns, query/mutation best practices, pagination, scheduler usage |
vitest-testing | testing | Vitest setup, React Testing Library patterns, mock factories, coverage configuration |
app-security | security | OWASP checklist, input sanitization rules, authentication patterns, secret handling |
superpower-codereview | review | Code review criteria, quality gates, verdict formatting, common anti-pattern catalog |
Skill Data Model
Skills are stored across three related tables in the database:
// Core skill record
skills: {
skillId: string // unique identifier
name: string // display name (e.g., "frontend-design")
description: string // what this skill does and when to use it
category: string // grouping (e.g., "frontend", "testing", "backend", "security")
fileCount: number // number of files in the active version of this skill
isEnabled: boolean // whether this skill is selectable in the UI
}
// Individual files within a skill
skillFiles: {
skillId: string
path: string // file path within the skill directory (e.g., "patterns.md")
content: string // full file content (markdown or code)
}
// Version history
skillVersions: {
skillId: string
version: number // incrementing version number
name: string // name at time of publish
description: string // description at time of publish
category: string // category at time of publish
fileCount: number // number of files in this version
status: "active" | "inactive"
publishedAt: number // Unix timestamp
publishedBy: string // user ID of publisher
}Creating a Custom Skill
Custom skills are created from the Skills management page. Navigate to the skills section of your project or access the global skills library from the platform settings.
Open the Create Skill dialog
Click + Create Skill. Enter the skill’s name, description, and category. The name becomes the directory name inside .claude/skills/, so use lowercase with hyphens (e.g., my-custom-skill).
Add files to the skill
After creation, open the skill detail page and use the Add File button to create files within the skill. Each file requires:
- Path - The filename within the skill directory (e.g.,
overview.md,patterns.md,api-reference.md) - Content - The full file content in markdown or code
You can add as many files as needed. A well-organized skill separates concerns across multiple files rather than putting everything in one large document.
Write effective skill content
Each file in a skill should be focused and actionable. Below is an example of a well-structured skill file for Convex implementation patterns:
# Convex Query Patterns
## Reading Data
Always use `useQuery` for reactive data subscriptions in React components.
Use `ctx.db.query` inside Convex server functions.
### Pagination
Never use `.collect()` on large tables. Use `.paginate()` instead:
```ts
const results = await ctx.db
.query("posts")
.order("desc")
.paginate(opts); // opts.numItems controls page size
```
## Writing Data
All data mutations must go through Convex mutation functions.
Never write directly to the database from client code.
### Scheduling Background Work
Heavy operations go to `ctx.scheduler.runAfter` to avoid timeout:
```ts
await ctx.scheduler.runAfter(0, internal.tasks.processLargeDataset, {
datasetId: args.datasetId,
});
```
## Validators
Use Convex's built-in validators for all mutation and action arguments.
Do NOT use Zod inside Convex functions.Publish the skill
Once all files are added and content is complete, click Publish to create version 1 of the skill. The skill is now available for assignment to personas and session types.
Skill File Organization Best Practices
How you organize files within a skill affects how easily an agent can navigate the knowledge. Follow these guidelines:
- One topic per file - An
overview.mdfor high-level concepts, apatterns.mdfor code patterns, ananti-patterns.mdfor things to avoid, and anapi-reference.mdfor specific APIs. This makes each file scannable without overwhelming context. - Lead with the most important rules - Agents read files sequentially. Put the most critical constraints at the top of each file, not buried in the middle.
- Use concrete code examples - Markdown explanations are useful, but code snippets showing correct and incorrect usage are even more effective.
- Keep individual files under 500 lines - Very long files are harder for agents to process effectively. Split large reference documents across multiple focused files.
- Name files for discoverability - Use names like
quick-reference.md,gotchas.md,examples.mdso the agent can infer the file’s purpose from its name alone.
Versioning Skills
Skills follow the same versioning lifecycle as Context Documents. Editing a skill’s files creates a draft. Publishing creates a new version, activates it, and deactivates the previous version.
Key scenarios that should trigger a new skill version:
- A library releases a major version with breaking API changes
- Your team adopts a new coding convention that agents should follow
- An agent made a systematic mistake that can be prevented with a new rule in the skill
- You discover that an existing pattern in the skill is outdated or incorrect
Version History for Skills
Assigning Skills to Personas
To assign skills to a persona, navigate to the persona’s detail page and open the Skills tab. The tab shows all enabled skills in the project organized into three sections:
- Skills - The skill packages described in this guide
- Commands - Claude Code slash-command extensions
- Scripts - Executable shell/Python scripts
Select the checkboxes next to each skill you want available for this persona. The selections are saved immediately and apply to all sessions run by this persona going forward.
Right-size Skill Sets
Assigning Skills to Session Types
Default skill assignments for each session type are configured in the corresponding setup tab within Project Settings. For example, to configure the default skills for all Issue Discovery sessions, navigate to /p/{id}/issues-setup and select the desired skills from the Skills, Commands, and Scripts sections on that page.
These session-type defaults apply to any session of that type where the running persona does not have its own explicit skill selections.
Enabling and Disabling Skills
Skills have an isEnabled flag. Disabled skills do not appear in the selection checkboxes on persona Skills tabs or in Project Settings. This is useful for skills that are in development or that you want to temporarily hide from the selection UI without deleting them.
Disabling a skill does not remove it from sandboxes that were already assigned it - existing assignments are preserved. Disabling only prevents the skill from appearing as a selectable option for new assignments.