Skip to content
Notifications
Clear all

Cursor after 6 months - are the hallucinations still a problem

53 Posts
50 Users
0 Reactions
180 Views
(@henryw)
Estimable Member
Joined: 3 months ago
Posts: 74
Topic starter   [#23986]

I've been using Cursor for a few months now, mostly for basic tasks like setting up project environments and writing simple scripts. I keep hearing about "hallucinations" with AI assistants, especially with code. I'm worried about relying on it too much if it's still making up APIs or suggesting things that don't work.

Can anyone share a recent, concrete example where Cursor gave you code that looked right but was completely wrong? Something you tried and it failed? I'm particularly interested in cases with B2B APIs, cloud storage integrations (like connecting to S3 or Google Cloud Storage), or common productivity tool setups.

I'd like to know what to watch out for, so I don't waste time debugging AI suggestions.



   
Quote
(@hannahc)
Reputable Member
Joined: 2 months ago
Posts: 282
 

Absolutely. I had a really specific example just last week that fits your question perfectly. I was building a small integration to pull contact data from HubSpot's API into a custom reporting tool in Cursor. The assistant suggested using a specific endpoint for "deal associations" that looked correct - the syntax, the parameters, all matched HubSpot's style. But when I ran it, it returned a 404. Turns out, that exact endpoint path was deprecated six months ago and replaced with a slightly different one. The AI had mixed an old example with new syntax.

It *looked* completely plausible, and I spent about 20 minutes checking my auth tokens and rate limits before I thought to check the API versioning docs. For cloud storage, I've seen similar things with presigned URL generation for S3, where it'll occasionally use a parameter that's from the boto2 era instead of boto3.

My rule now is to use Cursor as a fantastic first draft, but I always keep the official API docs open in another tab for a quick sanity check on endpoints and authentication methods. The hallucinations are less "invented from nothing" now and more "confidently out-of-date," which can be sneakier!


hannah


   
ReplyQuote
(@alexr23)
Reputable Member
Joined: 2 months ago
Posts: 319
 

Your concern about cloud storage integrations is spot on. I was implementing a GCS lifecycle rule configuration in Terraform just last month. Cursor generated a block using the `google_storage_bucket` resource with a `lifecycle_rule` block that looked perfectly valid - the syntax for the condition and action matched the provider's style exactly.

However, the `age` condition was specified as a string, e.g., `age = "7"`. The HCL parsed fine, but `terraform apply` failed with a vague type conversion error. The correct type is an integer, `age = 7`. This is a subtle but critical distinction that wasted nearly an hour of debugging because the error message didn't point directly to the field.

It's these minor syntactic hallucinations around data types in IaC that are especially pernicious. The structure is correct, the keywords are right, but a single quote breaks it. For S3 and GCP, always validate the exact attribute types in the provider documentation, even when the AI's code looks syntactically flawless.


—Alex


   
ReplyQuote
(@crm_hopper_2024)
Honorable Member
Joined: 7 months ago
Posts: 333
 

Yep, the terraform type mismatch is classic. I see this all the time with Salesforce Apex too. The assistant will suggest a Map when you need a Map for a specific API call. It compiles, then blows up at runtime.

You fix one integer/string quote issue and move on, only to hit the next one. It makes you wonder what you're paying for.


CRM is a means, not an end.


   
ReplyQuote
(@infra_architect_rebel_alt)
Honorable Member
Joined: 5 months ago
Posts: 487
 

Oh, it's still a festival of plausible nonsense. Just yesterday it tried to help me set up a CloudFront distribution with an S3 origin, and it confidently generated a bucket policy that granted `s3:GetObject` to the CloudFront OAI, which is correct, but then it added a `Principal` block with a wildcard `"*"` for the `"Service"` key. That's a leftover from an older, deprecated pattern using origin access *identities* versus the newer origin access *control*. The policy looked perfectly formed, syntactically valid, and would have failed silently, leaving you wondering why your files were still public.

The issue isn't the big, obvious errors. It's the small, syntactically perfect deviations from the current actual state of an API or service that'll burn your afternoon. You end up debugging your own code when the problem is the AI's outdated mental model of the platform. For cloud integrations, you must assume any generated IAM policy, CORS header, or SDK call is a suspect until you line it up with the vendor's *current* documentation. It builds its suggestions from a graveyard of old blog posts and Stack Overflow answers.


keep it simple


   
ReplyQuote
(@gracyj)
Reputable Member
Joined: 3 months ago
Posts: 282
 

That's such a perfect example. It's the silent, policy-level failures that are the worst. They look totally valid right up until you realize your data is exposed.

It reminds me of AWS SDK version mismatches. I've had Cursor generate code using a `boto3` method signature that was accurate for version 1.20 but silently deprecated in 1.26. Everything ran, no errors, just weird partial failures.

You're right, it's like it's working from an outdated snapshot of the internet. Always a quick doc check for me now, especially on IAM and SDK calls.


Happy customers, happy life.


   
ReplyQuote
(@devops_barbarian)
Honorable Member
Joined: 5 months ago
Posts: 439
 

Your S3/GCS ask is on point. Last week it gave me an Ansible playbook to pull secrets from HashiCorp Vault for an app config. The `vault_kv2_get` module syntax was perfect, the lookup filter looked right. But it used `with_items` in a loop that's been deprecated for three years. Playbook ran without error, just returned empty dicts. The new `loop` keyword is in all the examples now. It's not just wrong APIs, it's wrong idioms. The old ones look fine until you're chasing null values for an hour. Always check the module docs for the version you're on.


Don't panic, have a rollback plan.


   
ReplyQuote
(@chloek4)
Reputable Member
Joined: 3 months ago
Posts: 303
 

That Ansible example hits home. The deprecated loop syntax is a perfect case where the code looks fine but the *intent* is broken. It's not just wrong, it's an outdated pattern.

I've seen similar with webhook payload parsing. It'll generate code expecting `request.json['data']['object']` for a Stripe event, which is correct, but then use a Flask `jsonify()` pattern that's fine for Flask 1.x but subtly wrong if you're on a newer version with different default mimetypes. The server returns 200, the data looks fine in logs, but the external service logs a failure.

It pushes me to always check two things now:
* The exact module/package version in my project
* The "last updated" date on the official doc page I'm referencing

Because yeah, the AI's snapshot of "correct" seems to be about 12-18 months stale.


Webhooks or bust.


   
ReplyQuote
(@devops_shift_worker)
Reputable Member
Joined: 4 months ago
Posts: 290
 

Yep, the version check is the only real defense. It's like having a junior dev who studied for the cert exam two years ago and then stopped reading release notes.

Had it happen with the Kubernetes Python client last week. Generated a perfect-looking patch for a Deployment, using the `v1` core API. It ran without a peep, no change. Turns out the app uses a custom resource via the `client-python` `CustomObjectsApi`. The old core `v1` methods just silently return a 200 on a resource they don't manage. Same pattern - looks right, works wrong.

Your two-point checklist is the bare minimum now. I add a third: run a dry-run or a plan against a sandbox first. Trust but verify, as they say. Usually just verify.


NightOps


   
ReplyQuote
(@cost_cutter_ray)
Honorable Member
Joined: 4 months ago
Posts: 492
 

The examples here, particularly the Terraform integer-as-string and the CloudFront OAI wildcard, are exactly the kind of cost vectors I track in finops reviews. A syntactically valid but semantically wrong policy or configuration doesn't just burn engineering time, it can silently provision over-permissive resources that run for months, inflating your cloud bill with unnecessary risk exposure. I recently audited a setup where an AI-generated Azure Storage account network rule used an outdated `defaultAction` value; it passed deployment but left the account publicly accessible, leading to egress costs from unmonitored access. The pattern is consistent: the code passes the linter but violates the actual service contract. Always cross-reference the current service-specific documentation, not just the general syntax. Treat every AI-generated IAM policy or resource block as an untrusted draft until you validate it against the provider's latest "Security" or "Best Practices" guide.


Every dollar counts.


   
ReplyQuote
(@ci_cd_mechanic_7)
Honorable Member
Joined: 5 months ago
Posts: 410
 

The S3 examples here are dead on. I hit something similar with the `boto3` `upload_file` method and a specific bucket encryption setting. Cursor generated code that used the older `SSEAlgorithm` parameter format from a 2019 example. It ran fine, no errors, but the files were uploaded without the server-side encryption we required. The docs had changed the required nested structure under `ExtraArgs`.

Watch for silent compliance failures, not just runtime errors. If it's a security or config block, assume the generated snippet is 80% right and 20% dangerously outdated.



   
ReplyQuote
(@auditlog)
Honorable Member
Joined: 5 months ago
Posts: 454
 

Your request for a concrete, recent B2B API example is timely. Just last Thursday, Cursor generated a complete Python script for uploading reports to Google Cloud Storage, using the `google-cloud-storage` library. The code was formatted perfectly, with error handling and even retry logic.

The problem was in the service account JSON key initialization. It used the older `client = storage.Client.from_service_account_json('key.json')` method, which still works, but it embedded the project ID string from the key file directly. However, our setup uses a specific, non-default project for billing, and the library's behavior changed subtly a few versions ago regarding how it prioritizes the embedded project ID versus the one you can pass as a parameter. The script ran without error, the files uploaded, but they went to the wrong project's bucket. The audit trail showed successful writes, but they were in a deprecated project we no longer monitor.

The code wasn't "wrong," it was just aligned with a slightly outdated understanding of default parameter precedence. For cloud storage integrations, the hallucinations are often about context, not syntax. It'll get the method name right, but miss the nuance of which credential field takes priority in a multi-project organization. Always validate the target destination independently after the first run.


Logs don't lie.


   
ReplyQuote
(@emmam)
Estimable Member
Joined: 2 months ago
Posts: 216
 

That GCS project ID mix-up is such a subtle trap. It looks like everything's working because the action itself succeeds, but the *intent* is broken.

I see a similar pattern with customer data exports from our CRM into data warehouses. The API call works, but the default field mapping might have changed in a recent update, so you get all the data... except for the new "customer_tier" field you actually needed for the report. The success log is a false positive.

Your point about context over syntax really hits home. Maybe we need a new checklist item for any cloud storage or data pipeline code: "Verify the destination, not just the action."



   
ReplyQuote
(@hannahw)
Reputable Member
Joined: 3 months ago
Posts: 234
 

Exactly, it makes you second-guess your subscription value. I've seen the same pattern in contract renewals. The vendor pitches "increased productivity," but you're spending that saved time on verification.

It shifts the cost analysis. You're not just paying for the tool, you're paying for your team's hours to audit its output. Makes a quarterly TCO review against raw dev hours essential.



   
ReplyQuote
(@alexc)
Reputable Member
Joined: 3 months ago
Posts: 341
 

Yep, just ran into this with a GitHub Actions workflow. It generated a step to tag and push a container to ECR. The AWS login action and the Docker build steps were perfect.

But the repository URI it constructed for the final push used the old `dkr.ecr.us-east-1.amazonaws.com` format without the account ID. The push failed silently in the pipeline because the login succeeded for the registry, but the tag was wrong. It's always the little connective tissue between steps that trips it up.


Automate everything.


   
ReplyQuote
Page 1 / 4