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
package.json+2−2@@ -1,6 +1,6 @@ { "slug": "grok-bridge",- "version": "1.3.12",+ "version": "1.3.13", "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, \u2026), 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": [@@ -144,5 +144,5 @@ "hero": { "path": "docs/hero.png" },- "changelog": "Skill: Adom Bridge on Grok Bot's computer updates itself (apply_update), carries its own EGL so libs/ is gone, and the old serve relay stays stopped with how to find what restarts it."+ "changelog": "Shared-mailbox protection for the Grok webhook: 6 fires a minute per PC and 3 per thread, a shared cooldown after Grok throttles (Retry-After), an activity log of every call with time, thread and result, grok_activity to read it, and a cached readiness probe." }
page.json+2−2@@ -4,7 +4,7 @@ "type": "app", "title": "Grok Bot", "brief": "Grok Bridge lets Adom talk to Grok Bot. Adom's AI environment is for electrical engineers: any provider, any desktop power tool, one place.",- "version": "1.3.12",+ "version": "1.3.13", "hero": { "type": "image", "path": "screenshots/hero.png"@@ -163,5 +163,5 @@ "dependencies": { "adom/adom-bridge": "^2.0.0" },- "changelog": "Skill: Adom Bridge on Grok Bot's computer updates itself (apply_update), carries its own EGL so libs/ is gone, and the old serve relay stays stopped with how to find what restarts it."+ "changelog": "Shared-mailbox protection for the Grok webhook: 6 fires a minute per PC and 3 per thread, a shared cooldown after Grok throttles (Retry-After), an activity log of every call with time, thread and result, grok_activity to read it, and a cached readiness probe." }
skills/grok-webhook/SKILL.md+13@@ -83,6 +83,18 @@ grok-bridge's computer is a Linux box in Grok's cloud, not the user's PC. If you - **The disk persists between sessions and is shared by every bot on the account.** Earlier work (for example a checked-out design under `/workspace`) is still there for a new bot. If you brief a bot to design something from scratch, name a fresh folder and tell it not to read earlier designs. - **A faster channel: Adom Bridge runs on the box** (since 2026-10-15). It is in the user's mesh as `grok-bot-vm-155244935`, so `adom-bridge --target grok-bot-vm-155244935 <verb>` gives you real verbs there (shell, files) in seconds instead of a 60 to 120 s webhook round trip. Check `adom-bridge targets` first: if the box is not listed, its app is down (after a reboot or recovery). Then ask grok-bridge over the webhook to run `~/.local/bin/adom-bridge-app-ensure`. How the box keeps it alive is in **grok-anywhere** ("Adom Bridge on this computer"). +## One shared mailbox: budgets and throttling (1.3.13)++Every AI thread on the user's PCs reaches Grok through the same **Grok Bridge webhook**. When one thread hammers it, Grok throttles the webhook and every other thread (Claude Desktop, other Hydrogen threads) gets blocked. grok-bridge now protects it:++- **Budgets per PC:** at most 6 fires a minute in total, and 3 a minute from any one thread. Over budget, `grok_webhook_fire` refuses without sending: `errorCode:"webhook_throttled"`, `throttledBy:"thread-budget"` or `"pc-budget"`, plus `retryAfterSeconds`. To change the limits, set `{"webhookPerMinute":N,"webhookPerThreadPerMinute":M}` in `~/.adom/grok-bridge-settings.json` on that PC.+- **Grok's own throttle:** on HTTP 429 (or a "rate limit" answer), the PC holds **every** fire, from every thread, for Retry-After (or 60 s, doubling up to 300 s). Those refusals say `throttledBy:"grok"`. Sending more while throttled only extends it.+- **How to behave:**+ - fire once per question, then poll `grok_chat_read` for your nonce;+ - never re-fire while waiting for a reply (the queue is FIFO and loses nothing);+ - never loop on `webhook_throttled`: wait `retryAfterSeconds`, or tell the user.+- **Who is using it:** `grok_activity {"minutes":10}` lists calls by thread and verb, webhook fires (sent, throttled by Grok, refused by the budget) and the current budget/cooldown. The full log is `~/.adom/grok-bridge-activity.jsonl` on each PC: one line per call with time, thread, verb, duration, result, HTTP status and nonce. It never holds keys or message text.+ ## Asking the user to approve a change on Grok Bot's computer The agent on Grok Bot's computer refuses changes that an AI thread says the user approved: the webhook is not the user. Do not argue it into compliance. Get a real approval:@@ -128,6 +140,7 @@ Smoke: `grok_webhook_fire {"event":"ping"}`. Verify with `grok_webhook_status` ( ## 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`.+- `webhook_throttled`: not sent; see "One shared mailbox". Wait `retryAfterSeconds`, never loop. - `approval_summary_required` / `approval_denied` / `approval_not_given`: see "Asking the user to approve a change". Nothing was fired. - `computer_unreachable`: Grok Bot shows "Couldn't Reach Grok Bot's Computer". Events are accepted but no reply can come back. Ask the user to press Recover / Retry in Grok Bot, then re-check `grok_chat_status`. - `no_transcript` (from `grok_chat_read` / `grok_chat_status`): the Grok Bot window has no page yet, usually right after a background `grok_open`. The verb answers at once instead of hitting the 60 s timeout; retry in 30 s. `focusedThread` is `null` with a `focusedThreadReason`.