promote — Claude Code skill: what it does, how to install
Graduates proven patterns from auto-memory into CLAUDE.md or .claude/rules/. Useful when recurring project instructions need strict enforcement.
/plugin marketplace add alirezarezvani/claude-skills
/plugin install self-improving-agent@claude-code-skillsWhat promote does
This skill searches MEMORY.md for patterns you repeated during development and turns them into enforced project rules. Instead of keeping descriptive notes about what went wrong, it distills entries into concise, imperative instructions with exact commands. For example, a note about dependency issues becomes a single line requiring pnpm install.
Target location depends on scope. Project-wide rules go directly into ./CLAUDE.md, global conventions move to ~/.claude/CLAUDE.md, and specific paths route to .claude/rules/ with frontmatter glob filters. When CLAUDE.md approaches its 200-line ceiling, the skill suggests splitting directives into .claude/rules/. Once confirmed, it deletes the source entry from memory to prevent bloat.
Install this if you find yourself correcting Claude Code on the same architectural decisions. Single-file projects or short experiments will not benefit from automated rule graduation.
What it helps with
- convert recurring notes in MEMORY.md into permanent rules in CLAUDE.md
- scope directory-specific guidelines into .claude/rules/ with file paths
- clean promoted entries from MEMORY.md to stay within line limits
- distill descriptive notes into concise imperative instructions
Example prompts for the agent
- /si:promote Use pnpm instead of npm
- /si:promote API validation rules --target rules/api.md --paths "src/api/**/*.ts"
- /si:promote testing guidelines --target rules/testing.md
How to install promote
1Plugin marketplace
/plugin marketplace add alirezarezvani/claude-skills/plugin install self-improving-agent@claude-code-skillsThis installs the whole self-improving-agent plugin with all its skills
2Skills CLI (Vercel)
npx skills add alirezarezvani/claude-skills --skill promote -a claude-code3Manually: put the files in place
~/.claude/skills/promote/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/promote/
Manually: put the files in place
.agents/skills/promote/SKILL.mdFor all projects use ~/.agents/skills/
Manually: put the files in place
.cursor/skills/promote/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install alirezarezvani/claude-skills promote2Manually: put the files in place
.github/skills/promote/SKILL.mdPlatform CLI
gemini skills install https://github.com/alirezarezvani/claude-skills --path engineering-team/self-improving-agent/skills/promoteManually: put the files in place
.devin/skills/promote/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set349
The whole set →Similar
Questions about promote
How do I install promote in Claude Code?
Run npx skills add alirezarezvani/claude-skills --skill promote -a claude-code in your terminal, or install it with /plugin marketplace add alirezarezvani/claude-skills inside Claude Code.
What does the promote skill do?
It finds verified learnings in MEMORY.md, condenses them into imperative instructions, writes them to CLAUDE.md or .claude/rules/, and cleans the old entry from auto-memory.
When does it write to .claude/rules/ instead of CLAUDE.md?
It targets .claude/rules/ when guidelines apply to specific paths or file patterns, or when CLAUDE.md exceeds its 200-line limit.
Source text
SKILL.md · MIT
---
name: "promote"
description: "Graduate a proven pattern from auto-memory (MEMORY.md) to CLAUDE.md or .claude/rules/ for permanent enforcement. Use when the user runs /si:promote or asks to make a learned behavior permanent."
---
# /si:promote — Graduate Learnings to Rules
Moves a proven pattern from Claude's auto-memory into the project's rule system, where it becomes an enforced instruction rather than a background note.
## Usage
```
/si:promote <pattern description> # Auto-detect best target
/si:promote <pattern> --target claude.md # Promote to CLAUDE.md
/si:promote <pattern> --target rules/testing.md # Promote to scoped rule
/si:promote <pattern> --target rules/api.md --paths "src/api/**/*.ts" # Scoped with paths
```
## Workflow
### Step 1: Understand the pattern
Parse the user's description. If vague, ask one clarifying question:
- "What specific behavior should Claude follow?"
- "Does this apply to all files or specific paths?"
### Step 2: Find the pattern in auto-memory
```bash
# Search MEMORY.md for related entries
MEMORY_DIR="$HOME/.claude/projects/$(pwd | sed 's|/|%2F|g; s|%2F|/|; s|^/||')/memory"
grep -ni "<keywords>" "$MEMORY_DIR/MEMORY.md"
```
Show the matching entries and confirm they're what the user means.
### Step 3: Determine the right target
| Pattern scope | Target | Example |
|---|---|---|
| Applies to entire project | `./CLAUDE.md` | "Use pnpm, not npm" |
| Applies to specific file types | `.claude/rules/<topic>.md` | "API handlers need validation" |
| Applies to all your projects | `~/.claude/CLAUDE.md` | "Prefer explicit error handling" |
If the user didn't specify a target, recommend one based on scope.
### Step 4: Distill into a concise rule
Transform the learning from auto-memory's note format into CLAUDE.md's instruction format:
**Before** (MEMORY.md — descriptive):
> The project uses pnpm workspaces. When I tried npm install it failed. The lock file is pnpm-lock.yaml. Must use pnpm install for dependencies.
**After** (CLAUDE.md — prescriptive):
```markdown
## Build & Dependencies
- Package manager: pnpm (not npm). Use `pnpm install`.
```
**Rules for distillation:**
- One line per rule when possible
- Imperative voice ("Use X", "Always Y", "Never Z")
- Include the command or example, not just the concept
- No backstory — just the instruction
### Step 5: Write to target
**For CLAUDE.md:**
1. Read existing CLAUDE.md
2. Find the appropriate section (or create one)
3. Append the new rule under the right heading
4. If file would exceed 200 lines, suggest using `.claude/rules/` instead
**For `.claude/rules/`:**
1. Create the file if it doesn't exist
2. Add YAML frontmatter with `paths` if scoped
3. Write the rule content
```markdown
---
paths:
- "src/api/**/*.ts"
- "tests/api/**/*"
---
# API Development Rules
- All endpoints must validate input with Zod schemas
- Use `ApiError` class for error responses (not raw Error)
- Include OpenAPI JSDoc comments on handler functions
```
### Step 6: Clean up auto-memory
After promoting, remove or mark the original entry in MEMORY.md:
```bash
# Show what will be removed
grep -n "<pattern>" "$MEMORY_DIR/MEMORY.md"
```
Ask the user to confirm removal. Then edit MEMORY.md to remove the promoted entry. This frees space for new learnings.
### Step 7: Confirm
```
✅ Promoted to {{target}}
Rule: "{{distilled rule}}"
Source: MEMORY.md line {{n}} (removed)
MEMORY.md: {{lines}}/200 lines remaining
The pattern is now an enforced instruction. Claude will follow it in all future sessions.
```
## Promotion Decision Guide
### Promote when:
- Pattern appeared 3+ times in auto-memory
- You corrected Claude about it more than once
- It's a project convention that any contributor should know
- It prevents a recurring mistake
### Don't promote when:
- It's a one-time debugging note (leave in auto-memory)
- It's session-specific context (session memory handles this)
- It might change soon (e.g., during a migration)
- It's already covered by existing rules
### CLAUDE.md vs .claude/rules/
| Use CLAUDE.md for | Use .claude/rules/ for |
|---|---|
| Global project rules | File-type-specific patterns |
| Build commands | Testing conventions |
| Architecture decisions | API design rules |
| Team conventions | Framework-specific gotchas |
## Tips
- Keep CLAUDE.md under 200 lines — use rules/ for overflow
- One rule per line is easier to maintain than paragraphs
- Include the concrete command, not just the concept
- Review promoted rules quarterly — remove what's no longer relevant
© Alireza Rezvani · MIT · alirezarezvani/claude-skills