jeremylongshore/claude-code-plugins-plus-skills
linear-pack
plugins/saas-packs/linear-pack/skills/linear-performance-tuning/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-performance-tuning/SKILL.md -a claude-code --skill linear-performance-tuningInstallation paths:
.claude/skills/linear-performance-tuning/# Linear Performance Tuning
## Overview
Optimize Linear API usage for maximum performance and minimal latency.
## Prerequisites
- Working Linear integration
- Understanding of GraphQL
- Caching infrastructure (Redis recommended)
## Instructions
### Step 1: Query Optimization
**Minimize Field Selection:**
```typescript
// BAD: Fetching unnecessary fields
const issues = await client.issues();
for (const issue of issues.nodes) {
// Only using id and title, but fetching everything
console.log(issue.id, issue.title);
}
// GOOD: Request only needed fields
const query = `
query MinimalIssues($first: Int!) {
issues(first: $first) {
nodes {
id
title
}
}
}
`;
```
**Avoid N+1 Queries:**
```typescript
// BAD: N+1 queries
const issues = await client.issues();
for (const issue of issues.nodes) {
const state = await issue.state; // Separate query per issue!
console.log(issue.title, state?.name);
}
// GOOD: Use connections and batch loading
const query = `
query IssuesWithState($first: Int!) {
issues(first: $first) {
nodes {
id
title
state {
name
}
}
}
}
`;
```
### Step 2: Implement Caching Layer
```typescript
// lib/cache.ts
import Redis from "ioredis";
const redis = new Redis(process.env.REDIS_URL);
interface CacheOptions {
ttlSeconds: number;
keyPrefix?: string;
}
export class LinearCache {
private keyPrefix: string;
private defaultTtl: number;
constructor(options: CacheOptions = { ttlSeconds: 300 }) {
this.keyPrefix = options.keyPrefix || "linear";
this.defaultTtl = options.ttlSeconds;
}
private key(key: string): string {
return `${this.keyPrefix}:${key}`;
}
async get<T>(key: string): Promise<T | null> {
const data = await redis.get(this.key(key));
return data ? JSON.parse(data) : null;
}
async set<T>(key: string, value: T, ttl = this.defaultTtl): Promise<void> {
await redis.setex(this.key(key), ttl, JSON