All twins

Service twin · API + UI

Google Drive

Test document agents that find, organize, edit, and share files across team drives.

API + UIspec-groundedREST · MCP · CLI
Terminal
$ uv tool install blobfish-cli
$ blobfish twin login
$ blobfish twin-runs create --twins googledrive --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.

Operations64
Reads29
Writes35
Entities40
Lifecycles0

Seeded entities

EntityTableFieldsAbout
aboutabouts14Information about the user, the user's Drive, and system capabilities.
access_proposalaccess_proposals7Manage outstanding access proposals on a file.
accessproposalaccessproposals6Inferred from operation parameters (spec has no named schema).
appapps24The `apps` resource provides a list of apps that a user has installed, with information about each app's supported MIME types, file extensi…
app_listapp_lists5A list of third-party applications which the user has installed or given access to Google Drive.
approvalapprovals10Metadata for an approval. An approval is a review or approve process for a Drive item.
approval_listapproval_lists4The response of an approvals list request.
approve_approval_requestapprove_approval_requests2Request for approving an approval as a reviewer.
cancel_approval_requestcancel_approval_requests2Request for cancelling an approval as an initiator.
changechanges2Inferred from operation parameters (spec has no named schema).
change_listchange_lists5A list of changes for a user.
channelchannels10A notification channel used to watch for resource changes.
commentcomments14A comment on a file. Some resource methods (such as `comments.update`) require a `commentId`. Use the `comments.list` method to retrieve th…
comment_approval_requestcomment_approval_requests2Request for commenting on an approval.
comment_listcomment_lists4A list of comments on a file.
decline_approval_requestdecline_approval_requests2Request for declining an approval as a reviewer.
drivedrives12Representation of a shared drive. Some resource methods (such as `drives.update`) require a `driveId`. Use the `drives.list` method to retr…
drive_listdrive_lists4A list of shared drives.
filefiles48The metadata for a file. Some resource methods (such as `files.update`) require a `fileId`. Use the `files.list` method to retrieve the ID …
file_listfile_lists5A list of files.
generate_cse_token_responsegenerate_cse_token_responses5JWT and associated metadata used to generate CSE files.
generated_idgenerated_ids4A list of generated file IDs which can be provided in create requests.
label_listlabel_lists4A list of labels applied to a file.
list_access_proposals_responselist_access_proposals_responses3The response to an access proposal list request.
modify_labels_requestmodify_labels_requests3A request to modify the set of labels on a file. This request may contain many modifications that will either all succeed or all fail atomi…
modify_labels_responsemodify_labels_responses3Response to a `ModifyLabels` request. This contains only those labels which were added or updated by the request.
operationoperations6This resource represents a long-running operation that is the result of a network API call.
permissionpermissions16A permission for a file. A permission grants a user, group, domain, or the world access to a file or a folder hierarchy. For more informati…
permission_listpermission_lists4A list of permissions for a file.
reassign_approval_requestreassign_approval_requests4Request for reassigning an approval. Reviewers can be added or replaced, but not removed.
replyreplies11A reply to a comment on a file. Some resource methods (such as `replies.update`) require a `replyId`. Use the `replies.list` method to retr…
reply_listreply_lists4A list of replies to a comment on a file.
resolve_access_proposal_requestresolve_access_proposal_requests5Request message for resolving an AccessProposal on a file.
revisionrevisions14The metadata for a revision to a file. Some resource methods (such as `revisions.update`) require a `revisionId`. Use the `revisions.list` …
revision_listrevision_lists4A list of revisions of a file.
start_approval_requeststart_approval_requests5Allows creating an approval on a file.
start_page_tokenstart_page_tokens3
team_driveteam_drives11Deprecated: use the drive collection instead. Next ID: 33
team_drive_listteam_drive_lists4A list of Team Drives.
teamdriveteamdrives2Inferred from operation parameters (spec has no named schema).

Three surfaces, one state

Mount Google Drive 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":["googledrive"],"ttl_minutes":60}'

Known limitations

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