Claude Code: Things That Made Me Switch from Cursor

· 5 min read ·
·
AI Claude Code Developer Tools Productivity CLI

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.