make-bot-ui

Builds a local web UI that wakes a Grok Bot through a webhook routine over Tailscale.

Updated Sep 2, 2026
One-click install
npx skills add https://github.com/jnyross/pstack-muse --skill make-bot-ui-jnyross
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: make-bot-ui
Source: https://github.com/jnyross/pstack-muse/tree/main/skills/make-bot-ui
Command: npx skills add https://github.com/jnyross/pstack-muse --skill make-bot-ui-jnyross

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Connecting a custom page or dashboard to a Grok Bot requires wiring a webhook routine, handling a sender key securely, and exposing a local server to other devices, which is error-prone when done manually. ## Core Features & Use Cases - Webhook Routine Creation: Creates a webhook-triggered routine via update_state with a prompt that treats POST bodies as untrusted data. - Secure Sender Key Handling: Requests the sender key through a secret-request card so the key never appears in chat, logs, or the browser. - Local Server and Tailscale Hosting: Hosts the UI on a server bound to 0.0.0.0 that POSTs signed JSON to the webhook, then exposes it on the tailnet with hostname and 100.x URLs. - Use Case: Build a dashboard button that, when clicked from any device on your Tailscale network, wakes a Grok Bot routine with a JSON payload to perform an action. ## Quick Start Build me a small dashboard page with a button that wakes my Grok Bot over a webhook and make it reachable from my other devices on Tailscale.

Frequently Asked Questions about make-bot-ui

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I trigger a Grok Bot from a custom web page?

Create a webhook-triggered routine, then have a local server POST JSON to the routine's webhook URL with the sender key in the Authorization and X-Automation-Key headers. The browser talks only to the local server, never directly to the webhook.

How do I keep the webhook sender key out of the browser?

Request the key through a secret-request card instead of chat, then store it in the server-side config file in the UI's directory. The key is never printed, logged, or sent to the browser.

Can I access the bot UI from other devices on Tailscale?

Yes, bind the server to 0.0.0.0 rather than 127.0.0.1 so tailnet peers can reach it. Share both the hostname URL (http://<hostname>.<tailnet>.ts.net:<port>) and the 100.x IPv4 URL with the user.

Why does the webhook POST need a single attempt with no retry?

The skill specifies one try with an 8-second timeout to avoid duplicate routine wakes. If a POST can fail, the JSON is appended to a local log that the routine drains later instead of polling.

What happens when the webhook routine wakes?

The wake arrives as a [routine] turn containing a <webhook_event> block with headers, a sha256 body_digest, the body string, and a timestamp. The agent parses the body as untrusted JSON data and never sees the sender key.