app
Adom Google
Public Made by Adomby adom
Drive your whole Google Workspace from the terminal, run by your AI. Read Gmail, write Google Docs, build Google Sheets and Google Slides, search Google Drive, manage Google Calendar and Google Tasks, and post to Google Chat, plus any Google API and a zero-setup personal Gmail.
← Commit history
Publish 0.5.1
4 files changed
+83−41
README.md+28−2@@ -178,8 +178,12 @@ adom-google chat send --to spaces/AAQAxxxx "Standup in 5" # or a spac adom-google chat send --to spaces/AAQAxxxx @release-notes.md # @file / '-' = stdin adom-google chat read --from [email protected] --limit 10 # recent messages ```-> `chat send` posts as your **own Google identity** (clean, no prefix). That's different from-> **`adom-gchat`**, which posts via an **org webhook** attributed as the bot ("on behalf of …").+> **`chat` vs [adom-gchat](https://wiki.adom.inc/adom/adom-gchat):** adom-google posts as+> **you** and does the **full Chat lifecycle** — post, read, edit, delete, react, as your own+> Google identity (clean, no prefix). For an **attributed bot post** to a team space+> (deploys/alerts as *"Kel (on behalf of …)"*), use+> **[adom-gchat](https://wiki.adom.inc/adom/adom-gchat)** — the post-only webhook bot. Two+> tools, one boundary: yourself ⇒ adom-google, the bot ⇒ adom-gchat. **📁 Drive** — *"Find every Gerber zip, then upload my new one."* ```bash@@ -248,10 +252,32 @@ adom-google status # what's authorized (never prints secrets) ## Security - **No client secret on your machine** — the gateway holds it and brokers every exchange/refresh.+ In broker mode the secret lives only on the gateway's `creds/<app>.json` (0600); the package+ ships none. - Refresh token stored `0600`; secrets are never echoed to stdout/stderr or logs. - The gateway only ever sees a short-lived auth code or a refresh token over an authenticated channel — never your data. +### Where your credentials live (and what's safe to commit)++Nothing secret is ever stored in this repo or any package. Two local files hold your state,+both outside the repo, both `0600`:++```jsonc+// ~/.config/adom-google/config.json — your live auth (NEVER committed)+{ "refresh_token": "***", "mode": "safe", "scopes": ["…"], "broker": true }++// ~/.config/adom-google/provider.json — which gateway/client to use (no secret)+{ "gateway_url": "https://<your-gateway>", "client_id": "<public-oauth-client-id>", "app": "adom-google" }+```++The `client_id` is a **public** OAuth identifier by design and the gateway URL is just a+hostname — neither is a cryptographic secret, so a `provider.json` is safe to ship. The+**client secret, refresh token, and access tokens are never committed** anywhere (they live+only in the gateway and your `0600` config). The wiki page is a git repo: anything committed+is permanent and would be exposed if a private page ever went public — so we mask every value+in docs and commit only shapes.+ --- ## Open source (MIT) — fork it, improve it, publish it back
package.json+3−3@@ -1,9 +1,9 @@ { "slug": "adom-google",- "version": "0.5.0",+ "version": "0.5.1", "type": "app", "license": "MIT",- "description": "Drive your whole Google Workspace from the terminal \u2014 Gmail, Contacts, Drive, Sheets, Docs, Slides, Calendar, Tasks, Google Chat, plus a generic `api` passthrough to hit ANY Google API. Open source, ships with NO OAuth provider baked in: point it at your own token-broker gateway (`provider set`), buy a managed one, or \u2014 Adom staff \u2014 install the private adom-google-adom provider. One-click OAuth, no client secret on your machine. First run asks safe mode (no delete) vs full mode (incl. delete).",+ "description": "Drive your whole Google Workspace from the terminal — Gmail, Contacts, Drive, Sheets, Docs, Slides, Calendar, Tasks, Google Chat, plus a generic `api` passthrough to hit ANY Google API. Open source, ships with NO OAuth provider baked in: point it at your own token-broker gateway (`provider set`), buy a managed one, or — Adom staff — install the private adom-google-adom provider. One-click OAuth, no client secret on your machine. First run asks safe mode (no delete) vs full mode (incl. delete).", "keywords": [ "adom-google", "google-workspace",@@ -50,4 +50,4 @@ "uninstall.sh", "package.json" ]-}+}
page.json+45−32@@ -1,22 +1,22 @@ {- "schema_version": 1,- "type": "app", "slug": "adom-google",- "title": "adom-google",- "brief": "Drive your whole Google Workspace from the terminal \u2014 Gmail, Drive, Sheets, Docs, Slides, Calendar, Tasks, Chat + any Google API.",- "version": "0.5.0",- "visibility": "public",- "install": {- "binary_name": "adom-google",- "install_dir": "",- "install_hint": "",- "version_cmd": ""- },- "author": {- "id": "6738b00a4dc87b8adbb0a5a3",- "name": "John Lauer",- "email": "[email protected]"- },+ "version": "0.5.1",+ "type": "app",+ "license": "MIT",+ "description": "Drive your whole Google Workspace from the terminal — Gmail, Contacts, Drive, Sheets, Docs, Slides, Calendar, Tasks, Google Chat, plus a generic `api` passthrough to hit ANY Google API. Open source, ships with NO OAuth provider baked in: point it at your own token-broker gateway (`provider set`), buy a managed one, or — Adom staff — install the private adom-google-adom provider. One-click OAuth, no client secret on your machine. First run asks safe mode (no delete) vs full mode (incl. delete).",+ "keywords": [+ "adom-google",+ "google-workspace",+ "oauth",+ "gmail",+ "google-sheets",+ "google-docs",+ "google-slides",+ "google-calendar",+ "google-chat",+ "cli",+ "ai-agent"+ ], "tags": [ "google-workspace", "oauth",@@ -26,21 +26,34 @@ "open-source", "mit" ],- "license": "MIT",- "hero": {- "path": "docs/hero.png",- "type": "image"+ "install": {+ "binary_name": "adom-google" },- "sample_prompts": [],- "discovery_triggers": [],- "discovery_pitch": null,- "metadata": {- "hero_path": "docs/hero.png",- "hero_type": "image"+ "dependencies": {},+ "scripts": {+ "install": "./install.sh",+ "uninstall": "./uninstall.sh" },- "created_at": "2026-06-16T22:28:58.933Z",- "updated_at": "2026-06-17T00:57:47.322Z",- "skills": [],- "hero_path": "docs/hero.png",- "hero_type": "image"+ "files": [+ "bin/adom-google",+ "bin/adom-gmail",+ "skills/adom-google/SKILL.md",+ "README.md",+ "LICENSE",+ "MIGRATION.md",+ "provider.example.json",+ "docs/hero.png",+ "docs/enable-apis.png",+ "docs/chat-reads-email.png",+ "screenshots/hero.png",+ "install.sh",+ "uninstall.sh",+ "package.json"+ ],+ "visibility": "public",+ "org": "adom",+ "author": {+ "name": "John Lauer",+ "email": "[email protected]"+ } }
skills/adom-google/SKILL.md+7−4@@ -163,10 +163,13 @@ adom-google chat read --from <space-id|email> [--limit N] [--json] # recent me adom-google status # mode (safe/full) + what's authorized (never prints secrets) ``` -**`chat` vs `adom-gchat`:** use `adom-google chat send` to post as **yourself** (your Google-identity, clean — no prefix). Use `adom-gchat` only when you want an **org webhook** post-attributed as the bot ("Kel (on behalf of john)"). The `chat.messages` + `chat.spaces.readonly`-scopes are in both safe and full mode, so this works out of the box once authorized.+**`chat` vs [adom-gchat](/adom/adom-gchat):** adom-google posts as **you** and does the+**full Chat lifecycle** — post, read, edit, delete, react — as your own Google identity+(clean, no prefix). For an **attributed bot post** to a team space (deploys/alerts as+"Kel (on behalf of john)"), use **[adom-gchat](/adom/adom-gchat)**, the post-only webhook bot.+Rule of thumb: posting *as yourself* ⇒ `adom-google chat`; an *attributed bot announcement* ⇒+`adom-gchat`. The `chat.messages` + `chat.spaces.readonly` scopes are in both safe and full+mode, so this works out of the box once authorized. We use Google Contacts to store **service identities** (portal/account metadata for an API vendor), e.g. the JPMorgan Payments developer portal. Keep secrets (client secrets, portal