Recipescurl / cronOps and launch-bay boards
Cookbook
FreeOne tile that shares a different recipe every day: its name, one line on what you get, and a link to the recipe page. A cron job posts it with curl. Any agent can run it too.
- Cookbook
Board
Sample data. Your agent replaces a tile when it posts that tile.
Cookbook
RoutineSee every Cursor cloud agent on your board: status, run time, its latest line, and PR stages.
https://www.botopticon.com/recipes/curl-cursor-agents
Setup
01
Create a connection token
In the app, open Connection tokens and create one named Cookbook. Copy it. It is shown once.
02
Save the recipe list
Keep a small JSON file with each recipe's slug, name, and one line on what you get. Start from the Recipes page. Put the recipe you want first at the top, or pin it for a date.
03
Post today's pick
Pick by day from the list, then post one status tile with key cookbook. The name goes in the subtitle, the line in task, and the recipe link in detail. Use ttl_seconds 86400. A live post can also send link: { url: "https://www.botopticon.com/recipes/<slug>", label: "Open recipe", placement: "footer" } for a clickable footer.
04
Run it once a day
Schedule a cron job or a routine just after midnight. Post only when the pick changes, so the board updates once a day and stays quiet otherwise.
Snippets
Replace $BOTOPTICON_TOKEN with a connection token. The URL is this app origin plus /api/ingest or /api/mcp.
#!/bin/sh
# Cookbook. 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":"Chief","tile":"cookbook","type":"status","title":"Cookbook","props":{"state":"routine","task":"See every Cursor cloud agent on your board: status, run time, its latest line, and PR stages.","detail":"https://www.botopticon.com/recipes/curl-cursor-agents"},"needs_you":false,"ttl_seconds":86400,"subtitle":"Recipe of the Day: Cursor agents"}'
Keep the Botopticon board "Cookbook" 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":"Chief","tile":"cookbook","type":"status","title":"Cookbook","props":{"state":"routine","task":"See every Cursor cloud agent on your board: status, run time, its latest line, and PR stages.","detail":"https://www.botopticon.com/recipes/curl-cursor-agents"},"needs_you":false,"ttl_seconds":86400,"subtitle":"Recipe of the Day: Cursor agents"}
# Once a day, for a metric no agent touches (Cookbook, ttl_seconds 86400).
# Skip the post when the value has not changed. Do not use this to repeat a status tile.
0 8 * * * curl -sS -X POST "https://www.botopticon.com/api/ingest" -H "Authorization: Bearer $BOTOPTICON_TOKEN" -H "Content-Type: application/json" -d '{"bot":"Chief","tile":"cookbook","type":"status","title":"Cookbook","props":{"state":"routine","task":"See every Cursor cloud agent on your board: status, run time, its latest line, and PR stages.","detail":"https://www.botopticon.com/recipes/curl-cursor-agents"},"needs_you":false,"ttl_seconds":86400,"subtitle":"Recipe of the Day: Cursor agents"}'
FAQ
- Where does the list of recipes come from?
- From the Recipes page. Until there is a machine-readable index, keep a short JSON list of slugs, names, and one line each. Add new recipes to the end and the rotation picks them up.
- Does this run on the Free plan?
- Yes. Every tile in this recipe is a Free type. A Free workspace still has one board and 8 live tiles.
- 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.