Skills and Project Rules
Skills are reusable instruction sets that extend what the Kimchi agent can do. Each skill is a directory containing a SKILL.md file — a markdown document with YAML frontmatter and a body of instructions. When the agent recognizes a matching task or a user invokes a skill via a slash command, it loads and follows the skill's instructions.
Skills differ from project rules. Skills activate on demand for specific tasks; project rules (AGENTS.md, CLAUDE.md) apply to every session in a repository as standing guidelines.
| Skills | Project Rules | |
|---|---|---|
| Scope | Activate on demand for specific tasks | Apply to every session |
| Location | SKILL.md in a skills directory | AGENTS.md or CLAUDE.md in your project tree |
| Trigger | Slash commands or task matching | Always loaded at session start |
| Purpose | Teach the agent how to do a specific task | Set what conventions and constraints to follow |
Skill Directories
Kimchi scans several directories for skills. When the same skill name appears in multiple locations, the first match wins.
| Location | Path | Scope |
|---|---|---|
| Kimchi project | <project>/.kimchi/skills/ | Loaded automatically at session start — no configuration required. Kimchi walks up from the directory where it was launched and uses the first .kimchi/skills/ directory it finds. |
| Global (harness) | ~/.config/kimchi/harness/skills/ | Available in every session |
| Vendor (bundled) | Packaged with the Kimchi release | Bundled Superpowers library |
| Claude Code | ~/.claude/skills/ or <project>/.claude/skills/ | Discovered when extensions.claude-code-skills is enabled — run kimchi resources enable extensions.claude-code-skills and restart Kimchi |
| Pi | ~/.pi/agent/skills/ | Discovered if Pi is installed |
| Codex | <project>/.codex/skills/ or ~/.codex/skills/ | Discovered if Codex is installed |
| Cursor | <project>/.cursor/skills/ or ~/.cursor/skills/ | Discovered if Cursor is installed |
| Warp | <project>/.warp/skills/ or ~/.warp/skills/ | Discovered if Warp is installed |
| Factory (Droid) | <project>/.factory/skills/ or ~/.factory/skills/ | Discovered if Factory is installed |
| Gemini | <project>/.gemini/skills/ or ~/.gemini/skills/ | Discovered if Gemini is installed |
| Copilot | <project>/.copilot/skills/ or ~/.copilot/skills/ | Discovered if Copilot is installed |
| GitHub | <project>/.github/skills/ or ~/.github/skills/ | Discovered from .github directory |
| Agents | <project>/.agents/skills/ or ~/.agents/skills/ | Discovered from .agents directory |
| Custom | Any additional directory | Added during setup or in the global config file — see Adding custom skill directories |
Project skill scoping
Kimchi searches for .kimchi/skills/ starting from the directory where it was launched and walks up toward the filesystem root, stopping at the first match. This means you can place skills at different levels of a directory tree and Kimchi will automatically use the closest one.
Only the nearest match is loaded — if a .kimchi/skills/ exists in a subdirectory, Kimchi uses that and does not also load one from a parent directory. To make skills available regardless of where Kimchi is launched, add the shared path as a custom skill directory.
Cross-agent compatibility
If you already maintain skills for another coding agent, Kimchi picks them up automatically — no duplication needed. For each agent directory, Kimchi checks the project-local path first (e.g., <project>/.cursor/skills/), then falls back to the home directory (e.g., ~/.cursor/skills/). Claude Code skills require the extension to be enabled: run kimchi resources enable extensions.claude-code-skills and restart Kimchi.
Skills follow the open Agent Skills specification, making them portable across coding agents that support the format.
Adding custom skill directories
To add a custom skill directory, run kimchi setup and select it during the skills configuration step. The setup wizard also offers the option to add a custom path.
You can also edit ~/.config/kimchi/config.json directly and add paths to the skillPaths array:
{
"skillPaths": [
".config/kimchi/harness/skills",
".claude/skills",
"/absolute/path/to/shared-team-skills"
]
}Skill File Format
A skill is a directory containing a SKILL.md file. The file has two parts: YAML frontmatter (between --- delimiters) and a markdown body with the agent instructions.
---
name: my-skill
description: What this skill does and when to use it
---
# My Skill
Step-by-step instructions for the agent.Frontmatter fields
| Field | Required | Description |
|---|---|---|
name | Yes | A short identifier. Lowercase letters, digits, and hyphens only — no leading, trailing, or consecutive hyphens. Max 64 characters. |
description | Yes | What the skill does and when to use it. Max 1024 characters. Skills with a missing description are not loaded. |
disable-model-invocation | No | When true, the skill is hidden from the system prompt. Users must invoke it explicitly via slash command. |
metadata | No | Arbitrary key-value mapping for custom metadata. |
Unknown frontmatter fields are ignored.
Name validation
Skill names must:
- Contain only lowercase letters (
a-z), digits (0-9), and hyphens (-) - Not start or end with a hyphen
- Not contain consecutive hyphens
- Be at most 64 characters
Body guidelines
The markdown body is the instruction set the agent follows. Write it like a concise runbook:
- Put the important information first. The agent reads the body when the skill activates — lead with the action, not the background.
- Be specific about steps. Use numbered lists for sequential actions. Include exact commands, file paths, or tool names.
- Keep it focused. One skill, one job. If a skill tries to do too many things, split it.
- Keep it short. Aim for under 5,000 tokens. Long instructions dilute the signal and use context window budget.
Directory structure
my-skill/
├── SKILL.md # required — frontmatter + instructions
├── scripts/ # optional — helper scripts
├── references/ # optional — detailed docs, loaded on-demand
└── assets/ # optional — templates, data files
The only required file is SKILL.md. Everything else is freeform — organize supporting files however makes sense for the skill. Use relative paths in the skill body to reference them.
Example
---
name: lint-fix
description: Run the project linter and auto-fix all fixable issues
---
# Lint Fix
Run the project's linter with auto-fix enabled.
## Steps
1. Detect the project type (check for `package.json`, `Cargo.toml`, `pyproject.toml`).
2. Run the appropriate lint command with auto-fix:
- Node.js: `npx eslint . --fix` or `npx biome check --write`
- Rust: `cargo clippy --fix --allow-dirty`
- Python: `ruff check --fix .`
3. Report what changed.Invoking Skills
Skills activate in two ways:
- Slash commands — Type
/<skill-name>in the prompt to invoke a skill directly. You can pass arguments after the command (e.g.,/lint-fix src/). Skills withdisable-model-invocation: truein their frontmatter can only be invoked this way. - Automatic activation — At startup, Kimchi scans skill directories and adds each skill's name and description to the agent's system prompt. When your request matches a skill's description, the agent loads the full
SKILL.mdon demand and follows its instructions. Only the descriptions stay in context — full skill instructions are loaded when needed, keeping the prompt compact.
Built-in Superpowers Skills
Kimchi ships with the obra/superpowers skill library — 14 methodology skills for structured workflows like test-driven development, debugging, code review, and planning.
Superpowers skills are packaged with each Kimchi release and available immediately after installation.
For the full list of included skills, see Built-in Superpowers Skills in the CLI reference.
Installing Skills
From a Git repository
Clone a skill repository directly into a scanned directory:
git clone https://github.com/user/my-skill.git ~/.config/kimchi/harness/skills/my-skillManual installation
Copy a skill directory into a scanned skill path:
cp -r my-skill ~/.config/kimchi/harness/skills/my-skillCreating Custom Skills
Manually
Via the agent
During a session, ask the agent to create a skill and it will:
- Validate the name against the naming rules
- Validate the frontmatter format
- Write the
SKILL.mdfile to the skills directory
Sharing skills with your team
To share skills across a team, place them in a shared directory and add it as a custom skill location during kimchi setup. You can also commit skills to a repository directory and have team members add that path during their own setup.
Managing Skills
Use the /improve command during a session to review and consolidate your skills. The agent can identify overlapping skills and suggest merging them.
To remove a skill, delete its directory from the skills folder. If a skill is removed through the agent, it is moved to a .archive/ subdirectory rather than permanently deleted — you can recover it by moving it back.
Troubleshooting
| Problem | Fix |
|---|---|
Skill doesn't appear when typing /<name> | Verify the directory is in a scanned skill path. Check that SKILL.md has valid YAML frontmatter with a description field. Start a new session — skills are loaded at session start. |
| Skill frontmatter validation fails | Frontmatter must start and end with ---. The YAML must be a key-value mapping (not a list). A description field is required and must be a non-empty string. |
| Duplicate skill loaded from wrong location | Check which skill directories are configured in ~/.config/kimchi/config.json. Skills from earlier paths in the list take precedence over later ones. |
| Agent doesn't follow skill instructions | Keep instructions specific and actionable. Vague instructions produce vague results. Ensure the body isn't too long — over 5,000 tokens can dilute the signal. |
Project Rules
Kimchi reads project context files to understand your repository's conventions, constraints, and guidelines. These files are injected into the agent's system prompt at the start of every session — they apply to every task, not just specific triggers.
Supported files
Kimchi looks for these files in each directory from the filesystem root down to your current working directory:
| File | Purpose |
|---|---|
AGENTS.md | Project rules and guidelines for AI coding agents |
CLAUDE.md | Project rules and guidelines (Claude Code convention) |
Per directory, AGENTS.md is checked first. If found, CLAUDE.md is skipped for that directory. This means you can use whichever convention your team prefers — or use AGENTS.md if you want rules that apply across multiple AI coding tools.
Local overrides
Each context file has a .local.md variant for user-specific, gitignored overrides:
AGENTS.local.md— appended toAGENTS.mdCLAUDE.local.md— appended toCLAUDE.md
A .local.md file without a corresponding primary file is also loaded on its own. Add .local.md files to your .gitignore to keep personal preferences out of the shared repository.
Resolution order
Files are loaded ancestor-first — the root directory's rules are applied first, and the current working directory's rules are applied last. This means project-root rules provide the baseline, and subdirectory rules can refine or override them.
/ ← checked first
├── CLAUDE.md ← loaded (root-level rules)
├── projects/
│ └── my-app/
│ ├── AGENTS.md ← loaded (project-level rules)
│ ├── AGENTS.local.md ← appended (local overrides)
│ └── src/
│ └── ... ← cwd: rules from / and /projects/my-app/ both apply
What to put in project rules
Use these files for standing instructions that apply to every session:
- Coding conventions (naming, formatting, test patterns)
- Architecture constraints (e.g., "do not add new dependencies without approval")
- Repository-specific context (e.g., "this is a monorepo; packages are in
/packages") - Review preferences (e.g., "always run
make lintbefore committing") - Technology choices (e.g., "use Vitest, not Jest" or "prefer fetch over axios")
Updated 27 days ago
