.agents/skills/linear/SKILL.md
Before using Linear workflows, search for linear MCP tools. If not found, treat as not installed.
A PR that fixes a Linear issue has two separate jobs to do, and both matter:
Fixes LOBE-xxx in the PR body — Linear watches GitHub for these magic keywords and auto-links the PR and auto-closes the issue on merge. This is the machine-readable side.If you only do step 1, Linear watchers (often non-engineers) hit the issue and see no context. So pair PR creation with the Linear comment as part of the same task — finish both before considering the work done.
mcp__linear-server__get_issuemcp__linear-server__extract_images so you actually see them; reading raw markdown alone misses what the reporter was looking at.mcp__linear-server__list_issues with parentId filtermcp__linear-server__update_issueWhen creating issues with mcp__linear-server__create_issue, add the claude code label. Reason: the label is how the team filters/audits AI-generated issues; without it those issues vanish into the general backlog and the team loses visibility into AI contribution patterns.
Match the issue language to the conversation that produced it — if you're discussing in 中文,write the issue in 中文;if discussing in English, write it in English. Reason: the issue is a continuation of the conversation, and forcing a language switch creates translation friction for the collaborator who started the thread.
Specifics:
When breaking a parent issue into a tree of sub-issues (e.g., task decomposition for LOBE-xxx), follow these rules — they work around real limitations of the Linear MCP tools.
The Linear Sub-issues panel orders children by sortOrder, which defaults to newest-first (most recently created appears on top). Neither parallel nor serial creation produces the intended top-to-bottom reading order, and the MCP save_issue tool does not expose a sortOrder parameter — you can't set order at create time.
Workaround: encode execution order in the title itself:
[1] [db] add schema fields
[2] [db] new table + repository
[3] [service] business logic layer
[4] [api] REST endpoints
[4.1] [sdk] client SDK wrapper
[4.1.1] [app] consumer integration
[4.1.2] [app] UI surface
[4.2] [ui] dashboard page
Even when the panel shuffles, the reader can mentally reconstruct the dependency graph at a glance. Dotted numbering [n.m.k] should mirror the parent-child nesting so the index and the tree agree.
Linear supports unlimited sub-issue depth. A flat list of 8+ siblings under one root is hard to scan. Group by main-subordinate logic:
Use parentId: "LOBE-xxxx" at creation (or save_issue to move). Moving an issue's parent does not disturb its blockedBy relations.
blockedByblockedBy requires the blocker to exist first (you need its LOBE-id). So:
blockedBy is append-only; passing it again does not overwrite — safe to re-runMCP tool calls in a single message look parallel but execute sequentially on the server, and you still need blocker IDs from earlier responses. Just issue calls in dependency order; optimizing for parallelism gains nothing here.
Each sub-issue should state:
LOBE-xxxx)The implementer may open only the sub-issue, not the parent — don't rely on context that lives only in the parent description.
Each completed issue gets a comment summarizing the work, so reviewers and future readers don't have to reconstruct it from the PR diff:
## Changes Summary
- **Feature**: Brief description of what was implemented
- **Files Changed**: List key files modified
- **PR**: #xxx or PR URL
### Key Changes
- Change 1
- Change 2
- ...
This gives team visibility, code-review context, and a paper trail for future reference.
When creating PRs for Linear issues, include magic keywords in the PR body:
Fixes LOBE-123Closes LOBE-123Resolves LOBE-123These trigger Linear's auto-link + auto-close on merge.
When working on multiple issues, close out each one before starting the next — don't batch all the Linear updates to the end. Batching is where comments get forgotten and issues stay stuck in "In Progress" days after the PR shipped.
For each issue:
bun run type-check