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.

SkillsProject Rules
ScopeActivate on demand for specific tasksApply to every session
LocationSKILL.md in a skills directoryAGENTS.md or CLAUDE.md in your project tree
TriggerSlash commands or task matchingAlways loaded at session start
PurposeTeach the agent how to do a specific taskSet 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.

LocationPathScope
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 releaseBundled 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
CustomAny additional directoryAdded 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

FieldRequiredDescription
nameYesA short identifier. Lowercase letters, digits, and hyphens only — no leading, trailing, or consecutive hyphens. Max 64 characters.
descriptionYesWhat the skill does and when to use it. Max 1024 characters. Skills with a missing description are not loaded.
disable-model-invocationNoWhen true, the skill is hidden from the system prompt. Users must invoke it explicitly via slash command.
metadataNoArbitrary 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 with disable-model-invocation: true in 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.md on 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-skill

Manual installation

Copy a skill directory into a scanned skill path:

cp -r my-skill ~/.config/kimchi/harness/skills/my-skill

Creating 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.md file 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

ProblemFix
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 failsFrontmatter 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 locationCheck 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 instructionsKeep 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:

FilePurpose
AGENTS.mdProject rules and guidelines for AI coding agents
CLAUDE.mdProject 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 to AGENTS.md
  • CLAUDE.local.md — appended to CLAUDE.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 lint before committing")
  • Technology choices (e.g., "use Vitest, not Jest" or "prefer fetch over axios")


Did this page help you?