A cat staring at a laptop screen

Using Cursor IDE without overengineering


Cursor is fast enough to tempt you into letting it rewrite half the repo before lunch. That is usually how you end up with a PR you cannot explain and a Tuesday spent reverting.

I use Cursor daily on platform and application work. The features that actually stick for me are not the flashiest demos — they are the ones that reduce context switching while keeping me in charge of what merges.

What I use Cursor for

These are the capabilities I reach for on real tasks:

  • Multi-file agent edits when the change has an obvious boundary (new API route, new content collection field, workflow file plus script).
  • Chat with codebase context when I am exploring — “where do we filter published posts?” beats grepping cold.
  • Integrated terminal so I can run npm run build or npm run check in the same window and paste errors back into the thread.
  • Project rules (.cursor/rules/) for constraints that should survive every session — hero image rules, commit preferences, stack-specific gotchas.

What I do not use it for: architecture decisions I have not thought through, mass refactors “while we are here,” or accepting generated code I have not read because the diff is green locally.

The rule I actually follow: one explainable change

Before I merge anything Cursor touched, I ask one question: can I explain this diff in two sentences to future me?

If not, the change is too big. I split it.

That sounds obvious, but agents make large diffs feel free. They are not. Review cost scales with line count, and so does rollback pain.

My default loop:

  1. State the outcome, not the implementation (“add tags to blog cards,” not “refactor the entire design system”).
  2. Let the agent work on a focused slice.
  3. Run the same checks I would run without AI — build, lint, project-specific scripts.
  4. Read the diff like a colleague wrote it at 4:59 PM on a Friday.

Cursor works best as a force multiplier on discipline I already had, not a substitute for it.

Rules and skills: enough structure, not a framework

It is easy to over-build Cursor configuration — dozens of rules, custom skills for every folder, agents for agents.

I keep it boring:

  • A few high-value rules tied to globs that matter (src/content/blog/**, workflow files, contact form routes).
  • Skills only when the official docs or a workflow is long and easy to get wrong (SDK integrations, PR automation).
  • No rule for things the codebase already enforces (npm run blog:check-heroes, TypeScript, CI).

Rules should encode decisions already made, not aspirational process. “Do not deploy unless asked” is useful. “Always be thoughtful about quality” is noise.

If a rule has not prevented a real mistake after two weeks, I delete it.

Agents vs inline edits: pick the cheaper tool

Not every task deserves an agent run.

SituationWhat I use
Rename a prop, fix a typo, adjust copyInline edit or small chat selection
Add a page plus styles plus one lib helperAgent with a clear file list
Debug a failing checkChat + terminal; agent only if the fix spans several files
Recurring automation (scheduled blog PR)Agent in CI via API — but human reviews the PR

Agents shine when the work is parallelizable (many files, same pattern). They are overhead when the work is one file and one decision.

When I catch myself opening agent mode for a ten-line fix, I stop. That is overengineering in a IDE-shaped hat.

How this shows up on mayfield.io

This site is a concrete example of keeping Cursor useful without letting it sprawl:

  • Astro content, Cloudflare Workers, and GitHub Actions are fair game for agent-assisted PRs.
  • Deploy to production stays manual — automation opens PRs; I merge and ship when the diff looks right.
  • Blog heroes, SEO shape, and publish rules live in repo rules so daily automation does not re-learn them every run.

That split — automate drafting, human gate on merge — is the same pattern I use on work repos, just at personal-site scale.

When Cursor makes things worse

A short list I revisit when a session feels off:

  • Accept-all fatigue — merging generated code because the prompt was long and the diff is wide.
  • Context drift — the agent “fixes” something unrelated because the prompt was vague.
  • Skipping local verification — green chat summary is not a green build.
  • Replacing reading — I still open the files. Generated code can be plausible and wrong.

When any of those show up, I shrink the task or stop for the day. More prompt engineering is rarely the fix; smaller scope is.

A sane default for teams and solo work

If you are adopting Cursor on a team repo, you do not need a 40-page playbook. Start with:

  1. Small PRs from AI-assisted work, same as human-written work.
  2. One or two rules for non-negotiables (secrets, deploy, test commands).
  3. Required checks in CI that do not care who wrote the code.
  4. Explicit “do not touch” zones in prompts when the agent should stay out of infra or auth.

Solo or team, the goal is the same: faster iteration, same bar for merge.

For the pre-ship habit stack that pairs well with this — build checks, secrets, and not trusting localhost vibes — see Checklist before shipping a small personal site. For keeping GitHub identity and config sane across machines when you are bouncing between personal and work repos, Manage multiple GitHub orgs with workspace-specific .gitconfig is the companion read.


Hero image: Cat on laptop - Just Browsing, licensed CC BY 2.0.