jeremylongshore/claude-code-plugins-plus-skills
linear-pack
plugins/saas-packs/linear-pack/skills/linear-core-workflow-a/SKILL.md
January 22, 2026
Select agents to install to:
npx add-skill https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/main/plugins/saas-packs/linear-pack/skills/linear-core-workflow-a/SKILL.md -a claude-code --skill linear-core-workflow-aInstallation paths:
.claude/skills/linear-core-workflow-a/# Linear Core Workflow A: Issue Lifecycle
## Overview
Master issue lifecycle management: creating, updating, transitioning, and organizing issues.
## Prerequisites
- Linear SDK configured
- Access to target team(s)
- Understanding of Linear's issue model
## Instructions
### Step 1: Create Issues
```typescript
import { LinearClient } from "@linear/sdk";
const client = new LinearClient({ apiKey: process.env.LINEAR_API_KEY });
async function createIssue(options: {
teamKey: string;
title: string;
description?: string;
priority?: 0 | 1 | 2 | 3 | 4; // 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
estimate?: number;
labelIds?: string[];
assigneeId?: string;
}) {
const teams = await client.teams({ filter: { key: { eq: options.teamKey } } });
const team = teams.nodes[0];
if (!team) throw new Error(`Team ${options.teamKey} not found`);
const result = await client.createIssue({
teamId: team.id,
title: options.title,
description: options.description,
priority: options.priority ?? 0,
estimate: options.estimate,
labelIds: options.labelIds,
assigneeId: options.assigneeId,
});
if (!result.success) {
throw new Error("Failed to create issue");
}
return result.issue;
}
```
### Step 2: Update Issues
```typescript
async function updateIssue(
issueId: string,
updates: {
title?: string;
description?: string;
priority?: number;
stateId?: string;
assigneeId?: string;
estimate?: number;
}
) {
const result = await client.updateIssue(issueId, updates);
if (!result.success) {
throw new Error("Failed to update issue");
}
return result.issue;
}
// Update by identifier (e.g., "ENG-123")
async function updateByIdentifier(identifier: string, updates: Record<string, unknown>) {
const issue = await client.issue(identifier);
return client.updateIssue(issue.id, updates);
}
```
### Step 3: State Transitions
```typescript
async function getWorkflowStates(teamKey: string) {
const teams