create-rule · v2.0.0 · 2026-07-27 · sha256 403fb5d83a683264

create-rule v2.0.0A

Immutable. This exact content is served forever at /api/v1/blob/403fb5d83a683264.

---
name: create-rule
description: Create a new memory/instruction rule for whatever AI coding tool a project
  actually uses, a CLAUDE.md entry or .claude/rules/*.md file for Claude Code, an
  AGENTS.md entry for Codex/Cursor/Copilot/Gemini-CLI-style tools, or a .cursor/rules/*.mdc
  file for Cursor. Use when the user runs /create-rule or asks to add a project rule,
  user/personal rule, coding standard, style guide entry, or workflow instruction to
  memory, AGENTS.md, or CLAUDE.md. Not for creating skills or slash commands (use
  create-skill). Not for discovering or installing existing third-party skills (use
  find-skills).
metadata:
  author: mgiovani
  version: 2.0.0
disable-model-invocation: false
argument-hint: <rule-name> [description]
allowed-tools:
- Read
- Write
- Edit
- Grep
- Glob
- Bash(git *)
- Bash(mkdir *)
- AskUserQuestion
---

# Create Rule

Generate a new memory rule (a project instruction, coding standard, or workflow
guideline) in whatever format the project's AI tooling actually reads.

This creates **memory rules**, not skills or commands (use `create-skill`) and not a
search for existing skills to install (use `find-skills`).

- Tool conventions, OS-specific paths, and frontmatter formats: [references/memory-hierarchy.md](references/memory-hierarchy.md)
- Worked templates per tool and scope: [references/rule-examples.md](references/rule-examples.md)
- Claude Code memory docs: https://code.claude.com/docs/en/memory

## Anti-hallucination guidelines

- Verify existing patterns first: check the actual codebase, don't assume conventions.
- Base rules on real code found in the project, not invented standards.
- If no convention exists, ask the user rather than making one up.
- Check existing CLAUDE.md / AGENTS.md / `.claude/rules/*.md` / `.cursor/rules/*.mdc` for conflicts before adding a new rule.
- Only use `paths` frontmatter on `.claude/rules/*.md` (Claude Code) or `globs` on `.cursor/rules/*.mdc` (Cursor), never on CLAUDE.md or AGENTS.md, which have no frontmatter.

## Steps

1. **Parse arguments**: rule name from `$1` (or the first word of the arguments),
   description from the rest: ask the user if either is missing.
2. **Detect the tool convention** by checking what's already in the repo:
   - `CLAUDE.md` or `.claude/rules/*.md` present → Claude Code.
   - `AGENTS.md` present (with no Claude-specific files) → Codex/Cursor/Copilot/Gemini-CLI-style tool. This repo's own `AGENTS.md` + `CLAUDE.md` pair is a live example of the pattern.
   - `.cursor/rules/*.mdc` present → Cursor's native format.
   - More than one convention present → ask which the user wants updated (or write to more than one, if the user says so).
   - None present → ask the user which tool/format they use before writing anything.
3. **Decide type and scope** for the detected tool (details and templates in the reference):
   - Claude Code: modular `.claude/rules/<name>.md` for a focused single topic vs. a `CLAUDE.md` entry for a short cross-cutting instruction; project (`.claude/rules/`, git-shared) vs. user (`~/.claude/rules/`, personal): ask if unclear from context; path-specific rules need `paths` frontmatter.
   - AGENTS.md-style tools: append a new section to the single root `AGENTS.md`, this format has no per-topic file split or frontmatter.
   - Cursor: `.cursor/rules/<name>.mdc` with `description`/`globs`/`alwaysApply` frontmatter; scope by directory nesting for path-specific rules.
4. **Write the rule**, following the matching template in [references/rule-examples.md](references/rule-examples.md): imperative language, specific expectations, one topic per file, code examples where useful.

## Examples

- `/create-rule api-errors "Standard error handling for API routes"` in a Claude Code repo → writes `.claude/rules/api-errors.md` with `paths: src/api/**/*.ts` frontmatter and concrete guidelines.
- `/create-rule formatting "2-space indentation, single quotes"` in a Claude Code repo, no path scope needed → writes `.claude/rules/formatting.md` with no frontmatter.
- `/create-rule --user preferences "Prefer functional patterns, async/await over raw promises"` → writes `~/.claude/rules/preferences.md` (personal, not git-shared).
- `/create-rule testing "Use table-driven tests and no test interdependence"` in a repo with only `AGENTS.md` → appends a `## Testing` section to `AGENTS.md` instead of creating a new file.
- `/create-rule react-components "Function components only, props typed with interfaces"` in a Cursor repo → writes `.cursor/rules/react-components.mdc` with `globs: ["**/*.tsx"]` frontmatter.