[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-linear-linear-triage-poller":3,"mdc--3hzdlf-key":34,"related-repo-linear-linear-triage-poller":529,"related-org-linear-linear-triage-poller":584},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"linear-triage-poller","poll Linear triage queue for new issues","Poll the Linear triage queue every 15 minutes for issues labeled \"Claude Code\" and delegate each one to \u002Flinear-issue-worker. Intended to be triggered by the RemoteTrigger registered via \u002Flinear-triage-setup. Can also be run manually to trigger immediately.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"linear","Linear","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Flinear.png",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Monitoring","monitoring",{"name":18,"slug":19,"type":13},"Automation","automation",{"name":21,"slug":22,"type":13},"Triage","triage",15,"https:\u002F\u002Fgithub.com\u002Flinear\u002Flinear-solutions","2026-08-02T06:09:11.830055",null,11,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Ready-made, agile solutions from the Linear team.","https:\u002F\u002Fgithub.com\u002Flinear\u002Flinear-solutions\u002Ftree\u002FHEAD\u002FSkills\u002Ftriage-plugin\u002Fskills\u002Flinear-triage-poller","---\nname: linear-triage-poller\ndescription: Poll the Linear triage queue every 15 minutes for issues labeled \"Claude Code\" and delegate each one to \u002Flinear-issue-worker. Intended to be triggered by the RemoteTrigger registered via \u002Flinear-triage-setup. Can also be run manually to trigger immediately.\n---\n\nYou are the Linear triage poller. Your job is to find eligible issues and hand them off to worker agents. Be fast and methodical — this runs on a 15-minute heartbeat.\n\n## Step 1 — Load config\n\nRead `~\u002F.claude\u002Flinear-triage-config.json`. Extract:\n- `label` (default: `\"Claude Code\"`)\n- `team` (default: null — means all teams)\n- `maxConcurrentIssues` (default: 3)\n- `statusMap.inProgress` (default: `\"In Progress\"`)\n- `repoUrl` (remote repo URL — passed to worker)\n- `repo` (local repo path — passed to worker)\n\nIf the config file is missing, stop and tell the user to run `\u002Flinear-triage-setup` first.\n\n## Step 2 — Query the triage queue\n\nCall `mcp__claude_ai_Linear__list_issues` with:\n- `state`: `\"Triage\"`\n- `label`: value of `label` from config\n- `team`: value of `team` from config (omit if null)\n- `limit`: value of `maxConcurrentIssues`\n- `orderBy`: `\"createdAt\"`\n\nIf zero issues returned: log \"No eligible triage issues found.\" and stop cleanly.\n\n## Step 3 — Process each issue\n\nFor each issue returned, in order of priority (1=Urgent first, then 2=High, 3=Normal, 4=Low):\n\n### 3a. Claim the issue (prevent double-pickup)\nCall `mcp__claude_ai_Linear__save_issue` with:\n- `id`: the issue identifier (e.g., `\"ABC-123\"`)\n- `state`: value of `statusMap.inProgress` from config\n\n### 3b. Post intake comment\nCall `mcp__claude_ai_Linear__save_comment` with:\n- `issueId`: the issue identifier\n- `body`:\n```\n🤖 **Claude Code** — Picked Up\n\nThis issue has been pulled from the triage queue and delegated to Claude Code for implementation. Work is starting now.\n\n_Priority: [issue priority] · Team: [issue team]_\n```\n\n### 3c. Spawn the worker\nUse the Agent tool to spawn a new agent with:\n- `subagent_type`: `\"general-purpose\"`\n- `description`: `\"Linear issue worker: [issue id] — [issue title]\"`\n- `prompt`: `\"Run the \u002Flinear-issue-worker skill for Linear issue [issue identifier]. The issue is: [title]. Full context: [description first 500 chars]. Local repo path: [repo from config]. Remote repo URL: [repoUrl from config]. Git branch name: [gitBranchName from the issue]. Use the local repo path for all git operations — clone from the remote URL first if the local path does not exist.\"`\n\nSpawn all workers in a single parallel message if there are multiple issues.\n\n## Step 4 — Log summary\n\nAfter spawning all workers, output:\n```\nLinear Triage Poller — [timestamp]\nIssues picked up: [N]\n[list each: ISSUE-ID — title — priority]\n```\n\n## Error handling\n\n- If `save_issue` fails for an issue (e.g., state not found): skip it, log the error, continue to next issue. Do NOT spawn a worker for an issue that wasn't successfully claimed.\n- If a worker spawn fails: post a comment on the issue: \"⚠️ **Claude Code** — Worker spawn failed. Issue returned to triage queue.\" Then call `save_issue` to set state back to `\"Triage\"`.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,47,54,68,153,166,172,185,269,274,280,285,292,303,339,345,356,381,393,399,404,455,460,466,471,480,486],{"type":40,"tag":41,"props":42,"children":43},"element","p",{},[44],{"type":45,"value":46},"text","You are the Linear triage poller. Your job is to find eligible issues and hand them off to worker agents. Be fast and methodical — this runs on a 15-minute heartbeat.",{"type":40,"tag":48,"props":49,"children":51},"h2",{"id":50},"step-1-load-config",[52],{"type":45,"value":53},"Step 1 — Load config",{"type":40,"tag":41,"props":55,"children":56},{},[57,59,66],{"type":45,"value":58},"Read ",{"type":40,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":45,"value":65},"~\u002F.claude\u002Flinear-triage-config.json",{"type":45,"value":67},". Extract:",{"type":40,"tag":69,"props":70,"children":71},"ul",{},[72,92,103,114,131,142],{"type":40,"tag":73,"props":74,"children":75},"li",{},[76,82,84,90],{"type":40,"tag":60,"props":77,"children":79},{"className":78},[],[80],{"type":45,"value":81},"label",{"type":45,"value":83}," (default: ",{"type":40,"tag":60,"props":85,"children":87},{"className":86},[],[88],{"type":45,"value":89},"\"Claude Code\"",{"type":45,"value":91},")",{"type":40,"tag":73,"props":93,"children":94},{},[95,101],{"type":40,"tag":60,"props":96,"children":98},{"className":97},[],[99],{"type":45,"value":100},"team",{"type":45,"value":102}," (default: null — means all teams)",{"type":40,"tag":73,"props":104,"children":105},{},[106,112],{"type":40,"tag":60,"props":107,"children":109},{"className":108},[],[110],{"type":45,"value":111},"maxConcurrentIssues",{"type":45,"value":113}," (default: 3)",{"type":40,"tag":73,"props":115,"children":116},{},[117,123,124,130],{"type":40,"tag":60,"props":118,"children":120},{"className":119},[],[121],{"type":45,"value":122},"statusMap.inProgress",{"type":45,"value":83},{"type":40,"tag":60,"props":125,"children":127},{"className":126},[],[128],{"type":45,"value":129},"\"In Progress\"",{"type":45,"value":91},{"type":40,"tag":73,"props":132,"children":133},{},[134,140],{"type":40,"tag":60,"props":135,"children":137},{"className":136},[],[138],{"type":45,"value":139},"repoUrl",{"type":45,"value":141}," (remote repo URL — passed to worker)",{"type":40,"tag":73,"props":143,"children":144},{},[145,151],{"type":40,"tag":60,"props":146,"children":148},{"className":147},[],[149],{"type":45,"value":150},"repo",{"type":45,"value":152}," (local repo path — passed to worker)",{"type":40,"tag":41,"props":154,"children":155},{},[156,158,164],{"type":45,"value":157},"If the config file is missing, stop and tell the user to run ",{"type":40,"tag":60,"props":159,"children":161},{"className":160},[],[162],{"type":45,"value":163},"\u002Flinear-triage-setup",{"type":45,"value":165}," first.",{"type":40,"tag":48,"props":167,"children":169},{"id":168},"step-2-query-the-triage-queue",[170],{"type":45,"value":171},"Step 2 — Query the triage queue",{"type":40,"tag":41,"props":173,"children":174},{},[175,177,183],{"type":45,"value":176},"Call ",{"type":40,"tag":60,"props":178,"children":180},{"className":179},[],[181],{"type":45,"value":182},"mcp__claude_ai_Linear__list_issues",{"type":45,"value":184}," with:",{"type":40,"tag":69,"props":186,"children":187},{},[188,205,222,238,253],{"type":40,"tag":73,"props":189,"children":190},{},[191,197,199],{"type":40,"tag":60,"props":192,"children":194},{"className":193},[],[195],{"type":45,"value":196},"state",{"type":45,"value":198},": ",{"type":40,"tag":60,"props":200,"children":202},{"className":201},[],[203],{"type":45,"value":204},"\"Triage\"",{"type":40,"tag":73,"props":206,"children":207},{},[208,213,215,220],{"type":40,"tag":60,"props":209,"children":211},{"className":210},[],[212],{"type":45,"value":81},{"type":45,"value":214},": value of ",{"type":40,"tag":60,"props":216,"children":218},{"className":217},[],[219],{"type":45,"value":81},{"type":45,"value":221}," from config",{"type":40,"tag":73,"props":223,"children":224},{},[225,230,231,236],{"type":40,"tag":60,"props":226,"children":228},{"className":227},[],[229],{"type":45,"value":100},{"type":45,"value":214},{"type":40,"tag":60,"props":232,"children":234},{"className":233},[],[235],{"type":45,"value":100},{"type":45,"value":237}," from config (omit if null)",{"type":40,"tag":73,"props":239,"children":240},{},[241,247,248],{"type":40,"tag":60,"props":242,"children":244},{"className":243},[],[245],{"type":45,"value":246},"limit",{"type":45,"value":214},{"type":40,"tag":60,"props":249,"children":251},{"className":250},[],[252],{"type":45,"value":111},{"type":40,"tag":73,"props":254,"children":255},{},[256,262,263],{"type":40,"tag":60,"props":257,"children":259},{"className":258},[],[260],{"type":45,"value":261},"orderBy",{"type":45,"value":198},{"type":40,"tag":60,"props":264,"children":266},{"className":265},[],[267],{"type":45,"value":268},"\"createdAt\"",{"type":40,"tag":41,"props":270,"children":271},{},[272],{"type":45,"value":273},"If zero issues returned: log \"No eligible triage issues found.\" and stop cleanly.",{"type":40,"tag":48,"props":275,"children":277},{"id":276},"step-3-process-each-issue",[278],{"type":45,"value":279},"Step 3 — Process each issue",{"type":40,"tag":41,"props":281,"children":282},{},[283],{"type":45,"value":284},"For each issue returned, in order of priority (1=Urgent first, then 2=High, 3=Normal, 4=Low):",{"type":40,"tag":286,"props":287,"children":289},"h3",{"id":288},"_3a-claim-the-issue-prevent-double-pickup",[290],{"type":45,"value":291},"3a. Claim the issue (prevent double-pickup)",{"type":40,"tag":41,"props":293,"children":294},{},[295,296,302],{"type":45,"value":176},{"type":40,"tag":60,"props":297,"children":299},{"className":298},[],[300],{"type":45,"value":301},"mcp__claude_ai_Linear__save_issue",{"type":45,"value":184},{"type":40,"tag":69,"props":304,"children":305},{},[306,324],{"type":40,"tag":73,"props":307,"children":308},{},[309,315,317,323],{"type":40,"tag":60,"props":310,"children":312},{"className":311},[],[313],{"type":45,"value":314},"id",{"type":45,"value":316},": the issue identifier (e.g., ",{"type":40,"tag":60,"props":318,"children":320},{"className":319},[],[321],{"type":45,"value":322},"\"ABC-123\"",{"type":45,"value":91},{"type":40,"tag":73,"props":325,"children":326},{},[327,332,333,338],{"type":40,"tag":60,"props":328,"children":330},{"className":329},[],[331],{"type":45,"value":196},{"type":45,"value":214},{"type":40,"tag":60,"props":334,"children":336},{"className":335},[],[337],{"type":45,"value":122},{"type":45,"value":221},{"type":40,"tag":286,"props":340,"children":342},{"id":341},"_3b-post-intake-comment",[343],{"type":45,"value":344},"3b. Post intake comment",{"type":40,"tag":41,"props":346,"children":347},{},[348,349,355],{"type":45,"value":176},{"type":40,"tag":60,"props":350,"children":352},{"className":351},[],[353],{"type":45,"value":354},"mcp__claude_ai_Linear__save_comment",{"type":45,"value":184},{"type":40,"tag":69,"props":357,"children":358},{},[359,370],{"type":40,"tag":73,"props":360,"children":361},{},[362,368],{"type":40,"tag":60,"props":363,"children":365},{"className":364},[],[366],{"type":45,"value":367},"issueId",{"type":45,"value":369},": the issue identifier",{"type":40,"tag":73,"props":371,"children":372},{},[373,379],{"type":40,"tag":60,"props":374,"children":376},{"className":375},[],[377],{"type":45,"value":378},"body",{"type":45,"value":380},":",{"type":40,"tag":382,"props":383,"children":387},"pre",{"className":384,"code":386,"language":45},[385],"language-text","🤖 **Claude Code** — Picked Up\n\nThis issue has been pulled from the triage queue and delegated to Claude Code for implementation. Work is starting now.\n\n_Priority: [issue priority] · Team: [issue team]_\n",[388],{"type":40,"tag":60,"props":389,"children":391},{"__ignoreMap":390},"",[392],{"type":45,"value":386},{"type":40,"tag":286,"props":394,"children":396},{"id":395},"_3c-spawn-the-worker",[397],{"type":45,"value":398},"3c. Spawn the worker",{"type":40,"tag":41,"props":400,"children":401},{},[402],{"type":45,"value":403},"Use the Agent tool to spawn a new agent with:",{"type":40,"tag":69,"props":405,"children":406},{},[407,423,439],{"type":40,"tag":73,"props":408,"children":409},{},[410,416,417],{"type":40,"tag":60,"props":411,"children":413},{"className":412},[],[414],{"type":45,"value":415},"subagent_type",{"type":45,"value":198},{"type":40,"tag":60,"props":418,"children":420},{"className":419},[],[421],{"type":45,"value":422},"\"general-purpose\"",{"type":40,"tag":73,"props":424,"children":425},{},[426,432,433],{"type":40,"tag":60,"props":427,"children":429},{"className":428},[],[430],{"type":45,"value":431},"description",{"type":45,"value":198},{"type":40,"tag":60,"props":434,"children":436},{"className":435},[],[437],{"type":45,"value":438},"\"Linear issue worker: [issue id] — [issue title]\"",{"type":40,"tag":73,"props":440,"children":441},{},[442,448,449],{"type":40,"tag":60,"props":443,"children":445},{"className":444},[],[446],{"type":45,"value":447},"prompt",{"type":45,"value":198},{"type":40,"tag":60,"props":450,"children":452},{"className":451},[],[453],{"type":45,"value":454},"\"Run the \u002Flinear-issue-worker skill for Linear issue [issue identifier]. The issue is: [title]. Full context: [description first 500 chars]. Local repo path: [repo from config]. Remote repo URL: [repoUrl from config]. Git branch name: [gitBranchName from the issue]. Use the local repo path for all git operations — clone from the remote URL first if the local path does not exist.\"",{"type":40,"tag":41,"props":456,"children":457},{},[458],{"type":45,"value":459},"Spawn all workers in a single parallel message if there are multiple issues.",{"type":40,"tag":48,"props":461,"children":463},{"id":462},"step-4-log-summary",[464],{"type":45,"value":465},"Step 4 — Log summary",{"type":40,"tag":41,"props":467,"children":468},{},[469],{"type":45,"value":470},"After spawning all workers, output:",{"type":40,"tag":382,"props":472,"children":475},{"className":473,"code":474,"language":45},[385],"Linear Triage Poller — [timestamp]\nIssues picked up: [N]\n[list each: ISSUE-ID — title — priority]\n",[476],{"type":40,"tag":60,"props":477,"children":478},{"__ignoreMap":390},[479],{"type":45,"value":474},{"type":40,"tag":48,"props":481,"children":483},{"id":482},"error-handling",[484],{"type":45,"value":485},"Error handling",{"type":40,"tag":69,"props":487,"children":488},{},[489,502],{"type":40,"tag":73,"props":490,"children":491},{},[492,494,500],{"type":45,"value":493},"If ",{"type":40,"tag":60,"props":495,"children":497},{"className":496},[],[498],{"type":45,"value":499},"save_issue",{"type":45,"value":501}," fails for an issue (e.g., state not found): skip it, log the error, continue to next issue. Do NOT spawn a worker for an issue that wasn't successfully claimed.",{"type":40,"tag":73,"props":503,"children":504},{},[505,507,513,515,520,522,527],{"type":45,"value":506},"If a worker spawn fails: post a comment on the issue: \"⚠️ ",{"type":40,"tag":508,"props":509,"children":510},"strong",{},[511],{"type":45,"value":512},"Claude Code",{"type":45,"value":514}," — Worker spawn failed. Issue returned to triage queue.\" Then call ",{"type":40,"tag":60,"props":516,"children":518},{"className":517},[],[519],{"type":45,"value":499},{"type":45,"value":521}," to set state back to ",{"type":40,"tag":60,"props":523,"children":525},{"className":524},[],[526],{"type":45,"value":204},{"type":45,"value":528},".",{"items":530,"total":583},[531,546,553,566],{"slug":532,"name":532,"fn":533,"description":534,"org":535,"tags":536,"stars":23,"repoUrl":24,"updatedAt":545},"linear-issue-worker","automate Linear issue implementation and PRs","End-to-end worker for a single Linear issue. Reads the issue, plans an implementation, creates an isolated git worktree, implements the solution, opens a draft PR linked to the Linear issue, runs tests, marks the PR ready for review, and notifies the assignee. Invoked by \u002Flinear-triage-poller with an issue ID argument.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[537,538,541,542],{"name":18,"slug":19,"type":13},{"name":539,"slug":540,"type":13},"Git","git",{"name":9,"slug":8,"type":13},{"name":543,"slug":544,"type":13},"Pull Requests","pull-requests","2026-08-02T06:09:11.143344",{"slug":4,"name":4,"fn":5,"description":6,"org":547,"tags":548,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[549,550,551,552],{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"name":15,"slug":16,"type":13},{"name":21,"slug":22,"type":13},{"slug":554,"name":554,"fn":555,"description":556,"org":557,"tags":558,"stars":23,"repoUrl":24,"updatedAt":565},"linear-triage-setup","configure Linear triage automation workflow","One-time setup for the Linear triage automation workflow. Verifies prerequisites, creates the \"Claude Code\" label in Linear, and registers the RemoteTrigger that polls every 15 minutes. Run this once before using \u002Flinear-triage-poller.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[559,560,563,564],{"name":18,"slug":19,"type":13},{"name":561,"slug":562,"type":13},"Configuration","configuration",{"name":9,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-08-02T06:09:11.49437",{"slug":567,"name":567,"fn":568,"description":569,"org":570,"tags":571,"stars":23,"repoUrl":24,"updatedAt":582},"stale-labels","audit and clean up Linear labels","Audit a Linear team's labels and report stale ones. Generates a tiered cleanup report (unused \u002F low-use & stale \u002F legacy) based on issue count and most-recent application date. Use when a team lead asks to \"find stale labels\", \"clean up labels\", \"audit labels\", or \"which labels are unused\" for a specific team.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[572,575,576,579],{"name":573,"slug":574,"type":13},"Audit","audit",{"name":9,"slug":8,"type":13},{"name":577,"slug":578,"type":13},"Project Management","project-management",{"name":580,"slug":581,"type":13},"Task Management","task-management","2026-07-14T05:24:09.02295",4,{"items":585,"total":633},[586,605,612,619,626],{"slug":587,"name":587,"fn":588,"description":589,"org":590,"tags":591,"stars":602,"repoUrl":603,"updatedAt":604},"linear-release-setup","configure CI\u002FCD for Linear releases","Generate CI\u002FCD configuration for Linear Release. Use when setting up release tracking, configuring CI pipelines for Linear, or integrating deployments with Linear releases. Supports GitHub Actions, GitLab CI, CircleCI, and other platforms.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[592,595,598,601],{"name":593,"slug":594,"type":13},"CI\u002FCD","ci-cd",{"name":596,"slug":597,"type":13},"Deployment","deployment",{"name":599,"slug":600,"type":13},"GitHub Actions","github-actions",{"name":9,"slug":8,"type":13},51,"https:\u002F\u002Fgithub.com\u002Flinear\u002Flinear-release","2026-07-14T05:24:07.744945",{"slug":532,"name":532,"fn":533,"description":534,"org":606,"tags":607,"stars":23,"repoUrl":24,"updatedAt":545},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[608,609,610,611],{"name":18,"slug":19,"type":13},{"name":539,"slug":540,"type":13},{"name":9,"slug":8,"type":13},{"name":543,"slug":544,"type":13},{"slug":4,"name":4,"fn":5,"description":6,"org":613,"tags":614,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[615,616,617,618],{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"name":15,"slug":16,"type":13},{"name":21,"slug":22,"type":13},{"slug":554,"name":554,"fn":555,"description":556,"org":620,"tags":621,"stars":23,"repoUrl":24,"updatedAt":565},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[622,623,624,625],{"name":18,"slug":19,"type":13},{"name":561,"slug":562,"type":13},{"name":9,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":567,"name":567,"fn":568,"description":569,"org":627,"tags":628,"stars":23,"repoUrl":24,"updatedAt":582},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[629,630,631,632],{"name":573,"slug":574,"type":13},{"name":9,"slug":8,"type":13},{"name":577,"slug":578,"type":13},{"name":580,"slug":581,"type":13},5]