Skip to main content

claude-code-conventions

Canonical reference for Claude Code plugin artifact schemas, hook events, frontmatter fields, and naming conventions. Used to inject domain knowledge into Codex audit prompts. To update it from the latest docs, the user types /cc-suite:refresh-knowledge in Claude Code.

Source facts

Repository
xiaolai/cc-suite
Last source activity
September 30, 2026 at 18:13
Detected SKILL.md language
English
Stars
56
Forks
20

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
claude-code-conventions
description
Canonical reference for Claude Code plugin artifact schemas, hook events, frontmatter fields, and naming conventions. Used to inject domain knowledge into Codex audit prompts. To update it from the latest docs, the user types /cc-suite:refresh-knowledge in Claude Code.
version
0.2.0
# Claude Code Plugin Conventions Reference > **Purpose**: This skill is the single source of truth for Claude Code artifact conventions. Audit commands inject this content into Codex's `developer-instructions` so Codex can accurately validate Claude Code artifacts despite having no native knowledge of the platform. > > **Freshness**: Last updated 2026-03-25 from context7 (`/websites/code_claude_en_plugins-reference`, `/websites/code_claude_en_plugins`). To refresh it, ask the user to type `/cc-suite:refresh-knowledge` in Claude Code. ## When to Use Load this skill when: - Auditing Claude Code plugin artifacts (commands, agents, skills, hooks, plugin.json) - Validating frontmatter fields against the official schema - Checking hook event names, types, and output formats - Authoring new plugin artifacts and need the canonical field reference - Running `/cc-suite:audit-plugin`, `/cc-suite:audit-command`, `/cc-suite:audit-agent`, or `/cc-suite:audit-skill` ## plugin.json Schema **Only `name` is strictly required.** Version and description are strongly recommended but optional. Required: - `name` (string): plugin identifier, kebab-case. Used for namespacing (e.g., `plugin-dev:agent-creator`) Recommended: - `version` (string): semver `X.Y.Z`. If also set in marketplace entry, plugin.json takes precedence - `description` (string): brief purpose Optional metadata: - `author` (object): `{ "name": "string", "email": "string", "url": "string" }` - `homepage` (string): URL to plugin docs - `repository` (string): URL to source code - `license` (string): SPDX identifier (e.g., `"MIT"`, `"Apache-2.0"`) - `keywords` (string[]): discovery tags Component path fields (string, string[], or inline object): - `commands` — path(s) to command files. Default: `./commands/` (auto-discovered) - `agents` — path(s) to agent files. Default: `./agents/` (auto-discovered) - `skills` — path(s) to skill directories. Default: `./skills/` (auto-discovered) - `hooks` — path to hooks config OR inline hooks object. Default: `./hooks/hooks.json` - `mcpServers` — path to MCP config OR inline object. Default: `./.mcp.json` - `lspServers` — path to LSP config. Default: `./.lsp.json` - `outputStyles` — path to output style definitions If omitted, components are auto-discovered from default locations. ## Command Frontmatter Location: `commands/<name>.md` (auto-discovered from `commands/` directory) Required fields: - `description` (string): shown in `/help`, must be specific and actionable Optional fields: - `argument-hint` (string): usage pattern (e.g., `"<file> [--flag]"`) - `allowed-tools` (string[]): restrict available tools. Omit for all tools - `model` (string): override session model (`haiku`, `sonnet`, `opus`) - `user-invocable` (boolean): `false` for shared partials in `commands/shared/` Body: imperative instructions FOR Claude, not documentation TO user. ## Shared Partial Frontmatter Location: `commands/shared/<name>.md` Required: - `user-invocable: false` Referenced by commands to eliminate boilerplate. Not shown in `/help`. ## Agent Frontmatter Location: `agents/<name>.md` (auto-discovered) Official documented fields: - `name` (string): agent identifier - `description` (string): what the agent does and when to invoke it Widely-used convention fields (not in official docs but used by all xiaolai plugins and numerous community plugins): - `model` (string): `haiku`, `sonnet`, `opus` - `color` (string): UI color hint — `cyan`, `blue`, `magenta`, `yellow`, `green`, `red` - `tools` (string[] or comma-separated): tools available to the agent - `skills` (string[]): skills loaded into context, format `plugin-name:skill-name` - `allowed-tools` (string[]): alternative to `tools` Agents can also embed inline hooks in frontmatter for `PreToolUse`/`PostToolUse` within their scope. Body: system prompt defining mission, instructions, and output format. Best practice: include `<example>` blocks in description showing when/how to trigger. ## Skill Structure Location: `skills/<skill-name>/SKILL.md` (or `skills/<plugin-name>/<skill-name>/SKILL.md`) Required frontmatter: - `name` (string): skill identifier - `description` (string): when/why to use — acts as trigger for auto-loading Optional frontmatter: - `version` (string): semver - `globs` (string or string[]): file patterns that scope this skill Body: reference material. Keep under 500 lines for context efficiency. Supporting files alongside SKILL.md: - `references/` — detailed reference material - `examples/` — working code examples - `scripts/` — utility scripts Skills in `commands/` directory work identically (legacy layout). Both are auto-discovered. ## Hook Events Location: `hooks/hooks.json` (can have multiple files: `hooks.json`, `security-hooks.json`, etc.), inline in `plugin.json` hooks field, or inline in agent frontmatter. Valid event types: - `PreToolUse` — before a tool executes (can block via permission decision) - `PostToolUse` — after a tool executes successfully - `PostToolUseFailure` — after a tool execution fails - `PermissionRequest` — when tool permission is needed - `UserPromptSubmit` — when user sends a message - `Stop` — when Claude stops responding - `SubagentStop` — when a subagent completes - `SessionStart` — when a session begins - `SessionEnd` — when a session ends - `PreCompact` — before context compression - `Notification` — for notifications - `InstructionsLoaded` — after CLAUDE.md files are loaded **Note**: Event names are case-sensitive. Hook types: - `command` — run a shell command, receives JSON on stdin - `prompt` — evaluate a prompt with the LLM - `agent` — spawn an agentic verifier for complex verification tasks Hook output (for `command` type blocking decisions): ```json { "hookSpecificOutput": { "permissionDecision": "allow" | "deny", "permissionDecisionReason": "explanation" } } ``` Matcher: regex pattern for tool name (e.g., `"Bash"`, `"Write|Edit"`, `"mcp__.*"`) ## hooks.json Format ```json { "hooks": { "PostToolUse": [ { "matcher": "Write|Edit", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/scripts/format-code.sh" } ] } ] } } ``` Multiple hook config files are supported in the `hooks/` directory. ## .mcp.json Format ```json { "mcpServers": { "server-name": { "command": "executable", "args": ["arg1", "arg2"], "cwd": "${CLAUDE_PLUGIN_ROOT}", "env": { "KEY": "value" } } } } ``` ## marketplace.json Format Per-plugin marketplace (for `claude plugin marketplace add`): ```json { "name": "marketplace-name", "owner": { "name": "author-name" }, "plugins": [ { "name": "plugin-name", "source": { "source": "github", "repo": "owner/repo" }, "description": "...", "version": "X.Y.Z", "author": { "name": "..." }, "category": "developer-tools" } ] } ``` `owner` with `name` is required for marketplace validation. Source types: `github`, `git`, `url`, `npm`, `file`, `directory`, `hostPattern` ## Plugin Directory Layout ``` plugin-name/ ├── .claude-plugin/ │ ├── plugin.json # manifest (name required, rest optional) │ └── marketplace.json # optional ├── commands/ # auto-discovered │ ├── command-name.md │ └── shared/ # non-invocable partials │ └── partial-name.md ├── agents/ # auto-discovered │ └── agent-name.md ├── skills/ # auto-discovered │ └── skill-name/ │ ├── SKILL.md │ ├── references/ # optional │ ├── examples/ # optional │ └── scripts/ # optional ├── hooks/ # can have multiple .json files │ ├── hooks.json │ └── security-hooks.json # additional hook configs ├── scripts/ # utility scripts ├── settings.json # default plugin settings (optional) ├── .mcp.json # optional MCP servers ├── .lsp.json # optional LSP servers ├── CLAUDE.md # project instructions ├── README.md └── LICENSE ``` `${CLAUDE_PLUGIN_ROOT}` resolves to the plugin's root directory at runtime. Use it in all script paths for portability. ## Naming Conventions - Plugin names: kebab-case (`reading-assistant`, `codex-toolkit`) - Command files: kebab-case `.md` (`audit-plugin.md`) - Agent files: kebab-case `.md` (`qc-coordinator.md`) - Skill directories: `skill-name/SKILL.md` or `plugin-name/skill-name/SKILL.md` - Script files: kebab-case with extension (`codex-preflight.sh`, `parse_epub.py`) ## Settings - `settings.json` at plugin root — default settings shipped with the plugin - `~/.claude/settings.json` — global user settings - `{project}/.claude/settings.json` — project settings (committed) - `{project}/.claude/settings.local.json` — local settings (gitignored) - `.claude/<plugin-name>.local.md` — per-plugin config with YAML frontmatter ## CLAUDE.md - Project-level instructions for Claude Code - Supports `@` import syntax to reference other files - Loaded from: project root, `.claude/`, `~/.claude/`, parent directories - Priority: closer to project root wins - `claudeMdExcludes` setting can ignore specific CLAUDE.md files ## Quality Standards ### Commands - Description: specific and actionable - Steps: numbered, unambiguous, all paths covered - Tools: match `allowed-tools`, least-privilege - Output: format defined (report template) - Errors: fallback paths specified ### Agents - Description: include `<example>` blocks for triggering - Model: match task complexity (haiku mechanical, sonnet reasoning, opus judgment) - Tools: least-privilege - Body: mission, instructions, output format ### Skills - Description: trigger phrases matching user queries - Body: under 500 lines, patterns over theory - Code examples: runnable, not pseudocode - Scope: clear boundaries, cross-references to related skills ### Rules (.claude/rules/) - YAML frontmatter: `description` (required), `paths` (optional glob array) - Budget: <500 lines total across all rule files - Format: bold imperative + rationale + positive framing - Enforceable: testable, specific, observable - No duplication of linter/formatter/CI enforcement ## Scope Note Covers Claude Code's own artifact schemas and naming conventions, and exists to inject that reference material into Codex audit prompts. For running an audit against those conventions, use `$audit` or `$audit-fix`. For authoring cc-suite advisor agents — a different, cc-suite-specific file format — use `agent-design`. For choosing canonical terminology inside cc-suite artifacts, use `vocabulary`. ## Example Invocations <example> Context: An audit needs to judge whether a hook event name in a plugin is valid. user: "Is `pretooluse` a real Claude Code hook event?" assistant: "I'll check claude-code-conventions, which lists the confirmed event names and their casing — the valid form is `PreToolUse`, so this hook would never fire." </example> <example> Context: The user is authoring a new command file and is unsure which frontmatter fields are mandatory. user: "What does a command file actually need in its frontmatter?" assistant: "I'll load claude-code-conventions for the command frontmatter section — only `description` is required; `argument-hint`, `allowed-tools`, and `model` are optional." </example>
View on GitHub