refactoring_first

A coding rule that tells the agent to search for existing code before creating new code, then improve or reuse what is already there.

In plain words
What is it for?
Use it when implementing features, fixing placeholders, or looking for existing functions that can be refactored.
Why use it?
It reduces duplicate implementations and avoids adding a second version of functionality that the project already contains.

Cursor rule for Cursor

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add rules/wiggitywhitney/mcp-commit-story/refactoring_first
Clone the repo
git clone --depth 1 https://github.com/wiggitywhitney/mcp-commit-story

Made for: Cursor.

Per session 0 Nothing until a file matches its globs; then the whole rule loads.
When invoked 1,841 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00000 $0.01841
Opus 5 $0.00000 $0.00920
Sonnet 5 $0.00000 $0.00368
Haiku 4.5 $0.00000 $0.00184

Measured 3d ago against content hash ff6626506348, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

refactoring_first scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.cursor/rules/refactoring_first.mdc · 223 lines

How it starts

The opening of the file, as written. The whole thing — 223 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Refactoring-First Development Approach

Rule 1: Always Check for Existing Implementations First

Before creating new code, always search for existing implementations that can be refactored:

  • ✅ DO: Search the codebase first

    # Search for existing functions
    grep -r "collect_chat_history" --include="*.py"
    grep -r "daily_summary" --include="*.py"
    grep -r "git_hook" --include="*.py"
    
  • ❌ DON'T: Assume functionality doesn't exist

    # Don't create new functions without checking
    def new_chat_collector():  # BAD - might already exist
        pass
    

Rule 2: Refactor Over Rewrite

For tasks that mention "implement" or "create", first check if the functionality exists:

Refactoring Patterns:

# ✅ DO: Refactor existing placeholder
def collect_chat_history(since_commit=None, max_messages_back=150):
    """EXISTING function - refactor the TODO implementation"""
    # TODO: Implement actual chat collection  # ← REFACTOR THIS
    try:
        # Wire up SQLite reader into existing placeholder
        workspace_path = get_cursor_workspace_path()
        chat_data = query_cursor_chat_database(workspace_path, max_messages_back)
        return format_chat_history(chat_data)
    except Exception as e:
        logger.error(f"Chat collection failed: {e}")
        return None

# ✅ DO: Extend existing functionality
def collect_chat_history(since_commit=None, max_messages_back=150, filter_by_git=False):
    """MODIFY existing function to add new capability"""
    chat_history = [...existing implementation...]
    
    # ADD new filtering capability
    if filter_by_git:
        return filter_chat_by_git_relevance(chat_history, get_git_diff())
    return chat_history

Anti-Patterns:

# ❌ DON'T: Create parallel implementations
def new_chat_collector():  # BAD - collect_chat_history() already exists
    pass

# ❌ DON'T: Rewrite working code
def generate_journal_entry_v2():  # BAD - v1 works fine, refactor it instead
    pass

Read the full file on GitHub · 223 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 3d ago First seen · 223 lines · 0 tokens per session scan A ff6626506348

Subscribe to this mod's changes

refactoring_first is a cursor rule published in the GitHub repository wiggitywhitney/mcp-commit-story (15 stars, last pushed 1y ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,841 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.