Codumentor logo Codumentor

Google Workspace Plugin

Lets the assistant work in the signed-in user's Gmail, Calendar, Docs, Sheets, and Drive — search and read by default, and (after approval) send mail, manage events, and edit documents. Each user connects their own Google account; there is no shared instance credential.

It sits on top of the OAuth plugin, which stores tokens and runs the Google consent flow. Users connect from Settings → Extensions → Google Workspace; they never have to visit a separate "OAuth" screen.

Using it

Connect your Google account

  1. Open Settings (gear icon) → ExtensionsGoogle Workspace.
  2. Choose which products to grant, and at which level:

| Product | Read only | Broader grant |
|---------|-----------|----------------|
| Gmail | Search and read mail | Read & send — also send, draft, label, and trash (not permanent deletion) |
| Calendar | List calendars and read events | Manage events — also create, update, and delete events |
| Docs | Read document text | Read & edit — also create documents and edit text |
| Sheets | Read spreadsheet values | Read & edit — also create spreadsheets and edit values |
| Drive (file search) | Find Docs and Sheets by name or full text | (search only) |

  1. Click Connect. Google's consent screen opens in the browser. After you approve, Codumentor stores the grant for your user.
  2. You can later narrow or broaden those choices in the same settings section, or disconnect the account.

The assistant only receives tools that match the products and levels you granted. If you connect Gmail as read-only, it cannot send mail until you raise that level and reconnect.

The TUI has the same picker under Settings → Google Workspace.

Talk to the assistant

Once connected, ask in ordinary language, for example:

Read tools run without a prompt. Anything that sends mail, changes a calendar, or edits a Doc/Sheet asks for approval first (Allow once / Allow for this conversation / Create a rule / Deny), the same way a shell command does.

If you are not connected, or a needed product is missing, the tool returns a message pointing you back to Settings → Google Workspace — it does not call Google.

What the assistant can do

Gmail

ToolApprovalPurpose
gmail_searchnoneSearch or list messages (Gmail search syntax, e.g. from:alice is:unread)
gmail_get_messagenoneRead one message (headers, body, attachment list)
gmail_get_threadnoneRead a whole conversation
gmail_list_draftsnoneList saved drafts
gmail_list_labelsnoneList labels / folders
gmail_get_attachmentnoneDownload one attachment into the staging area so it can be copied into a repo — the bytes do not enter the chat
gmail_sendgmail.sendSend a new message, or send an existing draft
gmail_draftgmail.draftCreate or update a draft
gmail_delete_draftgmail.draftDiscard a draft
gmail_modify_messagegmail.modifyAdd/remove labels (read/unread, archive, star, move)
gmail_trash_messagegmail.trashMove a message to Trash, or restore it
gmail_manage_labelgmail.labelCreate, rename, or delete a label

Permanent Gmail deletion is not exposed.

Calendar

ToolApprovalPurpose
calendar_list_calendarsnoneList calendars the account can see
calendar_list_eventsnoneList events in a time window
calendar_get_eventnoneRead one event in full
calendar_create_eventcalendar.event.createCreate an event
calendar_update_eventcalendar.event.updateUpdate an event
calendar_delete_eventcalendar.event.deleteDelete an event

Drive, Docs, Sheets

ToolApprovalPurpose
drive_searchnoneFind Docs/Sheets (and other files) by name or full text
docs_get_documentnoneRead a Doc as compact text
docs_create_documentdocs.createCreate a Doc
docs_replace_textdocs.editReplace exact text matches
docs_insert_textdocs.editInsert text at an anchor
sheets_get_spreadsheetnoneSpreadsheet overview (tabs)
sheets_read_valuesnoneRead an A1 range
sheets_create_spreadsheetsheets.createCreate a spreadsheet
sheets_update_valuessheets.editWrite an A1 range
sheets_append_valuessheets.editAppend rows
sheets_clear_valuessheets.editClear an A1 range

drive_search is how the assistant finds a Doc or Sheet; the Docs/Sheets tools then open it by id. Drive access is read-only — the plugin does not upload, move, or share Drive files.

Who gets which half

Two gates, not one. target_agents (default main) decides whether the family is offered at all; write_target_agents (default main) then decides who gets the tools in the "Approval" column above.

The family default stays closed because these tools act on a real mailbox and calendar, and nobody reads a subagent's tool calls before they land. The second gate is what makes opening it a decision about reading: with target_agents: all, a research subagent can search mail and list events, and still cannot send, edit, trash, or delete anything. Set write_target_agents: all only if subagents should write too.

Configuration

Load both the OAuth plugin and this plugin. This plugin's priority must be lower than OAuth's (3 vs 4) so Google is available when OAuth starts serving connect flows.

plugins:
  - module: codumentor.plugins.oauth
    class: OAuthPlugin
    priority: 4
    args:
      enabled: true

  - module: codumentor.plugins.google_workspace
    class: GoogleWorkspacePlugin
    priority: 3
    args:
      enabled: true
      client_id: ${GOOGLE_OAUTH_CLIENT_ID}
      client_secret: ${GOOGLE_OAUTH_CLIENT_SECRET}

Connecting an account requires the oauth:manage permission, which the built-in power_user and admin roles have. Grant it to other roles if ordinary users should connect Google themselves.

Also set auth.jwt_secret so tokens are encrypted at rest (see OAuth). For a deployment that is not on localhost, set api.external_url so Google can redirect back after consent.

Google Cloud project

  1. In Google Cloud Console, create or pick a project.
  2. Enable the APIs the tools need: Gmail, Google Calendar, Google Docs, Google Sheets, Google Drive.
  3. Configure the OAuth consent screen (Internal for a Workspace org, or External with test users while developing).
  4. Create an OAuth 2.0 Client ID of type Web application.
  5. Add an authorized redirect URI: - Internet-facing: {api.external_url}/oauth/callback/google (example: https://codumentor.example.com/oauth/callback/google) - Local: http://127.0.0.1:<port>/oauth/callback/google (<port> is api.port, default 2638)
  6. Copy the client id and secret into GOOGLE_OAUTH_CLIENT_ID / GOOGLE_OAUTH_CLIENT_SECRET (or into the plugin args).

If client_id / client_secret are missing, the plugin loads but does not register Google — tools will tell the user the provider is not configured, and the process does not crash.

Parameters

ParameterTypeDefaultDescription
enabledbooltrueMaster on/off.
client_idstring$GOOGLE_OAUTH_CLIENT_IDOAuth client id.
client_secretstring$GOOGLE_OAUTH_CLIENT_SECRETOAuth client secret.
default_scopeslistGmail/Calendar/Docs/Sheets read-write + Drive read + openid/emailScopes requested when the user clicks Connect without changing the picker. The picker still offers every product/level.
filter_tools_by_scopebooltrueOnly offer tools whose scopes the connected account actually grants.
revoke_on_narrowbooltrueWhen the user drops a product or level, revoke the Google grant and re-consent so the removed access is gone upstream, not only locally.
target_agentsstringmainWho gets the tools: main, subagent, all, or a subagent role name. Default keeps this family off subagents entirely.
write_target_agentsstringmainSame values, applied to the editing tools only — so widening target_agents grants reads without also granting gmail_send.
authorize_url / token_url / userinfo_url / revocation_urlstringGoogle's public endpointsOverride only to point at a private Google-compatible IdP.

Read-only default grant

To have Connect request read access unless the user raises a product in the picker:

      default_scopes:
        - openid
        - email
        - https://www.googleapis.com/auth/gmail.readonly
        - https://www.googleapis.com/auth/calendar.readonly
        - https://www.googleapis.com/auth/documents.readonly
        - https://www.googleapis.com/auth/spreadsheets.readonly
        - https://www.googleapis.com/auth/drive.readonly

Notes

See also