← Commit history

Publish 0.5.1

John Lauer ·f04d2a9eaf ·4mo ago ·parent 0131a80
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"   ]-}\ No newline at end of file+}
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]"+  } }\ No newline at end of file
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