Home / Blog / I Dumped GitHub Copilot for Cursor After 18 Months...

I Dumped GitHub Copilot for Cursor After 18 Months — Here's My DevOps Playbook

By CaelLee | | 8 min read

I Dumped GitHub Copilot for Cursor After 18 Months — Here's My DevOps Playbook

Meta Description: Real-world migration guide from GitHub Copilot to Cursor AI IDE with benchmarks, config files, and honest cost analysis. Spoiler: my Terraform modules have never been cleaner.

Last November, I stared at yet another Copilot suggestion that completely missed the point of my infrastructure-as-code setup. The 47th time, if I'm counting. Which I was. Because I'm that person.

Three months later, I've moved my entire DevOps workflow to Cursor. My Terraform modules are cleaner, my Docker Compose files actually respect healthchecks, and I'm sleeping better. Not because the code is perfect — it's not — but because I'm spending way less time fixing AI-generated nonsense.

Let me walk you through the migration. I've got config files, benchmarks, and all the gotchas I wish someone had written down before I started. Look, this isn't a "Copilot sucks" post. It doesn't. I used it for 18 months and it paid for itself many times over. But for infrastructure work specifically? Different beast entirely.

TL;DR for the Impatient

Prerequisites — The Boring Bit

Nothing exotic here:

Why I Actually Switched: Three Numbers That Changed My Mind

I track things. Probably too much. My wife takes the mickey out of my spreadsheets, but they don't lie.

1. Context Window: The Game-Changer


# Copilot's effective context (tested Dec 2023)
# ~2,000 tokens of surrounding code
# Result: 23% of suggestions needed manual editing

# Cursor's context (v0.8.5, Jan 2024)
# Full file + cross-file references based on imports
# Result: 8% needed manual editing

I ran that test three times because I didn't believe the 8% figure. Honestly, I still side-eye it a bit. But the improvement is real.

Concrete example: I was refactoring an ECS task definition. Copilot suggested awsvpc network mode — fine, but it completely missed the security group configuration sitting in my variables.tf. Cursor pulled in both files and suggested the entire configuration, security group reference included. I sat there for maybe 30 seconds just... staring. It felt like the tool had actually read my project.

2. Infrastructure-as-Code Accuracy (I Tested 50 Terraform Blocks)

ToolFirst-try AccuracyContext-AwareMulti-file Resolution
Copilot67%PartialNo
Cursor89%FullYes

The Claude 3 numbers are from Anthropic's latest — I think the Opus variant? I should probably double-check which endpoint I was hitting. But the gap is real, regardless of the exact model.

3. The Docker Compose Incident (11 PM Edition)

Last week. Late. I was debugging a multi-container setup with inter-service dependencies. Copilot suggested a valid depends_on clause — technically correct — but ignored the healthcheck timing. Would've caused race conditions in production. Again.

Cursor didn't just suggest the correct healthcheck. It referenced my custom entrypoint script in a completely different directory:


# Copilot suggestion (incomplete — would've woken me up at 3 AM)
services:
 api:
 depends_on:
 - db

# Cursor suggestion (production-ready, actually)
services:
 api:
 depends_on:
 db:
 condition: service_healthy
 environment:
 - DATABASE_URL=postgresql://user:pass@db:5432/app
 db:
 healthcheck:
 test: ["CMD-SHELL", "pg_isready -U user -d app"]
 interval: 5s
 timeout: 3s
 retries: 5
 start_period: 10s

That start_period: 10s? That's the sort of detail that prevents PagerDuty alerts. Copilot would never have added that. It doesn't think about cold starts — it just pattern-matches.

The Actual Migration (Step by Step)

Step 1: Export Your Copilot Settings

Grab what you can. File locations vary:


# macOS/Linux
cat ~/.config/Code/User/settings.json | grep -A 10 "github.copilot"

# Windows (PowerShell)
Get-Content $env:APPDATA\Code\User\settings.json | Select-String "github.copilot"

# Mine looked like this (sanitised):
{
 "github.copilot.enable": {
 "*": true,
 "terraform": true,
 "yaml": true,
 "markdown": false
 }
}

Seriously: Don't cancel Copilot yet. Run both side-by-side for two weeks. I skipped this step, regretted it, and paid for an extra month just to benchmark properly.

Step 2: Install Cursor


# macOS (Homebrew)
brew install --cask cursor

# Linux (AppImage)
wget https://cursor.sh/downloads/latest/linux
chmod +x Cursor-*.AppImage
./Cursor-*.AppImage --appimage-extract-and-run

# Verify
cursor --version
# Output: Cursor 0.8.5 (build 240112)

Took three minutes. Most of that was waiting for the download.

Step 3: Sync Your VS Code Extensions

Cursor is VS Code-compatible. Symlink your extensions:


# Export from VS Code
code --list-extensions > vs-code-extensions.txt

# Import to Cursor
while read extension; do
 cursor --install-extension "$extension"
done < vs-code-extensions.txt

Critical step: Disable the Copilot extension in Cursor. Trust me on this one:


cursor --disable-extension GitHub.copilot

I learned the hard way. Two AI assistants fighting over suggestions creates... chaos. Weird, glitchy chaos. You'll think your machine is possessed.

Step 4: Configure Cursor's AI (My Production Settings After 3 Months of Tinkering)


{
 "ai.model": "claude-3-sonnet",
 "ai.contextStrategy": "related",
 "ai.maxTokens": 4096,
 "ai.temperature": 0.3,
 "ai.suggestions.mode": "inline",
 "ai.includeFiles": [
 "**/*.tf",
 "**/*.tfvars",
 "**/*.yml",
 "**/*.yaml",
 "**/*.hcl",
 "**/Dockerfile",
 "**/*.sh"
 ],
 "ai.excludeFiles": [
 "**/node_modules/**",
 "**/.terraform/**",
 "**/secrets/**"
 ]
}

The temperature setting took forever to dial in. 0.3 feels right for infrastructure — creative enough to handle edge cases, not so creative it hallucinates AWS APIs. Which happened. Twice. I got a suggestion for awss3bucket_v2 once. That's not a thing. Claude got a bit... imaginative.

Step 5: Create Project Rules (This is Where Cursor Earns Its Keep)

.cursorrules in your project root:


rules:
 - pattern: "*.tf"
 instructions: |
 Use AWS provider ~> 5.0 syntax
 Always include tags block with Environment and Project
 Prefer for_each over count
 Include lifecycle { prevent_destroy = true } for stateful resources
 
 - pattern: "*.yml"
 instructions: |
 Use GitHub Actions syntax
 Pin action versions with SHA256
 Include concurrency groups for deployment workflows
 
 - pattern: "Dockerfile*"
 instructions: |
 Use multi-stage builds
 Pin base images with digests, not tags
 Run as non-root user (UID 1000)

Result? My team's PR review time dropped about 40%. Not because we're writing better code — though we are — but because Cursor catches style violations before they hit the PR. Our last sprint, we merged 23 PRs with zero style comments. That's never happened before. Ever.

The Money Bit: Cost Analysis

Cursor + Claude 3 (API)94%FullYes
ItemGitHub CopilotCursorDifference
Individual plan$10/month$20/month-$10
Business (per seat)$19/month$20/month-$1
API costs (Claude 3)N/A~$5-15/month*Variable

*Based on my heavy usage: ~200 requests/day

Here's the thing: I'm paying $15 more per month. But I'm saving 8-12 hours. At DevOps contractor rates — even conservative ones — that's $1,200-1,800 in recovered time. The maths works.

But if you're a student or doing side projects? Stick with Copilot. The cost difference matters when you're not billing hourly.

The Migration Hiccups (Learn From My Mistakes)

Problem 1: Extension Weirdness

The AWS Toolkit extension acted up in Cursor v0.8.2. The explorer panel would disappear. Reappear. Disappear again. Like a ghost.


# Fix: Roll back to AWS Toolkit v1.84.0
cursor --install-extension [email protected]

Cost me an afternoon of head-scratching.

Problem 2: Git Diff Confusion

Cursor's git diff view initially showed AI suggestions as actual changes. I committed AI-generated code twice before I caught it. Embarrassing PR comments ensued.


// Fix: Add to .cursor/settings.json
{
 "ai.gitDiffIntegration": "exclude"
}

Problem 3: Muscle Memory

My fingers knew Copilot's Alt+\ trigger. My i3 window manager also used Alt+\. Conflicts everywhere.

Took about a week to retrain myself. Still catch myself hitting Alt+\ occasionally.

Real-World Workflow: Before and After

Before (Copilot) — I'd write awss3bucket and get the bare minimum. Then spend 5-10 minutes manually adding encryption, versioning, logging, tags. Every. Single. Time.

After (Cursor with .cursorrules) — I get the complete compliant block:


resource "aws_s3_bucket" "data" {
 bucket = "my-data-bucket-${var.environment}"
 
 versioning {
 enabled = true
 }
 
 server_side_encryption_configuration {
 rule {
 apply_server_side_encryption_by_default {
 sse_algorithm = "aws:kms"
 kms_master_key_id = var.kms_key_arn
 }
 }
 }
 
 logging {
 target_bucket = var.logging_bucket
 target_prefix = "s3/data/"
 }
 
 tags = merge(var.common_tags, {
 Name = "data-storage-${var.environment}"
 })
}

Now I tweak the bucket name and move on. It's almost boring. In a good way.

Performance (Because I Measured That Too)


# Suggestion latency
# VS Code + Copilot: 847ms ± 45ms
# Cursor + Claude 3: 623ms ± 32ms (26% faster)

# Memory after 4 hours
# VS Code: 1.2 GB
# Cursor: 1.4 GB (17% more)

The memory hit is noticeable on my 16GB M1. Not a dealbreaker, but I close Chrome tabs more aggressively now.

When NOT to Switch

Be honest with yourself:

  1. Heavy extension dependency: If you use 30+ niche extensions, test every single one
  2. Regulated environments: Cursor's telemetry might not pass compliance (ask your security team)
  3. Low-context coding: Standalone scripts? Copilot's probably fine
  4. Team resistance: I lost a week to Slack debates. Don't force it

What's Next

I'm testing Cursor's "agent mode" (v0.9 beta) — it can execute terminal commands directly. Yesterday it suggested a terraform destroy. I nearly had a coronary. It was correct in context, but still. We're not ready for fully autonomous infrastructure. Not yet.

Your turn: Have you made the switch? What broke first? Drop your experience in the comments — especially if you've found config tricks I missed. I'm particularly curious about anyone using this with Pulumi or CDKTF.

Tags: #cursor #github-copilot #devops #infrastructure-as-code #terraform #ai-coding #vscode

Last updated: 3 February 2024 — Cursor v0.8.5

My actual total$10/month~$25/month-$15
C

Cael Lee

Full-stack developer with 8+ years of experience. Currently building AI-powered developer tools. I've tested 20+ AI API providers and coding assistants.

Ready to get started?

Get your API key and start building with 180+ AI models.

Get API Key Free