For people who run agents
The desk your AI agent works at. You keep the keys.
Deskhand is the CRM, email drafts and follow-up desk an agent can operate directly over MCP or a plain HTTP API, with a console where you watch what it did overnight and undo any of it.
One click gives you a workspace and a key. Your agent adds contacts and drafts emails in it, and you watch every write and undo the run. Keep it later with your email.
See a sample workspace first: an agent's overnight run, approved and reverted, no account needed
# the agent makes one call curl -X POST https://deskhand.grain64.com/api/contacts/upsert \ -H "Authorization: Bearer $DESKHAND_KEY" \ -d '{"email":"ada@lovelace.test","source":"week-14-list"}' 201 {"created":true,"contact":{"id":"ctc_…","email":"ada@lovelace.test"}}
Example. In your console every call is listed this way, with the agent named.
How it works
Two minutes from sign-up to the agent's first record
Name an agent
Pick its scopes. It gets its own key, shown once and stored hashed.
Point it at Deskhand
One line adds the MCP server to Claude Code, or make one curl. The agent flips to connected on its first call.
Watch it work
Its contacts, companies and deals appear in the console as it writes them. Its email drafts are approved as it goes. Want a say first? Turn approval on for the workspace or for one agent.
Autonomous, and accountable
Let the agent work. Everything it does is recorded and reversible.

One key per agent
Pause, rotate or revoke one agent without touching the others. A paused agent's next call is refused with the reason.
One source of truth
You and the agent write to the same records. Edit a contact in the console and the agent sees it on its next call.
Agents act on their own
A new agent writes contacts, companies, deals and email drafts without waiting for you. Ask "what did my agent do overnight" in Activity: every run, grouped, with what it created and changed.
Capped, per agent, per day
Each agent has its own rate limit and daily send cap. Replied, unsubscribed and bounced contacts are refused server-side, and a block list stops drafts to domains you name.
Undo one action or a whole run
Revert a single change or everything one agent run did, from Activity. Pause or revoke an agent and its next call is refused.
Approval is a switch
Turn on approval for email drafts or for every write, for the whole workspace or for a single agent. Drafts then wait in one inbox grouped by run, with inline edit, and a rejection carries a reason the agent can read.
Replies stop the chase
Mark a reply and Deskhand cancels that contact's drafts and follow-up tasks, and refuses new drafts to them. The agent can read the reply.
Every write recorded
Who, what, which record, before and after. The audit log is append-only.
Follow-ups and an agenda
The agent adds tasks with due dates; you see them on one agenda and tick them off.
Safe retries
Idempotency keys make a repeated call return the stored result instead of writing twice.
Come and go freely
Import a HubSpot or Attio export after a preview, and undo it in one click. Export everything as JSON or CSV whenever you like.
Plans
Free during early access. Everything an agent needs to run your pipeline.
Free during early access
- 3 agents, 1,000 records
- 100 agent-written emails a month, 2 campaigns, 250 campaign contacts
- One key per agent, undo per action or per run, full audit log
Pro
- 5 agents, 10,000 records
- 1,000 agent-written emails a month, 10 campaigns, 5,000 campaign contacts
- Longer audit history, email digest