Skip to content

RecipesLinear

Linear work

Pro

In progress, blocked, issues by state, and the recent river. Cycle remaining is Pro. Botopticon is not affiliated with Linear.

Access

Linear personal API key, read

Required. Env LINEAR_API_KEY. Mode either.

  • Read

In Linear open Settings, then API, and create a personal API key named Botopticon board. Linear personal keys can read the issues you can see. Do not use a key that can create or mutate issues for this board.

Linear MCP is fine if the agent already has it. Same read-only rule.

Botopticon never stores this key. Paste it into the agent, cron host, or MCP config. Revoke it any time.

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.

Board

Sample · not your account.

In progress

Sample · Started states

9issues

Updated just nownowLinear

By state

Sample · This view

  1. TodoUnstarted
    45.8% issues
  2. In progressStarted
    37.5% issues
  3. DoneCompleted
    16.7% issues

Updated just nownowLinear

Recent

Sample · Newest first

  1. 12:01BOT-184 Checkout copy · In Progress
  2. 11:20BOT-179 Ingest tests · Blocked
  3. 09:48BOT-176 Footer links · Done

Updated just nownowLinear

Cycle remaining

Sample · Current cycle

Cycle ends

14d 05:00:00

Updated just nownowLinear

Command Tiles

Pro

Sample · not your account. The agent puts the ask on the board. You answer there. How Command Tiles work

  • Unblock ENG-418

    Needs you

    Sample data

    Approval · Linear

    Clear the blocker on ENG-418?

    Updated just nownowLinear

    Needs you
  • Blocked issues next?

    Needs you

    Sample data

    Question · Linear

    Two issues are blocked. What should happen?

    Updated just nownowLinear

    Needs you

Tiles

  • In progress
  • Blockedneeds you
  • By state
  • Recent
  • Cycle remainingPro
  • Blocked. Set needs_you true when blocked issues are greater than 0.

Setup

  1. 01

    Mint a read-only Linear key

    Create a key that can only read. Never grant write. Keep it in the env var named on this page, on the agent or cron host. Botopticon never stores this key. Paste it into the agent, cron host, or MCP config. Revoke it any time.

  2. 02

    Create a Botopticon token

    In the app, open Connection tokens and create one named after this board. Copy it. It is shown once. That token posts to Botopticon. It is not the source key.

  3. 03

    Paste the prompt into your agent

    Open the tab for Grok Bot, Muse, MCP, Cursor, Claude, or curl. Replace $BOTOPTICON_TOKEN. The agent fetches the source, maps the fields in the brief, and posts. Do not paste canned sample JSON as live data.

  4. 04

    Wait for the first live post

    These numbers are sample. They flip when your agent posts with the key. Each tile keeps the sample label until that tile is replaced.

Snippets

Same recipe, one tab per platform. Replace $BOTOPTICON_TOKEN with a connection token. The prompt fetches the source and posts. Do not paste the sample numbers as live data.

Grok Bot

Paste this into Grok Bot. Replace $BOTOPTICON_TOKEN with a Botopticon connection token. Connect MCP at https://www.botopticon.com/api/mcp if this client can. If it cannot, POST /api/ingest with curl instead.

Keep the Botopticon board "Linear work" current.

Source: Linear.
You hold LINEAR_API_KEY (Linear personal API key, read). Botopticon never stores this key. Paste it into the agent, cron host, or MCP config. Revoke it any time.
In Linear open Settings, then API, and create a personal API key named Botopticon board. Linear personal keys can read the issues you can see. Do not use a key that can create or mutate issues for this board.
Scopes (read-only): Read.
Linear MCP is fine if the agent already has it. Same read-only rule.

What to fetch and how to map it:
Read the current Linear GraphQL docs, or Linear MCP if you have it. Objects: Issue, WorkflowState, Cycle.
In progress: issues whose state type is started.
Blocked: issues that are blocked (a blocked relation, a Blocked state, or a blocker label you already use). Set needs_you true when that count is greater than 0.
By state: progress rows, one per workflow state you care about, each against its own max (the unstarted+started+completed count for that view).
Recent: newest updated issues as a feed. Label identifier, title, and state.
Cycle remaining: the current cycle's end time as a countdown. This tile is Pro and is skipped on Free.

Tiles:
- In progress — bot Linear, tile in-progress, type kpi.
- Blocked — bot Linear, tile blocked-now, type kpi. Set needs_you true when blocked issues are greater than 0. Sample shows needs_you true.
- By state — bot Linear, tile by-state, type progress.
- Recent — bot Linear, tile recent-iss, type feed.
- Cycle remaining — bot Linear, tile cycle-left, type countdown.

Post each tile to https://www.botopticon.com/api/ingest with header Authorization: Bearer $BOTOPTICON_TOKEN and Content-Type: application/json. Fields: bot, tile, type, title, subtitle, props, needs_you, ttl_seconds.
If you can call MCP, connect to https://www.botopticon.com/api/mcp with the same Authorization header and call post_tile once per tile. The arguments are those JSON fields.
Do not invent numbers. Do not post the same body again just to keep a tile fresh. Set ttl_seconds to how often the value really changes. A quiet tile should show as stale.
When needs_you is true, say who is asking, what it is about, and the ask.

FAQ

Which pane turns amber?
Blocked. When any issue in this view is blocked, the agent sets needs_you. Cycle remaining is a Pro countdown and is skipped on Free.
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.
Does Botopticon store the Linear key?
Botopticon never stores this key. Paste it into the agent, cron host, or MCP config. Revoke it any time.
How does the board stay current?
Your agent fetches the source and posts when a number 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.