@smartsoft001-mobilems/claude-plugins 2.80.0 → 2.81.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 +41 -32
- package/plugins/flow/skills/linear-suggestion/SKILL.md +1 -1
- package/plugins/flow/skills/plan/SKILL.md +128 -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 +52 -29
- package/plugins/flow-external/skills/linear-suggestion/SKILL.md +8 -8
- package/plugins/flow-external/skills/plan/SKILL.md +95 -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 +36 -27
- package/plugins/flow-legacy/skills/linear-suggestion/SKILL.md +1 -1
- package/plugins/flow-legacy/skills/plan/SKILL.md +104 -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,19 @@ 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.
|
|
25
29
|
|
|
26
30
|
## Execution Checklist
|
|
27
31
|
|
|
@@ -29,8 +33,8 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
|
|
|
29
33
|
|
|
30
34
|
- [ ] **1. Fetch Linear task** — get title, description, labels, priority, estimate from MCP Linear server
|
|
31
35
|
- [ ] **2. Fetch subtasks** — check for children; if present, plan each subtask individually
|
|
32
|
-
- [ ] **3. Fetch existing comments** —
|
|
33
|
-
- [ ] **4. Determine planning needs** —
|
|
36
|
+
- [ ] **3. Fetch existing attachments and comments** — list `plan.md` attachments and all comments per task/subtask
|
|
37
|
+
- [ ] **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
38
|
- [ ] **5. Analyze previous commits** — `git log --all --grep="<taskId>"` for each task/subtask
|
|
35
39
|
- [ ] **6. Analyze staged changes** — `git status` and `git diff --cached` for work in progress
|
|
36
40
|
- [ ] **7. MANDATORY: Analyze codebase** — explore affected files, patterns, dependencies, and test coverage
|
|
@@ -38,9 +42,10 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
|
|
|
38
42
|
- [ ] **9. Create implementation plans** — generate structured plans per task/subtask with all required sections
|
|
39
43
|
- [ ] **10. MANDATORY: Write plans in Polish** — all plan content must be in Polish language
|
|
40
44
|
- [ ] **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.
|
|
45
|
+
- [ ] **12. MANDATORY: Confirm old plan deletion** — if replacing existing `plan.md`, ask user to confirm deletion of old attachment before proceeding
|
|
46
|
+
- [ ] **13. Save plan as native Linear attachment** — base64-encode `plan.md` content and upload via `mcp__linear__create_attachment` (Linear hosts the file; no external storage)
|
|
47
|
+
- [ ] **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)
|
|
48
|
+
- [ ] **15. Confirm to user** — list saved plans with summaries and Linear links
|
|
44
49
|
|
|
45
50
|
### Task Progress Tracking
|
|
46
51
|
|
|
@@ -130,60 +135,53 @@ Use the MCP Linear server to check if the task has subtasks (children). If subta
|
|
|
130
135
|
|
|
131
136
|
**Important**: If subtasks exist, you will create individual plans for each subtask, not for the parent task.
|
|
132
137
|
|
|
133
|
-
### Step 3: Fetch Task Comments
|
|
138
|
+
### Step 3: Fetch Task Attachments and Comments
|
|
134
139
|
|
|
135
|
-
Use the MCP Linear server to fetch
|
|
140
|
+
Use the MCP Linear server to fetch, for the parent task and each subtask (if any):
|
|
136
141
|
|
|
137
|
-
-
|
|
138
|
-
-
|
|
142
|
+
- 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)
|
|
143
|
+
- Comments via `mcp__linear__list_comments({ issueId })` — keep `id`, `createdAt`, body text
|
|
139
144
|
|
|
140
|
-
This
|
|
145
|
+
This is used to:
|
|
141
146
|
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
147
|
+
- Detect whether a plan already exists (attachment `plan.md`)
|
|
148
|
+
- Determine whether the plan is stale (any comment is newer than the attachment)
|
|
149
|
+
- Record old attachment IDs for replacement
|
|
145
150
|
|
|
146
151
|
### Step 3a: Determine Which Tasks Need Planning
|
|
147
152
|
|
|
148
|
-
For each task/subtask,
|
|
149
|
-
|
|
150
|
-
#### Check for existing plan:
|
|
153
|
+
For each task/subtask, use the following decision logic driven by **attachment modification time vs comment creation time**:
|
|
151
154
|
|
|
152
|
-
|
|
155
|
+
#### Inputs per task
|
|
153
156
|
|
|
154
|
-
-
|
|
155
|
-
-
|
|
157
|
+
- `planAttachment`: the Linear attachment titled `plan.md` (or `null` if none)
|
|
158
|
+
- `planAttachment.createdAt` / `planAttachment.updatedAt`: when the plan was last written
|
|
159
|
+
- `comments`: list of all comments with `createdAt`
|
|
156
160
|
|
|
157
|
-
#### Decision logic
|
|
161
|
+
#### Decision logic
|
|
158
162
|
|
|
159
163
|
**Create a NEW plan if:**
|
|
160
164
|
|
|
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"
|
|
165
|
+
1. **No plan attachment exists**: `planAttachment == null`
|
|
166
|
+
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
167
|
|
|
171
168
|
**SKIP planning if:**
|
|
172
169
|
|
|
173
|
-
1.
|
|
174
|
-
|
|
170
|
+
1. `planAttachment` exists AND no comment is newer than it.
|
|
171
|
+
|
|
172
|
+
#### Secondary signal (optional, do not override mtime rule)
|
|
173
|
+
|
|
174
|
+
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
175
|
|
|
176
176
|
#### Output:
|
|
177
177
|
|
|
178
178
|
Create a list of tasks/subtasks that need planning:
|
|
179
179
|
|
|
180
180
|
- `tasksNeedingPlan`: Array of task IDs that need a new or updated plan
|
|
181
|
-
- `tasksWithExistingPlan`: Array of task IDs
|
|
182
|
-
- `
|
|
181
|
+
- `tasksWithExistingPlan`: Array of task IDs with valid, up-to-date plans (skip these)
|
|
182
|
+
- `oldPlanAttachments`: Map of task ID → `attachmentId` for plans that will be replaced (needed for deletion in Step 9)
|
|
183
183
|
|
|
184
|
-
**Important**:
|
|
185
|
-
|
|
186
|
-
**Important**: If ALL tasks already have valid plans and no changes are requested, inform the user and ask if they want to regenerate plans anyway.
|
|
184
|
+
**Important**: If ALL tasks already have up-to-date plans, inform the user and ask if they want to regenerate anyway.
|
|
187
185
|
|
|
188
186
|
### Step 4: Analyze Previous Commits
|
|
189
187
|
|
|
@@ -378,9 +376,9 @@ Check if the task requires changes to external library packages:
|
|
|
378
376
|
```markdown
|
|
379
377
|
### Ryzyka i mitygacje
|
|
380
378
|
|
|
381
|
-
| Ryzyko
|
|
382
|
-
|
|
|
383
|
-
| [opis ryzyka] | HIGH
|
|
379
|
+
| Ryzyko | Ważność | Źródło | Mitygacja |
|
|
380
|
+
| ------------- | ------- | -------------- | --------------------- |
|
|
381
|
+
| [opis ryzyka] | HIGH | Adwokat Diabła | [strategia mitygacji] |
|
|
384
382
|
```
|
|
385
383
|
|
|
386
384
|
- Add **"Consensus Rating"**: 1-5 scale based on agreement between teammates
|
|
@@ -625,9 +623,9 @@ When using `--deep` flag and the Planning Team has completed its analysis, appen
|
|
|
625
623
|
|
|
626
624
|
### Ryzyka i mitygacje
|
|
627
625
|
|
|
628
|
-
| Ryzyko
|
|
629
|
-
|
|
|
630
|
-
| [opis ryzyka] | HIGH
|
|
626
|
+
| Ryzyko | Ważność | Źródło | Mitygacja |
|
|
627
|
+
| ------------- | ------- | -------------- | --------------------- |
|
|
628
|
+
| [opis ryzyka] | HIGH | Adwokat Diabła | [strategia mitygacji] |
|
|
631
629
|
|
|
632
630
|
### Ocena konsensusu: [1-5] / Pewność: [WYSOKA/ŚREDNIA/NISKA]
|
|
633
631
|
|
|
@@ -642,20 +640,20 @@ When using `--deep` flag and the Planning Team has completed its analysis, appen
|
|
|
642
640
|
- 2: Significant disagreements on approach
|
|
643
641
|
- 1: Fundamental disagreements — plan needs revision
|
|
644
642
|
|
|
645
|
-
### Step 9: Confirm and Delete Old Plan
|
|
643
|
+
### Step 9: Confirm and Delete Old Plan Attachments
|
|
646
644
|
|
|
647
|
-
**This step applies only when replacing existing plans** (i.e., `
|
|
645
|
+
**This step applies only when replacing existing plans** (i.e., `oldPlanAttachments` from Step 3a is not empty).
|
|
648
646
|
|
|
649
|
-
Before saving new plans, ask the user to confirm deletion of old plan
|
|
647
|
+
Before saving new plans, ask the user to confirm deletion of old `plan.md` attachments:
|
|
650
648
|
|
|
651
649
|
```markdown
|
|
652
650
|
## Zastąpienie istniejących planów
|
|
653
651
|
|
|
654
|
-
Następujące
|
|
652
|
+
Następujące załączniki `plan.md` zostaną usunięte i zastąpione nowymi:
|
|
655
653
|
|
|
656
|
-
| Task | Stary
|
|
654
|
+
| Task | Stary załącznik (ID) |
|
|
657
655
|
| --------- | -------------------- |
|
|
658
|
-
| <task-id> | <
|
|
656
|
+
| <task-id> | <attachment-id> |
|
|
659
657
|
|
|
660
658
|
Czy potwierdzasz usunięcie starych planów i zapisanie nowych?
|
|
661
659
|
```
|
|
@@ -663,42 +661,94 @@ Czy potwierdzasz usunięcie starych planów i zapisanie nowych?
|
|
|
663
661
|
Use `AskUserQuestion` tool with options:
|
|
664
662
|
|
|
665
663
|
- "Tak, usuń stare plany i zapisz nowe" (Recommended)
|
|
666
|
-
- "Nie, zachowaj stare plany (zapisz nowe obok)"
|
|
667
664
|
- "Anuluj"
|
|
668
665
|
|
|
669
666
|
**If user confirms deletion:**
|
|
670
667
|
|
|
671
|
-
1. For each task in `
|
|
672
|
-
2.
|
|
673
|
-
|
|
668
|
+
1. For each task in `oldPlanAttachments`, delete the Linear attachment via `mcp__linear__delete_attachment({ id: attachmentId })`.
|
|
669
|
+
2. Then proceed to Step 9a.
|
|
670
|
+
|
|
671
|
+
**If user cancels:**
|
|
674
672
|
|
|
675
|
-
|
|
673
|
+
- Stop the entire process, do not save any plans.
|
|
676
674
|
|
|
677
|
-
|
|
675
|
+
### Step 9a: Save Plan as Linear Attachment
|
|
678
676
|
|
|
679
|
-
|
|
677
|
+
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.
|
|
680
678
|
|
|
681
|
-
|
|
679
|
+
#### 9a.1 — Prepare plan content
|
|
682
680
|
|
|
683
|
-
|
|
681
|
+
The plan content is exactly the markdown produced in Step 8 (the same block that would previously have been posted as a comment).
|
|
684
682
|
|
|
685
|
-
|
|
683
|
+
Write it to a temp file so it can be base64-encoded:
|
|
686
684
|
|
|
687
|
-
|
|
685
|
+
```bash
|
|
686
|
+
mkdir -p /tmp/claude-plans
|
|
687
|
+
```
|
|
688
688
|
|
|
689
|
-
|
|
689
|
+
Use the `Write` tool to save the plan markdown to `/tmp/claude-plans/<taskId>-plan.md`.
|
|
690
690
|
|
|
691
|
-
####
|
|
691
|
+
#### 9a.2 — Base64-encode the content
|
|
692
|
+
|
|
693
|
+
```bash
|
|
694
|
+
b64=$(base64 -i /tmp/claude-plans/<taskId>-plan.md)
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
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.
|
|
698
|
+
|
|
699
|
+
#### 9a.3 — Create the Linear attachment
|
|
700
|
+
|
|
701
|
+
Call `mcp__linear__create_attachment` with:
|
|
702
|
+
|
|
703
|
+
- `issue`: the task or subtask ID (e.g. `MOB-123`)
|
|
704
|
+
- `filename`: `plan.md`
|
|
705
|
+
- `contentType`: `text/markdown`
|
|
706
|
+
- `title`: `plan.md` (exact — used for detection in Step 3 and by `/impl`)
|
|
707
|
+
- `subtitle`: `Plan wygenerowany przez Claude Code`
|
|
708
|
+
- `base64Content`: the base64 string from 9a.2
|
|
709
|
+
|
|
710
|
+
Linear stores the file on its own infrastructure and surfaces it in the issue's Attachments pane.
|
|
711
|
+
|
|
712
|
+
#### 9a.4 — Clean up local file
|
|
713
|
+
|
|
714
|
+
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.
|
|
715
|
+
|
|
716
|
+
#### Scope rule
|
|
717
|
+
|
|
718
|
+
- If the parent task has **no subtasks** → create one `plan.md` attachment on the parent task.
|
|
719
|
+
- 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.
|
|
720
|
+
|
|
721
|
+
### Step 9b: Add "AI Plan" Label
|
|
722
|
+
|
|
723
|
+
After all plan attachments are saved, apply the `AI Plan` label to the **invoked issue** — i.e. the exact `linearTaskId` passed to `/plan`:
|
|
724
|
+
|
|
725
|
+
- `/plan MOB-123` (parent) → label goes on `MOB-123`. Subtasks receive `plan.md` attachments but no label.
|
|
726
|
+
- `/plan MOB-123-1` (subtask) → label goes on `MOB-123-1` directly. Do NOT touch the parent.
|
|
727
|
+
|
|
728
|
+
**`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`.
|
|
729
|
+
|
|
730
|
+
Steps:
|
|
731
|
+
|
|
732
|
+
1. **Locate the label**:
|
|
733
|
+
|
|
734
|
+
- Use `mcp__linear__list_issue_labels` (no team filter, or workspace-wide scope) to find the label named exactly `AI Plan`.
|
|
735
|
+
- 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.
|
|
736
|
+
|
|
737
|
+
2. **Apply to the invoked issue**:
|
|
738
|
+
|
|
739
|
+
- Use `mcp__linear__save_issue({ id: invokedTaskId, labelIds: [...existingLabelIds, aiPlanLabelId] })`.
|
|
740
|
+
- Preserve existing labels — do NOT replace them. Fetch current labels first if needed and concatenate.
|
|
741
|
+
- If the label is already on the issue, skip the update.
|
|
692
742
|
|
|
693
|
-
|
|
694
|
-
- Do NOT create a plan comment on the parent task (subtask plans are sufficient)
|
|
743
|
+
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
744
|
|
|
696
745
|
### Step 10: Confirm to User
|
|
697
746
|
|
|
698
747
|
After successfully saving the plans, confirm to the user:
|
|
699
748
|
|
|
700
|
-
- List all tasks/subtasks where
|
|
749
|
+
- List all tasks/subtasks where `plan.md` was attached (include Linear attachment URL)
|
|
701
750
|
- Show a summary of each plan
|
|
751
|
+
- Confirm that `AI Plan` label was added to the parent task
|
|
702
752
|
- Provide Linear task links
|
|
703
753
|
- Mention any important considerations or questions
|
|
704
754
|
|
|
@@ -716,9 +766,10 @@ After successfully saving the plans, confirm to the user:
|
|
|
716
766
|
10. **Keep subtask plans focused**: Each subtask plan should only cover that subtask's scope
|
|
717
767
|
11. **Identify cross-subtask dependencies**: Note which subtasks depend on or block others
|
|
718
768
|
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
|
|
769
|
+
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.
|
|
770
|
+
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.
|
|
771
|
+
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.
|
|
772
|
+
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
773
|
|
|
723
774
|
## Example with Subtasks
|
|
724
775
|
|
|
@@ -728,7 +779,7 @@ For Linear task "ENG-456: User profile improvements" with subtasks:
|
|
|
728
779
|
- ENG-456-2: Add profile bio field
|
|
729
780
|
- ENG-456-3: Add social links section
|
|
730
781
|
|
|
731
|
-
**
|
|
782
|
+
**Attachment `plan.md` saved on ENG-456-1:**
|
|
732
783
|
|
|
733
784
|
```markdown
|
|
734
785
|
## Implementation Plan for Subtask
|
|
@@ -804,7 +855,7 @@ Medium
|
|
|
804
855
|
_Plan generated by Claude Code_
|
|
805
856
|
```
|
|
806
857
|
|
|
807
|
-
**
|
|
858
|
+
**Attachment `plan.md` saved on ENG-456-2:**
|
|
808
859
|
|
|
809
860
|
```markdown
|
|
810
861
|
## Implementation Plan for Subtask
|
|
@@ -871,4 +922,4 @@ _Plan generated by Claude Code_
|
|
|
871
922
|
|
|
872
923
|
---
|
|
873
924
|
|
|
874
|
-
**Important**: Before saving the plans, show them to the user for review and approval.
|
|
925
|
+
**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
|
|