Linear GraphQL Skill - Usage Patterns

Authentication Setup

Personal API Key (Recommended)

# Set credential with environment variable
uxc auth credential set linear-graphql \
  --auth-type api_key \
  --header "Authorization:{{secret}}" \
  --secret-env LINEAR_API_KEY

# Or with literal secret (not recommended for security)
uxc auth credential set linear-graphql \
  --auth-type api_key \
  --header "Authorization:{{secret}}" \
  --secret lin_api_xxxx

OAuth Flow

# Start OAuth login
uxc auth oauth start linear-graphql \
  --endpoint https://api.linear.app/graphql \
  --redirect-uri http://127.0.0.1:8788/callback \
  --scope read \
  --scope write

# After user approves, complete exchange
uxc auth oauth complete linear-graphql \
  --session-id <session_id> \
  --authorization-response 'http://127.0.0.1:8788/callback?code=...&state=...'

# Then bind endpoint
uxc auth binding add \
  --id linear-graphql \
  --host api.linear.app \
  --path-prefix /graphql \
  --scheme https \
  --credential linear-graphql \
  --priority 100

uxc auth oauth login linear-graphql ... --flow authorization_code is still available as a single-process interactive fallback.

Link Setup

# Create link command
uxc link linear-graphql-cli https://api.linear.app/graphql

# Verify
linear-graphql-cli -h

Query Examples

List Issues

linear-graphql-cli query/issues '{"first":20}'

List Issues With Explicit Fields

linear-graphql-cli query/issues '{"first":20,"_select":"nodes { identifier title url state { name } assignee { name } }"}'

Filter Issues by Team

linear-graphql-cli query/issues filter='{"team":{"id":{"eq":"TEAM_ID"}}}'

Get Single Issue

linear-graphql-cli query/issue id=ISSUE_123

List Teams

linear-graphql-cli query/teams

List Projects

linear-graphql-cli query/projects '{"first":10}'

Mutation Examples

Create Issue

linear-graphql-cli mutation/issueCreate '{
  "input": {
    "teamId": "TEAM_ID",
    "title": "New Feature Request",
    "description": "Description here",
    "priority": 2
  }
}'

Update Issue

linear-graphql-cli mutation/issueUpdate '{
  "id": "ISSUE_ID",
  "input": {
    "title": "Updated Title",
    "description": "Updated description"
  }
}'

Archive Issue

linear-graphql-cli mutation/issueArchive id=ISSUE_ID

Add Comment

linear-graphql-cli mutation/commentCreate '{
  "input": {
    "issueId": "ISSUE_ID",
    "body": "Comment body"
  }
}'

Error Handling

Invalid API Key

{"ok": false, "error": {"code": "UNAUTHENTICATED", "message": "API key invalid"}}

Fix: Check or regenerate API key at https://linear.app/settings/api

Rate Limiting

{"ok": false, "error": {"code": "RATE_LIMITED", "message": "Too many requests"}}

Fix: Wait and retry, or reduce request frequency

Invalid Operation

{"ok": false, "error": {"code": "INVALID_ARGUMENT", "message": "Invalid issue ID"}}

Fix: Verify the ID format and existence