Linear

Use Cheqpoint to gate AI-driven Linear actions — issue creation, triage updates, project changes, and team assignments — behind human approval before they execute.

Use case

AI Assistants integrated with Linear can create issues, move tickets across cycles, close bugs, or reassign work — all autonomously. Cheqpoint adds a pause before any write operation executes, giving your engineering team visibility and control over what the AI is changing in your project tracker.

Common actions to gate

  • Creating new issues (especially bulk creation from AI triage)
  • Changing issue status, priority, or assignee
  • Moving issues between projects or cycles
  • Archiving or deleting issues
  • Creating or modifying project milestones

Prerequisites

  • @linear/sdk (Node.js) or linear-sdk (Python) configured with a Linear API key.
  • Cheqpoint Connection Key.

Sample request payload — issue creation

json
{
  "action": "linear_create_issue",
  "summary": "AI requesting creation of 8 bug issues from error log analysis",
  "details": {
    "teamId": "ENG",
    "issueCount": 8,
    "titles": [
      "NullPointerException in checkout flow",
      "Timeout on payment gateway webhook"
    ],
    "priority": 2,
    "labels": ["bug", "ai-triage"]
  }
}

Sample Cheqpoint response

json
{
  "status": "approved",
  "modifiedDetails": {
    "issueCount": 2,
    "titles": ["NullPointerException in checkout flow", "Timeout on payment gateway webhook"]
  },
  "decisionNote": "Only the 2 P1 bugs approved. Deprioritise remaining."
}
import os
from cheqpoint import CheqpointClient

cheq = CheqpointClient(api_key=os.environ["CQ_API_KEY"])

def create_linear_issue_with_approval(team_id: str, title: str, priority: int):
    """Submit a Cheqpoint approval before creating a Linear issue."""
    approval = cheq.request_sync(
        action="linear_create_issue",
        summary=f"AI requesting creation of Linear issue: {title}",
        details={"teamId": team_id, "title": title, "priority": priority},
        timeout_ms=30_000,
    )

    if approval["status"] != "approved":
        raise ValueError(f"Issue creation blocked: {approval.get('decisionNote', 'rejected')}")

    effective = approval.get("modifiedDetails") or {
        "teamId": team_id, "title": title, "priority": priority
    }
    # Call Linear GraphQL API or SDK with effective payload
    return call_linear_api("issueCreate", effective)

Routing tip

Create a dedicated Review Group in Cheqpoint for your engineering team to handle Linear approval requests, separate from customer-facing operations queues. Set an SLA of 30 minutes for engineering triage actions.

Get your Connection Key at cheqpoint.co/signup.