Accomplish gws-multi-account

Guidance for working across multiple connected Google accounts — managing email, calendar events, and files for personal and work accounts simultaneously.

install
source · Clone the upstream repo
git clone https://github.com/accomplish-ai/accomplish
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/accomplish-ai/accomplish "$T" && mkdir -p ~/.claude/skills && cp -r "$T/apps/desktop/bundled-skills/gws-multi-account" ~/.claude/skills/accomplish-ai-accomplish-gws-multi-account && rm -rf "$T"
manifest: apps/desktop/bundled-skills/gws-multi-account/SKILL.md
source content

Google Workspace Multi-Account Skill

Overview

When the user has connected multiple Google accounts (e.g. personal and work), you can operate across all of them simultaneously for read operations, or target a specific account for write operations.

Account Discovery

At the start of each task the system prompt lists all connected accounts:

| Label    | Email                    | Status    |
|----------|--------------------------|-----------|
| Work     | alice@company.com        | connected |
| Personal | alice@gmail.com          | connected |

Core Routing Rules

Operation typeWhen
account
is omitted
When
account
is specified
Read (list, search, get, free-time)Queries all accountsQueries only the specified account
Write (send, reply, create, update, delete, archive)Ask the user which account to useUses the specified account

How to Specify an Account

Use either the label or the full email address:

google_gmail(command: "send ...", account: "Work")
google_gmail(command: "send ...", account: "alice@company.com")
google_calendar(command: "create ...", account: "Personal")

Common Multi-Account Workflows

Check all unread emails

google_gmail(command: "list --query 'is:unread'")

Returns results from all connected accounts, each labelled with its account.

Find free time across all calendars

google_calendar(command: "free-time --duration 60 --days 5")

Merges busy time from all connected accounts to find truly free slots.

Send from a specific account

Always confirm with the user which account to send from before calling:

google_gmail(command: "send --to 'bob@example.com' --subject 'Hi' --body 'Hello!'", account: "Work")

Reply to an email (correct account is important)

Read the email first to see which account received it, then reply from that same account:

google_gmail(command: "reply <messageId> --body 'Thanks!'", account: "Work")

Error Cases

  • Account not found: If the specified label/email doesn't match any connected account, the tool returns the list of available accounts. Update the
    account
    parameter and retry.
  • No accounts connected: Direct the user to Settings → Integrations → Google Accounts to connect an account.
  • Token expired: If an account shows status
    expired
    , the user needs to reconnect it in Settings → Integrations → Google Accounts.