All twins

Service twin · API + UI

Gmail

Test email agents that triage inboxes, draft replies, and manage message workflows.

API + UIspec-groundedREST · MCP · CLI
Terminal
$ uv tool install blobfish-cli
$ blobfish twin login
$ blobfish twin-runs create --twins gmail --ttl 60 --wait

What’s inside

A deterministic, seeded, resettable replica: every operation below executes real state transitions against the twin’s own SQLite state — reads are hash-invariant, writes produce inspectable diffs, and reset restores the seed baseline.

Operations79
Reads30
Writes49
Entities41
Lifecycles0

Seeded entities

EntityTableFieldsAbout
auto_forwardingauto_forwardings4Auto-forwarding settings for an account.
batch_delete_messages_requestbatch_delete_messages_requests2
batch_modify_messages_requestbatch_modify_messages_requests6
cse_identitycse_identities3The client-side encryption (CSE) configuration for the email address of an authenticated user. Gmail uses CSE configurations to save drafts…
cse_key_paircse_key_pairs7A client-side encryption S/MIME key pair, which is comprised of a public key, its certificate chain, and metadata for its paired private ke…
delegatedelegates3Settings for a delegate. Delegates can read, send, and delete messages, as well as view and add contacts, for the delegator's account. See …
draftdrafts7An unsent email. The canonical Gmail connector is draft-first: composing is a draft create.
filterfilters3Resource definition for Gmail filters. Filters apply to specific messages instead of an entire email thread.
forwarding_addressforwarding_addresses3Settings for a forwarding address.
historyhistories2Inferred from operation parameters (spec has no named schema).
identityidentities2Inferred from operation parameters (spec has no named schema).
imap_settingimap_settings5IMAP settings for an account.
keypairkeypairs2Inferred from operation parameters (spec has no named schema).
labellabels10Labels are used to categorize messages and threads within the user's mailbox. The maximum number of labels supported for a user's mailbox i…
language_settinglanguage_settings2Language settings for an account. These settings correspond to the "Language settings" feature in the web interface.
list_cse_identities_responselist_cse_identities_responses3
list_cse_key_pairs_responselist_cse_key_pairs_responses3
list_delegates_responselist_delegates_responses2Response for the ListDelegates method.
list_drafts_responselist_drafts_responses4
list_filters_responselist_filters_responses2Response for the ListFilters method.
list_forwarding_addresses_responselist_forwarding_addresses_responses2Response for the ListForwardingAddresses method.
list_history_responselist_history_responses3
list_labels_responselist_labels_responses2
list_messages_responselist_messages_responses4
list_send_as_responselist_send_as_responses2Response for the ListSendAs method.
list_smime_info_responselist_smime_info_responses2
list_threads_responselist_threads_responses4
messagemessages14One email in the mailbox.
message_part_bodymessage_part_bodies3The body of a single MIME message part.
modify_message_requestmodify_message_requests5
modify_thread_requestmodify_thread_requests3
pop_settingpop_settings3POP settings for an account.
profileprofiles4Profile for a Gmail user.
send_asend_as10Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom "from" addr…
smime_infosmime_infos7An S/MIME email config.
threadthreads7A conversation: the messages exchanged with one counterparty on one topic.
userusers2Inferred from operation parameters (spec has no named schema).
vacation_settingvacation_settings9Vacation auto-reply settings for an account. These settings correspond to the "Vacation responder" feature in the web interface.
watch_requestwatch_requests5Set up or update a new push notification watch on this user's mailbox.
watch_responsewatch_responses2Push notification watch response.
watchwatches6Push notification watch response.

Three surfaces, one state

Mount Gmail in a twin environment and the same seeded state serves vendor-shaped REST operations, an MCP endpoint for tool calling, and a generated bf-twin CLI — with copy-on-write sessions per rollout and a one-call reset to the seed baseline. Prefer raw HTTP? The same create works with curl:

API
$ curl -sS -X POST https://blobfish.ai/api/v1/twin/environments \
    -H "X-API-Key: $BLOBFISH_API_KEY" -H "Content-Type: application/json" \
    -d '{"services":["gmail"],"ttl_minutes":60}'

Known limitations

Spec-grounded surface with synthetic seeded values; operations outside the spec are not mounted.