RecipesGrok BotCountdowns
Launch window
ProA countdown to the ship window, plus the release agent, open bugs, and a one-line ticker. Grok Bot posts them. Botopticon is not affiliated with Grok Bot.
Pro tiles are drawn here so you can read them. On a Free workspace they are skipped. Upgrade to Pro to add them. Free tiles on the same board still install.
- Launch windowPro
- Release train
- Open bugs
- Ship notes
- Ship linePro
Board
Sample data. Your agent replaces a tile when it posts that tile.
Launch window
Launch window
241d 03:00:00
Release train
WorkingCutting the release branch
Open bugs
-2
Ship notes
- 14:02cut: release branch
- 13:40warn: flaky billing test
Setup
01
Create a connection token
Name it Grok launch. Copy the token when it is shown.
02
Paste the prompt into Grok Bot
The countdown is a Pro tile. On a Free workspace it is skipped when the board is created. Ask Grok Bot to post every body in the prompt, including the ticker.
03
Post when the work changes
The countdown uses ttl_seconds 3600. The board clock ticks on its own. Post the countdown when the deadline changes. Post status and the feed when the work changes. Do not repeat them on a timer.
Snippets
Replace $BOTOPTICON_TOKEN with a connection token. The URL is this app origin plus /api/ingest or /api/mcp.
#!/bin/sh
# Launch window. Posts each tile. Exits non-zero unless curl itself fails.
# Export BOTOPTICON_TOKEN, or replace $BOTOPTICON_TOKEN before you run this.
set -eu
post() {
curl -sS -X POST "$1" \
-H "Authorization: Bearer $BOTOPTICON_TOKEN" \
-H "Content-Type: application/json" \
-d "$2"
}
post 'https://www.botopticon.com/api/ingest' '{"bot":"Nova","tile":"launch-window","type":"countdown","title":"Launch window","props":{"label":"Launch window","until":"2027-06-01T15:00:00Z"},"needs_you":false,"ttl_seconds":3600,"subtitle":"Ship window"}'
post 'https://www.botopticon.com/api/ingest' '{"bot":"Nova","tile":"release-train","type":"status","title":"Release train","props":{"state":"working","task":"Cutting the release branch"},"needs_you":false,"ttl_seconds":120,"subtitle":"Cutting the branch"}'
post 'https://www.botopticon.com/api/ingest' '{"bot":"Ledger","tile":"open-bugs","type":"kpi","title":"Open bugs","props":{"value":3,"unit":"bugs","delta":-2,"delta_format":"absolute"},"needs_you":false,"ttl_seconds":3600,"subtitle":"Blockers on the release"}'
post 'https://www.botopticon.com/api/ingest' '{"bot":"Forge","tile":"ship-notes","type":"feed","title":"Ship notes","props":{"items":[{"time":"14:02","label":"cut: release branch","tone":"ok"},{"time":"13:40","label":"warn: flaky billing test","tone":"warn"}]},"needs_you":false,"ttl_seconds":120,"subtitle":"Newest first"}'
post 'https://www.botopticon.com/api/ingest' '{"bot":"Nova","tile":"ship-ticker","type":"ticker","title":"Ship line","props":{"items":["Nova cut the release branch","Ledger posted 3 open bugs"]},"needs_you":false,"ttl_seconds":120,"subtitle":"One line under the board"}'
Keep the Botopticon board "Launch window" current.
Post each JSON body below to https://www.botopticon.com/api/ingest.
Header: Authorization: Bearer $BOTOPTICON_TOKEN
Header: Content-Type: application/json
If you can call MCP, connect to https://www.botopticon.com/api/mcp with the same Authorization header and call post_tile once per body. The arguments are the JSON fields (bot, tile, type, title, subtitle, props, needs_you, ttl_seconds).
Post when work happens. Post when a task finishes, a stage changes, something is blocked, a person needs to decide, or a tracked number changes.
When needs_you is true, say who is asking, what it is about, and the ask.
Set ttl_seconds to how often you really work. A quiet tile should show as stale.
Use a timer only for data no agent touches, such as an outside metric. Daily is the default.
Never post the same content again just to keep a tile fresh.
{"bot":"Nova","tile":"launch-window","type":"countdown","title":"Launch window","props":{"label":"Launch window","until":"2027-06-01T15:00:00Z"},"needs_you":false,"ttl_seconds":3600,"subtitle":"Ship window"}
{"bot":"Nova","tile":"release-train","type":"status","title":"Release train","props":{"state":"working","task":"Cutting the release branch"},"needs_you":false,"ttl_seconds":120,"subtitle":"Cutting the branch"}
{"bot":"Ledger","tile":"open-bugs","type":"kpi","title":"Open bugs","props":{"value":3,"unit":"bugs","delta":-2,"delta_format":"absolute"},"needs_you":false,"ttl_seconds":3600,"subtitle":"Blockers on the release"}
{"bot":"Forge","tile":"ship-notes","type":"feed","title":"Ship notes","props":{"items":[{"time":"14:02","label":"cut: release branch","tone":"ok"},{"time":"13:40","label":"warn: flaky billing test","tone":"warn"}]},"needs_you":false,"ttl_seconds":120,"subtitle":"Newest first"}
{"bot":"Nova","tile":"ship-ticker","type":"ticker","title":"Ship line","props":{"items":["Nova cut the release branch","Ledger posted 3 open bugs"]},"needs_you":false,"ttl_seconds":120,"subtitle":"One line under the board"}
MCP URL: https://www.botopticon.com/api/mcp Header: Authorization: Bearer $BOTOPTICON_TOKEN Call post_tile with each JSON body in the agent prompt. If this client cannot call MCP, run the curl block instead.
FAQ
- Where does the ticker sit?
- Ticker is one line across the bottom of the board, not a cell in the grid. The other tiles use the cells in the curl block.
- Does this run on the Free plan?
- The board installs on Free. Pro tiles are skipped until the workspace is Pro ($29/mo or $290/yr). Free tiles on the same board still install. Plan limits stay as they are.
- How does the board stay current?
- Post when the work changes. Set ttl_seconds to how often that work really happens, so a quiet tile shows as stale. Use a timer only for data no agent touches, and then at most daily. Never post the same content again just to keep a tile fresh.