Creating Custom Skills
Learn how to create custom skills with system prompts, activation keywords, and file patterns for domain-specific expertise.
Custom skills let you give Yukkai expertise in any domain — from a specific framework to your company's internal coding standards. This guide walks through the process.
The create Action
skill(action: "create",
name: "Kubernetes",
description: "Kubernetes deployment and management expertise",
system_prompt: "You are a Kubernetes expert. Follow these principles: ...",
activation_keywords: ["k8s", "kubernetes", "helm", "kubectl", "manifest"],
file_patterns: "*.yaml,*.yml,k8s/**",
tags: "devops, infrastructure, k8s",
preferred_tools: "bash, file_read, file_write, grep"
)
Parameters
| Parameter | Required | Description |
|---|---|---|
name |
✅ | Skill name (must be unique) |
description |
✅ | Short description shown in the skill list |
system_prompt |
✅ | The full system prompt defining the skill's expertise |
activation_keywords |
❌ | Comma-separated keywords that trigger auto-activation |
file_patterns |
❌ | File glob patterns for project-based auto-detection |
tags |
❌ | Comma-separated tags for organization |
preferred_tools |
❌ | Comma-separated list of tools this skill prefers |
Writing a Good System Prompt
The system prompt is the heart of the skill. Here's what makes a good one:
Be Specific and Narrow
❌ Bad (too broad):
You are a great programmer who writes good code.
✅ Good (specific):
You are a Kubernetes expert specializing in production deployments.
Follow these principles:
- Always define resource limits and requests
- Use namespaces for environment isolation
- Prefer Deployments over ReplicaSets
- Include liveness and readiness probes
- Use ConfigMaps for non-sensitive configuration
- Use Secrets for sensitive data, never base64 in manifests
Include Conventions
If your team has specific conventions, encode them:
- All Helm charts must use semantic versioning (MAJOR.MINOR.PATCH)
- Namespace naming: <team>-<environment> (e.g., payments-prod)
- Every deployment must have a matching HPA
Include Domain Knowledge
Reference key concepts, patterns, and gotchas:
Common pitfalls to avoid:
- Do not use :latest tag in production
- Do not mount secrets as environment variables in shared namespaces
- Always set imagePullPolicy: IfNotPresent in production
File Patterns for Auto-Detection
File patterns enable project-based skill activation. When you open or reference a project whose files match the patterns, the skill activates automatically:
file_patterns: "*.yaml,*.yml,k8s/**,helm/**"
This uses standard glob syntax:
*.swift— all Swift files**/*.swift— all Swift files recursivelyk8s/**— everything under ak8s/directory
Learning Skills from a Project
Instead of writing a skill from scratch, you can have Yukkai analyze an existing project and auto-generate a skill:
skill(action: "learn", path: "/Users/you/Projects/MyK8sProject")
Yukkai will:
- Analyze the project's file structure and patterns
- Identify conventions, frameworks, and dependencies
- Generate a skill with appropriate activation keywords and file patterns
- Create a system prompt based on observed patterns
update.
Updating a Skill
skill(action: "update", id: "kubernetes",
system_prompt: "Updated instructions...",
activation_keywords: "k8s,kubernetes,helm,kubectl,manifest,argocd"
)
You can update any field. This is useful for iterating on a skill's system prompt as you refine the domain knowledge.
Deleting a Skill
skill(action: "delete", id: "kubernetes")
Only custom skills (author: user) can be deleted. Built-in skills can only be deactivated.
Best Practices
- Check for overlap first — Run
skill(action: "list")andskill(action: "search", query: "...")to avoid duplicating an existing skill's domain. - Keep scope narrow — One clear domain per skill. Don't create a "general programming" skill.
- Iterate — Start with a basic system prompt, use it, then refine with
updatebased on results. - Use
learnwhen possible — Analyzing an existing project often produces better activation keywords and file patterns than guessing. - Include preferred tools — This hints to the system which tools are most relevant, optimizing the experience.