deskhand

Guide

Best CRM for AI agents: five tests to run before you let one write

Every CRM now says it works with agents. The difference shows up the first time an agent gets something wrong at 3 a.m. These five tests take about ten minutes on a fresh workspace, need nothing but curl and a browser, and tell you whether you can leave an agent running unattended. They run against Deskhand below; run the same five against any CRM you are weighing.

Test 1: delete 50 records, then get them back

Give an agent a key with write access and have it delete 50 contacts in one run. The pass condition is that you get all 50 back from the console in one action, without restoring a backup or re-importing a file.

curl -X DELETE https://deskhand.grain64.com/api/contacts/<id> \
  -H "Authorization: Bearer $DESKHAND_KEY" \
  -H "X-Run-Id: cleanup-1" -H "X-Run-Label: Cleanup"

In Deskhand the Activity view then shows the run labelled Cleanup with 50 deletes, each with the contact as it was before. Choose Revert run and all 50 contacts are back with their original fields; the response reports 50 reverted and 0 skipped. A record someone changed after the agent touched it is skipped and listed with the reason, never overwritten. The agent key itself cannot revert: the call answers 403 session_required, so an agent cannot quietly undo or hide its own work.

Run test 1 on your own workspace: connect an agent, let it delete, revert the run from the console. Start free

Test 2: pause one agent while another keeps working

Create two agents, pause one, and fire a read and a write from each. The pass condition is that the paused agent is refused on its very next call and the other is not affected, with no key rotation and no waiting for a cache.

In Deskhand the paused agent's next read and next write both answer 403 agent_paused, over HTTP and over MCP, with a message the agent can act on: it is paused by the operator and calls resume once the operator resumes it. The pause itself is written to the log with your email as the actor. Other agents keep working, the paused agent's records and history stay as they were, and you resume it from its page in the console.

Test 3: read the log and ask whose identity is in it

Open the audit log after tests 1 and 2. Every line should name who acted, which run it belonged to, and what changed. If a CRM logs everything as a shared integration user, you cannot tell your agents apart, or an agent from you.

In Deskhand each entry carries the agent's name and id, the run, the request id, and the record before and after. Your own actions are logged under your email: the pause from test 2 and every revert from test 1 appear as entries by you. Entries are appended and never edited, so the sequence agent deletes, operator reverts is readable end to end.

Test 4: a contact replies mid-campaign

Draft a follow-up for a contact, then mark the contact as having replied. The pass condition is that nothing is sent to someone who already answered.

In Deskhand marking a reply moves the contact to replied, cancels the unsent follow-up draft (its status becomes cancelled with the reason contact_replied) and any open follow-up tasks, and keeps that contact suppressed from further drafts. The cancellation is itself an entry in the audit log.

Test 5: see exactly what leaves the building

Have the agent draft an email to an outside address and then look for where it goes. The pass condition is that you can answer "what was sent, to whom, by whom" from the CRM and that nothing leaves until your policy says so.

In Deskhand a draft to anyone other than you lands in the To send queue with a note saying it is approved and queued, and nothing is delivered until you send it from your own mail client and mark it sent. A campaign runs as a dry run on the built-in dry-run identity: every message is recorded as sent_dry, so you read exactly what would go out over the next 14 days before a single real send. Live delivery goes through your own sending identity, which an agent can neither create nor read. Turn on approval for the whole workspace or one agent and every draft waits for you first.

Scorecard

Paste this into whatever you are evaluating: one run reverts in one action; a paused agent is refused on its next call; the log names each agent, run and operator action; a reply stops the follow-up; outbound mail is visible before it leaves. An agent-ready CRM passes all five without a workaround.

Run them on Deskhand

Free during early access: 3 agents, each with its own key, a pause switch and the full audit log. Start free

Related: Undo what an AI agent did to your CRM, An MCP server for a CRM: per-agent keys, scopes and a pause switch, Let an AI agent act on its own, and turn on approval only where you want it