app
Grok Bot
Public Made by Adomby adom
Grok Bridge lets Adom talk to Grok Bot. Adom's AI environment is for electrical engineers: any provider, any desktop power tool, one place.
← Commit history
grok-bridge 1.3.2: bot_unavailable webhook error, per-PC binding hints, install next steps
9 files changed
+37−12
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.3.1+1.3.2
CLAUDE.md+2−2@@ -32,7 +32,7 @@ will seed/stream the runtime from the release zip via `updateManifestUrl` in `br `ad_callback`. Never `shell_execute` / `pull_file` / `send_files` from the HTTP path. - `handlers/*.py` — readiness, describe, windows (open/screenshot/list), chat (status/read), send, app (close/resize/record/login/logout/plugin), webhook, bots.-- `bridge.json` + `BRIDGE_VERSION` — KEEP IN LOCKSTEP (currently 1.3.1).+- `bridge.json` + `BRIDGE_VERSION` — KEEP IN LOCKSTEP (currently 1.3.2). - `adom-bridge-grok-manifest.json` — streaming manifest ab's `updateManifestUrl` points at; its `url` is the RELEASE download URL of the zip, with matching `sha256`/`size`. - `SKILL.md` (root) — core USER skill, installed as **`grok`** (not `grok-bridge`).@@ -41,7 +41,7 @@ will seed/stream the runtime from the release zip via `updateManifestUrl` in `br - `package.json` — wiki skills pkg. Description is the skills-not-runtime sentence. Runtime files and `*.zip` do **not** belong in `files[]`. -## Verbs (v1.3.1)+## Verbs (v1.3.2) Existing: `grok_readiness` `grok_prewarm` `grok_describe` `grok_status` `grok_open` `grok_screenshot` `grok_list_windows` `grok_chat_status` `grok_chat_read` `grok_send` `grok_uninstall`.
adom-bridge-grok-manifest.json+4−4@@ -1,10 +1,10 @@ { "manifest_version": 1, "name": "grok",- "version": "1.3.1",- "url": "https://wiki.adom.inc/download/adom/grok-bridge/1.3.1/adom-bridge-grok-v1.3.1.zip",- "sha256": "09d480e98a27cec6c3ae6509f7de65de1e910d8165febca6d399e6d33e3df3b5",- "size": 49640,+ "version": "1.3.2",+ "url": "https://wiki.adom.inc/download/adom/grok-bridge/1.3.2/adom-bridge-grok-v1.3.2.zip",+ "sha256": "7f66e0e27ed34c84de632ac0e626a6d0b945320499beb765cd67da127719a35c",+ "size": 50129, "verbPrefixes": [ "grok_" ],
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "grok", "displayName": "Grok Bot",- "version": "1.3.1",+ "version": "1.3.2", "description": "Drive Grok Bot (standalone Electron app, Grok Bot.exe) from Adom Bridge: open/close/resize/screenshot/record the app, read thinking vs idle and the visible transcript of the focused thread, queue messages, bind the Grok Bridge webhook and create bots/channels. No public Grok HTTP API \u2014 the runtime talks back to ab over desktop_* callbacks. Cursor is last-resort fallback only if Grok Bot.exe is missing.", "homepage": "https://wiki.adom.inc/adom/grok-bridge", "author": "Adom Inc.",
dev-skills/grok-publish/SKILL.md+1−1@@ -23,7 +23,7 @@ Wiki: https://wiki.adom.inc/adom/grok-bridge. Changelog / `-m` must be ≥10 cha - Skills library / README / hero: bump **`package.json` version** (pkg). Leave `BRIDGE_VERSION` + `bridge.json` version alone if the Python runtime did not change. - New/changed `grok_*` verbs: bump **all three** (`BRIDGE_VERSION`, `bridge.json`, `package.json`) in lockstep, rebuild the zip, upload release, rewrite manifest, then pkg publish. -Current runtime: **1.3.1**. Skills-only bumps `package.json` only; verb changes bump zip + manifest + package.json together.+Current runtime: **1.3.2**. Skills-only bumps `package.json` only; verb changes bump zip + manifest + package.json together. ## Skills pkg allowlist
handlers/install.py+1−1@@ -250,7 +250,7 @@ def handle_install_status(_args: dict) -> dict: "resolving": "Asking the update feed for the current installer.", "downloading": "Downloading. Poll again in ~10 s.", "installing": "Running the silent per-user installer. Poll again in ~10 s.",- "done": "Installed. Next: grok_open {} (background), then grok_login so the user signs in with Cursor.",+ "done": "Installed. Next: grok_open {} (background), grok_login (presses Sign in; the account picks its provider on xAI's page), then grok_webhook_ensure so this PC can fire webhooks (bindings are per PC).", "failed": "Install failed; read error. A signature or sha256 rejection means the download was not Anysphere's: do not retry blindly, report it.", } j["success"] = state != "failed"
handlers/webhook.py+21−1@@ -196,7 +196,9 @@ def webhook_not_bound_error(verb: str) -> dict: "_hint": ( f"{verb} needs a bound webhook. Call grok_webhook_ensure {{}} to read the " "Grok Bridge webhook routine pane (UIA Edit names Webhook URL / Webhook key), "- "or grok_webhook_bind {{url, key}} from that panel."+ "or grok_webhook_bind {url, key} from that panel. The binding is per PC "+ "(%USERPROFILE%\\.adom\\grok-webhook.json): a PC that just got Grok Bot via grok_install "+ "has none even when another PC on the same account is bound. Never print the key." ), "_next": "grok_webhook_ensure {}", }@@ -392,6 +394,24 @@ def handle_webhook_fire(args: dict) -> dict: resp_text = (e.read() or b"").decode("utf-8", errors="replace") except Exception: resp_text = str(e)+ if "bot is unavailable" in resp_text.lower():+ return {+ "success": False,+ "errorCode": "bot_unavailable",+ "event": event,+ "httpStatus": status,+ "urlHost": url_host(url),+ "bodyPreview": resp_text[:500],+ "_hint": (+ "The webhook is reachable and the key is accepted, but Grok says the bot that owns the "+ "Grok Bridge webhook routine is unavailable. Usually its cloud computer is not up yet "+ "(the app shows 'Couldn't load Bots' or 'having trouble connecting'; wait 10 to 20 min), or "+ "the routine belongs to a bot that was removed, or this PC's binding was copied from another "+ "PC whose routine changed. Check the sidebar in grok_screenshot, then run grok_webhook_ensure "+ "on this PC to re-read the routine. Retrying the same fire immediately will not help."+ ),+ "_next": "grok_screenshot {} then grok_webhook_ensure {}",+ } return { "success": False, "errorCode": "webhook_http_error",
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "grok-bridge",- "version": "1.3.1",+ "version": "1.3.2", "type": "app", "description": "Grok Bridge lets Adom talk to Grok Bot. Adom's AI environment is for electrical engineers: any provider (Claude, Codex, Grok, Gemini, …), any desktop power tool, through Adom Bridge. grok_* open/close/resize/screenshot/record the app, read the thread, and create bots/channels via webhook.", "keywords": [
skills/grok-webhook/SKILL.md+5@@ -95,3 +95,8 @@ adom-bridge --ai-thread "grok" --target AdomLapper grok_webhook_fire '{ HTTP 200 is only `{runUuid}` — now copied to the verb's top-level `runUuid` (was null when only nested). For a computer shot use `grok_computer_screenshot {}` instead of polling. Optional `grok_run_status {runUuid}` echoes the last fire in this process. Latency ~60–120s. Queue is FIFO. Smoke: `grok_webhook_fire {"event":"ping"}`. Verify with `grok_webhook_status` (hostname only).++## Errors worth knowing++- `webhook_not_bound`: this PC has no `~/.adom/grok-webhook.json`. Bindings are per PC; a freshly installed PC needs `grok_webhook_ensure`.+- `bot_unavailable` (HTTP 400 "This Bot is unavailable"): the key works but the routine's bot is unavailable, usually because the account's cloud computer is still coming up after a sign-in. Wait, check the sidebar with `grok_screenshot`, then `grok_webhook_ensure`. Retrying at once does not help.