Usage Rules Cheatsheet

View Source

Quick reference for managing and using usage rules in Claude projects

Core Commands

Sync Usage Rules to CLAUDE.md

# Sync all usage rules from dependencies
mix claude.install

# This embeds usage rules between markers in CLAUDE.md
# Rules are pulled from deps/*/usage-rules.md files

Including in Subagents

In .claude.exs

%{
  subagents: [
    %{
      name: "database-expert",
      description: "For database and Ecto work",
      prompt: "You are a database specialist...",
      # Include specific usage rules
      usage_rules: ["ash", "ash_postgres", "ecto"]
    },
    %{
      name: "phoenix-specialist", 
      description: "For Phoenix web development",
      prompt: "You are a Phoenix expert...",
      # Multiple usage rules
      usage_rules: ["phoenix", "ash_phoenix", "phoenix_live_view"]
    }
  ]
}

Available Usage Rule Keys

# Core Elixir
"usage_rules:elixir"  # Elixir patterns and conventions
"usage_rules:otp"     # OTP/GenServer patterns

# Common packages (if installed)
"ash"                 # Ash framework
"ash_phoenix"         # Ash Phoenix integration  
"ash_postgres"        # PostgreSQL data layer
"igniter"            # Code generation
"ecto"               # Database wrapper
"phoenix"            # Web framework
"phoenix_live_view"  # LiveView

How It Works

1. Dependencies Provide Rules

deps/
  ash/
    usage-rules.md      # Ash framework rules
  ash_phoenix/
    usage-rules.md      # Phoenix integration rules
  igniter/
    usage-rules.md      # Code generation rules

2. Mix Task Syncs to CLAUDE.md

mix claude.install
# Reads deps/*/usage-rules.md
# Updates CLAUDE.md between markers
# Preserves custom content outside markers

3. Subagents Get Targeted Rules

# Only specified rules are included
usage_rules: ["ash", "ecto"]  

# Rules embedded in agent's system prompt
# Agent sees only relevant framework docs

Nested Memories

Distribute CLAUDE.md Files Across Directories

# In .claude.exs
%{
  nested_memories: %{
    "lib/my_app_web" => ["phoenix", "ash_phoenix"],
    "lib/my_app/accounts" => ["ash"]
  }
}

Creates Context-Specific Files

lib/my_app_web/CLAUDE.md      # Phoenix and Ash Phoenix rules
lib/my_app/accounts/CLAUDE.md  # Ash framework rules

Benefits

  • Context-aware guidance per directory
  • Reduced cognitive load for Claude
  • Better organization of domain rules

CLAUDE.md Structure

Auto-Generated Section

<!-- usage-rules-start -->
<!-- usage-rules-header -->
# Usage Rules
**IMPORTANT**: Consult these usage rules...
<!-- usage-rules-header-end -->

<!-- package-start -->
## package usage
[package usage rules](deps/package/usage-rules.md)
<!-- package-end -->

<!-- usage-rules-end -->

Manual Content (Preserved)

# Custom Instructions
Your custom content here...

<!-- usage-rules-start -->
[Auto-generated rules]
<!-- usage-rules-end -->

# More Custom Content
Additional instructions...

Configuration Examples

Minimal Subagent

%{
  name: "formatter",
  description: "Format and style code",
  prompt: "Focus on code formatting",
  # No usage_rules - gets general Elixir rules only
}

Framework-Specific Agent

%{
  name: "ash-resource-builder",
  description: "Create and modify Ash resources",
  prompt: "You are an Ash framework expert",
  usage_rules: ["ash", "ash_postgres", "ash_phoenix"]
}

Multi-Framework Agent

%{
  name: "full-stack-developer",
  description: "Full-stack Elixir development",  
  prompt: "You handle all aspects of Elixir apps",
  usage_rules: [
    "ash",           # Resources
    "ash_phoenix",   # Web layer
    "ash_postgres",  # Database
    "phoenix",       # Framework
    "ecto",          # Queries
    "igniter"        # Generation
  ]
}

Best Practices

Keep Rules Focused

# ✅ Good: Specific to task
usage_rules: ["phoenix", "phoenix_live_view"]

# ❌ Bad: Everything included  
usage_rules: ["ash", "ecto", "phoenix", "oban", "req", ...]

Match Rules to Agent Purpose

# Testing agent → testing frameworks
usage_rules: ["ex_unit", "mimic", "mox"]

# API agent → HTTP and JSON libs
usage_rules: ["req", "jason", "phoenix"]

# Database agent → data layers
usage_rules: ["ecto", "ash_postgres"]

Update After Adding Dependencies

# After adding new deps
mix deps.get
mix claude.install  # Syncs new usage rules

Troubleshooting

Rules not appearing in CLAUDE.md?

# Check if package has rules
ls deps/*/usage-rules.md

# Re-run sync
mix claude.install

Subagent not seeing rules?

# Verify in .claude.exs
usage_rules: ["package_name"]  # Exact package name

# Reinstall agents
mix claude.install

Custom rules needed?

<!-- Add outside markers in CLAUDE.md -->
# Project-Specific Rules
Your custom rules here...

<!-- usage-rules-start -->
[Auto-managed section]
<!-- usage-rules-end -->