
Gws People
Let your agent create, list, and mutate Google People contact groups and contacts through the gws CLI after shared Google Workspace auth is configured.
Overview
gws-people is an agent skill for the Build phase that documents Google People API contact and contact-group operations through the gws CLI.
Install
npx skills add https://github.com/googleworkspace/cli --skill gws-peopleWhat is this skill?
- Google People API v1 via `gws people <resource> <method>`
- contactGroups CRUD, batchGet, list, and sequential mutate guidance for same-user writes
- Depends on gws-shared SKILL.md for OAuth, global flags, and security rules
- Documents HTTP 409 duplicate contact group name behavior on create
- OpenClaw metadata: requires `gws` binary on PATH (v0.22.5 skill metadata)
- People API v1 resource map
- OpenClaw metadata version 0.22.5
Adoption & trust: 16.5k installs on skills.sh; 26.9k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need to script Google Contacts and contact groups but do not want to hand-roll REST calls when your stack already standardizes on the gws CLI.
Who is it for?
Builders automating Google Workspace contact hygiene, group management, or profile reads inside agent-driven scripts or internal tools.
Skip if: Teams without Google Workspace OAuth setup, users who need a visual CRM, or workflows that require the Gmail or Calendar APIs instead of People.
When should I use this skill?
Managing Google People contacts or contact groups through the gws CLI after gws-shared auth and security rules are in place.
What do I get? / Deliverables
The agent issues correct `gws people` resource and method invocations with shared auth and flag conventions from gws-shared.
- Executed gws people commands for contactGroups and related resources
- Documented mutate sequencing for same-user updates
Recommended Skills
Journey fit
Build integrations is the right shelf because the skill maps Google People REST resources to authenticated gws commands, not CRM strategy or launch distribution. Contacts and profiles are external Google APIs wired into your product or ops automation, matching the integrations subphase.
How it compares
CLI command reference skill for one API surface, not the full gws-shared auth bootstrap (install that prerequisite first).
Common Questions / FAQ
Who is gws-people for?
Solo builders and operators who already use the Google Workspace `gws` CLI and want their agent to manage People contacts and contact groups correctly.
When should I use gws-people?
During Build integrations when scripting contact group creation, listing, updates, or batch fetches against the authenticated user’s Google People data.
Is gws-people safe to install?
It drives live Google account contact data via OAuth-backed CLI calls; review the Security Audits panel on this Prism page and follow gws-shared security rules before granting agent access.
SKILL.md
READMESKILL.md - Gws People
# people (v1) > **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws people <resource> <method> [flags] ``` ## API Resources ### contactGroups - `batchGet` — Get a list of contact groups owned by the authenticated user by specifying a list of contact group resource names. - `create` — Create a new contact group owned by the authenticated user. Created contact group names must be unique to the users contact groups. Attempting to create a group with a duplicate name will return a HTTP 409 error. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures. - `delete` — Delete an existing contact group owned by the authenticated user by specifying a contact group resource name. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures. - `get` — Get a specific contact group owned by the authenticated user by specifying a contact group resource name. - `list` — List all contact groups owned by the authenticated user. Members of the contact groups are not populated. - `update` — Update the name of an existing contact group owned by the authenticated user. Updated contact group names must be unique to the users contact groups. Attempting to create a group with a duplicate name will return a HTTP 409 error. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures. - `members` — Operations on the 'members' resource ### otherContacts - `copyOtherContactToMyContactsGroup` — Copies an "Other contact" to a new contact in the user's "myContacts" group Mutate requests for the same user should be sent sequentially to avoid increased latency and failures. - `list` — List all "Other contacts", that is contacts that are not in a contact group. "Other contacts" are typically auto created contacts from interactions. Sync tokens expire 7 days after the full sync. A request with an expired sync token will get an error with an [google.rpc.ErrorInfo](https://cloud.google.com/apis/design/errors#error_info) with reason "EXPIRED_SYNC_TOKEN". In the case of such an error clients should make a full sync request without a `sync_token`. - `search` — Provides a list of contacts in the authenticated user's other contacts that matches the search query. The query matches on a contact's `names`, `emailAddresses`, and `phoneNumbers` fields that are from the OTHER_CONTACT source. **IMPORTANT**: Before searching, clients should send a warmup request with an empty query to update the cache. See https://developers.google.com/people/v1/other-contacts#search_the_users_other_contacts ### people - `batchCreateContacts` — Create a batch of new contacts and return the PersonResponses for the newly Mutate requests for the same user should be sent sequentially to avoid increased latency and failures. - `batchUpdateContacts` — Update a batch of contacts and return a map of resource names to PersonResponses for the updated contacts. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures. - `createContact` — Create a new contact and return the person resource for that contact. The request returns a 400 error if more than one field is specified on a field that is a singleton for contact sources: * biographies * birthdays * genders * names Mutate requests for the same user should be sent sequentially to avoid increased latency and failures. - `deleteContactPhoto` — Delete a contact's photo. Mutate requests for the same user should be done sequentially to avoid // lock contention. - `get` — Provides information about a person by specifying a re