{
 "slug": "linear",
 "name": "Linear",
 "url": "https://linear.app",
 "domain": "linear.app",
 "category": "project-management",
 "category_name": "Project management",
 "tested_at": "2026-10-16",
 "run": "20261016T065543Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T200752Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   },
   "drives": 2
  },
  {
   "run": "20261006T081459Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261016T065543Z",
   "date": "2026-10-16",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 4,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "skip"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 3,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "portal"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt and an MCP server; a docs page for each core task",
   "have": [
    "llms_txt",
    "mcp"
   ],
   "docs": "complete"
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "portal",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/10",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 75,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 75,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [
  {
   "capability": "Create an issue",
   "probe": "wrong request",
   "outcome": "not reached: no account/key (Turnstile on sign-up)",
   "grade": null,
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create an issue",
   "probe": "idempotency",
   "outcome": "not reached: no account/key (Turnstile on sign-up)",
   "grade": null,
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create an issue",
   "probe": "rate limit",
   "outcome": "not reached: no account/key (Turnstile on sign-up)",
   "grade": null,
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create an issue",
   "probe": "bad credential",
   "outcome": "not reached: no account/key (Turnstile on sign-up)",
   "grade": null,
   "idempotent": null,
   "rate_limit": null
  }
 ],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 4,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "365f93123295",
  "kb_version": "3+overlay-83f4487de6",
  "identity": "e8a92f24a9a8"
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 4,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "skip"
 },
 "same_level_drives": 4,
 "drives": 4,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Cloudflare Turnstile",
  "visible": true,
  "type": "network",
  "human": null,
  "how": "Let verified bots and signed agents past the check on sign-up: in Cloudflare, add a WAF custom rule that skips the bot challenge on your sign-up paths for verified bots and for signed agents (rule field cf.bot_management.signed_agent; since 1 July 2026 signed agents count as verified bots), and render Turnstile only when the request is not from a verified agent.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "form"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-16"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt and every docs page as .md (text/markdown); GraphQL getting started, OAuth, rate limits, MCP setup and the full SDL schema are public."
  },
  "signup": {
   "status": "human",
   "cause": "check",
   "note": "Continue with email showed a visible Cloudflare Turnstile \"Verify you are human\" after the email was entered; we do not solve it."
  },
  "verify": {
   "status": "",
   "note": "Not reached: no login mail was sent because the Turnstile stops the form first.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Not reached. API keys are made only at Settings > Account > Security & Access in the web app; the public schema has no key mutation.",
   "reached": false
  },
  "first_call": {
   "status": "",
   "route": "account",
   "note": "Not reached: the GraphQL API and the MCP server need a key or OAuth token from an account.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [
    "in-app billing page (card)"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": true,
   "rail_scope": "none",
   "trial_path": "free tier",
   "route": "portal",
   "checkout": {
    "reached": "no",
    "processor": "other",
    "captcha": "none",
    "three_ds": "not_seen",
    "card_form": false,
    "phone_field": "none",
    "wallets": [],
    "rail_offer": "none",
    "price": "10.00",
    "currency": "USD",
    "period": "month",
    "plan": "Basic",
    "last_button": ""
   },
   "person": "none",
   "ours": "no account",
   "note": "No agent rail: no 402 on any host, not on mpp.dev, Stripe Projects or the x402 Bazaar; we paid nothing. Plans are changed at Settings > Administration > Billing in the app (docs/billing-and-plans.md); Basic is $10 per user/month billed yearly.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "Nothing started. Docs: admins change or cancel at Settings > Administration > Billing (web UI); the change takes effect at the end of the period.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created, so nothing was left. The public schema documents organizationDeleteChallenge + organizationDelete(deletionCode) for deleting a workspace by API.",
   "account": false,
   "reached": false
  }
 },
 "routes": [
  {
   "route": "email_code",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "walled",
   "wall": {
    "type": "challenge",
    "owner": "product"
   },
   "person": "none",
   "brings": "inbox",
   "fresh": true,
   "minutes": 6
  },
  {
   "route": "magic_link",
   "offered": "documented",
   "tried": false,
   "not_tried": "same_as",
   "result": null,
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": null
  },
  {
   "route": "sso_google",
   "offered": "documented",
   "tried": false,
   "not_tried": "no_kit",
   "result": null,
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": null
  },
  {
   "route": "oauth_consent",
   "offered": "documented",
   "tried": true,
   "not_tried": null,
   "result": "not_reached",
   "wall": null,
   "person": "none",
   "brings": "nothing",
   "fresh": true,
   "minutes": null
  },
  {
   "route": "sso_enterprise",
   "offered": "documented",
   "tried": false,
   "not_tried": "assisted_only",
   "result": null,
   "wall": null,
   "person": "each",
   "brings": "nothing",
   "fresh": true,
   "minutes": null
  },
  {
   "route": "enterprise",
   "offered": "documented",
   "tried": false,
   "not_tried": "assisted_only",
   "result": null,
   "wall": null,
   "person": "each",
   "brings": "nothing",
   "fresh": true,
   "minutes": null
  }
 ],
 "checkout": {
  "reached": "no",
  "processor": "other",
  "captcha": "none",
  "three_ds": "not_seen",
  "phone_field": "none",
  "rail_offer": "none",
  "period": "month",
  "card_form": false,
  "price": "10.00",
  "currency": "USD",
  "plan": "Basic"
 },
 "docs": {
  "at": "2026-10-16",
  "read": 163,
  "listed": 164,
  "sampled": false,
  "overall": "complete",
  "getting_started": "found",
  "auth": "found",
  "errors": "found",
  "examples": "some",
  "freshness": "fresh",
  "newest": "2026-10-15",
  "core_pages": "10 of 10",
  "capabilities": "covered"
 },
 "claims": null,
 "pay_options": {
  "checked": "2026-10-16",
  "source": "probe",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": false,
  "cli": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "GraphQL at api.linear.app/graphql, public SDL schema",
  "mcp": "official remote server, docs only (not reached)",
  "openapi": "none (GraphQL)"
 },
 "can_do": [
  "Read every docs page as Markdown (.md URL or Accept: text/markdown)",
  "Read the full public GraphQL schema without an account"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "A visible Cloudflare Turnstile appears after the email is submitted on the sign-up form"
  },
  {
   "what": "Get an API key or call the API, MCP server or any capability",
   "why": "Both need an account; keys are made only in the web settings"
  },
  {
   "what": "Pay for a plan as an agent",
   "why": "No x402/MPP or billing API; upgrades are in the app's billing page"
  }
 ],
 "blockers": [
  "Visible Cloudflare Turnstile on email sign-up"
 ],
 "tips_for_owner": [
  "Let verified signed agents skip the sign-up check",
  "Offer API key creation by API",
  "Serve MCP discovery and protected resource metadata",
  "Support MCP (the 28 Jul 2026 spec) and CIMD",
  "Accept an agent payment rail for upgrades"
 ],
 "tips_for_agents": [
  "Sign-up needs a human to pass a Turnstile; once in, create a personal API key in Settings > Account > Security & Access and use it as a Bearer token on both api.linear.app/graphql and mcp.linear.app/mcp",
  "Rate limit errors come back as HTTP 400 with RATELIMITED in errors, not 429 (developers/rate-limiting.md)",
  "Every docs page has a .md twin; the full SDL schema is linked from llms.txt"
 ],
 "selfhost": null,
 "summary": "An agent cannot get into Linear on its own: the email sign-up shows a visible Cloudflare Turnstile and no other way in fits an agent (Google needs an account we lack, no GitHub, no API sign-up). The docs are excellent for agents (llms.txt, Markdown pages, a public GraphQL schema, an official MCP server that takes API keys), but all of it needs an account.",
 "wall": "Visible Turnstile on email sign-up",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Linear is a project-management and issue-tracking tool. An agent could not even create an account: the sign-up form shows a visible \"prove you're human\" check (Cloudflare Turnstile) right after the email is entered. So nothing behind sign-up (creating issues, projects, using the API, paying for a plan) could be tried.",
  "can_do": [
   "Read all of Linear's help pages and technical reference, in a clean text format",
   "See Linear's full technical API definition without needing an account"
  ],
  "cannot_do": [
   {
    "what": "Make an account",
    "why": "A visible human-check appears right after entering an email"
   },
   {
    "what": "Create issues, projects or use the API/AI integration",
    "why": "All of these need an account first, which could not be made"
   },
   {
    "what": "Pay for a paid plan as an agent",
    "why": "Upgrading only happens inside the app's billing page, which needs an account"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Issue tracking",
   "capability": "Create an issue",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "mutation issueCreate",
    "mcp": "create_issue",
    "cli": null,
    "ui": "Cmd/Ctrl+K > Create issue, or 'C' shortcut"
   },
   "check": "GET issue by id (GraphQL issue query) returns the new issue with its generated identifier",
   "source": "https://linear.app/docs/mcp; https://studio.apollographql.com/public/Linear-API"
  },
  {
   "id": "cap-02",
   "group": "Issue tracking",
   "capability": "Update an issue (status, assignee, priority, labels, estimate)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "mutation issueUpdate",
    "mcp": "update_issue",
    "cli": null,
    "ui": "Issue detail page / properties sidebar"
   },
   "check": "GET issue shows updated state field (e.g. status.name changed)",
   "source": "https://linear.app/docs/configuring-workflows; https://linear.app/docs/mcp"
  },
  {
   "id": "cap-03",
   "group": "Issue tracking",
   "capability": "Break issues into parent/sub-issues",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "issueUpdate(parentId)",
    "mcp": "create_issue (parentId)",
    "cli": null,
    "ui": "Issue detail > Sub-issues"
   },
   "check": "GET issue.children returns the created sub-issue id",
   "source": "https://linear.app/docs/parent-and-sub-issues"
  },
  {
   "id": "cap-04",
   "group": "Issue tracking",
   "capability": "Link blocked/blocking/related/duplicate issue relations",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "mutation issueRelationCreate",
    "mcp": null,
    "cli": null,
    "ui": "Issue detail > Add relation"
   },
   "check": "GET issue.relations lists the new relation with type 'blocks'",
   "source": "https://linear.app/docs/issue-relations"
  },
  {
   "id": "cap-05",
   "group": "Project planning",
   "capability": "Create and run a project with milestones",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "mutation projectCreate / projectMilestoneCreate",
    "mcp": "create_project",
    "cli": null,
    "ui": "Team or workspace Projects view > +"
   },
   "check": "GET project by id (P-TEAM-123) shows name, status and milestone list",
   "source": "https://linear.app/docs/projects"
  },
  {
   "id": "cap-06",
   "group": "Project planning",
   "capability": "Group projects under an initiative",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "mutation initiativeCreate / initiativeToProjectCreate",
    "mcp": null,
    "cli": null,
    "ui": "Initiatives view > +"
   },
   "check": "GET initiative.projects includes the linked project id",
   "source": "https://linear.app/docs/initiatives"
  },
  {
   "id": "cap-07",
   "group": "Cycle planning",
   "capability": "Plan work into cycles (sprints)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "mutation issueUpdate(cycleId)",
    "mcp": null,
    "cli": null,
    "ui": "Team > Cycles"
   },
   "check": "GET issue.cycle.number matches the cycle the issue was added to",
   "source": "https://linear.app/build"
  },
  {
   "id": "cap-08",
   "group": "Triage",
   "capability": "Triage incoming issues into a dedicated inbox",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Team > Triage"
   },
   "check": "Issue created via integration appears in team Triage view before acceptance",
   "source": "https://linear.app/docs/triage"
  },
  {
   "id": "cap-09",
   "group": "AI / Agents",
   "capability": "Assign work to Linear Agent / third-party AI agents",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "mutation issueUpdate(assigneeId=agentId)",
    "mcp": null,
    "cli": null,
    "ui": "Issue > Assignee picker, or @Linear mention"
   },
   "check": "GET issue.assignee.isAgent is true and agent activity/comment appears on the issue",
   "source": "https://linear.app/ai; https://linear.app/developers/agents"
  },
  {
   "id": "cap-10",
   "group": "Link code",
   "capability": "Link GitHub pull requests/commits to issues and automate status",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "attachmentLinkGitHub (via integration)",
    "mcp": null,
    "cli": null,
    "ui": "GitHub PR description magic words, or issue attachment"
   },
   "check": "GET issue.attachments contains the PR url and issue.state changes to Done on merge",
   "source": "https://linear.app/docs/github"
  },
  {
   "id": "cap-11",
   "group": "Issue tracking",
   "capability": "Bulk-select and batch-edit issues",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Issue list > multi-select (Shift-click)"
   },
   "check": "All selected issues' status/label changes together, verified via list filter",
   "source": "https://linear.app/docs/select-issues"
  },
  {
   "id": "cap-12",
   "group": "Issue tracking",
   "capability": "Customize workflow statuses per team",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "mutation workflowStateCreate",
    "mcp": null,
    "cli": null,
    "ui": "Team Settings > Workflow"
   },
   "check": "GET team.states lists the newly created custom status",
   "source": "https://linear.app/docs/configuring-workflows"
  },
  {
   "id": "cap-13",
   "group": "Views & search",
   "capability": "Build and save custom filtered views",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "mutation customViewCreate",
    "mcp": null,
    "cli": null,
    "ui": "'+' new view icon on any issue/project list"
   },
   "check": "GET customView by id returns the saved filter definition and is listed in sidebar favorites",
   "source": "https://linear.app/docs/projects#attach-issue-views-to-projects"
  },
  {
   "id": "cap-14",
   "group": "Views & search",
   "capability": "Search workspace issues/projects/customers",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "query issueSearch",
    "mcp": "search_issues",
    "cli": null,
    "ui": "Cmd/Ctrl+K command menu"
   },
   "check": "Search query returns matching issue in result list",
   "source": "https://linear.app/docs/mcp"
  },
  {
   "id": "cap-15",
   "group": "Collaboration",
   "capability": "Comment and @mention on issues",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "mutation commentCreate",
    "mcp": "create_comment",
    "cli": null,
    "ui": "Issue detail > comment box"
   },
   "check": "GET issue.comments includes the new comment body",
   "source": "https://linear.app/docs/mcp"
  },
  {
   "id": "cap-16",
   "group": "Collaboration",
   "capability": "Write project/initiative documents",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "mutation documentCreate",
    "mcp": null,
    "cli": null,
    "ui": "Project overview > Documents"
   },
   "check": "GET project.documents lists the created document id",
   "source": "https://linear.app/docs/projects"
  },
  {
   "id": "cap-17",
   "group": "Collaboration",
   "capability": "Post and share project/initiative status updates",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "mutation projectUpdateCreate",
    "mcp": null,
    "cli": null,
    "ui": "Project page > Add update"
   },
   "check": "GET project.updates has the new update with health (on track/at risk/off track)",
   "source": "https://linear.app/docs/initiatives#initiative-health-and-projects"
  },
  {
   "id": "cap-18",
   "group": "Collaboration",
   "capability": "Subscribe to notifications for issues/views/teams",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "mutation notificationSubscriptionCreate",
    "mcp": null,
    "cli": null,
    "ui": "Bell icon on issue/view/team"
   },
   "check": "User's Inbox receives a notification entry when the subscribed item changes",
   "source": "https://linear.app/docs/notifications; https://linear.app/docs/customer-requests#notifications"
  },
  {
   "id": "cap-19",
   "group": "Collaboration",
   "capability": "Import issues from another tracker",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "linear import (packages/import CLI importer)",
    "ui": "Settings > Import"
   },
   "check": "Imported issues appear in the target team's issue list with original metadata preserved",
   "source": "https://linear.app/docs/import-issues; https://linear.app/developers"
  },
  {
   "id": "cap-20",
   "group": "Customer feedback",
   "capability": "Log customer requests and link them to issues/projects",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "mutation customerNeedCreate",
    "mcp": null,
    "cli": null,
    "ui": "Issue/project > Customers section, or Ctrl+R"
   },
   "check": "GET issue.customerNeeds lists the new request with source customer",
   "source": "https://linear.app/docs/customer-requests"
  },
  {
   "id": "cap-21",
   "group": "Customer feedback",
   "capability": "Manage customer records and attributes",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "mutation customerCreate",
    "mcp": null,
    "cli": null,
    "ui": "Customers page / Cmd+K > Create new customer"
   },
   "check": "GET customer by id shows name, domain, tier/revenue attributes",
   "source": "https://linear.app/docs/customer-requests"
  },
  {
   "id": "cap-22",
   "group": "Customer feedback",
   "capability": "Collect workplace requests via Linear Asks (Slack)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Slack /ask slash command"
   },
   "check": "Issue created from an Ask shows the originating Slack thread as a linked customer request",
   "source": "https://linear.app/asks; https://linear.app/docs/customer-requests#faq"
  },
  {
   "id": "cap-23",
   "group": "Analytics",
   "capability": "Build analytics charts (Insights) on issue data",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Any issue view > Insights panel (Cmd/Ctrl+Shift+I)"
   },
   "check": "Insights panel renders a bar/scatter graph for the current view's Measure/Slice selection",
   "source": "https://linear.app/docs/insights"
  },
  {
   "id": "cap-24",
   "group": "Analytics",
   "capability": "Export customer requests or insights data to CSV",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Cmd/Ctrl+K > Export customer requests as CSV; Insights > export"
   },
   "check": "Downloaded CSV file contains the exported rows matching the current filtered view",
   "source": "https://linear.app/docs/customer-requests#export-customer-requests; https://linear.app/docs/insights#share-insights"
  },
  {
   "id": "cap-25",
   "group": "Automation",
   "capability": "Create issues from Slack messages / mention @Linear to act",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Slack message > Connect to apps > Create new issue, or @Linear mention"
   },
   "check": "New issue appears in target Linear team with description quoting the Slack message",
   "source": "https://linear.app/docs/slack"
  },
  {
   "id": "cap-26",
   "group": "Automation",
   "capability": "Sync GitHub Issues two-way with a Linear team",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations > GitHub > GitHub Issues"
   },
   "check": "Issue created in the linked GitHub repo appears as a synced Linear issue with matching title/status",
   "source": "https://linear.app/docs/github#configure-github-issues-sync"
  },
  {
   "id": "cap-27",
   "group": "Automation",
   "capability": "Save and reuse agent prompts as Loops/skills",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Linear Agent chat > Save as skill"
   },
   "check": "Saved skill appears as a reusable slash command/chat entry that reproduces the prior action",
   "source": "https://linear.app/now/introducing-loops; https://linear.app/ai"
  },
  {
   "id": "cap-28",
   "group": "Mobile",
   "capability": "Create and manage issues from the mobile app",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "iOS/Android app"
   },
   "check": "Issue created on mobile is visible in the web app issue list immediately",
   "source": "https://linear.app/mobile"
  },
  {
   "id": "cap-29",
   "group": "Developer access",
   "capability": "Query/mutate workspace data via GraphQL API",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "https://api.linear.app/graphql",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "A GraphQL query against api.linear.app with a valid API key returns workspace JSON data",
   "source": "https://linear.app/developers/graphql"
  },
  {
   "id": "cap-31",
   "group": "Access control",
   "capability": "Create and manage teams (incl. private teams)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "mutation teamCreate",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Teams > +"
   },
   "check": "GET team by id shows the new team with its configured privacy setting",
   "source": "https://linear.app/docs/teams"
  },
  {
   "id": "cap-32",
   "group": "Access control",
   "capability": "Configure SAML/SCIM enterprise authentication",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Security & access > SAML"
   },
   "check": "SSO login via the configured IdP successfully provisions a workspace member",
   "source": "https://linear.app/pricing; https://linear.app/docs/saml-and-access-control"
  },
  {
   "id": "cap-33",
   "group": "Access control",
   "capability": "Set admin roles and granular admin controls",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Members"
   },
   "check": "Member's role field shows Admin and they gain access to workspace settings pages",
   "source": "https://linear.app/pricing"
  },
  {
   "id": "cap-34",
   "group": "Branding",
   "capability": "Customize branding/templates for issues",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "mutation templateCreate",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Templates"
   },
   "check": "GET team.templates includes the new template and it is selectable on issue creation",
   "source": "https://linear.app/docs/slack#use-templates"
  },
  {
   "id": "cap-35",
   "group": "Integrations",
   "capability": "Connect third-party integrations (Zendesk, Intercom, Front, Salesforce, Figma, etc.)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations"
   },
   "check": "Integration shows 'Connected' status and triggers a customer request/attachment on the linked event",
   "source": "https://linear.app/docs/customer-requests#integrations; https://linear.app/pricing"
  },
  {
   "id": "cap-36",
   "group": "Billing",
   "capability": "Upgrade plan / manage invoice-PO billing",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Billing"
   },
   "check": "Workspace plan field changes to the selected tier after checkout",
   "source": "https://linear.app/pricing"
  }
 ],
 "attempts": [
  {
   "t": "01:28",
   "cap": "docs",
   "capability": "Docs",
   "task": "Read llms.txt and key docs (.md)",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://linear.app/llms.txt 200 (8840 B, H1 \"# Linear\", docs+developers sections); docs pages as .md 200 text/markdown (mcp, graphql, rate-limiting, oauth, login-methods, billing-and-plans)",
   "notes": "docs_pass verdict complete"
  },
  {
   "t": "01:28",
   "cap": "discovery",
   "task": "MCP server/discover on https://mcp.linear.app/mcp (no credentials)",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "",
   "notes": "robots rule for all user agents; retried later with our own key as an account step",
   "capability": "Docs"
  },
  {
   "t": "01:29",
   "cap": "discovery",
   "task": "MCP server card <endpoint>/server-card",
   "route": "none",
   "documented": false,
   "result": "blocked",
   "verified": false,
   "evidence": "robots.txt mcp.linear.app Disallow: / for * -> https://mcp.linear.app/mcp/server-card not opened",
   "capability": "Docs"
  },
  {
   "t": "01:29",
   "cap": "discovery",
   "task": "Well-known cards: ai-catalog, agent-card, agent.json, mcp/server-card, ucp, oauth-authorization-server",
   "route": "none",
   "documented": false,
   "result": "failed",
   "verified": true,
   "evidence": "all 404 text/html on linear.app; /auth.md and /SKILL.md 200 text/html 31465 B = SPA soft page, not markdown",
   "notes": "no A2A card, no AI catalog, no UCP",
   "capability": "Docs"
  },
  {
   "t": "01:29",
   "cap": "discovery",
   "task": "Markdown docs: Accept text/markdown and .md URL",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /docs/start-guide with Accept: text/markdown -> 200 content-type text/markdown (Vary lacks Accept); /docs/*.md -> 200 text/markdown",
   "notes": "markdown=both; Vary: Accept missing",
   "capability": "Docs"
  },
  {
   "t": "01:29",
   "cap": "discovery",
   "task": "robots.txt Content-Usage / Content-signal and header",
   "route": "none",
   "documented": false,
   "result": "done",
   "verified": true,
   "evidence": "linear.app robots: \"User-Agent: * Disallow: /api/ Disallow: /cdn-cgi/ Allow: /api/og/\" no Content-Usage or Content-signal line; api.linear.app robots: \"User-agent: * Disallow: /\"; mcp.linear.app: \"User-agent: * Allow: /$ Disallow: /\"; no Content-Usage header seen",
   "capability": "Docs"
  },
  {
   "t": "01:48",
   "cap": "pay",
   "task": "Public pay probes: 402s, registries, well-known, pricing",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pay_probe.json: no 402 challenges, no MPP/Stripe Projects/Bazaar listing, no /.well-known/ucp (404 here too); pay_tx.json: refused, no 402 on product endpoint. Pricing page: Free $0 (2 teams, 250 issues), Basic $10 per user/month billed yearly, Business $16, Enterprise contact sales. Billing docs: change/cancel at Settings > Administration > Billing.",
   "notes": "no agent rail; card checkout in app (to walk once in)",
   "capability": "Pay"
  },
  {
   "t": "05:30",
   "cap": "signup",
   "way": "email_code",
   "task": "Sign up with email (link or code) at https://linear.app/signup",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Continue with email -> email entered -> page \"Verifying it’s you\" with a visible Cloudflare Turnstile widget \"Verify you are human\" (challenges.cloudflare.com turnstile sitekey 0x4AAAAAACK1Fs1RDiAS6z91; pat 401); stayed there 25 s, no mail sent (inbox empty after 30 s)",
   "notes": "visible Turnstile checkbox after email submit; not solved by us.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   },
   "capability": "Sign up"
  },
  {
   "t": "06:45",
   "cap": "signup",
   "way": "keyless",
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "route": "none",
   "documented": false,
   "notes": "not offered: no keyless route: api.linear.app/graphql needs an API key or OAuth token (developers/graphql.md); robots.txt Disallow: / for * on api.linear.app",
   "capability": "Sign up",
   "evidence": "not offered: no keyless route: api.linear.app/graphql needs an API key or OAuth token (developers/graphql.md); robots.txt Disallow: / for * on api.linear.app"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "local",
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "route": "none",
   "documented": false,
   "notes": "not offered: no local edition or CLI documented",
   "capability": "Sign up",
   "evidence": "not offered: no local edition or CLI documented"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "claimable",
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "route": "none",
   "documented": false,
   "notes": "not offered: no claimable resource documented",
   "capability": "Sign up",
   "evidence": "not offered: no claimable resource documented"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "pay_per_call",
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "route": "none",
   "documented": false,
   "notes": "not offered: pay_probe.json: no 402 challenge; pay_tx.json refused (nothing to pay)",
   "capability": "Sign up",
   "evidence": "not offered: pay_probe.json: no 402 challenge; pay_tx.json refused (nothing to pay)"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "api_signup",
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "route": "none",
   "documented": false,
   "notes": "not offered: no sign-up API documented; public schema has no account-creation mutation",
   "capability": "Sign up",
   "evidence": "not offered: no sign-up API documented; public schema has no account-creation mutation"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "authmd",
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "route": "none",
   "documented": false,
   "notes": "not offered: /auth.md is an HTML soft page (200 text/html), /.well-known/oauth-authorization-server 404",
   "capability": "Sign up",
   "evidence": "not offered: /auth.md is an HTML soft page (200 text/html), /.well-known/oauth-authorization-server 404"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "sso_agent",
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "route": "none",
   "documented": false,
   "notes": "not offered: no Sign in with AgentID on /signup or /login",
   "capability": "Sign up",
   "evidence": "not offered: no Sign in with AgentID on /signup or /login"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "magic_link",
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "route": "browser",
   "documented": true,
   "notes": "same form as email_code: docs/login-methods.md \"an email will be sent to your inbox containing a login link ... or copy the code\"; that form stopped at the Turnstile before any mail",
   "capability": "Sign up",
   "evidence": "same form as email_code: docs/login-methods.md \"an email will be sent to your inbox containing a login link ... or copy the code\"; that form stopped at the Turnstile before any mail"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "sso_google",
   "result": "skipped",
   "not_tried": "no_kit",
   "verified": false,
   "route": "browser",
   "documented": true,
   "notes": "offered (Continue with Google, docs/login-methods.md); pw sso google: this drive has no Google account",
   "capability": "Sign up",
   "evidence": "offered (Continue with Google, docs/login-methods.md); pw sso google: this drive has no Google account"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "stripe_projects",
   "result": "skipped",
   "not_tried": "no_kit",
   "verified": false,
   "route": "none",
   "documented": false,
   "notes": "not listed in the Stripe Projects catalog (pay_probe.json)",
   "capability": "Sign up",
   "evidence": "not listed in the Stripe Projects catalog (pay_probe.json)"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "device_login",
   "result": "skipped",
   "not_tried": "same_as",
   "verified": false,
   "route": "none",
   "documented": false,
   "notes": "no CLI with a login command; OAuth AS metadata not found; needs an account anyway",
   "capability": "Sign up",
   "evidence": "no CLI with a login command; OAuth AS metadata not found; needs an account anyway"
  },
  {
   "t": "06:46",
   "cap": "signup",
   "way": "oauth_consent",
   "result": "blocked",
   "verified": false,
   "route": "mcp",
   "documented": true,
   "notes": "MCP OAuth 2.1 with DCR (docs/mcp.md) needs a Linear account to consent; no account (sign-up stopped at Turnstile)",
   "capability": "Sign up",
   "evidence": "MCP OAuth 2.1 with DCR (docs/mcp.md) needs a Linear account to consent; no account (sign-up stopped at Turnstile)"
  },
  {
   "t": "06:47",
   "cap": "signup",
   "way": "sso_enterprise",
   "result": "skipped",
   "not_tried": "assisted_only",
   "verified": false,
   "route": "none",
   "documented": true,
   "notes": "SAML: \"Available to workspaces on our Enterprise plan\" (docs/saml-and-access-control.md); needs an existing workspace and an IdP set up by a person",
   "capability": "Sign up",
   "evidence": "SAML: \"Available to workspaces on our Enterprise plan\" (docs/saml-and-access-control.md); needs an existing workspace and an IdP set up by a person"
  },
  {
   "t": "06:47",
   "cap": "signup",
   "way": "enterprise",
   "result": "skipped",
   "not_tried": "assisted_only",
   "verified": false,
   "route": "none",
   "documented": true,
   "notes": "SCIM provisioning: \"Available to workspaces on our Enterprise plan\" (docs/scim.md); a person must set it up",
   "capability": "Sign up",
   "evidence": "SCIM provisioning: \"Available to workspaces on our Enterprise plan\" (docs/scim.md); a person must set it up"
  },
  {
   "t": "06:47",
   "cap": "verify",
   "way": "email_code",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no login mail sent; the Turnstile stops the email form first; wall: visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup.",
   "capability": "Verify",
   "evidence": "not reached: no login mail sent; the Turnstile stops the email form first; wall: visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup."
  },
  {
   "t": "06:47",
   "cap": "credentials",
   "way": "email_code",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: API keys are created at Settings > Account > Security & Access (developers/graphql.md) after login; wall: visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup.",
   "capability": "Key",
   "evidence": "not reached: API keys are created at Settings > Account > Security & Access (developers/graphql.md) after login; wall: visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup."
  },
  {
   "t": "06:47",
   "cap": "first_call",
   "way": "email_code",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: api.linear.app/graphql needs a key; wall: visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup.",
   "capability": "First call",
   "evidence": "not reached: api.linear.app/graphql needs a key; wall: visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup."
  },
  {
   "t": "06:47",
   "cap": "first_action",
   "way": "email_code",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; wall: visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup.",
   "capability": "First action",
   "evidence": "not reached: no account; wall: visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup."
  },
  {
   "t": "06:48",
   "cap": "credentials",
   "way": "email_code",
   "key": "create",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "no headless key route: public GraphQL schema (schema.graphql linked from llms.txt) has no apiKeyCreate/apiKeyDelete mutation; keys only in the web settings page; and no account to reach it",
   "capability": "Key",
   "evidence": "no headless key route: public GraphQL schema (schema.graphql linked from llms.txt) has no apiKeyCreate/apiKeyDelete mutation; keys only in the web settings page; and no account to reach it"
  },
  {
   "t": "07:03",
   "cap": "cap-01",
   "capability": "Create an issue",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation issueCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:03",
   "kind": "claim",
   "cap": "cap-01",
   "surface": "api",
   "claim": "mutation issueCreate",
   "doc_url": "https://linear.app/docs/mcp; https://studio.apollographql.com/public/Linear-API",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Create an issue",
   "task": "mutation issueCreate",
   "route": "api",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:03",
   "kind": "claim",
   "cap": "cap-01",
   "surface": "mcp",
   "claim": "create_issue",
   "doc_url": "https://linear.app/docs/mcp; https://studio.apollographql.com/public/Linear-API",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Create an issue",
   "task": "create_issue",
   "route": "mcp",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:03",
   "cap": "cap-02",
   "capability": "Update an issue (status, assignee, priority, labels, estimate)",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation issueUpdate; mutation present in public schema.graphql"
  },
  {
   "t": "07:03",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "api",
   "claim": "mutation issueUpdate",
   "doc_url": "https://linear.app/docs/configuring-workflows; https://linear.app/docs/mcp",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Update an issue (status, assignee, priority, labels, estimate)",
   "task": "mutation issueUpdate",
   "route": "api",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:03",
   "kind": "claim",
   "cap": "cap-02",
   "surface": "mcp",
   "claim": "update_issue",
   "doc_url": "https://linear.app/docs/configuring-workflows; https://linear.app/docs/mcp",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Update an issue (status, assignee, priority, labels, estimate)",
   "task": "update_issue",
   "route": "mcp",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:03",
   "cap": "cap-03",
   "capability": "Break issues into parent/sub-issues",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: issueUpdate(parentId); mutation present in public schema.graphql"
  },
  {
   "t": "07:03",
   "kind": "claim",
   "cap": "cap-03",
   "surface": "api",
   "claim": "issueUpdate(parentId)",
   "doc_url": "https://linear.app/docs/parent-and-sub-issues",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Break issues into parent/sub-issues",
   "task": "issueUpdate(parentId)",
   "route": "api",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:04",
   "kind": "claim",
   "cap": "cap-03",
   "surface": "mcp",
   "claim": "create_issue (parentId)",
   "doc_url": "https://linear.app/docs/parent-and-sub-issues",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Break issues into parent/sub-issues",
   "task": "create_issue (parentId)",
   "route": "mcp",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:04",
   "cap": "cap-04",
   "capability": "Link blocked/blocking/related/duplicate issue relations",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation issueRelationCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:04",
   "kind": "claim",
   "cap": "cap-04",
   "surface": "api",
   "claim": "mutation issueRelationCreate",
   "doc_url": "https://linear.app/docs/issue-relations",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Link blocked/blocking/related/duplicate issue relations",
   "task": "mutation issueRelationCreate",
   "route": "api",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:04",
   "cap": "cap-05",
   "capability": "Create and run a project with milestones",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation projectCreate / projectMilestoneCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:04",
   "kind": "claim",
   "cap": "cap-05",
   "surface": "api",
   "claim": "mutation projectCreate / projectMilestoneCreate",
   "doc_url": "https://linear.app/docs/projects",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Create and run a project with milestones",
   "task": "mutation projectCreate / projectMilestoneCreate",
   "route": "api",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:04",
   "kind": "claim",
   "cap": "cap-05",
   "surface": "mcp",
   "claim": "create_project",
   "doc_url": "https://linear.app/docs/projects",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Create and run a project with milestones",
   "task": "create_project",
   "route": "mcp",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:04",
   "cap": "cap-06",
   "capability": "Group projects under an initiative",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation initiativeCreate / initiativeToProjectCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:04",
   "kind": "claim",
   "cap": "cap-06",
   "surface": "api",
   "claim": "mutation initiativeCreate / initiativeToProjectCreate",
   "doc_url": "https://linear.app/docs/initiatives",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Group projects under an initiative",
   "task": "mutation initiativeCreate / initiativeToProjectCreate",
   "route": "api",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:04",
   "cap": "cap-07",
   "capability": "Plan work into cycles (sprints)",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation issueUpdate(cycleId); mutation present in public schema.graphql"
  },
  {
   "t": "07:04",
   "kind": "claim",
   "cap": "cap-07",
   "surface": "api",
   "claim": "mutation issueUpdate(cycleId)",
   "doc_url": "https://linear.app/build",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Plan work into cycles (sprints)",
   "task": "mutation issueUpdate(cycleId)",
   "route": "api",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:04",
   "cap": "cap-08",
   "capability": "Triage incoming issues into a dedicated inbox",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: Team > Triage"
  },
  {
   "t": "07:04",
   "cap": "cap-09",
   "capability": "Assign work to Linear Agent / third-party AI agents",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation issueUpdate(assigneeId=agentId); mutation present in public schema.graphql"
  },
  {
   "t": "07:05",
   "kind": "claim",
   "cap": "cap-09",
   "surface": "api",
   "claim": "mutation issueUpdate(assigneeId=agentId)",
   "doc_url": "https://linear.app/ai; https://linear.app/developers/agents",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Assign work to Linear Agent / third-party AI agents",
   "task": "mutation issueUpdate(assigneeId=agentId)",
   "route": "api",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:05",
   "cap": "cap-10",
   "capability": "Link GitHub pull requests/commits to issues and automate status",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: attachmentLinkGitHub (via integration); mutation present in public schema.graphql"
  },
  {
   "t": "07:05",
   "kind": "claim",
   "cap": "cap-10",
   "surface": "api",
   "claim": "attachmentLinkGitHub (via integration)",
   "doc_url": "https://linear.app/docs/github",
   "result": "blocked",
   "verified": false,
   "documented": true,
   "notes": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account",
   "capability": "Docs claim: Link GitHub pull requests/commits to issues and automate status",
   "task": "attachmentLinkGitHub (via integration)",
   "route": "api",
   "evidence": "not reached: needs an account (Turnstile on sign-up); robots.txt on api.linear.app and mcp.linear.app disallows / for * without an account"
  },
  {
   "t": "07:05",
   "cap": "cap-11",
   "capability": "Bulk-select and batch-edit issues",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: Issue list > multi-select (Shift-click)"
  },
  {
   "t": "07:05",
   "cap": "cap-12",
   "capability": "Customize workflow statuses per team",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation workflowStateCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:05",
   "cap": "cap-13",
   "capability": "Build and save custom filtered views",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation customViewCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:06",
   "cap": "cap-14",
   "capability": "Search workspace issues/projects/customers",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: query issueSearch; mutation present in public schema.graphql"
  },
  {
   "t": "07:06",
   "cap": "cap-15",
   "capability": "Comment and @mention on issues",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation commentCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:06",
   "cap": "cap-16",
   "capability": "Write project/initiative documents",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation documentCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:06",
   "cap": "cap-17",
   "capability": "Post and share project/initiative status updates",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation projectUpdateCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:06",
   "cap": "cap-18",
   "capability": "Subscribe to notifications for issues/views/teams",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation notificationSubscriptionCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:06",
   "cap": "cap-19",
   "capability": "Import issues from another tracker",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: Settings > Import"
  },
  {
   "t": "07:06",
   "cap": "cap-20",
   "capability": "Log customer requests and link them to issues/projects",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation customerNeedCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:06",
   "cap": "cap-21",
   "capability": "Manage customer records and attributes",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: mutation customerCreate; mutation present in public schema.graphql"
  },
  {
   "t": "07:06",
   "cap": "cap-22",
   "capability": "Collect workplace requests via Linear Asks (Slack)",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: Slack /ask slash command"
  },
  {
   "t": "07:06",
   "cap": "cap-23",
   "capability": "Build analytics charts (Insights) on issue data",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: Any issue view > Insights panel (Cmd/Ctrl+Shift+I)"
  },
  {
   "t": "07:06",
   "cap": "cap-24",
   "capability": "Export customer requests or insights data to CSV",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: Cmd/Ctrl+K > Export customer requests as CSV; Insights > export"
  },
  {
   "t": "07:06",
   "cap": "cap-25",
   "capability": "Create issues from Slack messages / mention @Linear to act",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: Slack message > Connect to apps > Create new issue, or @Linear mention"
  },
  {
   "t": "07:06",
   "cap": "cap-26",
   "capability": "Sync GitHub Issues two-way with a Linear team",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: Settings > Integrations > GitHub > GitHub Issues"
  },
  {
   "t": "07:07",
   "cap": "cap-27",
   "capability": "Save and reuse agent prompts as Loops/skills",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: Linear Agent chat > Save as skill"
  },
  {
   "t": "07:07",
   "cap": "cap-28",
   "capability": "Create and manage issues from the mobile app",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: iOS/Android app"
  },
  {
   "t": "07:07",
   "cap": "cap-29",
   "capability": "Query/mutate workspace data via GraphQL API",
   "way": "email_code",
   "task": "Do it on our own workspace",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "not reached: no account; sign-up stopped at visible Cloudflare Turnstile \"Verify you are human\" after email submit on /signup. Map surface: https://api.linear.app/graphql"
  },
  {
   "t": "07:07",
   "cap": "cap-31",
   "capability": "Create and manage teams (incl. private teams)",
   "way": "email_code",
   "task": "Check it exists and is documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://linear.app/docs/teams.md 200 text/markdown",
   "notes": "docs check only (no account to call it): Teams page documents team creation and plan team limits; public schema has teamCreate mutation",
   "docs_url": "https://linear.app/docs/teams.md"
  },
  {
   "t": "07:07",
   "cap": "cap-32",
   "capability": "Configure SAML/SCIM enterprise authentication",
   "way": "email_code",
   "task": "Check it exists and is documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://linear.app/docs/saml-and-access-control.md 200 text/markdown",
   "notes": "docs check only (no account to call it): SAML documented: \"Available to workspaces on our Enterprise plan\"; SCIM docs/scim.md same",
   "docs_url": "https://linear.app/docs/saml-and-access-control.md"
  },
  {
   "t": "07:07",
   "cap": "cap-33",
   "capability": "Set admin roles and granular admin controls",
   "way": "email_code",
   "task": "Check it exists and is documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://linear.app/docs/members-roles.md 200 text/markdown",
   "notes": "docs check only (no account to call it): Roles documented; \"on Free plans, all users are Admins\"",
   "docs_url": "https://linear.app/docs/members-roles.md"
  },
  {
   "t": "07:07",
   "cap": "cap-34",
   "capability": "Customize branding/templates for issues",
   "way": "email_code",
   "task": "Check it exists and is documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://linear.app/docs/issue-templates.md 200 text/markdown",
   "notes": "docs check only (no account to call it): Issue templates documented; public schema has templateCreate",
   "docs_url": "https://linear.app/docs/issue-templates.md"
  },
  {
   "t": "07:07",
   "cap": "cap-35",
   "capability": "Connect third-party integrations (Zendesk, Intercom, Front, Salesforce, Figma, etc.)",
   "way": "email_code",
   "task": "Check it exists and is documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://linear.app/docs/integration-directory.md 200 text/markdown",
   "notes": "docs check only (no account to call it): Integration Directory documented; Zendesk/Intercom on Business per pricing page",
   "docs_url": "https://linear.app/docs/integration-directory.md"
  },
  {
   "t": "07:07",
   "cap": "cap-36",
   "capability": "Upgrade plan / manage invoice-PO billing",
   "way": "email_code",
   "task": "Check it exists and is documented",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://linear.app/docs/billing-and-plans.md 200 text/markdown",
   "notes": "docs check only (no account to call it): Billing: \"Navigate to Settings > Administration > Billing ... View and change your plan\"; Enterprise annual only; no billing API in public schema",
   "docs_url": "https://linear.app/docs/billing-and-plans.md"
  },
  {
   "t": "07:07",
   "cap": "pay",
   "step": "checkout",
   "way": "email_code",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "notes": "no checkout walk: the plan change lives at Settings > Administration > Billing inside the app (docs/billing-and-plans.md), behind the sign-up wall; pricing page Basic $10 per user/month billed yearly, \"Get started\" leads to sign-up",
   "capability": "Pay",
   "evidence": "no checkout walk: the plan change lives at Settings > Administration > Billing inside the app (docs/billing-and-plans.md), behind the sign-up wall; pricing page Basic $10 per user/month billed yearly, \"Get started\" leads to sign-up"
  },
  {
   "t": "07:07",
   "cap": "cancel",
   "way": "email_code",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "notes": "nothing started; docs: \"Workspace admins can change or cancel a subscription from Settings > Administration > Billing ... take effect at the end of the subscription period\" (web UI only)",
   "capability": "Cancel",
   "evidence": "nothing started; docs: \"Workspace admins can change or cancel a subscription from Settings > Administration > Billing ... take effect at the end of the subscription period\" (web UI only)"
  },
  {
   "t": "07:07",
   "cap": "delete",
   "way": "email_code",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "notes": "no account was created (sign-up stopped before any mail); nothing to delete. Docs/schema: organizationDeleteChallenge + organizationDelete(deletionCode) mutations exist in the public schema (code mailed to the user)",
   "capability": "Delete",
   "evidence": "no account was created (sign-up stopped before any mail); nothing to delete. Docs/schema: organizationDeleteChallenge + organizationDelete(deletionCode) mutations exist in the public schema (code mailed to the user)"
  }
 ],
 "stale": false,
 "icon": "/logos/linear.png",
 "monitored": false,
 "verdict": null,
 "page": "https://agentdrives.com/tools/linear?via=api"
}