Where Kookr skills and agents live (.claude vs plugin) and how to name them. Repo-local Kookr work lives in .claude/ with `kookr-`; Kookr-distributed and general reusable skills live in plugin/. Use this skill before creating, renaming, or promoting a skill or agent.
Installs into .claude/skills of the current project.
Are you the author of Kookr Skill Naming Convention?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/kookr-ai-kookr-skill-naming-convention)
---
name: kookr-skill-naming-convention
description: Where Kookr skills and agents live (.claude vs plugin) and how to name them. Repo-local Kookr work lives in .claude/ with `kookr-`; Kookr-distributed and general reusable skills live in plugin/. Use this skill before creating, renaming, or promoting a skill or agent.
keywords: skill, agent, naming, convention, plugin, kookr, prefix, promote, marketplace, manifest, organization, subagent
related: rfc-iterative-review
---
# Kookr skill + agent naming + placement convention
## When to use
- Creating a new skill or agent in the Kookr repo.
- Promoting a skill/agent from `.claude/` to `plugin/` (or the reverse).
- Renaming an existing artifact that violates the convention below.
- Reviewing a PR that adds or renames a skill or agent.
## The two locations
```
~/git/kookr/
├── .claude/
│ ├── skills/ ← KOOKR REPO-LOCAL skills: dirs MUST start with `kookr-`
│ └── agents/ ← KOOKR REPO-LOCAL agents: files MUST start with `kookr-`
└── plugin/
├── skills/ ← DISTRIBUTED skills for plugin-backed agents in any cwd
└── agents/ ← DISTRIBUTED agents for plugin-backed agents in any cwd
```
`.claude/` artifacts are invisible to other projects — they only load when Claude
Code is opened inside `$HOME/git/kookr/`. Use this tier only for skills and
agents whose natural working directory is the Kookr repository itself: editing
Kookr source, maintaining Kookr tests, or inspecting Kookr repo-local state.
`plugin/` is the distributed Kookr Toolkit. Kookr injects it into spawned agents
regardless of cwd, and non-spawned Claude Code sessions can also see it when the
plugin is installed or synced into Claude's skill/plugin directories. It is the
right home for both:
- Kookr-specific operational skills that agents need while working in other
repositories, such as spawning, supervising, or coordinating Kookr tasks.
- General-purpose engineering skills that are useful beyond Kookr.
The `hooks/skill-placement-gate.sh` script (called from `.hooks/pre-push`) enforces every rule below on push. CI does not duplicate it; the hook is the single enforcement boundary.
## The naming rule
| Location | Name pattern | Example |
|---|---|---|
| `.claude/skills/` (Kookr repo-local) | **must start with `kookr-`** | `kookr-shadow-detection`, `kookr-pre-push` |
| `.claude/agents/` (Kookr repo-local) | **must start with `kookr-`** | `kookr-oss-issue-scout.md` |
| `plugin/skills/` (distributed toolkit) | must not start with `kookr-` | `self-continuation-task`, `architecture-drift-signals` |
| `plugin/agents/` (distributed toolkit) | must not start with `kookr-` | `boundary-critic.md` |
The `kookr-` prefix marks project-scoped Kookr source maintenance. Distributed
skills stay unprefixed even when they operate Kookr at runtime; the
`kookr-toolkit:` namespace already identifies their origin. The directory
decides visibility: repo-local maintenance goes in `.claude/`, while Kookr
runtime operations that agents need from any repository go in `plugin/`.
## How to decide if a skill should be kookr-internal vs published
A skill is **Kookr repo-local** (must live in `.claude/skills/kookr-*`) if it is
only meaningful while the agent's cwd is the Kookr repository, for example:
- Editing Kookr source files, tests, hooks, build scripts, or dashboard internals.
- Maintaining Kookr repo-local release, pre-push, placement, or architecture
conventions.
- Inspecting implementation details that only exist in the Kookr checkout.
A skill is **distributed** (must live in `plugin/skills/`) if it is useful to an
agent outside the Kookr repository through plugin injection, marketplace install,
or local sync, including:
- Kookr operational workflows, such as spawning child tasks, supervising task
chains, or using Kookr CLI/API commands while working in another repo.
- General code patterns, workflows, and meta-skills that are not specific to
Kookr source maintenance.
## Promotion workflow (repo-local → distributed)
1. Audit whether the skill is tied to the Kookr repo cwd. If not, it belongs in
`plugin/`.
2. If the skill has scripts, audit whether they require the Kookr source tree as
cwd. Runtime paths such as the Kookr daemon API or `kookr-spawn` can be valid
distributed behavior.
3. `git mv .claude/skills/kookr-<slug> plugin/skills/<slug>` and drop the
`kookr-` prefix. Plugin names rely on the `kookr-toolkit:` namespace instead.
4. Update the `name:` field in the SKILL.md frontmatter to match the new
directory name.
5. Update any `related:` references in OTHER skills' frontmatter that pointed at the old name.
6. Bump `plugin/.claude-plugin/plugin.json` version (patch bump for additive promotion).
7. Open a PR titled `feat: promote <skill> to plugin`.
## Demotion workflow (published → kookr-internal)
Rare. Only do this if a distributed skill turns out to require working inside
the Kookr repository rather than using Kookr from another repo.
1. `git mv plugin/skills/<slug> .claude/skills/kookr-<slug>`.
2. Add the `kookr-` prefix to the `name:` field.
3. Update `related:` cross-references.
4. Bump plugin version (patch bump).
5. Open a PR titled `chore: demote <skill> to kookr-internal — <reason>`.
## When in doubt
Default to asking whether the agent needs this while its cwd is outside
`~/git/kookr`. If yes, use `plugin/`. If no, use `.claude/skills/kookr-*`.
## Anti-patterns to call out in review
- **`.claude/skills/foo/`** without the `kookr-` prefix — repo-local Kookr
skills must be visibly Kookr-specific.
- **A Kookr runtime skill kept in `.claude/skills/` even though agents need it
outside the Kookr repo** — move it to `plugin/skills/` and drop the `kookr-`
prefix; the plugin namespace identifies its origin.
- **A distributed skill that assumes the Kookr source checkout as cwd** — either
move it back to `.claude/skills/kookr-*` or rewrite it to operate from any cwd.
- **Renaming a published skill without bumping the plugin version** — breaks every project that referenced the old name.
- **Unqualified `subagent_type` references inside a skill body** — calling `Agent` with a bare agent name does NOT resolve for plugin-namespaced agents. The qualified `kookr-toolkit:<name>` form is required. The placement gate rejects bare names on push.
- **Project-scope agents without the `kookr-` prefix** — bypass-mode strips `--setting-sources` and these would silently disappear. The gate enforces the prefix; kookr-prefixed agents are permitted because they're only useful inside the kookr repo anyway.