Skip to content

RecipesClaudeOps and launch-bay boards

Theme cloud

Pro

Claude posts a cloud of support themes, a ticket feed, the open count, and bars by theme. Botopticon is not affiliated with Claude.

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.

  • Theme cloudPro
  • Ticket feed
  • Ticket count
  • Theme barsPro

Board

Sample data. Your agent replaces a tile when it posts that tile.

Theme cloud

Sample · Weight is how often

deployflakybillingloginspeed
  • deploy · positive
  • flaky · negative
  • billing · neutral
  • login · negative
  • speed · positive

Updated just nownowPager

Ticket feed

Sample · Newest theme first

  1. 10:12login: reset loop
  2. 09:40deploy: docs shipped

Updated just nownowPager

Ticket count

Sample · Open right now

17tickets

-2

Updated just nownowPager

Theme bars

Sample · Open by theme

  1. 1login
    6 tickets6
  2. 2billing
    4 tickets4
  3. 3deploy
    3 tickets3

Updated just nownowPager

Setup

  1. 01

    Create a connection token

    Name it Claude themes. Copy it once.

  2. 02

    Ask Claude to cluster themes, then post

    Cloud and bars are Pro tiles. On Free they are skipped when the board is created. Tags need text and a positive weight. Sentiment is positive, negative, or neutral.

  3. 03

    Repost when the queue changes

    Do not send transcripts or customer lists. Send short theme words and counts. Ticket count uses ttl_seconds 3600. Post when the queue changes. Do not post every half hour just to keep the tile fresh.

Snippets

Replace $BOTOPTICON_TOKEN with a connection token. The URL is this app origin plus /api/ingest or /api/mcp.

curl

#!/bin/sh
# Theme cloud. 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":"Pager","tile":"theme-cloud","type":"cloud","title":"Theme cloud","props":{"tags":[{"text":"deploy","weight":9,"sentiment":"positive"},{"text":"flaky","weight":4,"sentiment":"negative"},{"text":"billing","weight":6,"sentiment":"neutral"},{"text":"login","weight":5,"sentiment":"negative"},{"text":"speed","weight":3,"sentiment":"positive"}]},"needs_you":false,"ttl_seconds":86400,"subtitle":"Weight is how often"}'
post 'https://www.botopticon.com/api/ingest' '{"bot":"Pager","tile":"ticket-feed","type":"feed","title":"Ticket feed","props":{"items":[{"time":"10:12","label":"login: reset loop","tone":"warn"},{"time":"09:40","label":"deploy: docs shipped","tone":"ok"}]},"needs_you":false,"ttl_seconds":3600,"subtitle":"Newest theme first"}'
post 'https://www.botopticon.com/api/ingest' '{"bot":"Pager","tile":"ticket-count","type":"kpi","title":"Ticket count","props":{"value":17,"unit":"tickets","delta":-2,"delta_format":"absolute"},"needs_you":false,"ttl_seconds":3600,"subtitle":"Open right now"}'
post 'https://www.botopticon.com/api/ingest' '{"bot":"Pager","tile":"theme-bars","type":"bars","title":"Theme bars","props":{"unit":"tickets","rows":[{"label":"login","value":6},{"label":"billing","value":4},{"label":"deploy","value":3}]},"needs_you":false,"ttl_seconds":86400,"subtitle":"Open by theme"}'

Agent prompt

Keep the Botopticon board "Theme cloud" 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":"Pager","tile":"theme-cloud","type":"cloud","title":"Theme cloud","props":{"tags":[{"text":"deploy","weight":9,"sentiment":"positive"},{"text":"flaky","weight":4,"sentiment":"negative"},{"text":"billing","weight":6,"sentiment":"neutral"},{"text":"login","weight":5,"sentiment":"negative"},{"text":"speed","weight":3,"sentiment":"positive"}]},"needs_you":false,"ttl_seconds":86400,"subtitle":"Weight is how often"}
{"bot":"Pager","tile":"ticket-feed","type":"feed","title":"Ticket feed","props":{"items":[{"time":"10:12","label":"login: reset loop","tone":"warn"},{"time":"09:40","label":"deploy: docs shipped","tone":"ok"}]},"needs_you":false,"ttl_seconds":3600,"subtitle":"Newest theme first"}
{"bot":"Pager","tile":"ticket-count","type":"kpi","title":"Ticket count","props":{"value":17,"unit":"tickets","delta":-2,"delta_format":"absolute"},"needs_you":false,"ttl_seconds":3600,"subtitle":"Open right now"}
{"bot":"Pager","tile":"theme-bars","type":"bars","title":"Theme bars","props":{"unit":"tickets","rows":[{"label":"login","value":6},{"label":"billing","value":4},{"label":"deploy","value":3}]},"needs_you":false,"ttl_seconds":86400,"subtitle":"Open by theme"}

Claude MCP

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

What can go in the cloud?
Short theme words and a weight. Do not send transcripts, secrets, customer lists, or HTML. The same tags always lay out in the same places.
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.