jeremylongshore/claude-code-plugins-plus-skills
linear-pack
plugins/saas-packs/linear-pack/skills/linear-core-workflow-b/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-b/SKILL.md -a claude-code --skill linear-core-workflow-bInstallation paths:
.claude/skills/linear-core-workflow-b/# Linear Core Workflow B: Projects & Cycles
## Overview
Manage projects, cycles (sprints), and roadmaps using the Linear API.
## Prerequisites
- Linear SDK configured
- Understanding of Linear's project hierarchy
- Team access with project permissions
## Instructions
### Step 1: Project Management
```typescript
import { LinearClient } from "@linear/sdk";
const client = new LinearClient({ apiKey: process.env.LINEAR_API_KEY });
// List all projects
async function getProjects(teamKey?: string) {
const filter = teamKey
? { accessibleTeams: { some: { key: { eq: teamKey } } } }
: undefined;
const projects = await client.projects({ filter });
return projects.nodes;
}
// Create a project
async function createProject(options: {
name: string;
description?: string;
teamIds: string[];
targetDate?: Date;
state?: "planned" | "started" | "paused" | "completed" | "canceled";
}) {
const result = await client.createProject({
name: options.name,
description: options.description,
teamIds: options.teamIds,
targetDate: options.targetDate?.toISOString(),
state: options.state ?? "planned",
});
return result.project;
}
// Update project status
async function updateProjectStatus(
projectId: string,
status: "planned" | "started" | "paused" | "completed" | "canceled"
) {
return client.updateProject(projectId, { state: status });
}
```
### Step 2: Cycle (Sprint) Management
```typescript
// Get current and upcoming cycles
async function getActiveCycles(teamKey: string) {
const teams = await client.teams({ filter: { key: { eq: teamKey } } });
const team = teams.nodes[0];
const now = new Date().toISOString();
const cycles = await team.cycles({
filter: {
or: [
{ endsAt: { gte: now } }, // Current or future
{ startsAt: { gte: now } }, // Future
],
},
orderBy: "startsAt",
});
return cycles.nodes;
}
// Create a new cycle
async function createCycle(options: {
teamId: string;
nam