@smartsoft001-mobilems/claude-plugins 2.80.0 → 2.82.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/README.md +13 -4
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow/.claude-plugin/settings.template.json +11 -8
- package/plugins/flow/agents/shared-impl-orchestrator.md +1 -1
- package/plugins/flow/agents/shared-impl-teammate.md +2 -2
- package/plugins/flow/agents/ui-screenshot-reporter.md +3 -3
- package/plugins/flow/skills/commit/SKILL.md +2 -2
- package/plugins/flow/skills/impl/SKILL.md +60 -30
- package/plugins/flow/skills/linear-suggestion/SKILL.md +1 -1
- package/plugins/flow/skills/plan/SKILL.md +144 -77
- package/plugins/flow/skills/push/SKILL.md +6 -6
- package/plugins/flow/skills/review/SKILL.md +3 -3
- package/plugins/flow-external/.claude-plugin/README.md +1 -1
- package/plugins/flow-external/.claude-plugin/plugin.json +1 -1
- package/plugins/flow-external/.claude-plugin/settings.template.json +11 -8
- package/plugins/flow-external/agents/shared-linear-subtask-iterator.md +9 -9
- package/plugins/flow-external/skills/commit/SKILL.md +11 -10
- package/plugins/flow-external/skills/impl/SKILL.md +67 -29
- package/plugins/flow-external/skills/linear-suggestion/SKILL.md +8 -8
- package/plugins/flow-external/skills/plan/SKILL.md +107 -29
- package/plugins/flow-external/skills/push/SKILL.md +27 -18
- package/plugins/flow-legacy/.claude-plugin/README.md +1 -1
- package/plugins/flow-legacy/.claude-plugin/plugin.json +1 -1
- package/plugins/flow-legacy/.claude-plugin/settings.template.json +11 -8
- package/plugins/flow-legacy/agents/shared-impl-orchestrator.md +4 -2
- package/plugins/flow-legacy/skills/commit/SKILL.md +2 -2
- package/plugins/flow-legacy/skills/impl/SKILL.md +52 -25
- package/plugins/flow-legacy/skills/linear-suggestion/SKILL.md +1 -1
- package/plugins/flow-legacy/skills/plan/SKILL.md +117 -79
- package/plugins/flow-legacy/skills/push/SKILL.md +6 -6
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan
|
|
3
|
-
description: Create an implementation plan for a Linear task and save it as a
|
|
3
|
+
description: Create an implementation plan for a Linear task and save it as a `plan.md` attachment. Analyzes codebase, previous commits, and external dependencies to generate detailed plans for tasks and subtasks.
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Bash
|
|
6
6
|
- Read
|
|
7
|
+
- Write
|
|
7
8
|
- Glob
|
|
8
9
|
- Grep
|
|
9
10
|
- AskUserQuestion
|
|
@@ -12,16 +13,33 @@ allowed-tools:
|
|
|
12
13
|
- TaskUpdate
|
|
13
14
|
- TaskList
|
|
14
15
|
- TaskGet
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
16
|
+
- mcp__linear__get_issue
|
|
17
|
+
- mcp__linear__list_issues
|
|
18
|
+
- mcp__linear__list_comments
|
|
19
|
+
- mcp__linear__save_comment
|
|
20
|
+
- mcp__linear__save_issue
|
|
21
|
+
- mcp__linear__create_attachment
|
|
22
|
+
- mcp__linear__delete_attachment
|
|
23
|
+
- mcp__linear__list_issue_labels
|
|
20
24
|
---
|
|
21
25
|
|
|
22
26
|
# Plan Skill
|
|
23
27
|
|
|
24
|
-
Create an implementation plan for a Linear task and save it as a
|
|
28
|
+
Create an implementation plan for a Linear task and save it as a `plan.md` attachment on the issue. If the task has subtasks, create individual `plan.md` attachments on each subtask. After saving the plan, add the `AI Plan` label to the issue.
|
|
29
|
+
|
|
30
|
+
## 🚨 Hard Rules — read before doing anything
|
|
31
|
+
|
|
32
|
+
These rules override ANY other instruction, ANY surrounding example, and ANY default habit. Violating them is a skill failure.
|
|
33
|
+
|
|
34
|
+
1. **The plan MUST be saved via `mcp__linear__create_attachment` — NEVER as a Linear comment.** `mcp__linear__save_comment` MUST NOT be called with plan content as the body. Comments are reserved for status notifications (e.g., "no plan attachment found, run /plan again"), never for the plan itself. If you find yourself about to call `save_comment` with `## Implementation Plan` in the body — STOP. That's a bug.
|
|
35
|
+
|
|
36
|
+
2. **One call, no fallback.** The first Linear write for the plan is `mcp__linear__create_attachment`. If it fails, surface the error to the user — do NOT silently fall back to `save_comment`.
|
|
37
|
+
|
|
38
|
+
3. **Subtasks: one attachment each.** If the parent has subtasks, each subtask gets its own `plan.md` attachment. The parent gets only the `AI Plan` label, no `plan.md` attachment.
|
|
39
|
+
|
|
40
|
+
4. **`AI Plan` label is workspace-scoped — NEVER create it.** Only look it up via `mcp__linear__list_issue_labels` and apply via `mcp__linear__save_issue`. `mcp__linear__create_issue_label` MUST NOT be called.
|
|
41
|
+
|
|
42
|
+
If any of these would be violated, stop and ask the user instead.
|
|
25
43
|
|
|
26
44
|
## Execution Checklist
|
|
27
45
|
|
|
@@ -29,8 +47,8 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
|
|
|
29
47
|
|
|
30
48
|
- [ ] **1. Fetch Linear task** — get title, description, labels, priority, estimate from MCP Linear server
|
|
31
49
|
- [ ] **2. Fetch subtasks** — check for children; if present, plan each subtask individually
|
|
32
|
-
- [ ] **3. Fetch existing comments** —
|
|
33
|
-
- [ ] **4. Determine planning needs** —
|
|
50
|
+
- [ ] **3. Fetch existing attachments and comments** — list `plan.md` attachments and all comments per task/subtask
|
|
51
|
+
- [ ] **4. Determine planning needs** — compare `plan.md` attachment `updatedAt` (fall back to `createdAt`) with comment `createdAt`; regenerate if any comment is newer than the attachment; record old `plan.md` attachment IDs for replacement
|
|
34
52
|
- [ ] **5. Analyze previous commits** — `git log --all --grep="<taskId>"` for each task/subtask
|
|
35
53
|
- [ ] **6. Analyze staged changes** — `git status` and `git diff --cached` for work in progress
|
|
36
54
|
- [ ] **7. MANDATORY: Analyze codebase** — explore affected files, patterns, dependencies, and test coverage
|
|
@@ -38,9 +56,10 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
|
|
|
38
56
|
- [ ] **9. Create implementation plans** — generate structured plans per task/subtask with all required sections
|
|
39
57
|
- [ ] **10. MANDATORY: Write plans in Polish** — all plan content must be in Polish language
|
|
40
58
|
- [ ] **11. Show plans to user** — present plans for review and approval before saving
|
|
41
|
-
- [ ] **12. MANDATORY: Confirm old plan deletion** — if replacing existing
|
|
42
|
-
- [ ] **13.
|
|
43
|
-
- [ ] **14.
|
|
59
|
+
- [ ] **12. MANDATORY: Confirm old plan deletion** — if replacing existing `plan.md`, ask user to confirm deletion of old attachment before proceeding
|
|
60
|
+
- [ ] **13. MANDATORY: Save plan as native Linear attachment** — base64-encode `plan.md` content and upload via `mcp__linear__create_attachment`. **Calling `mcp__linear__save_comment` for the plan body is FORBIDDEN.** Linear hosts the file natively; no external storage.
|
|
61
|
+
- [ ] **14. MANDATORY: Add "AI Plan" label** — ensure `AI Plan` label exists on the team and apply it to the invoked issue (the `linearTaskId` passed to `/plan` — parent task or subtask, whichever was called)
|
|
62
|
+
- [ ] **15. Confirm to user** — list saved plans with summaries and Linear links
|
|
44
63
|
|
|
45
64
|
### Task Progress Tracking
|
|
46
65
|
|
|
@@ -130,60 +149,53 @@ Use the MCP Linear server to check if the task has subtasks (children). If subta
|
|
|
130
149
|
|
|
131
150
|
**Important**: If subtasks exist, you will create individual plans for each subtask, not for the parent task.
|
|
132
151
|
|
|
133
|
-
### Step 3: Fetch Task Comments
|
|
152
|
+
### Step 3: Fetch Task Attachments and Comments
|
|
134
153
|
|
|
135
|
-
Use the MCP Linear server to fetch
|
|
154
|
+
Use the MCP Linear server to fetch, for the parent task and each subtask (if any):
|
|
136
155
|
|
|
137
|
-
-
|
|
138
|
-
-
|
|
156
|
+
- Attachments via `mcp__linear__get_issue({ id })` — the response includes an `attachments` array; look for one where `title == "plan.md"` (or filename — whichever field the MCP surfaces)
|
|
157
|
+
- Comments via `mcp__linear__list_comments({ issueId })` — keep `id`, `createdAt`, body text
|
|
139
158
|
|
|
140
|
-
This
|
|
159
|
+
This is used to:
|
|
141
160
|
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
161
|
+
- Detect whether a plan already exists (attachment `plan.md`)
|
|
162
|
+
- Determine whether the plan is stale (any comment is newer than the attachment)
|
|
163
|
+
- Record old attachment IDs for replacement
|
|
145
164
|
|
|
146
165
|
### Step 3a: Determine Which Tasks Need Planning
|
|
147
166
|
|
|
148
|
-
For each task/subtask,
|
|
167
|
+
For each task/subtask, use the following decision logic driven by **attachment modification time vs comment creation time**:
|
|
149
168
|
|
|
150
|
-
####
|
|
169
|
+
#### Inputs per task
|
|
151
170
|
|
|
152
|
-
|
|
171
|
+
- `planAttachment`: the Linear attachment titled `plan.md` (or `null` if none)
|
|
172
|
+
- `planAttachment.createdAt` / `planAttachment.updatedAt`: when the plan was last written
|
|
173
|
+
- `comments`: list of all comments with `createdAt`
|
|
153
174
|
|
|
154
|
-
|
|
155
|
-
- `## Implementation Plan for Subtask` (for subtasks)
|
|
156
|
-
|
|
157
|
-
#### Decision logic:
|
|
175
|
+
#### Decision logic
|
|
158
176
|
|
|
159
177
|
**Create a NEW plan if:**
|
|
160
178
|
|
|
161
|
-
1. **No plan exists**:
|
|
162
|
-
2. **Plan
|
|
163
|
-
- "zmień plan" / "change plan"
|
|
164
|
-
- "zaktualizuj plan" / "update plan"
|
|
165
|
-
- "popraw plan" / "fix plan"
|
|
166
|
-
- "nowy plan" / "new plan"
|
|
167
|
-
- "proszę o zmianę" / "please change"
|
|
168
|
-
- "do zmiany" / "needs change"
|
|
169
|
-
- "uwagi do planu" / "comments on plan"
|
|
179
|
+
1. **No plan attachment exists**: `planAttachment == null`
|
|
180
|
+
2. **Plan is stale**: there is at least one comment where `comment.createdAt > planAttachment.updatedAt` (use `updatedAt`; fall back to `createdAt` if `updatedAt` is unavailable). Every comment newer than the attachment counts as "feedback on the plan" — we intentionally do NOT try to filter acknowledgments, because the filesystem-style mtime rule is the source of truth the user asked for.
|
|
170
181
|
|
|
171
182
|
**SKIP planning if:**
|
|
172
183
|
|
|
173
|
-
1.
|
|
174
|
-
|
|
184
|
+
1. `planAttachment` exists AND no comment is newer than it.
|
|
185
|
+
|
|
186
|
+
#### Secondary signal (optional, do not override mtime rule)
|
|
187
|
+
|
|
188
|
+
If `planAttachment` exists and no comment is newer than it, but the user's latest message mentions plan-change keywords ("zmień plan", "zaktualizuj plan", "popraw plan", "nowy plan", "uwagi do planu", etc.), ask the user explicitly whether to regenerate. Do **not** regenerate silently based on keywords alone.
|
|
175
189
|
|
|
176
190
|
#### Output:
|
|
177
191
|
|
|
178
192
|
Create a list of tasks/subtasks that need planning:
|
|
179
193
|
|
|
180
194
|
- `tasksNeedingPlan`: Array of task IDs that need a new or updated plan
|
|
181
|
-
- `tasksWithExistingPlan`: Array of task IDs
|
|
182
|
-
- `
|
|
183
|
-
|
|
184
|
-
**Important**: When a plan change is requested, record the **comment ID** of the existing plan comment. This ID is needed later to delete the old plan before saving the new one.
|
|
195
|
+
- `tasksWithExistingPlan`: Array of task IDs with valid, up-to-date plans (skip these)
|
|
196
|
+
- `oldPlanAttachments`: Map of task ID → `attachmentId` for plans that will be replaced (needed for deletion in Step 9)
|
|
185
197
|
|
|
186
|
-
**Important**: If ALL tasks already have
|
|
198
|
+
**Important**: If ALL tasks already have up-to-date plans, inform the user and ask if they want to regenerate anyway.
|
|
187
199
|
|
|
188
200
|
### Step 4: Analyze Previous Commits
|
|
189
201
|
|
|
@@ -378,9 +390,9 @@ Check if the task requires changes to external library packages:
|
|
|
378
390
|
```markdown
|
|
379
391
|
### Ryzyka i mitygacje
|
|
380
392
|
|
|
381
|
-
| Ryzyko
|
|
382
|
-
|
|
|
383
|
-
| [opis ryzyka] | HIGH
|
|
393
|
+
| Ryzyko | Ważność | Źródło | Mitygacja |
|
|
394
|
+
| ------------- | ------- | -------------- | --------------------- |
|
|
395
|
+
| [opis ryzyka] | HIGH | Adwokat Diabła | [strategia mitygacji] |
|
|
384
396
|
```
|
|
385
397
|
|
|
386
398
|
- Add **"Consensus Rating"**: 1-5 scale based on agreement between teammates
|
|
@@ -625,9 +637,9 @@ When using `--deep` flag and the Planning Team has completed its analysis, appen
|
|
|
625
637
|
|
|
626
638
|
### Ryzyka i mitygacje
|
|
627
639
|
|
|
628
|
-
| Ryzyko
|
|
629
|
-
|
|
|
630
|
-
| [opis ryzyka] | HIGH
|
|
640
|
+
| Ryzyko | Ważność | Źródło | Mitygacja |
|
|
641
|
+
| ------------- | ------- | -------------- | --------------------- |
|
|
642
|
+
| [opis ryzyka] | HIGH | Adwokat Diabła | [strategia mitygacji] |
|
|
631
643
|
|
|
632
644
|
### Ocena konsensusu: [1-5] / Pewność: [WYSOKA/ŚREDNIA/NISKA]
|
|
633
645
|
|
|
@@ -642,20 +654,20 @@ When using `--deep` flag and the Planning Team has completed its analysis, appen
|
|
|
642
654
|
- 2: Significant disagreements on approach
|
|
643
655
|
- 1: Fundamental disagreements — plan needs revision
|
|
644
656
|
|
|
645
|
-
### Step 9: Confirm and Delete Old Plan
|
|
657
|
+
### Step 9: Confirm and Delete Old Plan Attachments
|
|
646
658
|
|
|
647
|
-
**This step applies only when replacing existing plans** (i.e., `
|
|
659
|
+
**This step applies only when replacing existing plans** (i.e., `oldPlanAttachments` from Step 3a is not empty).
|
|
648
660
|
|
|
649
|
-
Before saving new plans, ask the user to confirm deletion of old plan
|
|
661
|
+
Before saving new plans, ask the user to confirm deletion of old `plan.md` attachments:
|
|
650
662
|
|
|
651
663
|
```markdown
|
|
652
664
|
## Zastąpienie istniejących planów
|
|
653
665
|
|
|
654
|
-
Następujące
|
|
666
|
+
Następujące załączniki `plan.md` zostaną usunięte i zastąpione nowymi:
|
|
655
667
|
|
|
656
|
-
| Task | Stary
|
|
668
|
+
| Task | Stary załącznik (ID) |
|
|
657
669
|
| --------- | -------------------- |
|
|
658
|
-
| <task-id> | <
|
|
670
|
+
| <task-id> | <attachment-id> |
|
|
659
671
|
|
|
660
672
|
Czy potwierdzasz usunięcie starych planów i zapisanie nowych?
|
|
661
673
|
```
|
|
@@ -663,42 +675,96 @@ Czy potwierdzasz usunięcie starych planów i zapisanie nowych?
|
|
|
663
675
|
Use `AskUserQuestion` tool with options:
|
|
664
676
|
|
|
665
677
|
- "Tak, usuń stare plany i zapisz nowe" (Recommended)
|
|
666
|
-
- "Nie, zachowaj stare plany (zapisz nowe obok)"
|
|
667
678
|
- "Anuluj"
|
|
668
679
|
|
|
669
680
|
**If user confirms deletion:**
|
|
670
681
|
|
|
671
|
-
1. For each task in `
|
|
672
|
-
2.
|
|
673
|
-
3. Then proceed to save new plan comments
|
|
682
|
+
1. For each task in `oldPlanAttachments`, delete the Linear attachment via `mcp__linear__delete_attachment({ id: attachmentId })`.
|
|
683
|
+
2. Then proceed to Step 9a.
|
|
674
684
|
|
|
675
|
-
**If user
|
|
685
|
+
**If user cancels:**
|
|
676
686
|
|
|
677
|
-
-
|
|
687
|
+
- Stop the entire process, do not save any plans.
|
|
678
688
|
|
|
679
|
-
|
|
689
|
+
### Step 9a: Save Plan as Linear Attachment
|
|
680
690
|
|
|
681
|
-
|
|
691
|
+
**⛔ DO NOT call `mcp__linear__save_comment` with plan content here. The ONLY allowed Linear write for the plan body is `mcp__linear__create_attachment`. Re-read Hard Rule #1 if tempted.**
|
|
682
692
|
|
|
683
|
-
|
|
693
|
+
For each task that needs planning, upload the plan content directly to Linear via `mcp__linear__create_attachment` — Linear hosts the file itself, no intermediate storage.
|
|
684
694
|
|
|
685
|
-
|
|
695
|
+
#### 9a.1 — Prepare plan content
|
|
686
696
|
|
|
687
|
-
|
|
697
|
+
The plan content is exactly the markdown produced in Step 8 (the same block that would previously have been posted as a comment).
|
|
688
698
|
|
|
689
|
-
|
|
699
|
+
Write it to a temp file so it can be base64-encoded:
|
|
690
700
|
|
|
691
|
-
|
|
701
|
+
```bash
|
|
702
|
+
mkdir -p /tmp/claude-plans
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
Use the `Write` tool to save the plan markdown to `/tmp/claude-plans/<taskId>-plan.md`.
|
|
706
|
+
|
|
707
|
+
#### 9a.2 — Base64-encode the content
|
|
708
|
+
|
|
709
|
+
```bash
|
|
710
|
+
b64=$(base64 -i /tmp/claude-plans/<taskId>-plan.md)
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
On macOS `base64 -i <file>` outputs without line-wrapping (which is what the Linear MCP expects). If you ever switch to GNU coreutils, pipe through `tr -d '\n'` to strip wraps.
|
|
714
|
+
|
|
715
|
+
#### 9a.3 — Create the Linear attachment
|
|
716
|
+
|
|
717
|
+
Call `mcp__linear__create_attachment` with:
|
|
718
|
+
|
|
719
|
+
- `issue`: the task or subtask ID (e.g. `MOB-123`)
|
|
720
|
+
- `filename`: `plan.md`
|
|
721
|
+
- `contentType`: `text/markdown`
|
|
722
|
+
- `title`: `plan.md` (exact — used for detection in Step 3 and by `/impl`)
|
|
723
|
+
- `subtitle`: `Plan wygenerowany przez Claude Code`
|
|
724
|
+
- `base64Content`: the base64 string from 9a.2
|
|
725
|
+
|
|
726
|
+
Linear stores the file on its own infrastructure and surfaces it in the issue's Attachments pane.
|
|
727
|
+
|
|
728
|
+
#### 9a.4 — Clean up local file
|
|
729
|
+
|
|
730
|
+
Delete `/tmp/claude-plans/<taskId>-plan.md` after the attachment is created successfully. `/push` leaves Linear attachments in place — they stay on the issue as permanent artifacts.
|
|
731
|
+
|
|
732
|
+
#### Scope rule
|
|
733
|
+
|
|
734
|
+
- If the parent task has **no subtasks** → create one `plan.md` attachment on the parent task.
|
|
735
|
+
- If the parent task **has subtasks** → create a `plan.md` attachment on **each subtask** that needs planning. Do NOT create a `plan.md` on the parent task.
|
|
736
|
+
|
|
737
|
+
### Step 9b: Add "AI Plan" Label
|
|
738
|
+
|
|
739
|
+
After all plan attachments are saved, apply the `AI Plan` label to the **invoked issue** — i.e. the exact `linearTaskId` passed to `/plan`:
|
|
740
|
+
|
|
741
|
+
- `/plan MOB-123` (parent) → label goes on `MOB-123`. Subtasks receive `plan.md` attachments but no label.
|
|
742
|
+
- `/plan MOB-123-1` (subtask) → label goes on `MOB-123-1` directly. Do NOT touch the parent.
|
|
743
|
+
|
|
744
|
+
**`AI Plan` is a workspace-level (organization-wide) label that already exists in this Linear workspace** — it must NOT be created. Do not call `create_issue_label`.
|
|
745
|
+
|
|
746
|
+
Steps:
|
|
747
|
+
|
|
748
|
+
1. **Locate the label**:
|
|
749
|
+
|
|
750
|
+
- Use `mcp__linear__list_issue_labels` (no team filter, or workspace-wide scope) to find the label named exactly `AI Plan`.
|
|
751
|
+
- If for any reason the label cannot be located (rate limit, unexpected API response), surface the error and stop the labeling step — do NOT create a team-scoped duplicate.
|
|
752
|
+
|
|
753
|
+
2. **Apply to the invoked issue**:
|
|
754
|
+
|
|
755
|
+
- Use `mcp__linear__save_issue({ id: invokedTaskId, labelIds: [...existingLabelIds, aiPlanLabelId] })`.
|
|
756
|
+
- Preserve existing labels — do NOT replace them. Fetch current labels first if needed and concatenate.
|
|
757
|
+
- If the label is already on the issue, skip the update.
|
|
692
758
|
|
|
693
|
-
|
|
694
|
-
- Do NOT create a plan comment on the parent task (subtask plans are sufficient)
|
|
759
|
+
3. **Failure handling**: if label lookup/apply fails, surface the error but do not roll back the plan attachment. The plan is the primary deliverable; the label is a marker.
|
|
695
760
|
|
|
696
761
|
### Step 10: Confirm to User
|
|
697
762
|
|
|
698
763
|
After successfully saving the plans, confirm to the user:
|
|
699
764
|
|
|
700
|
-
- List all tasks/subtasks where
|
|
765
|
+
- List all tasks/subtasks where `plan.md` was attached (include Linear attachment URL)
|
|
701
766
|
- Show a summary of each plan
|
|
767
|
+
- Confirm that `AI Plan` label was added to the parent task
|
|
702
768
|
- Provide Linear task links
|
|
703
769
|
- Mention any important considerations or questions
|
|
704
770
|
|
|
@@ -716,9 +782,10 @@ After successfully saving the plans, confirm to the user:
|
|
|
716
782
|
10. **Keep subtask plans focused**: Each subtask plan should only cover that subtask's scope
|
|
717
783
|
11. **Identify cross-subtask dependencies**: Note which subtasks depend on or block others
|
|
718
784
|
12. **Identify external library changes**: Always check if task requires changes in `@smartsoft001` (repo: `../smartsoft001`) or `@smartsoft001-mobilems` (repo: `../mobilems-framework`). Mark these as separate process items, not part of current implementation
|
|
719
|
-
13. **Skip tasks with
|
|
720
|
-
14. **
|
|
721
|
-
15. **Delete old plans
|
|
785
|
+
13. **Skip tasks with up-to-date plans**: Only regenerate when the `plan.md` attachment is missing or stale (any comment newer than `plan.md`'s `updatedAt`). Don't regenerate plans unnecessarily.
|
|
786
|
+
14. **Mtime rule is authoritative**: Regeneration is driven by comparing `plan.md` attachment `updatedAt` against comment `createdAt`. Keyword detection in comments is only a secondary hint that triggers an explicit user confirmation — never a silent regen.
|
|
787
|
+
15. **Delete old plans cleanly**: When replacing, ask the user to confirm, then delete the old Linear attachment via `mcp__linear__delete_attachment`. Record attachment IDs during Step 3a for use in Step 9.
|
|
788
|
+
16. **Always add "AI Plan" label**: After saving plan attachments, apply the workspace-level `AI Plan` label (already configured organization-wide — do NOT create a team-scoped duplicate) to the invoked issue.
|
|
722
789
|
|
|
723
790
|
## Example with Subtasks
|
|
724
791
|
|
|
@@ -728,7 +795,7 @@ For Linear task "ENG-456: User profile improvements" with subtasks:
|
|
|
728
795
|
- ENG-456-2: Add profile bio field
|
|
729
796
|
- ENG-456-3: Add social links section
|
|
730
797
|
|
|
731
|
-
**
|
|
798
|
+
**Attachment `plan.md` saved on ENG-456-1:**
|
|
732
799
|
|
|
733
800
|
```markdown
|
|
734
801
|
## Implementation Plan for Subtask
|
|
@@ -804,7 +871,7 @@ Medium
|
|
|
804
871
|
_Plan generated by Claude Code_
|
|
805
872
|
```
|
|
806
873
|
|
|
807
|
-
**
|
|
874
|
+
**Attachment `plan.md` saved on ENG-456-2:**
|
|
808
875
|
|
|
809
876
|
```markdown
|
|
810
877
|
## Implementation Plan for Subtask
|
|
@@ -871,4 +938,4 @@ _Plan generated by Claude Code_
|
|
|
871
938
|
|
|
872
939
|
---
|
|
873
940
|
|
|
874
|
-
**Important**: Before saving the plans, show them to the user for review and approval.
|
|
941
|
+
**Important**: Before saving the plans as attachments, show them to the user for review and approval. The plan content is written to `/tmp/claude-plans/<taskId>-plan.md`, base64-encoded, and uploaded as a native Linear attachment via `mcp__linear__create_attachment`. After that, the `AI Plan` label is applied to the invoked issue.
|
|
@@ -12,12 +12,12 @@ allowed-tools:
|
|
|
12
12
|
- TaskUpdate
|
|
13
13
|
- TaskList
|
|
14
14
|
- TaskGet
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
15
|
+
- mcp__linear__get_issue
|
|
16
|
+
- mcp__linear__list_issues
|
|
17
|
+
- mcp__linear__list_comments
|
|
18
|
+
- mcp__linear__save_comment
|
|
19
|
+
- mcp__linear__save_issue
|
|
20
|
+
- mcp__linear__list_issue_statuses
|
|
21
21
|
---
|
|
22
22
|
|
|
23
23
|
# Push Skill
|
|
@@ -12,9 +12,9 @@ allowed-tools:
|
|
|
12
12
|
- TaskList
|
|
13
13
|
- TaskGet
|
|
14
14
|
- AskUserQuestion
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
15
|
+
- mcp__linear__get_issue
|
|
16
|
+
- mcp__linear__list_comments
|
|
17
|
+
- mcp__linear__save_comment
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
# Review Skill
|
|
@@ -68,7 +68,7 @@ node node_modules/@smartsoft001-mobilems/claude-plugins/plugins/flow-external/.c
|
|
|
68
68
|
|
|
69
69
|
Configure these in your `.mcp.json`:
|
|
70
70
|
|
|
71
|
-
- `linear
|
|
71
|
+
- `linear` - Linear API integration (MCP prefix `mcp__linear__`)
|
|
72
72
|
- `playwright` - Browser automation for screenshots
|
|
73
73
|
|
|
74
74
|
## Permission Strategy
|
|
@@ -34,14 +34,17 @@
|
|
|
34
34
|
"Bash(for:*)",
|
|
35
35
|
"Bash(node:*)",
|
|
36
36
|
"Bash(mkdir:*)",
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
37
|
+
"mcp__linear__get_issue",
|
|
38
|
+
"mcp__linear__list_issues",
|
|
39
|
+
"mcp__linear__list_comments",
|
|
40
|
+
"mcp__linear__save_comment",
|
|
41
|
+
"mcp__linear__delete_comment",
|
|
42
|
+
"mcp__linear__save_issue",
|
|
43
|
+
"mcp__linear__list_issue_statuses",
|
|
44
|
+
"mcp__linear__create_attachment",
|
|
45
|
+
"mcp__linear__get_attachment",
|
|
46
|
+
"mcp__linear__delete_attachment",
|
|
47
|
+
"mcp__linear__list_issue_labels",
|
|
45
48
|
"mcp__playwright__browser_snapshot",
|
|
46
49
|
"mcp__playwright__browser_take_screenshot",
|
|
47
50
|
"mcp__playwright__browser_navigate",
|
|
@@ -3,7 +3,7 @@ name: shared-linear-subtask-iterator
|
|
|
3
3
|
description: Manage Linear task and subtask iteration. Fetch tasks, update statuses, and iterate through subtasks in order.
|
|
4
4
|
tools: Bash
|
|
5
5
|
model: sonnet
|
|
6
|
-
color:
|
|
6
|
+
color: '#5E6AD2'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are a Linear subtask iterator that manages task and subtask workflows.
|
|
@@ -27,19 +27,19 @@ Fetch Linear tasks and their subtasks, manage status transitions, and iterate th
|
|
|
27
27
|
|
|
28
28
|
## Status Transitions
|
|
29
29
|
|
|
30
|
-
| From
|
|
31
|
-
|
|
32
|
-
| To Do
|
|
33
|
-
| In Progress | Done
|
|
34
|
-
| In Progress | Blocked
|
|
35
|
-
| Any
|
|
30
|
+
| From | To | When |
|
|
31
|
+
| ----------- | ----------- | ------------------------------- |
|
|
32
|
+
| To Do | In Progress | Starting work on subtask |
|
|
33
|
+
| In Progress | Done | Subtask implementation complete |
|
|
34
|
+
| In Progress | Blocked | Cannot proceed |
|
|
35
|
+
| Any | In Review | Ready for review |
|
|
36
36
|
|
|
37
37
|
## Fetching Subtasks
|
|
38
38
|
|
|
39
39
|
Use Linear MCP tools:
|
|
40
40
|
|
|
41
|
-
1. `
|
|
42
|
-
2. `
|
|
41
|
+
1. `mcp__linear__get_issue` - Get parent task details
|
|
42
|
+
2. `mcp__linear__list_issues` - List subtasks (filter by parent)
|
|
43
43
|
|
|
44
44
|
## Iteration Flow
|
|
45
45
|
|
|
@@ -7,8 +7,8 @@ allowed-tools:
|
|
|
7
7
|
- Glob
|
|
8
8
|
- Grep
|
|
9
9
|
- AskUserQuestion
|
|
10
|
-
-
|
|
11
|
-
-
|
|
10
|
+
- mcp__linear__get_issue
|
|
11
|
+
- mcp__linear__list_comments
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
# Commit Skill
|
|
@@ -47,15 +47,15 @@ Refs: <linearTaskId>
|
|
|
47
47
|
|
|
48
48
|
### Type
|
|
49
49
|
|
|
50
|
-
| Type
|
|
51
|
-
|
|
52
|
-
| `feat`
|
|
53
|
-
| `fix`
|
|
50
|
+
| Type | Use when |
|
|
51
|
+
| ---------- | ------------------------------------------ |
|
|
52
|
+
| `feat` | New feature or functionality |
|
|
53
|
+
| `fix` | Bug fix |
|
|
54
54
|
| `refactor` | Code restructuring without behavior change |
|
|
55
|
-
| `style`
|
|
56
|
-
| `docs`
|
|
57
|
-
| `chore`
|
|
58
|
-
| `perf`
|
|
55
|
+
| `style` | Styling/CSS changes only |
|
|
56
|
+
| `docs` | Documentation changes |
|
|
57
|
+
| `chore` | Maintenance, config, dependencies |
|
|
58
|
+
| `perf` | Performance improvements |
|
|
59
59
|
|
|
60
60
|
### Scope
|
|
61
61
|
|
|
@@ -102,6 +102,7 @@ Run `git add` to stage your changes before committing.
|
|
|
102
102
|
### Linear Task Not Found
|
|
103
103
|
|
|
104
104
|
If linearTaskId is not provided or task not found:
|
|
105
|
+
|
|
105
106
|
- Try to detect from branch name
|
|
106
107
|
- If still not found, proceed without Linear context
|
|
107
108
|
|