Skip to content
On this page

    Claude Code: Things That Made Me Switch from Cursor

    After 1.5 years with Cursor, Claude Code pulled me into its ecosystem. Here are the underrated features, keyboard shortcuts, and workflow patterns that made the difference.

    5 min read

    I was a Cursor loyalist for 1.5 years. The AI-powered IDE felt like magic when it first launched. But after spending serious time with Claude Code, I’m not going back.

    The difference isn’t about which model is smarter. It’s about workflow. Claude Code lives in the terminal, where I already spend most of my time. It integrates with my existing tools rather than replacing them. And the features that seem minor on paper - thinking levels, hooks, subagents - compound into a fundamentally different development experience.

    Here’s what actually matters after using it daily.

    The ! Prefix: Skip the Translation Layer

    This one seems trivial but changed how I work. Prefix any command with ! to execute it directly without Claude interpreting it.

    ! git status
    ! npm test
    ! docker ps

    The output feeds back into context, but you skip the token cost and latency of Claude parsing your intent. For deterministic commands where you just want output, this is faster and cheaper.

    Extended Thinking: The Three Levels

    Update: 17-January-2026 - This fetaure has been removed and by default it’s alwaya on extended thinking mode.

    Claude Code supports explicit reasoning budgets triggered by natural language. This took me embarrassingly long to discover.

    LevelToken BudgetTrigger WordsWhen to Use
    think4,000 tokens”think”, “consider”Routine debugging
    megathink10,000 tokens”think hard”, “megathink”API design, schema planning
    ultrathink31,999 tokens”think harder”, “ultrathink”Architecture decisions, complex migrations

    The mental model: reserve ultrathink for decisions where the cost of error exceeds $5 or time savings exceed 1 hour. If you’re using it for everything, you’re burning tokens for no reason.

    claude "Design a rate limiting system for our API - think harder about edge cases and failure modes"

    Plan Mode: Think Before You Code

    Press Shift+Tab twice (or Option+M) to enter Plan Mode. Claude creates a strategy before touching code.

    %%{init: {"layout": "elk"}}%%
    flowchart LR
        Plan[Plan Mode] --> |"discuss approach"| Refine[Refine Strategy]
        Refine --> |"user approves"| Implement[Implementation]
        Implement --> |"issues found"| Plan

    In plan mode you can:

    • Explore multiple approaches
    • Recent Surprise: The questions that comes from Claude
    • Discuss trade-offs before committing
    • Request pros/cons for unfamiliar technologies

    This “plan → discuss → refine → code” flow prevents the expensive rework cycle where Claude builds the wrong thing confidently.

    The @ Symbol: Explicit File References

    Instead of asking Claude to find files (slow, token-expensive), reference them directly with @ and tab completion.

    @package.json
    @src/components/Header.tsx
    @api/routes/auth.ts

    When you reference a file, Claude automatically pulls CLAUDE.md from that file’s directory and all parent directories. You get localized context without manually specifying it.

    For interconnected changes, reference multiple files together:

    > Refactor the payment flow:
      @src/services/payment.ts
      @src/api/stripe.ts
      @src/models/Transaction.ts

    This prevents Claude from making changes in isolation that break integration points.

    CLAUDE.md Hierarchies: Persistent Memory

    Few developers realize Claude Code supports context layering through multiple CLAUDE.md files:

    ~/.claude/CLAUDE.md          → global defaults
    project/CLAUDE.md            → project-wide settings
    src/api/CLAUDE.md            → API-specific context

    More specific files override general ones. Store architecture decisions, team conventions, known issues. Claude reads all applicable files when starting in any directory.

    # Architecture
    - Frontend: React + TypeScript + Tailwind
    - Backend: Node.js + Express + PostgreSQL
    
    # Recent Changes
    - Migrated auth to OAuth2 (see @src/auth/oauth.ts)
    
    # Known Issues
    - Race condition in concurrent uploads (GitHub #427)

    Hooks: Deterministic Automation

    The problem with telling Claude to “always run linting after edits” is that it’s probabilistic. It might forget. Hooks execute shell commands at specific lifecycle events - they always run.

    {
      "hooks": [
        {
          "event": "PostToolUse",
          "matcher": "Edit",
          "command": "cd {{ workingDirectory }} && pnpm lint:fix {{ filePath }}"
        }
      ]
    }
    Hook EventWhen It ExecutesUse Case
    PreToolUseBefore any tool invocationValidate inputs, block risky operations
    PostToolUseAfter tool completesAuto-format, run tests
    SessionStartAt session initializationLoad environment, recent git diffs
    SessionEndWhen session endsPush to staging, send notification

    Hooks operate at the deterministic shell level. Unlike model-based instructions, they can’t be skipped.

    Keyboard Shortcuts That Matter

    ShortcutFunction
    Esc + EscRewind to previous code state
    Shift+Tab or Option+MToggle Plan Mode
    /vimEnable vim-style editing
    Ctrl+GOpen external editor for long prompts
    Ctrl+RReverse search command history
    Ctrl+VPaste images from clipboard

    The Ctrl+G shortcut opens your $EDITOR for writing complex prompts. Set EDITOR=cursor to compose in Cursor, then return to Claude Code for execution.

    Subagents: Specialist AI Instances

    Subagents are separate Claude instances with restricted tool access and independent context. They’re ideal for separating concerns.

    ---
    name: code-reviewer
    description: Expert code reviewer
    model: sonnet
    tools: [Read, Grep, Glob]
    ---
    
    You are a senior code reviewer. Focus on:
    1. Code quality and maintainability
    2. Security vulnerabilities
    3. Performance implications

    The pattern: use a research subagent (Read, Grep only) to explore the codebase, then return findings to main Claude for implementation (Edit, Bash). The main conversation isn’t polluted with intermediate analysis.

    Session Management

    Named sessions prevent context contamination across features:

    claude --session-id "feature/dark-mode"
    claude --resume "feature/dark-mode" -c "continue with the next step"

    The --continue / -c flag resumes your last session. Named sessions let you maintain parallel threads for different features.

    Model Switching Without Context Loss

    The /model command (or Option+P) switches models mid-session without clearing context.

    /model opus    # Switch to Opus for architecture decisions
    /model sonnet  # Switch back for implementation
    /model haiku   # Use lighter model for simple tasks

    Start with Sonnet, escalate to Opus when reasoning gets complex, drop to Haiku for routine operations. Context persists across switches.

    The /compact Command

    After extensive back-and-forth, context accumulates. Each follow-up resends all prior history. The /compact command summarizes the conversation and launches a fresh session with that summary preloaded.

    This reduces token costs by 40-60% on long sessions.

    Headless Mode for Automation

    The -p flag transforms Claude Code into a scriptable tool for CI/CD:

    claude -p "explain this error log" < errors.log
    cat logs.txt | claude -p "find anomalies"

    Use this for automated code review, translation workflows, batch processing.

    Custom Slash Commands

    Create reusable commands as markdown files:

    # Project-level (shared with team)
    mkdir -p .claude/commands
    echo "Analyze this code for security vulnerabilities:" > .claude/commands/security.md
    
    # Personal (user-level)
    mkdir -p ~/.claude/commands
    echo "Review this code for performance issues:" > ~/.claude/commands/optimize.md

    Invoke with /security or /optimize. Commands support dynamic arguments with {arg1} interpolation.

    What Changed My Mind

    The combination of these features creates something different from a chat interface with code capabilities. Claude Code is a programmable development partner.

    The terminal-native approach means I’m not context-switching between IDE and AI. The hooks and subagents mean I can automate the boring parts reliably. The session management means I can maintain multiple threads of work without polluting context.

    Cursor is still excellent for visual work and quick edits. But for serious development sessions - the ones where I’m deep in a codebase for hours - Claude Code is where I live now.


    Using Claude Code? I’d love to hear what workflows you’ve developed. Reach out on LinkedIn.