Linear logo

Linear

Organization
aiskillstore
linear

Manages Linear issues, teams, and projects via CLI. Lists issues, creates tasks, views details, links issues, and runs GraphQL queries. Must use for "my Linear issues", "create Linear task", "link issues in Linear", "Linear API query", or any Linear project management request.

Overview

Publisheraiskillstore
Repositorymarketplace
Skill namelinear
Stars
427
Forks
45
Bundled files
4
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 4 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by aiskillstore on GitHub. Read the source before you install it.

Installation

Install the Linear AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/aiskillstore/marketplace.git /tmp/marketplace
mkdir -p .claude/skills
cp -r /tmp/marketplace/skills/0xbigboss/linear .claude/skills/linear
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Linear in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Linear on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Linear is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Linear CLI

Interacts with Linear for issue tracking and project management using the linear command.

Scope

  • Use for Linear issue/project/teams management via the CLI or GraphQL (linear gql).
  • Prefer built-in commands over raw GraphQL unless functionality is missing.
  • Keep defaults in sync with the user's config; do not hard-code team IDs/outputs.

Install & Setup

  • Install: npm install -g @0xbigboss/linear-cli
  • Auth: linear auth set or set LINEAR_API_KEY
  • Defaults: linear config set default_team_id TEAM_KEY, linear config set default_output json|table, linear config set default_state_filter completed,canceled
  • Inspect or reset defaults: linear config show, linear config unset default_output
  • Config path: ~/.config/linear/config.json (override with --config PATH or LINEAR_CONFIG)

Prerequisites

  • CLI installed and on PATH
  • Valid Linear API key available
  • Team defaults set or provided per command (team key/UUID)

Hygiene

  • Branches: Name as {TICKET}-{short-name} (e.g., ENG-123-fix-auth); prefer git worktrees for parallel work
  • Commits: Use conventional commits; ticket ID in body or trailer, not subject
  • Assignment: Assign yourself when starting work (linear issue update ENG-123 --assignee me --yes)
  • Sub-issues: Set parent to associate related work (requires UUID: linear issue update ENG-123 --parent PARENT_UUID --yes)
  • Scope creep: Create separate issues for discovered work; link with blocks relation (linear issue link ENG-123 --blocks ENG-456 --yes)
  • Cycles/projects: Ask user preference when creating issues

Quick Recipes

List my issues

bash
linear issues list --team TEAM_KEY --assignee me --human-time

Search issues

bash
linear search "keyword" --team TEAM_KEY --limit 10

Create an issue

bash
linear issue create --team TEAM_KEY --title "Fix bug" --yes
# Returns identifier (e.g., ENG-123)

View issue details

bash
linear issue view ENG-123

Download attachments from issues

bash
# Download a specific file (requires LINEAR_API_KEY)
linear download "https://uploads.linear.app/..." --output screenshot.png

# Auto-download attachments when viewing an issue
linear issue view ENG-123 --attachment-dir /tmp

# Disable auto-download
linear issue view ENG-123 --attachment-dir ""

Get issue as JSON for processing

bash
linear issue view ENG-123 --json

Get issue with full context (for agents/analysis)

bash
linear issue view ENG-123 --fields identifier,title,state,assignee,priority,url,description,parent,sub_issues,comments --json

List all teams

bash
linear teams list

Verify authentication

bash
linear auth test

List projects

bash
linear projects list --limit 10

View or change CLI defaults

bash
linear config show
linear config set default_output json
linear config unset default_state_filter

Add a comment to an issue

bash
linear issue comment ENG-123 --body "Comment text here" --yes

# Or from a file/stdin
cat notes.md | linear issue comment ENG-123 --body-file - --yes

Create and manage a project

bash
# Create project (team UUID required)
linear project create --team TEAM_UUID --name "My Project" --state planned --yes

# Update project state
linear project update PROJECT_ID --state started --yes

# Add issue to project
linear project add-issue PROJECT_ID ISSUE_UUID --yes

Command Reference

CommandPurpose
linear issues listList issues with filters
linear search "keyword"Search issues by text
linear issue view IDView single issue
linear issue createCreate new issue
linear issue update IDUpdate issue (assign, state, priority, parent*)
linear issue link IDLink issues (blocks, related, duplicate)
linear issue comment IDAdd comment to issue
linear issue delete IDArchive an issue
linear projects listList projects
linear project view IDView project details
linear project createCreate new project
linear project update IDUpdate project (state, name, dates)
linear project delete IDArchive a project
linear project add-issueAdd issue to project
linear project remove-issueRemove issue from project
linear teams listList available teams
linear meShow current user
linear gqlRun raw GraphQL
linear downloadDownload uploads.linear.app attachments
linear help CMDCommand-specific help

*--parent requires UUIDs, not identifiers. See Finding IDs.

Common Flags

  • --team ID\|KEY - Specify team (required for most commands)
  • --json - Output as JSON
  • --yes - Confirm mutations without prompt
  • --human-time - Show relative timestamps
  • --fields LIST - Select specific fields
  • --help - Show command help

Workflow: Creating and Linking Issues

Note: --parent requires UUIDs. Get UUID with linear issue view ID --json | jq -r '.issue.id'

Progress:
- [ ] List teams to get TEAM_KEY: `linear teams list`
- [ ] Create parent issue: `linear issue create --team KEY --title "Epic" --yes`
- [ ] Create child issue: `linear issue create --team KEY --title "Task" --yes`
- [ ] Get parent UUID: `linear issue view PARENT_ID --json | jq -r '.issue.id'`
- [ ] Set parent (UUID required): `linear issue update CHILD_ID --parent PARENT_UUID --yes`
- [ ] Create another issue to link: `linear issue create --team KEY --title "Blocked" --yes`
- [ ] Link blocking issue: `linear issue link ISSUE_ID --blocks OTHER_ID --yes`
- [ ] Verify: `linear issue view ISSUE_ID --json`

Common Gotchas

ProblemCauseSolution
Empty resultsNo team specifiedAdd --team TEAM_KEY
401 UnauthorizedInvalid/missing API keyRun linear auth test
Mutation does nothingMissing confirmationAdd --yes flag
Can't find issueWrong ID or missing accessissue view accepts identifier or UUID; verify spelling and permissions
--parent failsUsing identifier--parent flag requires UUID, not identifier

ID format summary: Most commands accept identifiers (ENG-123). Exception: --parent requires UUIDs.

Advanced Operations

For operations not covered by built-in commands, use linear gql with GraphQL:

  • Add attachments - See graphql-recipes.md → "Attach URL to Issue"
  • Upload files - See graphql-recipes.md → "Upload File"

Note: Adding comments is now available via linear issue comment. Setting parent is available via issue update --parent, but requires UUIDs. Use linear issue view ID --json to get UUIDs.

Finding IDs

Important: issue update --parent requires UUIDs.

bash
# Get issue UUID from identifier
linear issue view ENG-123 --json | jq -r '.issue.id'

# Current user UUID
linear me --json | jq -r '.viewer.id'

# All teams with UUIDs
linear teams list --json

# Issue full details including UUID
linear issue view ENG-123 --json

Or in Linear app: Cmd/Ctrl+K → "Copy model UUID"

JSON Output Structures

Commands with --json return nested structures. Use these jq paths:

CommandRoot pathItems path
issue view ID.issueN/A (single object)
issue view ID --fields ....N/A (flat object of selected fields)
issues list.issues.issues.nodes[]
project view ID.projectN/A (single object)
projects list.projects.projects.nodes[]
teams list.teams.teams.nodes[]
me.viewerN/A (single object)
search.issues.issues.nodes[]

Null handling: Many fields can be null (name, description, dates, assignee). Use null-safe filters.

jq Patterns

bash
# List all projects (correct path)
linear projects list --json | jq '.projects.nodes[]'

# Filter projects by name (null-safe)
linear projects list --json | jq '.projects.nodes[] | select(.name) | select(.name | ascii_downcase | contains("keyword"))'

# Get project names as array
linear projects list --json | jq '[.projects.nodes[].name]'

# Filter issues by title
linear issues list --team TEAM --json | jq '.issues.nodes[] | select(.title | ascii_downcase | contains("bug"))'

# Extract specific fields
linear issues list --team TEAM --json | jq '.issues.nodes[] | {id: .identifier, title, state: .state.name}'

# Get issue UUID from identifier
linear issue view ENG-123 --json | jq -r '.issue.id'

Common mistakes:

  • .[] on root - use .projects.nodes[] or .issues.nodes[]
  • test("pattern"; "i") on null - filter nulls first with select(.field)
  • Escaping != in shells - use select(.field) instead of select(.field != null)

Reference Files

  • graphql-recipes.md - GraphQL mutations for attachments, relations, comments, file uploads
  • troubleshooting.md - Common errors and debugging steps

External Links

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Linear AI skill do?

Manages Linear issues, teams, and projects via CLI. Lists issues, creates tasks, views details, links issues, and runs GraphQL queries. Must use for "my Linear issues", "create Linear task", "link issues in Linear", "Linear API query", or any Linear project management request.

Why use Linear on TypingMind?

Because you install it once and use it with any model. Linear is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Linear in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/aiskillstore/marketplace/tree/main/skills/0xbigboss/linear. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Linear?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Linear?

As many as you like. As long as a model supports skills, you can use Linear with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Linear AI skill free?

It is published on GitHub by aiskillstore. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇