[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-linear-linear-issue-worker":3,"mdc--frouk9-key":34,"related-org-linear-linear-issue-worker":1611,"related-repo-linear-linear-issue-worker":1684},{"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-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},"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},"Automation","automation",{"name":18,"slug":19,"type":13},"Git","git",{"name":21,"slug":22,"type":13},"Pull Requests","pull-requests",15,"https:\u002F\u002Fgithub.com\u002Flinear\u002Flinear-solutions","2026-08-02T06:09:11.143344",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-issue-worker","---\nname: linear-issue-worker\ndescription: 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.\n---\n\nYou are the Linear issue worker. You handle one issue start to finish. The issue ID is provided as the argument (e.g., `\u002Flinear-issue-worker ABC-123`). Work through each stage sequentially. Post a comment to the Linear issue at every stage transition — the issue is the single source of truth for status.\n\n**Config:** `~\u002F.claude\u002Flinear-triage-config.json`\n\n---\n\n## Stage 1 — INTAKE\n\nRead `~\u002F.claude\u002Flinear-triage-config.json`. Extract:\n- `repo` — local path to the repository\n- `repoUrl` — remote GitHub URL (e.g., `https:\u002F\u002Fgithub.com\u002FYourOrg\u002Fyour-repo`)\n- `testCommand` (default: `npm test`)\n- `statusMap.inProgress` (default: `\"In Progress\"`)\n- `statusMap.inReview` (default: `\"In Review\"`)\n\nUse `repo` as the base path for all git operations in this session. If `repo` or `repoUrl` were passed directly as arguments to this skill, those override the config values. Never fall back to any other directory — if `repo` does not exist locally, clone it from `repoUrl` before proceeding (see Stage 3).\n\nLoad the full issue using `mcp__claude_ai_Linear__get_issue`:\n- `id`: the issue identifier\n- `includeRelations`: true\n\nExtract and note: title, description, priority, labels, assignee (id + name), team, status, `gitBranchName` (Linear's generated branch name — use this as the branch in Stage 3), any attachments, any related issues.\n\nPost comment:\n```\n🤖 **Claude Code** — Intake Complete\n\nReading issue context. Here's what I understand:\n**Goal:** [1-sentence summary of what needs to be done]\n**Type:** [Bug \u002F Feature \u002F Task \u002F Other]\n**Complexity estimate:** [Low \u002F Medium \u002F High]\n\nMoving to planning next.\n```\n\n---\n\n## Stage 2 — PLAN\n\nRead the relevant parts of the codebase at the `repo` path from config to understand where changes are needed. Use Glob and Grep to locate relevant files. Do NOT make any changes yet.\n\nFormulate a concrete implementation plan: what files to touch, what to add\u002Fchange\u002Fremove, any risks.\n\nPost comment:\n```\n🤖 **Claude Code** — Plan\n\n**Approach:**\n[2-4 bullet points describing the implementation plan]\n\n**Files to modify:**\n[list of file paths]\n\n**Risks \u002F unknowns:**\n[any concerns, or \"None identified\"]\n\nStarting implementation now.\n```\n\n---\n\n## Stage 3 — BRANCH\n\nCreate an isolated git worktree for this issue:\n\nUse the `gitBranchName` from the issue (e.g., `shannon\u002Fabc-123`) as the branch name exactly — do not slugify or rename it. Linear uses this name to auto-link the PR back to the issue.\n\nFirst, ensure the repo exists locally. If `repo` does not exist, clone it:\n\n```bash\nif [ ! -d \"[repo]\" ]; then\n  git clone [repoUrl] [repo]\nfi\n```\n\nThen create the worktree:\n\n```bash\ncd [repo]\n\n# Fetch latest\ngit fetch origin\n\nBRANCH=\"[gitBranchName from issue]\"\nISSUE_ID=\"[issue identifier in lowercase, e.g. abc-123]\"\n\n# Create worktree using Linear's branch name\nmkdir -p .worktrees\ngit worktree add \".worktrees\u002F${ISSUE_ID}\" -b \"${BRANCH}\" origin\u002Fmain\n```\n\nPost comment:\n```\n🤖 **Claude Code** — Branch Created\n\nWorking on isolated branch: `[gitBranchName]`\nWorktree: `[repo]\u002F.worktrees\u002F[issue-id]\u002F`\n\nImplementation starting.\n```\n\n---\n\n## Stage 4 — IMPLEMENT\n\nWork inside the worktree directory: `[repo]\u002F.worktrees\u002F[issue-id]\u002F`\n\nImplement the plan from Stage 2. Follow the existing code patterns and conventions you found in the codebase. Make commits as logical units of work:\n\n```bash\ncd [repo]\u002F.worktrees\u002F[issue-id]\ngit add [files]\ngit commit -m \"[concise description of change]\"\n```\n\nPost a comment after each meaningful commit group (not every commit — group related changes):\n```\n🤖 **Claude Code** — Implementing\n\n[Brief description of what was just implemented]\nCommit: `[short hash]`\n```\n\nWhen implementation is complete, push the branch:\n```bash\ncd [repo]\u002F.worktrees\u002F[issue-id]\ngit push origin [branch name]\n```\n\n---\n\n## Stage 5 — DRAFT PR\n\nCreate a draft pull request:\n\nExtract `owner\u002Fname` from `repoUrl` by stripping `https:\u002F\u002Fgithub.com\u002F` (e.g., `YourOrg\u002Fyour-repo`). Pass it as `--repo` to ensure the PR always lands in the correct GitHub repo regardless of what the local git remote is configured as.\n\n```bash\ncd [repo]\u002F.worktrees\u002F[issue-id]\ngh pr create \\\n  --repo [owner\u002Fname from repoUrl] \\\n  --draft \\\n  --title \"[issue title]\" \\\n  --body \"$(cat \u003C\u003C'EOF'\nFixes [ISSUE-IDENTIFIER]\n\n## Summary\n[What this PR does — 2-3 sentences]\n\n## Approach\n[Key implementation decisions from Stage 2 plan]\n\n## Testing\n[What was tested and how]\n\n---\n🤖 Implemented by Claude Code\nEOF\n)\"\n```\n\nCapture the PR URL from the output.\n\nPost comment to Linear issue:\n```\n🤖 **Claude Code** — Draft PR Created\n\n[PR Title](PR_URL)\n\nThe PR description includes `Fixes [ISSUE-ID]` so Linear will auto-link it once the GitHub integration syncs. Running tests now.\n```\n\n---\n\n## Stage 6 — TEST\n\nRun the `testCommand` from config inside the worktree:\n\n```bash\ncd [repo]\u002F.worktrees\u002F[issue-id]\n[testCommand] 2>&1\n```\n\n**If tests pass:**\nPost comment:\n```\n🤖 **Claude Code** — Tests Passing ✅\n\nAll tests pass. Marking PR as ready for review.\n```\n\n**If tests fail:**\nPost comment:\n```\n🤖 **Claude Code** — Tests Failing ⚠️\n\nTests did not pass. Human review needed before this can be merged.\n\n**Failures:**\n[paste relevant test output — truncate to 20 lines if long]\n\nThe PR remains as a draft. Labeling this issue `needs-human` for manual follow-up.\n```\n\nThen call `mcp__claude_ai_Linear__save_issue` to add label `needs-human` (if it exists — if not, skip the label). **Stop here** — do not proceed to Stage 7.\n\n---\n\n## Stage 7 — MARK READY FOR REVIEW\n\n```bash\ngh pr ready [PR number or URL]\n```\n\nCall `mcp__claude_ai_Linear__save_issue`:\n- `id`: issue identifier\n- `state`: value of `statusMap.inReview` from config (default: `\"In Review\"`)\n\n---\n\n## Stage 8 — NOTIFY\n\nRetrieve the issue's assignees. Compose the final comment.\n\n**If the issue has an assignee:**\nUse `mcp__claude_ai_Linear__get_user` to look up the assignee's name.\n\nPost comment:\n```\n🤖 **Claude Code** — Ready for Review 🎉\n\n@[assignee name] — implementation is complete and the PR is ready for your review.\n\n**PR:** [PR Title](PR_URL)\n**Branch:** `[branch name]`\n\n**What was done:**\n[3-5 bullet summary of changes made]\n\n**To review:**\n1. Open the PR link above\n2. Check the implementation against the issue description\n3. Approve and merge, or request changes\n```\n\n**If no assignee:**\nPost comment:\n```\n🤖 **Claude Code** — Ready for Review 🎉\n\nImplementation is complete. No assignee found on this issue — please assign someone to review the PR.\n\n**PR:** [PR Title](PR_URL)\n**Branch:** `[branch name]`\n\n**What was done:**\n[3-5 bullet summary of changes made]\n```\n\n---\n\n## Error handling\n\n- **Git errors** (merge conflict, push rejected): post comment describing the error, set issue label `needs-human`, stop.\n- **gh CLI errors**: post comment with the error output, stop.\n- **Any unrecoverable error**: always post a final comment explaining what failed and what state the work is in, so a human can pick up from where you left off. Never leave the issue silent.\n- **Worktree cleanup on failure**: if you stop early, note the worktree path in the comment so it can be cleaned up manually: `git worktree remove [repo]\u002F.worktrees\u002F[issue-id] --force`\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,56,73,77,84,96,183,223,236,261,274,279,291,294,300,312,317,321,330,333,339,344,364,376,483,488,706,710,719,722,728,739,744,822,827,836,841,898,901,907,912,956,1221,1226,1231,1240,1243,1249,1261,1312,1322,1331,1340,1349,1377,1380,1386,1429,1440,1477,1480,1486,1491,1509,1513,1522,1531,1540,1543,1549,1605],{"type":40,"tag":41,"props":42,"children":43},"element","p",{},[44,47,54],{"type":45,"value":46},"text","You are the Linear issue worker. You handle one issue start to finish. The issue ID is provided as the argument (e.g., ",{"type":40,"tag":48,"props":49,"children":51},"code",{"className":50},[],[52],{"type":45,"value":53},"\u002Flinear-issue-worker ABC-123",{"type":45,"value":55},"). Work through each stage sequentially. Post a comment to the Linear issue at every stage transition — the issue is the single source of truth for status.",{"type":40,"tag":41,"props":57,"children":58},{},[59,65,67],{"type":40,"tag":60,"props":61,"children":62},"strong",{},[63],{"type":45,"value":64},"Config:",{"type":45,"value":66}," ",{"type":40,"tag":48,"props":68,"children":70},{"className":69},[],[71],{"type":45,"value":72},"~\u002F.claude\u002Flinear-triage-config.json",{"type":40,"tag":74,"props":75,"children":76},"hr",{},[],{"type":40,"tag":78,"props":79,"children":81},"h2",{"id":80},"stage-1-intake",[82],{"type":45,"value":83},"Stage 1 — INTAKE",{"type":40,"tag":41,"props":85,"children":86},{},[87,89,94],{"type":45,"value":88},"Read ",{"type":40,"tag":48,"props":90,"children":92},{"className":91},[],[93],{"type":45,"value":72},{"type":45,"value":95},". Extract:",{"type":40,"tag":97,"props":98,"children":99},"ul",{},[100,112,131,149,166],{"type":40,"tag":101,"props":102,"children":103},"li",{},[104,110],{"type":40,"tag":48,"props":105,"children":107},{"className":106},[],[108],{"type":45,"value":109},"repo",{"type":45,"value":111}," — local path to the repository",{"type":40,"tag":101,"props":113,"children":114},{},[115,121,123,129],{"type":40,"tag":48,"props":116,"children":118},{"className":117},[],[119],{"type":45,"value":120},"repoUrl",{"type":45,"value":122}," — remote GitHub URL (e.g., ",{"type":40,"tag":48,"props":124,"children":126},{"className":125},[],[127],{"type":45,"value":128},"https:\u002F\u002Fgithub.com\u002FYourOrg\u002Fyour-repo",{"type":45,"value":130},")",{"type":40,"tag":101,"props":132,"children":133},{},[134,140,142,148],{"type":40,"tag":48,"props":135,"children":137},{"className":136},[],[138],{"type":45,"value":139},"testCommand",{"type":45,"value":141}," (default: ",{"type":40,"tag":48,"props":143,"children":145},{"className":144},[],[146],{"type":45,"value":147},"npm test",{"type":45,"value":130},{"type":40,"tag":101,"props":150,"children":151},{},[152,158,159,165],{"type":40,"tag":48,"props":153,"children":155},{"className":154},[],[156],{"type":45,"value":157},"statusMap.inProgress",{"type":45,"value":141},{"type":40,"tag":48,"props":160,"children":162},{"className":161},[],[163],{"type":45,"value":164},"\"In Progress\"",{"type":45,"value":130},{"type":40,"tag":101,"props":167,"children":168},{},[169,175,176,182],{"type":40,"tag":48,"props":170,"children":172},{"className":171},[],[173],{"type":45,"value":174},"statusMap.inReview",{"type":45,"value":141},{"type":40,"tag":48,"props":177,"children":179},{"className":178},[],[180],{"type":45,"value":181},"\"In Review\"",{"type":45,"value":130},{"type":40,"tag":41,"props":184,"children":185},{},[186,188,193,195,200,202,207,209,214,216,221],{"type":45,"value":187},"Use ",{"type":40,"tag":48,"props":189,"children":191},{"className":190},[],[192],{"type":45,"value":109},{"type":45,"value":194}," as the base path for all git operations in this session. If ",{"type":40,"tag":48,"props":196,"children":198},{"className":197},[],[199],{"type":45,"value":109},{"type":45,"value":201}," or ",{"type":40,"tag":48,"props":203,"children":205},{"className":204},[],[206],{"type":45,"value":120},{"type":45,"value":208}," were passed directly as arguments to this skill, those override the config values. Never fall back to any other directory — if ",{"type":40,"tag":48,"props":210,"children":212},{"className":211},[],[213],{"type":45,"value":109},{"type":45,"value":215}," does not exist locally, clone it from ",{"type":40,"tag":48,"props":217,"children":219},{"className":218},[],[220],{"type":45,"value":120},{"type":45,"value":222}," before proceeding (see Stage 3).",{"type":40,"tag":41,"props":224,"children":225},{},[226,228,234],{"type":45,"value":227},"Load the full issue using ",{"type":40,"tag":48,"props":229,"children":231},{"className":230},[],[232],{"type":45,"value":233},"mcp__claude_ai_Linear__get_issue",{"type":45,"value":235},":",{"type":40,"tag":97,"props":237,"children":238},{},[239,250],{"type":40,"tag":101,"props":240,"children":241},{},[242,248],{"type":40,"tag":48,"props":243,"children":245},{"className":244},[],[246],{"type":45,"value":247},"id",{"type":45,"value":249},": the issue identifier",{"type":40,"tag":101,"props":251,"children":252},{},[253,259],{"type":40,"tag":48,"props":254,"children":256},{"className":255},[],[257],{"type":45,"value":258},"includeRelations",{"type":45,"value":260},": true",{"type":40,"tag":41,"props":262,"children":263},{},[264,266,272],{"type":45,"value":265},"Extract and note: title, description, priority, labels, assignee (id + name), team, status, ",{"type":40,"tag":48,"props":267,"children":269},{"className":268},[],[270],{"type":45,"value":271},"gitBranchName",{"type":45,"value":273}," (Linear's generated branch name — use this as the branch in Stage 3), any attachments, any related issues.",{"type":40,"tag":41,"props":275,"children":276},{},[277],{"type":45,"value":278},"Post comment:",{"type":40,"tag":280,"props":281,"children":285},"pre",{"className":282,"code":284,"language":45},[283],"language-text","🤖 **Claude Code** — Intake Complete\n\nReading issue context. Here's what I understand:\n**Goal:** [1-sentence summary of what needs to be done]\n**Type:** [Bug \u002F Feature \u002F Task \u002F Other]\n**Complexity estimate:** [Low \u002F Medium \u002F High]\n\nMoving to planning next.\n",[286],{"type":40,"tag":48,"props":287,"children":289},{"__ignoreMap":288},"",[290],{"type":45,"value":284},{"type":40,"tag":74,"props":292,"children":293},{},[],{"type":40,"tag":78,"props":295,"children":297},{"id":296},"stage-2-plan",[298],{"type":45,"value":299},"Stage 2 — PLAN",{"type":40,"tag":41,"props":301,"children":302},{},[303,305,310],{"type":45,"value":304},"Read the relevant parts of the codebase at the ",{"type":40,"tag":48,"props":306,"children":308},{"className":307},[],[309],{"type":45,"value":109},{"type":45,"value":311}," path from config to understand where changes are needed. Use Glob and Grep to locate relevant files. Do NOT make any changes yet.",{"type":40,"tag":41,"props":313,"children":314},{},[315],{"type":45,"value":316},"Formulate a concrete implementation plan: what files to touch, what to add\u002Fchange\u002Fremove, any risks.",{"type":40,"tag":41,"props":318,"children":319},{},[320],{"type":45,"value":278},{"type":40,"tag":280,"props":322,"children":325},{"className":323,"code":324,"language":45},[283],"🤖 **Claude Code** — Plan\n\n**Approach:**\n[2-4 bullet points describing the implementation plan]\n\n**Files to modify:**\n[list of file paths]\n\n**Risks \u002F unknowns:**\n[any concerns, or \"None identified\"]\n\nStarting implementation now.\n",[326],{"type":40,"tag":48,"props":327,"children":328},{"__ignoreMap":288},[329],{"type":45,"value":324},{"type":40,"tag":74,"props":331,"children":332},{},[],{"type":40,"tag":78,"props":334,"children":336},{"id":335},"stage-3-branch",[337],{"type":45,"value":338},"Stage 3 — BRANCH",{"type":40,"tag":41,"props":340,"children":341},{},[342],{"type":45,"value":343},"Create an isolated git worktree for this issue:",{"type":40,"tag":41,"props":345,"children":346},{},[347,349,354,356,362],{"type":45,"value":348},"Use the ",{"type":40,"tag":48,"props":350,"children":352},{"className":351},[],[353],{"type":45,"value":271},{"type":45,"value":355}," from the issue (e.g., ",{"type":40,"tag":48,"props":357,"children":359},{"className":358},[],[360],{"type":45,"value":361},"shannon\u002Fabc-123",{"type":45,"value":363},") as the branch name exactly — do not slugify or rename it. Linear uses this name to auto-link the PR back to the issue.",{"type":40,"tag":41,"props":365,"children":366},{},[367,369,374],{"type":45,"value":368},"First, ensure the repo exists locally. If ",{"type":40,"tag":48,"props":370,"children":372},{"className":371},[],[373],{"type":45,"value":109},{"type":45,"value":375}," does not exist, clone it:",{"type":40,"tag":280,"props":377,"children":381},{"className":378,"code":379,"language":380,"meta":288,"style":288},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","if [ ! -d \"[repo]\" ]; then\n  git clone [repoUrl] [repo]\nfi\n","bash",[382],{"type":40,"tag":48,"props":383,"children":384},{"__ignoreMap":288},[385,439,474],{"type":40,"tag":386,"props":387,"children":390},"span",{"class":388,"line":389},"line",1,[391,397,403,408,413,418,424,429,434],{"type":40,"tag":386,"props":392,"children":394},{"style":393},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[395],{"type":45,"value":396},"if",{"type":40,"tag":386,"props":398,"children":400},{"style":399},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[401],{"type":45,"value":402}," [",{"type":40,"tag":386,"props":404,"children":405},{"style":399},[406],{"type":45,"value":407}," !",{"type":40,"tag":386,"props":409,"children":410},{"style":399},[411],{"type":45,"value":412}," -d",{"type":40,"tag":386,"props":414,"children":415},{"style":399},[416],{"type":45,"value":417}," \"",{"type":40,"tag":386,"props":419,"children":421},{"style":420},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[422],{"type":45,"value":423},"[repo]",{"type":40,"tag":386,"props":425,"children":426},{"style":399},[427],{"type":45,"value":428},"\"",{"type":40,"tag":386,"props":430,"children":431},{"style":399},[432],{"type":45,"value":433}," ];",{"type":40,"tag":386,"props":435,"children":436},{"style":393},[437],{"type":45,"value":438}," then\n",{"type":40,"tag":386,"props":440,"children":442},{"class":388,"line":441},2,[443,449,454,460,465,469],{"type":40,"tag":386,"props":444,"children":446},{"style":445},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[447],{"type":45,"value":448},"  git",{"type":40,"tag":386,"props":450,"children":451},{"style":420},[452],{"type":45,"value":453}," clone",{"type":40,"tag":386,"props":455,"children":457},{"style":456},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[458],{"type":45,"value":459}," [repoUrl] ",{"type":40,"tag":386,"props":461,"children":462},{"style":399},[463],{"type":45,"value":464},"[",{"type":40,"tag":386,"props":466,"children":467},{"style":456},[468],{"type":45,"value":109},{"type":40,"tag":386,"props":470,"children":471},{"style":399},[472],{"type":45,"value":473},"]\n",{"type":40,"tag":386,"props":475,"children":477},{"class":388,"line":476},3,[478],{"type":40,"tag":386,"props":479,"children":480},{"style":393},[481],{"type":45,"value":482},"fi\n",{"type":40,"tag":41,"props":484,"children":485},{},[486],{"type":45,"value":487},"Then create the worktree:",{"type":40,"tag":280,"props":489,"children":491},{"className":378,"code":490,"language":380,"meta":288,"style":288},"cd [repo]\n\n# Fetch latest\ngit fetch origin\n\nBRANCH=\"[gitBranchName from issue]\"\nISSUE_ID=\"[issue identifier in lowercase, e.g. abc-123]\"\n\n# Create worktree using Linear's branch name\nmkdir -p .worktrees\ngit worktree add \".worktrees\u002F${ISSUE_ID}\" -b \"${BRANCH}\" origin\u002Fmain\n",[492],{"type":40,"tag":48,"props":493,"children":494},{"__ignoreMap":288},[495,509,518,527,545,553,581,607,615,624,643],{"type":40,"tag":386,"props":496,"children":497},{"class":388,"line":389},[498,504],{"type":40,"tag":386,"props":499,"children":501},{"style":500},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[502],{"type":45,"value":503},"cd",{"type":40,"tag":386,"props":505,"children":506},{"style":456},[507],{"type":45,"value":508}," [repo]\n",{"type":40,"tag":386,"props":510,"children":511},{"class":388,"line":441},[512],{"type":40,"tag":386,"props":513,"children":515},{"emptyLinePlaceholder":514},true,[516],{"type":45,"value":517},"\n",{"type":40,"tag":386,"props":519,"children":520},{"class":388,"line":476},[521],{"type":40,"tag":386,"props":522,"children":524},{"style":523},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[525],{"type":45,"value":526},"# Fetch latest\n",{"type":40,"tag":386,"props":528,"children":530},{"class":388,"line":529},4,[531,535,540],{"type":40,"tag":386,"props":532,"children":533},{"style":445},[534],{"type":45,"value":19},{"type":40,"tag":386,"props":536,"children":537},{"style":420},[538],{"type":45,"value":539}," fetch",{"type":40,"tag":386,"props":541,"children":542},{"style":420},[543],{"type":45,"value":544}," origin\n",{"type":40,"tag":386,"props":546,"children":548},{"class":388,"line":547},5,[549],{"type":40,"tag":386,"props":550,"children":551},{"emptyLinePlaceholder":514},[552],{"type":45,"value":517},{"type":40,"tag":386,"props":554,"children":556},{"class":388,"line":555},6,[557,562,567,571,576],{"type":40,"tag":386,"props":558,"children":559},{"style":456},[560],{"type":45,"value":561},"BRANCH",{"type":40,"tag":386,"props":563,"children":564},{"style":399},[565],{"type":45,"value":566},"=",{"type":40,"tag":386,"props":568,"children":569},{"style":399},[570],{"type":45,"value":428},{"type":40,"tag":386,"props":572,"children":573},{"style":420},[574],{"type":45,"value":575},"[gitBranchName from issue]",{"type":40,"tag":386,"props":577,"children":578},{"style":399},[579],{"type":45,"value":580},"\"\n",{"type":40,"tag":386,"props":582,"children":584},{"class":388,"line":583},7,[585,590,594,598,603],{"type":40,"tag":386,"props":586,"children":587},{"style":456},[588],{"type":45,"value":589},"ISSUE_ID",{"type":40,"tag":386,"props":591,"children":592},{"style":399},[593],{"type":45,"value":566},{"type":40,"tag":386,"props":595,"children":596},{"style":399},[597],{"type":45,"value":428},{"type":40,"tag":386,"props":599,"children":600},{"style":420},[601],{"type":45,"value":602},"[issue identifier in lowercase, e.g. abc-123]",{"type":40,"tag":386,"props":604,"children":605},{"style":399},[606],{"type":45,"value":580},{"type":40,"tag":386,"props":608,"children":610},{"class":388,"line":609},8,[611],{"type":40,"tag":386,"props":612,"children":613},{"emptyLinePlaceholder":514},[614],{"type":45,"value":517},{"type":40,"tag":386,"props":616,"children":618},{"class":388,"line":617},9,[619],{"type":40,"tag":386,"props":620,"children":621},{"style":523},[622],{"type":45,"value":623},"# Create worktree using Linear's branch name\n",{"type":40,"tag":386,"props":625,"children":627},{"class":388,"line":626},10,[628,633,638],{"type":40,"tag":386,"props":629,"children":630},{"style":445},[631],{"type":45,"value":632},"mkdir",{"type":40,"tag":386,"props":634,"children":635},{"style":420},[636],{"type":45,"value":637}," -p",{"type":40,"tag":386,"props":639,"children":640},{"style":420},[641],{"type":45,"value":642}," .worktrees\n",{"type":40,"tag":386,"props":644,"children":645},{"class":388,"line":27},[646,650,655,660,664,669,674,678,683,688,693,697,701],{"type":40,"tag":386,"props":647,"children":648},{"style":445},[649],{"type":45,"value":19},{"type":40,"tag":386,"props":651,"children":652},{"style":420},[653],{"type":45,"value":654}," worktree",{"type":40,"tag":386,"props":656,"children":657},{"style":420},[658],{"type":45,"value":659}," add",{"type":40,"tag":386,"props":661,"children":662},{"style":399},[663],{"type":45,"value":417},{"type":40,"tag":386,"props":665,"children":666},{"style":420},[667],{"type":45,"value":668},".worktrees\u002F",{"type":40,"tag":386,"props":670,"children":671},{"style":399},[672],{"type":45,"value":673},"${",{"type":40,"tag":386,"props":675,"children":676},{"style":456},[677],{"type":45,"value":589},{"type":40,"tag":386,"props":679,"children":680},{"style":399},[681],{"type":45,"value":682},"}\"",{"type":40,"tag":386,"props":684,"children":685},{"style":420},[686],{"type":45,"value":687}," -b",{"type":40,"tag":386,"props":689,"children":690},{"style":399},[691],{"type":45,"value":692}," \"${",{"type":40,"tag":386,"props":694,"children":695},{"style":456},[696],{"type":45,"value":561},{"type":40,"tag":386,"props":698,"children":699},{"style":399},[700],{"type":45,"value":682},{"type":40,"tag":386,"props":702,"children":703},{"style":420},[704],{"type":45,"value":705}," origin\u002Fmain\n",{"type":40,"tag":41,"props":707,"children":708},{},[709],{"type":45,"value":278},{"type":40,"tag":280,"props":711,"children":714},{"className":712,"code":713,"language":45},[283],"🤖 **Claude Code** — Branch Created\n\nWorking on isolated branch: `[gitBranchName]`\nWorktree: `[repo]\u002F.worktrees\u002F[issue-id]\u002F`\n\nImplementation starting.\n",[715],{"type":40,"tag":48,"props":716,"children":717},{"__ignoreMap":288},[718],{"type":45,"value":713},{"type":40,"tag":74,"props":720,"children":721},{},[],{"type":40,"tag":78,"props":723,"children":725},{"id":724},"stage-4-implement",[726],{"type":45,"value":727},"Stage 4 — IMPLEMENT",{"type":40,"tag":41,"props":729,"children":730},{},[731,733],{"type":45,"value":732},"Work inside the worktree directory: ",{"type":40,"tag":48,"props":734,"children":736},{"className":735},[],[737],{"type":45,"value":738},"[repo]\u002F.worktrees\u002F[issue-id]\u002F",{"type":40,"tag":41,"props":740,"children":741},{},[742],{"type":45,"value":743},"Implement the plan from Stage 2. Follow the existing code patterns and conventions you found in the codebase. Make commits as logical units of work:",{"type":40,"tag":280,"props":745,"children":747},{"className":378,"code":746,"language":380,"meta":288,"style":288},"cd [repo]\u002F.worktrees\u002F[issue-id]\ngit add [files]\ngit commit -m \"[concise description of change]\"\n",[748],{"type":40,"tag":48,"props":749,"children":750},{"__ignoreMap":288},[751,776,792],{"type":40,"tag":386,"props":752,"children":753},{"class":388,"line":389},[754,758,763,767,772],{"type":40,"tag":386,"props":755,"children":756},{"style":500},[757],{"type":45,"value":503},{"type":40,"tag":386,"props":759,"children":760},{"style":456},[761],{"type":45,"value":762}," [repo]\u002F.worktrees\u002F",{"type":40,"tag":386,"props":764,"children":765},{"style":399},[766],{"type":45,"value":464},{"type":40,"tag":386,"props":768,"children":769},{"style":456},[770],{"type":45,"value":771},"issue-id",{"type":40,"tag":386,"props":773,"children":774},{"style":399},[775],{"type":45,"value":473},{"type":40,"tag":386,"props":777,"children":778},{"class":388,"line":441},[779,783,787],{"type":40,"tag":386,"props":780,"children":781},{"style":445},[782],{"type":45,"value":19},{"type":40,"tag":386,"props":784,"children":785},{"style":420},[786],{"type":45,"value":659},{"type":40,"tag":386,"props":788,"children":789},{"style":456},[790],{"type":45,"value":791}," [files]\n",{"type":40,"tag":386,"props":793,"children":794},{"class":388,"line":476},[795,799,804,809,813,818],{"type":40,"tag":386,"props":796,"children":797},{"style":445},[798],{"type":45,"value":19},{"type":40,"tag":386,"props":800,"children":801},{"style":420},[802],{"type":45,"value":803}," commit",{"type":40,"tag":386,"props":805,"children":806},{"style":420},[807],{"type":45,"value":808}," -m",{"type":40,"tag":386,"props":810,"children":811},{"style":399},[812],{"type":45,"value":417},{"type":40,"tag":386,"props":814,"children":815},{"style":420},[816],{"type":45,"value":817},"[concise description of change]",{"type":40,"tag":386,"props":819,"children":820},{"style":399},[821],{"type":45,"value":580},{"type":40,"tag":41,"props":823,"children":824},{},[825],{"type":45,"value":826},"Post a comment after each meaningful commit group (not every commit — group related changes):",{"type":40,"tag":280,"props":828,"children":831},{"className":829,"code":830,"language":45},[283],"🤖 **Claude Code** — Implementing\n\n[Brief description of what was just implemented]\nCommit: `[short hash]`\n",[832],{"type":40,"tag":48,"props":833,"children":834},{"__ignoreMap":288},[835],{"type":45,"value":830},{"type":40,"tag":41,"props":837,"children":838},{},[839],{"type":45,"value":840},"When implementation is complete, push the branch:",{"type":40,"tag":280,"props":842,"children":844},{"className":378,"code":843,"language":380,"meta":288,"style":288},"cd [repo]\u002F.worktrees\u002F[issue-id]\ngit push origin [branch name]\n",[845],{"type":40,"tag":48,"props":846,"children":847},{"__ignoreMap":288},[848,871],{"type":40,"tag":386,"props":849,"children":850},{"class":388,"line":389},[851,855,859,863,867],{"type":40,"tag":386,"props":852,"children":853},{"style":500},[854],{"type":45,"value":503},{"type":40,"tag":386,"props":856,"children":857},{"style":456},[858],{"type":45,"value":762},{"type":40,"tag":386,"props":860,"children":861},{"style":399},[862],{"type":45,"value":464},{"type":40,"tag":386,"props":864,"children":865},{"style":456},[866],{"type":45,"value":771},{"type":40,"tag":386,"props":868,"children":869},{"style":399},[870],{"type":45,"value":473},{"type":40,"tag":386,"props":872,"children":873},{"class":388,"line":441},[874,878,883,888,893],{"type":40,"tag":386,"props":875,"children":876},{"style":445},[877],{"type":45,"value":19},{"type":40,"tag":386,"props":879,"children":880},{"style":420},[881],{"type":45,"value":882}," push",{"type":40,"tag":386,"props":884,"children":885},{"style":420},[886],{"type":45,"value":887}," origin",{"type":40,"tag":386,"props":889,"children":890},{"style":456},[891],{"type":45,"value":892}," [branch ",{"type":40,"tag":386,"props":894,"children":895},{"style":420},[896],{"type":45,"value":897},"name]\n",{"type":40,"tag":74,"props":899,"children":900},{},[],{"type":40,"tag":78,"props":902,"children":904},{"id":903},"stage-5-draft-pr",[905],{"type":45,"value":906},"Stage 5 — DRAFT PR",{"type":40,"tag":41,"props":908,"children":909},{},[910],{"type":45,"value":911},"Create a draft pull request:",{"type":40,"tag":41,"props":913,"children":914},{},[915,917,923,925,930,932,938,940,946,948,954],{"type":45,"value":916},"Extract ",{"type":40,"tag":48,"props":918,"children":920},{"className":919},[],[921],{"type":45,"value":922},"owner\u002Fname",{"type":45,"value":924}," from ",{"type":40,"tag":48,"props":926,"children":928},{"className":927},[],[929],{"type":45,"value":120},{"type":45,"value":931}," by stripping ",{"type":40,"tag":48,"props":933,"children":935},{"className":934},[],[936],{"type":45,"value":937},"https:\u002F\u002Fgithub.com\u002F",{"type":45,"value":939}," (e.g., ",{"type":40,"tag":48,"props":941,"children":943},{"className":942},[],[944],{"type":45,"value":945},"YourOrg\u002Fyour-repo",{"type":45,"value":947},"). Pass it as ",{"type":40,"tag":48,"props":949,"children":951},{"className":950},[],[952],{"type":45,"value":953},"--repo",{"type":45,"value":955}," to ensure the PR always lands in the correct GitHub repo regardless of what the local git remote is configured as.",{"type":40,"tag":280,"props":957,"children":959},{"className":378,"code":958,"language":380,"meta":288,"style":288},"cd [repo]\u002F.worktrees\u002F[issue-id]\ngh pr create \\\n  --repo [owner\u002Fname from repoUrl] \\\n  --draft \\\n  --title \"[issue title]\" \\\n  --body \"$(cat \u003C\u003C'EOF'\nFixes [ISSUE-IDENTIFIER]\n\n## Summary\n[What this PR does — 2-3 sentences]\n\n## Approach\n[Key implementation decisions from Stage 2 plan]\n\n## Testing\n[What was tested and how]\n\n---\n🤖 Implemented by Claude Code\nEOF\n)\"\n",[960],{"type":40,"tag":48,"props":961,"children":962},{"__ignoreMap":288},[963,986,1009,1036,1048,1073,1096,1104,1111,1119,1127,1134,1143,1152,1160,1168,1177,1185,1194,1203,1212],{"type":40,"tag":386,"props":964,"children":965},{"class":388,"line":389},[966,970,974,978,982],{"type":40,"tag":386,"props":967,"children":968},{"style":500},[969],{"type":45,"value":503},{"type":40,"tag":386,"props":971,"children":972},{"style":456},[973],{"type":45,"value":762},{"type":40,"tag":386,"props":975,"children":976},{"style":399},[977],{"type":45,"value":464},{"type":40,"tag":386,"props":979,"children":980},{"style":456},[981],{"type":45,"value":771},{"type":40,"tag":386,"props":983,"children":984},{"style":399},[985],{"type":45,"value":473},{"type":40,"tag":386,"props":987,"children":988},{"class":388,"line":441},[989,994,999,1004],{"type":40,"tag":386,"props":990,"children":991},{"style":445},[992],{"type":45,"value":993},"gh",{"type":40,"tag":386,"props":995,"children":996},{"style":420},[997],{"type":45,"value":998}," pr",{"type":40,"tag":386,"props":1000,"children":1001},{"style":420},[1002],{"type":45,"value":1003}," create",{"type":40,"tag":386,"props":1005,"children":1006},{"style":456},[1007],{"type":45,"value":1008}," \\\n",{"type":40,"tag":386,"props":1010,"children":1011},{"class":388,"line":476},[1012,1017,1022,1027,1032],{"type":40,"tag":386,"props":1013,"children":1014},{"style":420},[1015],{"type":45,"value":1016},"  --repo",{"type":40,"tag":386,"props":1018,"children":1019},{"style":456},[1020],{"type":45,"value":1021}," [owner\u002Fname ",{"type":40,"tag":386,"props":1023,"children":1024},{"style":420},[1025],{"type":45,"value":1026},"from",{"type":40,"tag":386,"props":1028,"children":1029},{"style":420},[1030],{"type":45,"value":1031}," repoUrl]",{"type":40,"tag":386,"props":1033,"children":1034},{"style":456},[1035],{"type":45,"value":1008},{"type":40,"tag":386,"props":1037,"children":1038},{"class":388,"line":529},[1039,1044],{"type":40,"tag":386,"props":1040,"children":1041},{"style":420},[1042],{"type":45,"value":1043},"  --draft",{"type":40,"tag":386,"props":1045,"children":1046},{"style":456},[1047],{"type":45,"value":1008},{"type":40,"tag":386,"props":1049,"children":1050},{"class":388,"line":547},[1051,1056,1060,1065,1069],{"type":40,"tag":386,"props":1052,"children":1053},{"style":420},[1054],{"type":45,"value":1055},"  --title",{"type":40,"tag":386,"props":1057,"children":1058},{"style":399},[1059],{"type":45,"value":417},{"type":40,"tag":386,"props":1061,"children":1062},{"style":420},[1063],{"type":45,"value":1064},"[issue title]",{"type":40,"tag":386,"props":1066,"children":1067},{"style":399},[1068],{"type":45,"value":428},{"type":40,"tag":386,"props":1070,"children":1071},{"style":456},[1072],{"type":45,"value":1008},{"type":40,"tag":386,"props":1074,"children":1075},{"class":388,"line":555},[1076,1081,1086,1091],{"type":40,"tag":386,"props":1077,"children":1078},{"style":420},[1079],{"type":45,"value":1080},"  --body",{"type":40,"tag":386,"props":1082,"children":1083},{"style":399},[1084],{"type":45,"value":1085}," \"$(",{"type":40,"tag":386,"props":1087,"children":1088},{"style":445},[1089],{"type":45,"value":1090},"cat",{"type":40,"tag":386,"props":1092,"children":1093},{"style":399},[1094],{"type":45,"value":1095}," \u003C\u003C'EOF'\n",{"type":40,"tag":386,"props":1097,"children":1098},{"class":388,"line":583},[1099],{"type":40,"tag":386,"props":1100,"children":1101},{"style":420},[1102],{"type":45,"value":1103},"Fixes [ISSUE-IDENTIFIER]\n",{"type":40,"tag":386,"props":1105,"children":1106},{"class":388,"line":609},[1107],{"type":40,"tag":386,"props":1108,"children":1109},{"emptyLinePlaceholder":514},[1110],{"type":45,"value":517},{"type":40,"tag":386,"props":1112,"children":1113},{"class":388,"line":617},[1114],{"type":40,"tag":386,"props":1115,"children":1116},{"style":420},[1117],{"type":45,"value":1118},"## Summary\n",{"type":40,"tag":386,"props":1120,"children":1121},{"class":388,"line":626},[1122],{"type":40,"tag":386,"props":1123,"children":1124},{"style":420},[1125],{"type":45,"value":1126},"[What this PR does — 2-3 sentences]\n",{"type":40,"tag":386,"props":1128,"children":1129},{"class":388,"line":27},[1130],{"type":40,"tag":386,"props":1131,"children":1132},{"emptyLinePlaceholder":514},[1133],{"type":45,"value":517},{"type":40,"tag":386,"props":1135,"children":1137},{"class":388,"line":1136},12,[1138],{"type":40,"tag":386,"props":1139,"children":1140},{"style":420},[1141],{"type":45,"value":1142},"## Approach\n",{"type":40,"tag":386,"props":1144,"children":1146},{"class":388,"line":1145},13,[1147],{"type":40,"tag":386,"props":1148,"children":1149},{"style":420},[1150],{"type":45,"value":1151},"[Key implementation decisions from Stage 2 plan]\n",{"type":40,"tag":386,"props":1153,"children":1155},{"class":388,"line":1154},14,[1156],{"type":40,"tag":386,"props":1157,"children":1158},{"emptyLinePlaceholder":514},[1159],{"type":45,"value":517},{"type":40,"tag":386,"props":1161,"children":1162},{"class":388,"line":23},[1163],{"type":40,"tag":386,"props":1164,"children":1165},{"style":420},[1166],{"type":45,"value":1167},"## Testing\n",{"type":40,"tag":386,"props":1169,"children":1171},{"class":388,"line":1170},16,[1172],{"type":40,"tag":386,"props":1173,"children":1174},{"style":420},[1175],{"type":45,"value":1176},"[What was tested and how]\n",{"type":40,"tag":386,"props":1178,"children":1180},{"class":388,"line":1179},17,[1181],{"type":40,"tag":386,"props":1182,"children":1183},{"emptyLinePlaceholder":514},[1184],{"type":45,"value":517},{"type":40,"tag":386,"props":1186,"children":1188},{"class":388,"line":1187},18,[1189],{"type":40,"tag":386,"props":1190,"children":1191},{"style":420},[1192],{"type":45,"value":1193},"---\n",{"type":40,"tag":386,"props":1195,"children":1197},{"class":388,"line":1196},19,[1198],{"type":40,"tag":386,"props":1199,"children":1200},{"style":420},[1201],{"type":45,"value":1202},"🤖 Implemented by Claude Code\n",{"type":40,"tag":386,"props":1204,"children":1206},{"class":388,"line":1205},20,[1207],{"type":40,"tag":386,"props":1208,"children":1209},{"style":399},[1210],{"type":45,"value":1211},"EOF\n",{"type":40,"tag":386,"props":1213,"children":1215},{"class":388,"line":1214},21,[1216],{"type":40,"tag":386,"props":1217,"children":1218},{"style":399},[1219],{"type":45,"value":1220},")\"\n",{"type":40,"tag":41,"props":1222,"children":1223},{},[1224],{"type":45,"value":1225},"Capture the PR URL from the output.",{"type":40,"tag":41,"props":1227,"children":1228},{},[1229],{"type":45,"value":1230},"Post comment to Linear issue:",{"type":40,"tag":280,"props":1232,"children":1235},{"className":1233,"code":1234,"language":45},[283],"🤖 **Claude Code** — Draft PR Created\n\n[PR Title](PR_URL)\n\nThe PR description includes `Fixes [ISSUE-ID]` so Linear will auto-link it once the GitHub integration syncs. Running tests now.\n",[1236],{"type":40,"tag":48,"props":1237,"children":1238},{"__ignoreMap":288},[1239],{"type":45,"value":1234},{"type":40,"tag":74,"props":1241,"children":1242},{},[],{"type":40,"tag":78,"props":1244,"children":1246},{"id":1245},"stage-6-test",[1247],{"type":45,"value":1248},"Stage 6 — TEST",{"type":40,"tag":41,"props":1250,"children":1251},{},[1252,1254,1259],{"type":45,"value":1253},"Run the ",{"type":40,"tag":48,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":45,"value":139},{"type":45,"value":1260}," from config inside the worktree:",{"type":40,"tag":280,"props":1262,"children":1264},{"className":378,"code":1263,"language":380,"meta":288,"style":288},"cd [repo]\u002F.worktrees\u002F[issue-id]\n[testCommand] 2>&1\n",[1265],{"type":40,"tag":48,"props":1266,"children":1267},{"__ignoreMap":288},[1268,1291],{"type":40,"tag":386,"props":1269,"children":1270},{"class":388,"line":389},[1271,1275,1279,1283,1287],{"type":40,"tag":386,"props":1272,"children":1273},{"style":500},[1274],{"type":45,"value":503},{"type":40,"tag":386,"props":1276,"children":1277},{"style":456},[1278],{"type":45,"value":762},{"type":40,"tag":386,"props":1280,"children":1281},{"style":399},[1282],{"type":45,"value":464},{"type":40,"tag":386,"props":1284,"children":1285},{"style":456},[1286],{"type":45,"value":771},{"type":40,"tag":386,"props":1288,"children":1289},{"style":399},[1290],{"type":45,"value":473},{"type":40,"tag":386,"props":1292,"children":1293},{"class":388,"line":441},[1294,1298,1302,1307],{"type":40,"tag":386,"props":1295,"children":1296},{"style":399},[1297],{"type":45,"value":464},{"type":40,"tag":386,"props":1299,"children":1300},{"style":456},[1301],{"type":45,"value":139},{"type":40,"tag":386,"props":1303,"children":1304},{"style":399},[1305],{"type":45,"value":1306},"]",{"type":40,"tag":386,"props":1308,"children":1309},{"style":399},[1310],{"type":45,"value":1311}," 2>&1\n",{"type":40,"tag":41,"props":1313,"children":1314},{},[1315,1320],{"type":40,"tag":60,"props":1316,"children":1317},{},[1318],{"type":45,"value":1319},"If tests pass:",{"type":45,"value":1321},"\nPost comment:",{"type":40,"tag":280,"props":1323,"children":1326},{"className":1324,"code":1325,"language":45},[283],"🤖 **Claude Code** — Tests Passing ✅\n\nAll tests pass. Marking PR as ready for review.\n",[1327],{"type":40,"tag":48,"props":1328,"children":1329},{"__ignoreMap":288},[1330],{"type":45,"value":1325},{"type":40,"tag":41,"props":1332,"children":1333},{},[1334,1339],{"type":40,"tag":60,"props":1335,"children":1336},{},[1337],{"type":45,"value":1338},"If tests fail:",{"type":45,"value":1321},{"type":40,"tag":280,"props":1341,"children":1344},{"className":1342,"code":1343,"language":45},[283],"🤖 **Claude Code** — Tests Failing ⚠️\n\nTests did not pass. Human review needed before this can be merged.\n\n**Failures:**\n[paste relevant test output — truncate to 20 lines if long]\n\nThe PR remains as a draft. Labeling this issue `needs-human` for manual follow-up.\n",[1345],{"type":40,"tag":48,"props":1346,"children":1347},{"__ignoreMap":288},[1348],{"type":45,"value":1343},{"type":40,"tag":41,"props":1350,"children":1351},{},[1352,1354,1360,1362,1368,1370,1375],{"type":45,"value":1353},"Then call ",{"type":40,"tag":48,"props":1355,"children":1357},{"className":1356},[],[1358],{"type":45,"value":1359},"mcp__claude_ai_Linear__save_issue",{"type":45,"value":1361}," to add label ",{"type":40,"tag":48,"props":1363,"children":1365},{"className":1364},[],[1366],{"type":45,"value":1367},"needs-human",{"type":45,"value":1369}," (if it exists — if not, skip the label). ",{"type":40,"tag":60,"props":1371,"children":1372},{},[1373],{"type":45,"value":1374},"Stop here",{"type":45,"value":1376}," — do not proceed to Stage 7.",{"type":40,"tag":74,"props":1378,"children":1379},{},[],{"type":40,"tag":78,"props":1381,"children":1383},{"id":1382},"stage-7-mark-ready-for-review",[1384],{"type":45,"value":1385},"Stage 7 — MARK READY FOR REVIEW",{"type":40,"tag":280,"props":1387,"children":1389},{"className":378,"code":1388,"language":380,"meta":288,"style":288},"gh pr ready [PR number or URL]\n",[1390],{"type":40,"tag":48,"props":1391,"children":1392},{"__ignoreMap":288},[1393],{"type":40,"tag":386,"props":1394,"children":1395},{"class":388,"line":389},[1396,1400,1404,1409,1414,1419,1424],{"type":40,"tag":386,"props":1397,"children":1398},{"style":445},[1399],{"type":45,"value":993},{"type":40,"tag":386,"props":1401,"children":1402},{"style":420},[1403],{"type":45,"value":998},{"type":40,"tag":386,"props":1405,"children":1406},{"style":420},[1407],{"type":45,"value":1408}," ready",{"type":40,"tag":386,"props":1410,"children":1411},{"style":456},[1412],{"type":45,"value":1413}," [PR ",{"type":40,"tag":386,"props":1415,"children":1416},{"style":420},[1417],{"type":45,"value":1418},"number",{"type":40,"tag":386,"props":1420,"children":1421},{"style":420},[1422],{"type":45,"value":1423}," or",{"type":40,"tag":386,"props":1425,"children":1426},{"style":420},[1427],{"type":45,"value":1428}," URL]\n",{"type":40,"tag":41,"props":1430,"children":1431},{},[1432,1434,1439],{"type":45,"value":1433},"Call ",{"type":40,"tag":48,"props":1435,"children":1437},{"className":1436},[],[1438],{"type":45,"value":1359},{"type":45,"value":235},{"type":40,"tag":97,"props":1441,"children":1442},{},[1443,1453],{"type":40,"tag":101,"props":1444,"children":1445},{},[1446,1451],{"type":40,"tag":48,"props":1447,"children":1449},{"className":1448},[],[1450],{"type":45,"value":247},{"type":45,"value":1452},": issue identifier",{"type":40,"tag":101,"props":1454,"children":1455},{},[1456,1462,1464,1469,1471,1476],{"type":40,"tag":48,"props":1457,"children":1459},{"className":1458},[],[1460],{"type":45,"value":1461},"state",{"type":45,"value":1463},": value of ",{"type":40,"tag":48,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":45,"value":174},{"type":45,"value":1470}," from config (default: ",{"type":40,"tag":48,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":45,"value":181},{"type":45,"value":130},{"type":40,"tag":74,"props":1478,"children":1479},{},[],{"type":40,"tag":78,"props":1481,"children":1483},{"id":1482},"stage-8-notify",[1484],{"type":45,"value":1485},"Stage 8 — NOTIFY",{"type":40,"tag":41,"props":1487,"children":1488},{},[1489],{"type":45,"value":1490},"Retrieve the issue's assignees. Compose the final comment.",{"type":40,"tag":41,"props":1492,"children":1493},{},[1494,1499,1501,1507],{"type":40,"tag":60,"props":1495,"children":1496},{},[1497],{"type":45,"value":1498},"If the issue has an assignee:",{"type":45,"value":1500},"\nUse ",{"type":40,"tag":48,"props":1502,"children":1504},{"className":1503},[],[1505],{"type":45,"value":1506},"mcp__claude_ai_Linear__get_user",{"type":45,"value":1508}," to look up the assignee's name.",{"type":40,"tag":41,"props":1510,"children":1511},{},[1512],{"type":45,"value":278},{"type":40,"tag":280,"props":1514,"children":1517},{"className":1515,"code":1516,"language":45},[283],"🤖 **Claude Code** — Ready for Review 🎉\n\n@[assignee name] — implementation is complete and the PR is ready for your review.\n\n**PR:** [PR Title](PR_URL)\n**Branch:** `[branch name]`\n\n**What was done:**\n[3-5 bullet summary of changes made]\n\n**To review:**\n1. Open the PR link above\n2. Check the implementation against the issue description\n3. Approve and merge, or request changes\n",[1518],{"type":40,"tag":48,"props":1519,"children":1520},{"__ignoreMap":288},[1521],{"type":45,"value":1516},{"type":40,"tag":41,"props":1523,"children":1524},{},[1525,1530],{"type":40,"tag":60,"props":1526,"children":1527},{},[1528],{"type":45,"value":1529},"If no assignee:",{"type":45,"value":1321},{"type":40,"tag":280,"props":1532,"children":1535},{"className":1533,"code":1534,"language":45},[283],"🤖 **Claude Code** — Ready for Review 🎉\n\nImplementation is complete. No assignee found on this issue — please assign someone to review the PR.\n\n**PR:** [PR Title](PR_URL)\n**Branch:** `[branch name]`\n\n**What was done:**\n[3-5 bullet summary of changes made]\n",[1536],{"type":40,"tag":48,"props":1537,"children":1538},{"__ignoreMap":288},[1539],{"type":45,"value":1534},{"type":40,"tag":74,"props":1541,"children":1542},{},[],{"type":40,"tag":78,"props":1544,"children":1546},{"id":1545},"error-handling",[1547],{"type":45,"value":1548},"Error handling",{"type":40,"tag":97,"props":1550,"children":1551},{},[1552,1569,1579,1589],{"type":40,"tag":101,"props":1553,"children":1554},{},[1555,1560,1562,1567],{"type":40,"tag":60,"props":1556,"children":1557},{},[1558],{"type":45,"value":1559},"Git errors",{"type":45,"value":1561}," (merge conflict, push rejected): post comment describing the error, set issue label ",{"type":40,"tag":48,"props":1563,"children":1565},{"className":1564},[],[1566],{"type":45,"value":1367},{"type":45,"value":1568},", stop.",{"type":40,"tag":101,"props":1570,"children":1571},{},[1572,1577],{"type":40,"tag":60,"props":1573,"children":1574},{},[1575],{"type":45,"value":1576},"gh CLI errors",{"type":45,"value":1578},": post comment with the error output, stop.",{"type":40,"tag":101,"props":1580,"children":1581},{},[1582,1587],{"type":40,"tag":60,"props":1583,"children":1584},{},[1585],{"type":45,"value":1586},"Any unrecoverable error",{"type":45,"value":1588},": always post a final comment explaining what failed and what state the work is in, so a human can pick up from where you left off. Never leave the issue silent.",{"type":40,"tag":101,"props":1590,"children":1591},{},[1592,1597,1599],{"type":40,"tag":60,"props":1593,"children":1594},{},[1595],{"type":45,"value":1596},"Worktree cleanup on failure",{"type":45,"value":1598},": if you stop early, note the worktree path in the comment so it can be cleaned up manually: ",{"type":40,"tag":48,"props":1600,"children":1602},{"className":1601},[],[1603],{"type":45,"value":1604},"git worktree remove [repo]\u002F.worktrees\u002F[issue-id] --force",{"type":40,"tag":1606,"props":1607,"children":1608},"style",{},[1609],{"type":45,"value":1610},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1612,"total":547},[1613,1632,1639,1654,1667],{"slug":1614,"name":1614,"fn":1615,"description":1616,"org":1617,"tags":1618,"stars":1629,"repoUrl":1630,"updatedAt":1631},"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},[1619,1622,1625,1628],{"name":1620,"slug":1621,"type":13},"CI\u002FCD","ci-cd",{"name":1623,"slug":1624,"type":13},"Deployment","deployment",{"name":1626,"slug":1627,"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":4,"name":4,"fn":5,"description":6,"org":1633,"tags":1634,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1635,1636,1637,1638],{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":1640,"name":1640,"fn":1641,"description":1642,"org":1643,"tags":1644,"stars":23,"repoUrl":24,"updatedAt":1653},"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},[1645,1646,1647,1650],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":1648,"slug":1649,"type":13},"Monitoring","monitoring",{"name":1651,"slug":1652,"type":13},"Triage","triage","2026-08-02T06:09:11.830055",{"slug":1655,"name":1655,"fn":1656,"description":1657,"org":1658,"tags":1659,"stars":23,"repoUrl":24,"updatedAt":1666},"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},[1660,1661,1664,1665],{"name":15,"slug":16,"type":13},{"name":1662,"slug":1663,"type":13},"Configuration","configuration",{"name":9,"slug":8,"type":13},{"name":1651,"slug":1652,"type":13},"2026-08-02T06:09:11.49437",{"slug":1668,"name":1668,"fn":1669,"description":1670,"org":1671,"tags":1672,"stars":23,"repoUrl":24,"updatedAt":1683},"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},[1673,1676,1677,1680],{"name":1674,"slug":1675,"type":13},"Audit","audit",{"name":9,"slug":8,"type":13},{"name":1678,"slug":1679,"type":13},"Project Management","project-management",{"name":1681,"slug":1682,"type":13},"Task Management","task-management","2026-07-14T05:24:09.02295",{"items":1685,"total":529},[1686,1693,1700,1707],{"slug":4,"name":4,"fn":5,"description":6,"org":1687,"tags":1688,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1689,1690,1691,1692],{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":1640,"name":1640,"fn":1641,"description":1642,"org":1694,"tags":1695,"stars":23,"repoUrl":24,"updatedAt":1653},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1696,1697,1698,1699],{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"name":1648,"slug":1649,"type":13},{"name":1651,"slug":1652,"type":13},{"slug":1655,"name":1655,"fn":1656,"description":1657,"org":1701,"tags":1702,"stars":23,"repoUrl":24,"updatedAt":1666},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1703,1704,1705,1706],{"name":15,"slug":16,"type":13},{"name":1662,"slug":1663,"type":13},{"name":9,"slug":8,"type":13},{"name":1651,"slug":1652,"type":13},{"slug":1668,"name":1668,"fn":1669,"description":1670,"org":1708,"tags":1709,"stars":23,"repoUrl":24,"updatedAt":1683},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1710,1711,1712,1713],{"name":1674,"slug":1675,"type":13},{"name":9,"slug":8,"type":13},{"name":1678,"slug":1679,"type":13},{"name":1681,"slug":1682,"type":13}]