Skip to main content

organize-linear-tasks

Audit and reorganize all open Linear tasks — detect ghosts, duplicates, stale items, and missing metadata

跳到安装

来源信息

仓库
glowingkitty/OpenMates
最近来源活动
2026年6月1日 15:36
检测到的 SKILL.md 语言
英语
星标
46
分支
3

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
organize-linear-tasks
description
Audit and reorganize all open Linear tasks — detect ghosts, duplicates, stale items, and missing metadata
user-invocable
true
argument-hint
[--quick] [--section N]
## Instructions You are running a weekly audit of the OpenMates Linear backlog. This is an interactive, multi-section workflow that cross-references Linear tasks with git history, presents findings section-by-section, and applies only user-approved changes. **Arguments:** - `--quick` — skip comment fetching and task decomposition analysis (faster, less thorough) - `--section N` — jump directly to section N (0-10) to resume an interrupted audit --- ### Step 1: Data Gathering Gather all data upfront before any analysis. Run these in parallel where possible. #### 1a. Fetch all open issues Use `python3 scripts/linear.py list --team OPE --all --limit 100 --json` to fetch Linear issues from team OpenMates, then filter out Done and Canceled. Fetch in batches if needed. For each issue, collect: identifier, title, description, state, priority, labels, project, milestone, createdAt, updatedAt, assignee. Store the full list mentally — you'll reference it across all sections. #### 1a-bis. Fetch completed issues for archival review Also fetch ALL issues with state **Done** from team OpenMates. Collect: identifier, title, completedAt (or updatedAt), labels, project. These are used in Section 0 for archival cleanup. #### 1b. Fetch organizational context Run these in parallel where useful: ```bash python3 scripts/linear.py states --team OPE --json python3 scripts/linear.py labels --team OPE --json ``` #### 1c. Fetch comments (skip if `--quick` or if ALL tasks are < 14 days old) For each open issue, fetch comments via `python3 scripts/linear.py get OPE-XX --comments --json`. Record the date of the most recent comment per issue — this is the "last activity" signal for staleness detection. **Optimization:** If the oldest open task is < 14 days old, skip comment fetching entirely — nothing can be stale. Use updatedAt as the activity signal instead. #### 1d. Git cross-reference Scan the past week of git history across all branches for task references: ```bash git log --all --oneline --since="1 week ago" | grep -oP 'OPE-\d+' | sort | uniq -c | sort -rn ``` For each open task that appears in git, get its commit details: ```bash git log --all --oneline --since="1 week ago" --grep="OPE-XX" ``` Also check for any OPE references in git that don't match an open task (orphaned commits): ```bash git log --all --oneline --since="1 week ago" | grep -oP 'OPE-\d+' | sort -u ``` #### 1e. Present Overview After gathering, show a quick summary before diving into sections: ``` ## Backlog Audit — Overview Open tasks: XX (Backlog: X, Todo: X, In Progress: X, In Review: X) Projects: X | Milestones: X | Labels: X Git references found (past week): X tasks mentioned in Y commits Tasks with no description: X Tasks with no priority: X Starting analysis... ``` --- ### Step 2: Section 0 — Delete Done Tasks Linear's free plan has a 250-issue limit. This section permanently deletes completed tasks older than 24 hours to keep the workspace clean. Filter the Done issues fetched in Step 1a-bis: - Only show tasks where completedAt (or updatedAt if completedAt unavailable) is **more than 24 hours ago** - Skip tasks completed in the last 24 hours — they may still need review or follow-up Present findings: ``` ## 0. Delete Done Tasks — Completed >24h Ago (N found) | # | Task | Title | Completed | Project | Labels | |---|------|-------|-----------|---------|--------| | 1 | OPE-XX | "Fix auth race condition" | 3 days ago | Web App | Bug | ``` Use `AskUserQuestion` with options: - **all** — delete all listed tasks - **pick** — go through one by one (keep / delete) - **skip** — skip this section, keep all **For approved deletions, use the Linear GraphQL API directly** (the MCP doesn't expose delete): ```bash API_KEY="$LINEAR_API_KEY" # Get UUID from identifier UUID=$(curl -s -X POST https://api.linear.app/graphql \ -H "Content-Type: application/json" \ -H "Authorization: $API_KEY" \ -d '{"query": "{ issue(id: \"OPE-XX\") { id } }"}' \ | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['issue']['id'])") # Delete curl -s -X POST https://api.linear.app/graphql \ -H "Content-Type: application/json" \ -H "Authorization: $API_KEY" \ -d "{\"query\": \"mutation { issueDelete(id: \\\"$UUID\\\") { success } }\"}" ``` **Batch deletions** into a single bash script for efficiency — don't make 18 sequential tool calls. > **Note:** `issueDelete` is a soft delete — issues go to trash and can be restored for 30 days in Linear. Report the count of deleted tasks for the summary. --- ### Step 2.5: Section 0.5 — In Review Cleanup Many "In Review" tasks are actually done — the review step is often skipped. Check all In Review tasks and ask which are truly complete. Present findings: ``` ## 0.5. In Review Cleanup — Are These Done? (N found) | # | Task | Title | In Review Since | Has Git Commits | |---|------|-------|-----------------|-----------------| | 1 | OPE-XX | "Fix passkey login crash" | 2 days | Yes (3 commits) | | 2 | OPE-YY | "Remove npm validation from deploy" | 1 day | Yes (1 commit) | ``` Use `AskUserQuestion`: - **all done** — mark all as Done - **pick** — go through one by one - **skip** — leave all in In Review --- ### Step 3: Section 1 — Ghost Tasks (done in git, open in Linear) > From this section onward, exclude any tasks handled in Sections 0 and 0.5. Cross-reference the git history from Step 1d with open tasks. A "ghost task" is one where: - Commits in the past week clearly reference OPE-XX - The commit messages suggest the work is complete (e.g., "fix:", "feat:", "implement", "close", "resolve") - But the Linear task is still in Todo, In Progress, or Backlog Present findings — **always include title in every table**: ``` ## 1. Ghost Tasks — Completed in Code, Open in Linear (N found) | # | Task | Title | Status | Commits (past week) | Last Commit | Suggested Action | |---|------|-------|--------|---------------------|-------------|-----------------| | 1 | OPE-XX | "Fix chat pagination" | Todo | 2 commits | 2026-03-28 | → Mark Done | ``` Use `AskUserQuestion` with options: - **all** — mark all as Done - **pick** — go through one by one - **skip** — skip this section For approved items, call `python3 scripts/linear.py update OPE-XX --state Done`. Remove approved ghost tasks from your working set for subsequent sections. --- ### Step 3.5: Section 1.5 — `claude-is-working` Label Cleanup Find tasks with the `claude-is-working` label that are in Done, In Review, or Backlog status — these likely have stale labels from ended sessions. Present findings: ``` ## 1.5. Stale `claude-is-working` Labels (N found) | # | Task | Title | Status | Label Should Be Removed? | |---|------|-------|--------|--------------------------| | 1 | OPE-XX | "Fix show more chats" | Done | Yes — task is done | | 2 | OPE-YY | "Improve home search" | In Progress | Maybe — check if session is active | ``` Use `AskUserQuestion`: - **all** — remove `claude-is-working` from all listed - **pick** — go through one by one - **skip** — leave as-is --- ### Step 4: Section 2 — Stale Tasks A task is stale if: - **Backlog** status AND updatedAt/last comment > 30 days ago AND no git commits reference it - **Todo** status AND updatedAt/last comment > 14 days ago AND no git commits reference it - **In Progress** status AND updatedAt/last comment > 7 days ago AND no git commits in the past week Present findings: ``` ## 2. Stale Tasks — No Activity (N found) | # | Task | Title | Status | Last Activity | Age | Suggested Action | |---|------|-------|--------|---------------|-----|-----------------| | 1 | OPE-XX | "Old feature request" | Backlog | 45 days ago | Created 60d ago | → Cancel or re-prioritize | ``` Use `AskUserQuestion` — for each stale task, options are: - **cancel** — delete the task - **backlog** — move to Backlog (demote) - **keep** — leave as-is (user confirms it's still relevant) - **skip** — skip this section entirely Apply approved changes. Remove deleted tasks from working set. --- ### Step 5: Section 3 — Duplicate / Merge Candidates Compare all remaining open tasks for duplicates or near-duplicates: - Normalize titles: lowercase, strip prefixes (Feat:, Fix:, Docs:, etc.), strip common words - Flag pairs where titles share >60% of significant words - Flag pairs where descriptions mention the same files, components, or error messages - **Detect title prefix stacking**: flag titles starting with "Fix: Fix:", "Feat: Feat:", etc. Present findings: ``` ## 3. Duplicate / Merge Candidates (N pairs found) ### Pair 1: - **OPE-XX**: "Fix encryption key sync on mobile" (In Progress, High) - **OPE-YY**: "Encryption key not syncing across devices" (Todo, Medium) - **Overlap**: Both reference encryption key sync, likely same issue ``` Use `AskUserQuestion` per pair: - **merge** — close the lower-priority one, add a comment linking to the kept one - **relate** — keep both but note they're related (comment on both) - **skip** — they're different, leave both For merges: mark the duplicate as Done (the work was done under the other task), post comment on both linking them. Remove merged tasks from working set. --- ### Step 6: Section 4 — Unclear Tasks Flag tasks that need clarification: - Title is < 5 words AND no description - Title contains only vague terms ("fix thing", "update stuff", "do the thing") - Description is empty or < 20 characters - Title is a question without context - **Title has prefix stacking** ("Fix: Fix:", "Feat: Feat:") Present findings — **always include the full title**: ``` ## 4. Unclear Tasks — Need Better Titles or Descriptions (N found) | # | Task | Title | Has Description | Created | |---|------|-------|-----------------|---------| | 1 | OPE-XX | "fix it" | No | 15 days ago | | 2 | OPE-YY | "Fix: Fix: update the component" | No | 8 days ago | ``` For EACH unclear task, use `AskUserQuestion`: - "What did you mean by **OPE-XX: 'fix it'**? I'll update the title and add a description." Based on the user's response, call `python3 scripts/linear.py update OPE-XX --title "..." --description-file <file>` to update the title and description. If the user says they don't remember or it's no longer relevant, delete the task. --- ### Step 7: Section 5 — Priority Audit Flag tasks with priority issues: - **No priority set** — any task in Todo or In Progress without a priority - **Questionable priority** — Urgent/High priority but sitting in Backlog for >7 days (was it actually urgent?) - **Low priority In Progress** — someone started a low-priority task while high-priority items wait Present findings — **always include title**: ``` ## 5. Priority Audit (N issues found) ### Missing Priority (X tasks): | # | Task | Title | Status | Labels | Suggested Priority | |---|------|-------|--------|--------|--------------------| | 1 | OPE-XX | "Critical auth bug" | In Progress | Bug | → High (2) | ``` Use `AskUserQuestion` with approval per group. Apply priority changes via `python3 scripts/linear.py update OPE-XX --priority N`. --- ### Step 8: Section 6 — Label Cleanup Analyze label usage across all remaining open tasks: - Tasks with NO labels at all - Tasks where labels seem wrong (e.g., a backend Python task labeled "frontend") - Unused labels that exist but aren't on any open tasks - Tasks that should have the `Idea` label (questions, brain dumps, "what if" titles) Present findings — **always include title**: ``` ## 6. Label Cleanup (N issues found)
在 GitHub 查看
这个 SKILL.md 很大,SkillsMP 这里只预览前一段内容。 在 GitHub 查看