Agent Skillsyc-software/qm › linear

linear

GitHub

通过 Linear API 搜索、读取、创建和更新 Issue、项目及评论。支持 OAuth 认证,需获取团队 ID,写操作前须获用户批准,并处理分页逻辑。

skills-seed/linear/SKILL.md yc-software/qm

Trigger Scenarios

查询或管理 Linear Issue 创建或更新项目任务 查看 Issue 状态或评论

Install

npx skills add yc-software/qm --skill linear -g -y
More Options

Non-standard path

npx skills add https://github.com/yc-software/qm/tree/main/skills-seed/linear -g -y

Use without installing

npx skills use yc-software/qm@linear

指定 Agent (Claude Code)

npx skills add yc-software/qm --skill linear -a claude-code -g -y

安装 repo 全部 skill

npx skills add yc-software/qm --all -g -y

预览 repo 内 skill

npx skills add yc-software/qm --list

SKILL.md

Frontmatter
{
    "name": "linear",
    "description": "Search, read, create, and update the user's Linear issues, projects, and comments through per-user OAuth.",
    "requiredCapabilities": [
        "egress:api.linear.app"
    ]
}

Linear

Use this skill when the user asks about Linear issues, tickets, projects, cycles, or their team's work tracking — finding issues, checking status, filing a bug, leaving a comment, or updating an issue.

This is an OAuth connector. The resolved user's Linear token already lives on your computer as an environment variable (the way a logged-in CLI's cached credential would):

  • $VAULT_TOKEN_API_LINEAR_APP — for api.linear.app

Linear's API is GraphQL at https://api.linear.app/graphql. Pass the token as a bearer header (-H "Authorization: Bearer $VAULT_TOKEN_API_LINEAR_APP"). Do not ask the user for a token, log it, or use another principal's credential.

If the variable is empty or the API returns 401/400 (authentication), tell the user they need to connect Linear (Connectors page) and stop — don't guess at issue data.

Find / read issues

Query issues by text, assignee, or state:

curl -sS -X POST 'https://api.linear.app/graphql' \
  -H "Authorization: Bearer $VAULT_TOKEN_API_LINEAR_APP" \
  -H 'content-type: application/json' \
  --data '{"query":"{ issues(first: 20, filter: { title: { containsIgnoreCase: \"login\" } }) { nodes { identifier title state { name } assignee { name } url } } }"}'

Read one issue by id/identifier:

curl -sS -X POST 'https://api.linear.app/graphql' \
  -H "Authorization: Bearer $VAULT_TOKEN_API_LINEAR_APP" \
  -H 'content-type: application/json' \
  --data '{"query":"{ issue(id: \"ENG-123\") { identifier title description state { name } assignee { name } url comments { nodes { body user { name } } } } }"}'

Keep issue identifiers and urls in your answer so claims can be traced.

To create or assign an issue you usually need a team id — list them once:

curl -sS -X POST 'https://api.linear.app/graphql' \
  -H "Authorization: Bearer $VAULT_TOKEN_API_LINEAR_APP" \
  -H 'content-type: application/json' \
  --data '{"query":"{ teams(first: 100) { nodes { id key name } pageInfo { hasNextPage endCursor } } }"}'

Linear paginates every list: if pageInfo.hasNextPage is true, re-query with after: "<endCursor>" — never conclude a team or issue doesn't exist from one page.

Writes require approval

Creating an issue, commenting, or changing state is a write. Prepare the exact mutation, summarize what it will create/change (team, title, target issue), and ask for approval before running it.

After approval, create an issue:

curl -sS -X POST 'https://api.linear.app/graphql' \
  -H "Authorization: Bearer $VAULT_TOKEN_API_LINEAR_APP" \
  -H 'content-type: application/json' \
  --data '{"query":"mutation($input: IssueCreateInput!) { issueCreate(input: $input) { success issue { identifier url } } }","variables":{"input":{"teamId":"TEAM_ID","title":"Login button misaligned on mobile","description":"Reported by a user; repro on iOS Safari."}}}'

Add a comment to an existing issue:

curl -sS -X POST 'https://api.linear.app/graphql' \
  -H "Authorization: Bearer $VAULT_TOKEN_API_LINEAR_APP" \
  -H 'content-type: application/json' \
  --data '{"query":"mutation($input: CommentCreateInput!) { commentCreate(input: $input) { success comment { url } } }","variables":{"input":{"issueId":"ISSUE_UUID","body":"Fixed in the latest deploy."}}}'

Always report the resulting issue/comment identifier and url.

Version History

  • 7f2c916 Current 2026-08-02 21:47

Same Skill Collection

.claude/skills/dev-instance/SKILL.md
.claude/skills/update-qm/SKILL.md
.claude/skills/upstream-pr/SKILL.md
.codex/skills/deploy-qm/SKILL.md
.codex/skills/dev-instance/SKILL.md
.codex/skills/update-qm/SKILL.md
.codex/skills/upstream-pr/SKILL.md
cli/templates/deployment/SKILL.md
plugins/onboarding/skills/onboarding/SKILL.md
skills-seed/admin/SKILL.md
skills-seed/browse/SKILL.md
skills-seed/cloud-cli/SKILL.md
skills-seed/connect-apps/SKILL.md
skills-seed/dropbox/SKILL.md
skills-seed/email-draft-in-voice/SKILL.md
skills-seed/email-voice-profile/SKILL.md
skills-seed/github-gitlab/SKILL.md
skills-seed/google-drive-sheets/SKILL.md
skills-seed/google-workspace/SKILL.md
skills-seed/interactive-login/SKILL.md
skills-seed/memory/SKILL.md
skills-seed/morning-digest/SKILL.md
skills-seed/popular-web-designs/SKILL.md
skills-seed/publish/SKILL.md
skills-seed/taste-skill/SKILL.md
skills-seed/use-shared-credential/SKILL.md

Metadata

Files
0
Version
7f2c916
Hash
8a8d3519
Indexed
2026-08-02 21:47

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-03 07:37
浙ICP备14020137号-1 $방문자$