Claude-skill-registry linear-agent
Intelligent, conversational interface for managing Linear workspace operations (issues, projects, teams, reporting)
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/linear-agent" ~/.claude/skills/majiayu000-claude-skill-registry-linear-agent && rm -rf "$T"
skills/data/linear-agent/SKILL.mdLinear Agent Skill
Purpose
Intelligent, conversational interface for managing Linear workspace operations. This skill provides comprehensive issue management, project planning, team coordination, and reporting capabilities through natural language interaction.
Core Capabilities:
- Issue Management: Create, retrieve, update, and search issues with smart defaults
- Project Planning: Bulk operations for epics, milestones, and feature sets
- Team Coordination: Assign work, track progress, manage workloads
- Reporting: Generate team summaries, sprint reports, and activity metrics
- Templates: Pre-configured patterns for bugs, features, and tasks
Architecture
This skill wraps the MCP Linear tools and provides helper utilities that add:
- Retry logic and error handling
- Smart defaults and validation
- Template-based issue creation
- Batch operations
- Natural language → Linear API translation
⚡ OPTIMIZED: All helper scripts have been upgraded for reliability and clarity! See
helpers/README.md for detailed documentation and examples.
Helper Scripts:
: Unified API client with retry logic ✅ Fixed auth headerlinear_client.py
: Advanced querying and filtering ✅ Simplified & reliablequery_issues.py
: Retrieve specific issue by identifier ✅ NEWget_issue.py
: Issue updates with validation ✅ State lookup + commentsupdate_issue.py
: Template-based issue creationcreate_issue.py
: Batch create/update operationsbulk_operations.py
: Team and sprint reportsreporting.py
: API connectivity testing ✅ NEWtest_api.py
Templates:
: Bug issue templatebug_report.yaml
: Feature request templatefeature_request.yaml
: Generic task templatetask.yaml
Workflows
Workflow 1: Create Issue
Trigger: User wants to create a new Linear issue
Steps:
-
Understand Requirements
- Extract issue details from user's natural language request
- Identify: title, description, type (bug/feature/task), priority, labels
- Ask clarifying questions if needed
-
Select Team
- If team not specified, list available teams using
linear_client.py - Ask user to select team or infer from context
- If team not specified, list available teams using
-
Choose Template (Optional)
- For bugs: Use
templatebug_report.yaml - For features: Use
templatefeature_request.yaml - For tasks: Use
templatetask.yaml - For simple issues: Skip template
- For bugs: Use
-
Populate Fields
- If using template, gather template variables
- Apply smart defaults:
- Priority: 3 (Normal) unless specified
- Labels: Infer from issue type and content
- Estimate: Leave empty unless specified
-
Create Issue
- Use
with gathered informationhelpers/create_issue.py - Example:
python helpers/create_issue.py \ --team "Backend Team" \ --title "Fix authentication timeout" \ --description "Users report 30s timeout on login" \ --labels "bug,p1" \ --priority 2 \ --verbose
- Use
-
Return Results
- Show created issue ID, title, and URL
- Confirm status and next steps
Example Interaction:
User: "Create a bug issue for authentication timeout in the backend team" Skill: "I'll create a bug issue for the Backend Team. Let me gather some details: - What steps reproduce the issue? - What's the expected vs actual behavior? - What environment (OS, version)?" User: "Login page → 30s timeout. Should login in <3s. Chrome on Mac." Skill: *Creates issue using bug template with details* Result: "✅ Created ISS-456: [BUG] Authentication timeout - https://linear.app/..."
Workflow 2: Query & Retrieve Issues
Trigger: User wants to find or list issues with specific criteria
Steps:
-
Parse Query
- Extract filters: team, state, assignee, priority, labels, keywords
- Identify search mode: list all, filter by criteria, search by keyword
-
Execute Query
- Use
with parsed filtershelpers/query_issues.py - Example:
python helpers/query_issues.py \ --team "Backend Team" \ --state "In Progress" \ --labels "bug" \ --verbose
- Use
-
Format Results
- For small result sets (<10): Show full details
- For larger sets: Show summary table with ID, title, state, priority
- Offer to export as CSV/JSON if many results
-
Follow-up Actions
- Ask if user wants to update any of the found issues
- Offer to generate report from results
Example Interaction:
User: "Show me all in-progress bugs for the backend team" Skill: *Executes query with filters* Result: "Found 8 in-progress bugs: ISS-123: Login timeout ISS-124: API rate limit error ... Would you like to update any of these?"
Workflow 3: Update Issue
Trigger: User wants to modify an existing issue
Steps:
-
Identify Issue
- Get issue ID from user (e.g., "ISS-123")
- OR find issue by title/description if ID not provided
-
Fetch Current State
- Retrieve current issue using
linear_client.py - Show current values for fields being updated
- Retrieve current issue using
-
Determine Updates
- Extract fields to update from user request
- Supported: title, description, priority, state, assignee, labels, estimate
-
Apply Updates
- Use
with changeshelpers/update_issue.py - Example:
python helpers/update_issue.py \ --issue-id ISS-123 \ --state "In Progress" \ --assignee "user_abc123" \ --comment "Starting work on this" \ --verbose
- Use
-
Confirm Changes
- Show before/after snapshot
- Display updated issue URL
Example Interaction:
User: "Move ISS-123 to In Progress and assign to me" Skill: *Fetches current state, applies updates* Result: "✅ Updated ISS-123: State: Backlog → In Progress Assignee: Unassigned → John Doe Added comment explaining changes"
Workflow 4: Bulk Operations
Trigger: User wants to create/update multiple issues at once
Steps:
-
Understand Scope
- Determine operation type: create or update
- Identify source: YAML file, CSV, or manual list
-
Prepare Batch File (if needed)
- If user provides data directly, create temporary batch file
- Format:
team: "Backend Team" issues: - title: "Issue 1" description: "Description 1" labels: ["bug", "p1"] - title: "Issue 2" priority: 2
-
Validate Batch
- Check all required fields present
- Warn about missing optional fields
- Confirm with user before executing
-
Execute Batch
- Use
helpers/bulk_operations.py - Show progress for each issue
- Example:
python helpers/bulk_operations.py \ --action create \ --input batch.yaml \ --verbose
- Use
-
Report Results
- Summary: X/Y issues created/updated successfully
- List any failures with error messages
- Offer to save results to file
Example Interaction:
User: "Create issues from roadmap.yaml" Skill: *Loads file, validates, executes batch* Result: "✅ Created 25/25 issues successfully: - 10 features - 8 tasks - 7 bugs All issues added to Q1 Roadmap project"
Workflow 5: Generate Report
Trigger: User wants team/sprint metrics or status summary
Steps:
-
Determine Report Type
- Team Summary: Overall team metrics (by state, priority, assignee)
- Sprint Report: Activity over time period (created, completed, velocity)
-
Set Parameters
- Team name
- Time period (for sprint reports)
- Output format (markdown or JSON)
-
Generate Report
- Use
helpers/reporting.py - Example:
python helpers/reporting.py \ --team "Backend Team" \ --report sprint \ --period 7 \ --format markdown
- Use
-
Format Output
- Display report in readable format
- Highlight key metrics
- Offer to save to file
Example Interaction:
User: "Show me the backend team's sprint summary for the last week" Skill: *Generates sprint report* Result: "# Sprint Report: Backend Team Period: Last 7 days Activity: - Issues Created: 12 - Issues Completed: 8 - Velocity: 8 issues/week By State: - In Progress: 15 - Done: 42 - Backlog: 23 Would you like me to save this report?"
Helper Script Usage
Create Issue
cd /home/user/writing_ecosystem/.claude/skills/linear-agent # Simple issue python helpers/create_issue.py \ --team "Backend Team" \ --title "Add rate limiting" # With template python helpers/create_issue.py \ --team "Backend" \ --template bug_report \ --var short_description="Login timeout" \ --var detailed_description="Users report 30s timeout" \ --var expected="Login within 3s" \ --var actual="30s timeout"
Update Issue
# Change status python helpers/update_issue.py \ --issue-id ISS-123 \ --state "In Progress" \ --comment "Starting work" # Update multiple fields python helpers/update_issue.py \ --issue-id ISS-124 \ --priority 1 \ --assignee "user_xyz" \ --labels "urgent,bug"
Query Issues
# Filter by team and state python helpers/query_issues.py \ --team "Backend Team" \ --state "In Progress" # Search by keyword python helpers/query_issues.py \ --search "authentication" \ --limit 20 # Export to CSV python helpers/query_issues.py \ --team "Backend" \ --output issues.csv \ --format csv
Bulk Operations
# Create from YAML python helpers/bulk_operations.py \ --action create \ --input batch.yaml # Update from JSON python helpers/bulk_operations.py \ --action update \ --input updates.json
Reporting
# Team summary python helpers/reporting.py \ --team "Backend Team" \ --report summary # Sprint report python helpers/reporting.py \ --team "Backend" \ --report sprint \ --period 7 \ --output sprint_report.md
Environment Setup
Required Environment Variables:
LINEAR_API_KEY=lin_api_... # Your Linear API key
Optional:
LINEAR_WORKSPACE_ID=... # Default workspace (if multiple)
Get API Key:
- Go to Linear Settings → API
- Create new personal API key
- Set as environment variable
Templates
Bug Report Template Variables
: Brief bug summaryshort_description
: Detailed explanationdetailed_description
: Steps to reproducesteps
: Expected behaviorexpected
: Actual behavioractual
: Operating systemos
: Software versionversion
Feature Request Template Variables
: Brief feature summaryshort_description
: Problem statementproblem
: Proposed solutionsolution
: Alternative approachesalternatives
: Definition of donesuccess_criteria
Task Template Variables
: Task titleshort_description
: Task detailsdetailed_description
: Completion criteriaacceptance_criteria
Best Practices
Creating Issues
- Use templates for bugs and features (ensures consistency)
- Set priority based on urgency and impact
- Add labels for categorization and filtering
- Include estimates to track effort
- Assign to team members with capacity
Updating Issues
- Add comments when making significant changes
- Validate state transitions (don't skip states)
- Update estimates as work progresses
- Keep descriptions current with new information
Bulk Operations
- Validate batch files before executing
- Use dry-run mode for large batches
- Monitor progress during execution
- Save results for audit trail
Reporting
- Generate weekly sprint reports for team visibility
- Track velocity trends over time
- Monitor workload distribution to prevent burnout
- Review label usage to ensure proper categorization
Troubleshooting
"Team not found"
- Verify team name matches exactly (case-sensitive)
- List all teams:
python helpers/linear_client.py
"Label not found"
- Check label exists for that team
- List labels: Use Linear client to query labels
"Rate limit exceeded"
- Client automatically throttles at 1400 requests/hour
- Wait for rate limit window to reset
- Consider batching operations
Authentication errors
- Verify LINEAR_API_KEY is set correctly
- Check API key hasn't expired
- Ensure key has necessary permissions
Reference Documentation
See
reference/ directory for:
: GraphQL schema referencelinear_api_schema.md
: Field mapping guidefield_mappings.md
See
learnings/ directory for:
: Common mistakes and how to avoid thempitfalls.md