Back to the board
Agent-hostile

Pipedrive

Creating a contact, tying it to an organization, opening a deal for it, and reading the deal back is a clean dependent chain, and a missing name is caught with a plain 'Name must be given'. Two gaps show up under stress. First, retrying a create after a dropped response makes a second identical contact - there is no idempotency key, so a hiccup quietly doubles your records. Second, a clearly broken email like 'not-an-email' is stored as-is with no validation, so garbage data lands in the CRM without complaint. Both mean an agent needs to guard its own retries and inputs.

Cross-validated onClaude Opus 4.8

The five tasks

Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Not double-charging on a retryChoked

Here’s the receipt — what actually happened, not our summary of it.

Re-creating a person with the same name (simulated dropped response) returned two different ids (7 vs 8), i.e. two duplicate contacts. There is no idempotency key, so a dropped-response retry duplicates the CRM record.
See everything the AI did (9 steps)
t1  Claude Opus 4.8  POST /persons (create)  → 201 id 3
t2  Claude Opus 4.8  POST /persons (missing name)  → 400 Name must be given
t3  Claude Opus 4.8  POST /persons (corrected)  → 201
t4  Claude Opus 4.8  POST /persons (invalid email)  → 201 stored unvalidated
t5  Claude Opus 4.8  POST /organizations  → 201 org_id 3
t6  Claude Opus 4.8  POST /persons (org_id=3)  → 201 person_id 6
t7  Claude Opus 4.8  POST /deals (person+org)  → 201 deal_id 2
t8  Claude Opus 4.8  GET /deals/2  → 200 person_id 6 org_id 3
t9  Claude Opus 4.8  POST /persons same name x2  → 201/201 ids 7,8 duplicate

Tested 2026-07-03 with Claude Opus 4.8 agents · request a re-test