linearlisted
Install: claude install-skill tuannv14/claude-team-toolkit
# /linear — Linear GraphQL API (multi-workspace)
One endpoint: `POST https://api.linear.app/graphql`. No REST API exists.
Arguments: `$ARGUMENTS`. Profile: `--profile` → `LINEAR_PROFILE` →
`~/.linear/active_profile` → `[default]`. Deps: `curl`, `jq` 1.6+.
## Overview
Auth header is **`Authorization: <api_key>` with NO `Bearer`** (`Bearer` is
OAuth-only and a personal key sent that way is rejected). Full curl + jq per
verb in **[recipes.md](recipes.md)** — load it when a verb is invoked.
## When to Use
- Triage: list unresolved, fetch `ENG-123`, comment, change state
- User pastes `https://linear.app/<workspace>/issue/ENG-123/...`
- Filing an issue for a bug found during a session
- Team / state / project / cycle lookup; multi-workspace work
## When NOT to Use
- Webhooks or OAuth apps → both need your own HTTP server
- Bulk import or migration → Linear's own importers are safer
- Linear Asks in Slack → that is Slack's side
## Profile config
`~/.linear/credentials` (mode 600):
```ini
[default]
api_key = lin_api_YOUR-KEY-HERE
default_team = ENG
read_only = true
[work]
api_key = lin_api_YOUR-KEY-HERE
default_team = PLAT
require_confirm = true
```
`default_team` is the team **key** (`ENG`), not a UUID.
**Get a key:** Linear → Settings → Account → Security & Access → Personal API
keys → Create API key. Shown **once**; prefix `lin_api_`; never expires, so
revoking on that page is the only way one stops working.
**Permissions** — a key is created wit