Dashboards·terminal·MIT
linear
Your Linear projects and issues in a pane. One button turns an issue into a prompt.

linear opens a pane beside the Claude Code transcript with your Linear board: the team’s projects with the milestone each one is on, the open issues of a project or your own across teams, and one issue with its description and comments. From an issue, three buttons, plan, execute and product, fill a template with the ticket and submit it to the session as a prompt, so Claude starts on the ticket without you pasting anything. The pane is read-only: it never moves, edits or comments on an issue.
What it does
- Browses the board. Arrow keys move the selection, Enter opens a project or an issue, Escape steps back one view. A project’s issue list starts on its current milestone, the one with the earliest target date and open issues;
all milestonesshows everything open. - Jumps to one issue.
/linear ENG-123opens a ticket directly;eng 123,eng123and an issue URL work as well./linear minelists your open issues across teams. - Sends a prompt.
planasks Claude to gather context, reproduce a bug if there is one, and enter plan mode with a prose briefing first.executeasks for the fix, a pull request and an end-to-end check, then an update to the ticket.productasks for ideation and a product brief before any code, with the decision written back into the ticket. The prompt shows in the transcript as “Prompt from the linear plugin” and starts a turn once the session is idle. The button readsplan…until that turn ends. - Lets you rewrite the templates.
/linear promptslists the three witheditandreset. Templates take placeholders for the ticket’s fields, the session’s directory and branch, and{brief}, the whole issue as a block./linear draft onmakes the buttons put the prompt in the composer to edit instead of sending it. - Remembers where you were. A pane left open comes back at the same view in the next session, showing the cached board at once while Linear refreshes it.
The pane docks beside the transcript in fullscreen at 110 columns or more, and sits above the prompt otherwise. For the GitHub side of the same idea, pull-request-pane shows the session’s pull requests and issues in a pane.
Install
Needs Claude Code 2.1.287 or later, a Linear personal API key, and an interactive terminal session.
claude plugin marketplace add SaharCarmel/linear-mod
claude plugin install linear@linear-mod
Put the key in LINEAR_API_KEY in your shell, or in the plugin’s apiKey setting in /config. Run /linear to open the pane and /linear close to close it; /linear help lists every form. The pane shows the workspace’s first team; set the plugin’s teamId in /config (the UUID from the team’s settings in Linear) to point it at another.
How it works
The key is read once per session from the plugin’s apiKey setting, which Claude Code stores as a sensitive value, or from the LINEAR_API_KEY environment variable if that setting is empty. It is sent as the authorization header of every request to https://api.linear.app/graphql and nowhere else. An error from Linear reaches the pane footer and the log as one line with the key redacted.
There are three GraphQL queries: the team’s projects with their milestones, a scope’s open issues (50 a page, five pages at most, urgent first), and one issue with its comments and attachments. Each call is cut off after 10 seconds. While the pane is open the current view refreshes once a minute; polling pauses when Linear reports fewer than 50 requests left in the hour, and backs off to every five minutes after three failures in a row. /linear refresh fetches again now.
The last projects, the ten newest issue lists and the twenty newest issue details are cached in the plugin’s own store, along with the open state, the draft flag and any edited templates. Nothing else is written to disk.
From the session the plugin reads the working directory and the git branch, which fill {cwd} and {branch} in a template, and watches turns start and end only to match the prompt it submitted to its turn and release the button. It does not read tool calls, command text or the transcript.
A press sends a normal prompt, so everything in it enters the model’s context and costs tokens like text you typed. The {brief} block carries up to 6,000 characters of the description and the newest five comments at up to 800 characters each; with the template, that is around 11,000 characters at most, roughly 3,000 tokens by our estimate, and usually far less. The action row states the real size before you press (sends 2.1k chars · 3 comments), and draft mode lets you read the whole prompt first.
Everything from Linear is treated as data. The brief opens with a sentence saying so and sits inside a fence tagged with a random id on each render; issue text cannot spell that tag, so a ticket cannot close the block and add instructions after it. Control, bidirectional and zero-width characters are stripped, and one-line values are cut at 200 characters. The author still warns that anyone who can write in your Linear workspace can put text in front of Claude through the buttons, so read what you send.
Limitations
- Terminal only. Nothing draws in
claude -p, Claude Code Desktop or mobile. - Read-only. Moving the ticket through your workflow is left to the
executeprompt. - One team per pane;
mineis the only cross-team view. Cycles are not shown yet. - The header buttons have no hotkeys: the runtime honours hotkeys only in the band above the prompt.
- Above the prompt, an issue is cut to its rows, so the pane may show less than a press sends. Below 40 columns the pane draws a single hint row.
- Early access. The author warns that the function-hooks API can change between Claude Code releases and lists 2.1.269 to 2.1.273 as the tested builds.
More mods
The whole directory →agent-flow
Every subagent of the session in a live tree beside the transcript. Zero tokens.
todos
The repo's TODOs and FIXMEs above the prompt at session start, newest first.
budget-guard
Warns at 80% of a cost or plan-window limit you set, then refuses tool calls past it.
bullswarm
Quota meters for every agent CLI, and Claude subagents routed to the pool with surplus.
