@smartsoft001-mobilems/claude-plugins 2.82.0 → 2.84.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartsoft001-mobilems/claude-plugins",
3
- "version": "2.82.0",
3
+ "version": "2.84.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "flow",
3
3
  "description": "Development flow skills for Linear-driven development workflow",
4
- "version": "2.82.0"
4
+ "version": "2.84.0"
5
5
  }
@@ -59,7 +59,7 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
59
59
  - [ ] **5. MANDATORY: Agent orchestration plan** — delegate to `shared-impl-orchestrator`, save result as `orchestration.md` attachment via `mcp__linear__create_attachment` (replace any existing one). **Calling `mcp__linear__save_comment` with the orchestration body is FORBIDDEN.**
60
60
  - [ ] **6. Check external library blockers** — if blockers found, set status to Blocked and skip
61
61
  - [ ] **7. Capture "before" screenshots** — if `UI_CHANGE_REQUIRED: YES`, launch `screenshot-reporter` in background
62
- - [ ] **8. MANDATORY: Implement with 3x3 rule** — pause every 3 changes, use `shared-tdd-developer` for ALL code (RED → GREEN → REFACTOR)
62
+ - [ ] **8. MANDATORY: Implement with 3x3 rule** — pause every 3 changes (skip pause in `--auto`, log checkpoint as Linear comment instead), use `shared-tdd-developer` for ALL code (RED → GREEN → REFACTOR)
63
63
  - [ ] **9. Verify implementation** — run tests, lint, build check
64
64
  - [ ] **9.5. E2E tests (conditional)** — if `E2E_TESTS_RECOMMENDED: YES`, delegate to `test-e2e` skill
65
65
  - [ ] **10. Capture "after" screenshots** — if `UI_CHANGE_REQUIRED: YES`, capture + post comparison to Linear + cleanup
@@ -68,13 +68,13 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
68
68
  - [ ] **13. MANDATORY: Write reports in Polish** — all Linear comments must be in Polish language
69
69
  - [ ] **14. Update status** — delegate to `shared-linear-subtask-iterator` for status determination
70
70
  - [ ] **15. Agent evolution** — if user confirmed feedback, delegate to `shared-agent-evolver`
71
- - [ ] **16. Pause for user confirmation** — ALWAYS wait before proceeding to next subtask
71
+ - [ ] **16. Pause for user confirmation** — wait before proceeding to next subtask (skipped in `--auto`; post completion comment and continue)
72
72
 
73
73
  ### Finalization
74
74
 
75
75
  - [ ] **17. Final summary** — present summary of all subtasks with statuses
76
76
  - [ ] **18. Session-wide evolution** — analyze all feedback across session
77
- - [ ] **19. ALWAYS pause** — wait for user confirmation at end
77
+ - [ ] **19. ALWAYS pause** — wait for user confirmation at end (skipped in `--auto`; post final summary comment and exit)
78
78
 
79
79
  ### Task Progress Tracking
80
80
 
@@ -151,12 +151,31 @@ You implement code that is:
151
151
  ```
152
152
  /impl [linearTaskId]
153
153
  /impl [linearTaskId] --team # Agent Team mode (experimental)
154
+ /impl [linearTaskId] --auto # Non-interactive mode for CI / GitHub Actions
154
155
  ```
155
156
 
156
157
  ## Parameters
157
158
 
158
159
  - `linearTaskId` - Linear task ID (e.g., ENG-123)
159
160
  - `--team` - Enable parallel Implementation Squad mode (experimental, requires `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`)
161
+ - `--auto` - Non-interactive mode: skip ALL `AskUserQuestion` prompts, 3x3 checkpoint pauses, per-subtask pauses, and the final end pause. If `plan.md` attachment is missing, auto-invoke `/plan` flow to generate it instead of posting a "run /plan first" comment and skipping. Designed for CI / GitHub Actions runs where no human is at the keyboard.
162
+
163
+ ## Auto Mode (`--auto`)
164
+
165
+ **When `--auto` is set, the skill MUST run end-to-end without any human-in-the-loop prompts.** Apply these overrides:
166
+
167
+ | Default behavior | `--auto` override |
168
+ | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
169
+ | Post comment "no plan.md found, run /plan first" + skip | Inline-invoke `/plan` flow for the task to generate `plan.md` attachment + `AI Plan` label, then continue |
170
+ | 3x3 rule pauses every 3 changes asking "Continue?" | Log the checkpoint summary as a status comment, then continue automatically |
171
+ | Pause after each subtask waiting for user confirmation | Post subtask completion comment, then proceed to next subtask |
172
+ | Final end pause "wait for user confirmation" | Post final summary comment and exit cleanly |
173
+ | `AskUserQuestion` for any decision | Use the option marked **(Recommended)**; if none, fail fast with a Linear comment explaining why |
174
+ | Confirmation before destructive ops (delete attachments) | Proceed without confirmation — replace old `orchestration.md` automatically |
175
+
176
+ **Hard requirement in `--auto`**: every checkpoint, decision, or skip MUST be logged as a Linear comment in Polish so the run remains auditable after the fact. Comments replace the interactive prompts — they are the audit trail.
177
+
178
+ **Detection**: The flag `--auto` is provided as a positional/named arg. Treat any of `--auto`, `--ci`, `--non-interactive` as equivalent. Combinable with `--team` (parallel squad mode runs without per-subtask approval).
160
179
 
161
180
  ## Instructions
162
181
 
@@ -304,7 +323,12 @@ Parse the markdown for:
304
323
  - Testing Strategy
305
324
  - External Library Changes (if any — these are blockers, not to be implemented)
306
325
 
307
- **If no `plan.md` attachment found**: Create a comment noting that no plan was found, suggest running `/plan <taskId>` first, and skip this task. Set status back to "To Do". Do NOT fall back to reading plan content from comments — the attachment is the source of truth.
326
+ **If no `plan.md` attachment found**:
327
+
328
+ - **Default mode**: Create a comment noting that no plan was found, suggest running `/plan <taskId>` first, and skip this task. Set status back to "To Do".
329
+ - **`--auto` mode**: Inline-invoke the `/plan` skill flow for this task to generate `plan.md` attachment + `AI Plan` label, then proceed with implementation. Post a comment in Polish noting the plan was auto-generated. Do NOT skip the task.
330
+
331
+ Do NOT fall back to reading plan content from comments — the attachment is the source of truth.
308
332
 
309
333
  #### Step 3b-classify: MANDATORY UI Change Classification
310
334
 
@@ -717,7 +741,10 @@ The agent will provide:
717
741
  - Next subtask details (if any)
718
742
  - Pause point for user confirmation
719
743
 
720
- **IMPORTANT**: ALWAYS wait for user confirmation before proceeding to next subtask.
744
+ **IMPORTANT**:
745
+
746
+ - **Default mode**: ALWAYS wait for user confirmation before proceeding to next subtask.
747
+ - **`--auto` mode**: Skip the wait. The completion comment from Step 3f is the audit trail; proceed directly to Step 3i.
721
748
 
722
749
  #### Step 3i: Move to Next Subtask
723
750
 
@@ -739,7 +766,10 @@ When all subtasks are processed, the agent will return `🏁 Iteration Complete`
739
766
  - Statistics (completed, partial, blocked)
740
767
  - Recommendations for follow-up
741
768
 
742
- **IMPORTANT**: ALWAYS pause and present the final summary to the user.
769
+ **IMPORTANT**:
770
+
771
+ - **Default mode**: ALWAYS pause and present the final summary to the user.
772
+ - **`--auto` mode**: Post the final summary as a Linear comment in Polish on the parent task (or invoked task) and exit cleanly without pausing.
743
773
 
744
774
  ### Step 4a: Session-Wide Agent Evolution
745
775
 
@@ -788,18 +818,18 @@ To Do → In Progress → In Review (if completed)
788
818
 
789
819
  ## Pause Points (3x3 Rule)
790
820
 
791
- **ALWAYS stop and wait for user confirmation at these points:**
821
+ **ALWAYS stop and wait for user confirmation at these points** (skipped in `--auto` — see overrides):
792
822
 
793
- | Pause Point | When | What to Show |
794
- | -------------------- | ----------------------------------- | ----------------------------------------- |
795
- | **3x3 Checkpoint** | After every 3 changes | Summary of 3 changes + next 3 steps |
796
- | **Subtask Complete** | After finishing each subtask | Subtask summary + next subtask info |
797
- | **Task Complete** | After finishing all subtasks | Final summary with all results |
798
- | **Blocker Found** | When external dependency found | Blocker details + options |
799
- | **Error/Issue** | When unexpected problem occurs | Error details + proposed solution |
800
- | **Agent Evolution** | After subtask / after final summary | Evolution report with filed Linear issues |
823
+ | Pause Point | When | What to Show | `--auto` behavior |
824
+ | -------------------- | ----------------------------------- | ----------------------------------------- | ------------------------------------------------------------- |
825
+ | **3x3 Checkpoint** | After every 3 changes | Summary of 3 changes + next 3 steps | Post checkpoint as Linear comment, continue |
826
+ | **Subtask Complete** | After finishing each subtask | Subtask summary + next subtask info | Post completion comment, continue to next subtask |
827
+ | **Task Complete** | After finishing all subtasks | Final summary with all results | Post final summary comment, exit |
828
+ | **Blocker Found** | When external dependency found | Blocker details + options | Set status to Blocked, post blocker comment, skip subtask |
829
+ | **Error/Issue** | When unexpected problem occurs | Error details + proposed solution | Post error comment to Linear, fail the run with non-zero exit |
830
+ | **Agent Evolution** | After subtask / after final summary | Evolution report with filed Linear issues | Skip evolution prompt, file issues silently if any |
801
831
 
802
- **Never proceed automatically** - always wait for explicit user confirmation before:
832
+ **In default mode, never proceed automatically** - always wait for explicit user confirmation before:
803
833
 
804
834
  - Continuing after 3x3 checkpoint
805
835
  - Moving to next subtask
@@ -55,8 +55,8 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
55
55
  - [ ] **8. Analyze external library deps** — check if `@smartsoft001` or `@smartsoft001-mobilems` changes are needed (mark as separate process)
56
56
  - [ ] **9. Create implementation plans** — generate structured plans per task/subtask with all required sections
57
57
  - [ ] **10. MANDATORY: Write plans in Polish** — all plan content must be in Polish language
58
- - [ ] **11. Show plans to user** — present plans for review and approval before saving
59
- - [ ] **12. MANDATORY: Confirm old plan deletion** — if replacing existing `plan.md`, ask user to confirm deletion of old attachment before proceeding
58
+ - [ ] **11. MANDATORY: Get user approval of generated plan** — present the full plan content in the chat, then call `AskUserQuestion` with three options: save / regenerate / cancel. Save and label steps below MUST NOT run without approval. Skipped only in `--auto` (auto-approved; logged in audit comment).
59
+ - [ ] **12. MANDATORY: Confirm old plan deletion** — if replacing existing `plan.md`, ask user to confirm deletion of old attachment before proceeding (skipped in `--auto`; delete old attachment automatically)
60
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
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
62
  - [ ] **15. Confirm to user** — list saved plans with summaries and Linear links
@@ -117,12 +117,30 @@ You create plans that are:
117
117
  ```
118
118
  /plan [linearTaskId]
119
119
  /plan [linearTaskId] --deep # Deep planning with Agent Team (experimental)
120
+ /plan [linearTaskId] --auto # Non-interactive mode for CI / GitHub Actions
120
121
  ```
121
122
 
122
123
  ## Parameters
123
124
 
124
125
  - `linearTaskId` - Linear task ID (e.g., ENG-123)
125
126
  - `--deep` - Enable deep planning with Agent Team (experimental, requires `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`)
127
+ - `--auto` - Non-interactive mode: skip ALL `AskUserQuestion` prompts. Auto-approve plans before saving (no review step), auto-delete stale `plan.md` attachments without confirmation, and silently skip when all plans are up to date (no "regenerate anyway?" prompt). Designed for CI / GitHub Actions runs where no human is at the keyboard.
128
+
129
+ ## Auto Mode (`--auto`)
130
+
131
+ **When `--auto` is set, the skill MUST run end-to-end without any human-in-the-loop prompts.** Apply these overrides:
132
+
133
+ | Default behavior | `--auto` override |
134
+ | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
135
+ | Final approval of generated plan content before saving | Skip the approval gate; proceed directly to attachment save (auto-approve) |
136
+ | Ask user to confirm deletion of old `plan.md` attachments | Delete old attachments automatically before saving new ones |
137
+ | Ask "regenerate anyway?" when all plans are up-to-date | Exit cleanly with a Linear comment noting all plans are current; no regeneration |
138
+ | Secondary signal prompt (keyword-triggered confirmation to regen) | Ignore the secondary signal; only the mtime rule decides regeneration |
139
+ | `AskUserQuestion` for any decision | Use the option marked **(Recommended)**; if none, fail fast with a Linear comment explaining why |
140
+
141
+ **Hard requirement in `--auto`**: every decision (save, replace, skip) MUST be logged as a Linear comment in Polish so the run remains auditable after the fact. The mtime rule remains authoritative — `--auto` does not change _what_ gets regenerated, only that no human is asked.
142
+
143
+ **Detection**: The flag `--auto` is provided as a positional/named arg. Treat any of `--auto`, `--ci`, `--non-interactive` as equivalent. Combinable with `--deep` (deep team mode runs without the final approval prompt).
126
144
 
127
145
  ## Instructions
128
146
 
@@ -195,7 +213,10 @@ Create a list of tasks/subtasks that need planning:
195
213
  - `tasksWithExistingPlan`: Array of task IDs with valid, up-to-date plans (skip these)
196
214
  - `oldPlanAttachments`: Map of task ID → `attachmentId` for plans that will be replaced (needed for deletion in Step 9)
197
215
 
198
- **Important**: If ALL tasks already have up-to-date plans, inform the user and ask if they want to regenerate anyway.
216
+ **Important**: If ALL tasks already have up-to-date plans:
217
+
218
+ - **Default mode**: Inform the user and ask if they want to regenerate anyway.
219
+ - **`--auto` mode**: Exit cleanly with a Linear comment in Polish noting all plans are current; do NOT regenerate.
199
220
 
200
221
  ### Step 4: Analyze Previous Commits
201
222
 
@@ -654,11 +675,47 @@ When using `--deep` flag and the Planning Team has completed its analysis, appen
654
675
  - 2: Significant disagreements on approach
655
676
  - 1: Fundamental disagreements — plan needs revision
656
677
 
678
+ ### Step 8a: User Approval of Generated Plan
679
+
680
+ **MANDATORY.** Before any Linear write (deletion of old `plan.md`, creation of new `plan.md`, label apply), the user MUST approve the generated plan content. This is the gate FRA-126 added.
681
+
682
+ **`--auto` mode**: Skip this entire step. The plan is auto-approved. Record the auto-approval in the final Linear audit comment (e.g. `Plan zaakceptowany automatycznie (--auto)`). Proceed to Step 9.
683
+
684
+ **Default mode** (interactive):
685
+
686
+ 1. **Render the full plan(s) in chat.** Print the markdown produced in Step 8 for every task/subtask that needs planning. The `AskUserQuestion` option labels alone do not give the user enough context — the full text must be visible above the prompt.
687
+
688
+ 2. **Ask for approval** via `AskUserQuestion`:
689
+
690
+ ```markdown
691
+ ## Akceptacja planu
692
+
693
+ Powyżej znajduje się wygenerowany plan dla zadania <linearTaskId> (oraz <N> podzadań, jeśli dotyczy).
694
+ Czy akceptujesz plan i mogę zapisać go jako załącznik `plan.md` w Linear?
695
+ ```
696
+
697
+ Options (use exactly these labels for consistency with Step 9):
698
+
699
+ - **"Tak, zapisz plan do Linear"** _(Recommended)_ — user accepts. Proceed to Step 9 (delete old attachment if replacing, then save). Existing flow continues unchanged from here.
700
+ - **"Wygeneruj plan ponownie"** — user wants a different plan. Go to step 3 (regeneration loop) below.
701
+ - **"Anuluj"** — user rejects. Stop the whole skill. Do NOT delete the existing `plan.md` attachment. Do NOT save a new one. Do NOT apply the `AI Plan` label. Print a short status in Polish (`Plan nie został zapisany. Anulowano na żądanie użytkownika.`) and exit.
702
+
703
+ 3. **Regeneration branch**: if the user chose "Wygeneruj plan ponownie":
704
+
705
+ - Ask a follow-up `AskUserQuestion` (or accept the free-text the user typed alongside the rejection) to capture what should change: scope, structure, missed files, wrong approach, etc.
706
+ - Loop back to **Step 7 (Create implementation plans)** with the user's feedback in mind. Do NOT re-run Steps 1–6 — the Linear task, comments, commits, and codebase analysis have not changed.
707
+ - On the regenerated plan, return to **Step 8a step 1** (render + ask again).
708
+ - **Cap the loop at 3 regenerations.** On the 3rd rejection, surface the situation to the user (`Plan został odrzucony 3 razy. Przerywam, abyś mógł doprecyzować wymagania.`) and exit without saving.
709
+
710
+ 4. **State invariants on entry to Step 9**: the only path that reaches Step 9 is the explicit "Tak, zapisz plan do Linear" choice (or `--auto`). Treat plan content as final.
711
+
657
712
  ### Step 9: Confirm and Delete Old Plan Attachments
658
713
 
659
714
  **This step applies only when replacing existing plans** (i.e., `oldPlanAttachments` from Step 3a is not empty).
660
715
 
661
- Before saving new plans, ask the user to confirm deletion of old `plan.md` attachments:
716
+ **`--auto` mode**: Skip the confirmation prompt. For each task in `oldPlanAttachments`, delete the Linear attachment via `mcp__linear__delete_attachment({ id: attachmentId })` and proceed directly to Step 9a. Log the deletions in the final summary comment.
717
+
718
+ **Default mode** (interactive): The plan content was already approved in Step 8a; this prompt is strictly about confirming deletion of the **existing** Linear attachment that will be overwritten. Ask the user:
662
719
 
663
720
  ```markdown
664
721
  ## Zastąpienie istniejących planów
@@ -938,4 +995,9 @@ _Plan generated by Claude Code_
938
995
 
939
996
  ---
940
997
 
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.
998
+ **Important**:
999
+
1000
+ - **Default mode**: Before saving the plans as attachments, show them to the user for review and approval.
1001
+ - **`--auto` mode**: Skip the review step; proceed directly to saving the attachments.
1002
+
1003
+ 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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "flow-external",
3
3
  "description": "Development flow skills for standalone Angular 6-11 museum projects without framework (Angular CLI, Karma/Jasmine, Bootstrap 4)",
4
- "version": "2.82.0"
4
+ "version": "2.84.0"
5
5
  }
@@ -33,11 +33,28 @@ Implement changes based on approved plans from Linear `plan.md` attachments.
33
33
 
34
34
  ```
35
35
  /impl <linearTaskId>
36
+ /impl <linearTaskId> --auto # Non-interactive mode for CI / GitHub Actions
36
37
  ```
37
38
 
38
39
  ## Parameters
39
40
 
40
41
  - `linearTaskId` - Linear task ID (e.g., MOB-123)
42
+ - `--auto` - Non-interactive mode: skip ALL `AskUserQuestion` prompts and any per-step pauses. If `plan.md` attachment is missing, auto-invoke `/plan` flow to generate it instead of stopping. Designed for CI / GitHub Actions runs where no human is at the keyboard.
43
+
44
+ ## Auto Mode (`--auto`)
45
+
46
+ When `--auto` is set, the skill MUST run end-to-end without any human-in-the-loop prompts:
47
+
48
+ | Default behavior | `--auto` override |
49
+ | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
50
+ | Stop with "no plan.md found, run /plan first" suggestion | Inline-invoke `/plan` flow for the task to generate `plan.md` attachment + `AI Plan` label, then continue |
51
+ | Pause after each step / subtask waiting for user confirmation | Post completion comment, then proceed automatically |
52
+ | Confirmation before destructive ops (delete `orchestration.md`) | Proceed without confirmation — replace old attachment automatically |
53
+ | Any `AskUserQuestion` | Use the **(Recommended)** option; if none, fail fast with a Linear comment |
54
+
55
+ Every checkpoint, decision, or skip MUST be logged as a Linear comment in Polish (audit trail).
56
+
57
+ **Detection**: The flag `--auto` is provided as a positional/named arg. Treat any of `--auto`, `--ci`, `--non-interactive` as equivalent.
41
58
 
42
59
  ## 🚨 Hard Rules — read before doing anything
43
60
 
@@ -72,7 +89,11 @@ This is for standalone Angular CLI projects. Key rules:
72
89
  2. Find the attachment where `title == "plan.md"` (or `filename == "plan.md"`) and capture its `id`. Do NOT use the `url` field for fetching.
73
90
  3. `mcp__linear__get_attachment({ id: <attachmentId> })` — returns the markdown content directly (Linear hosts the file natively).
74
91
  4. Parse the plan content.
75
- 5. If no `plan.md` attachment exists, inform the user and suggest running `/plan <taskId>` first. Do NOT fall back to parsing plan content from comments, and do NOT attempt `curl`/`WebFetch` on a URL.
92
+ 5. If no `plan.md` attachment exists:
93
+ - **Default mode**: inform the user and suggest running `/plan <taskId>` first. Stop the skill.
94
+ - **`--auto` mode**: inline-invoke the `/plan` skill flow for this task to generate `plan.md` attachment + `AI Plan` label, then proceed with implementation. Post a Linear comment in Polish noting the plan was auto-generated.
95
+
96
+ Do NOT fall back to parsing plan content from comments, and do NOT attempt `curl`/`WebFetch` on a URL.
76
97
 
77
98
  ### Step 2: Detect Project Structure
78
99
 
@@ -27,11 +27,28 @@ Create a structured implementation plan for a Linear task and save it as a `plan
27
27
 
28
28
  ```
29
29
  /plan <linearTaskId>
30
+ /plan <linearTaskId> --auto # Non-interactive mode for CI / GitHub Actions
30
31
  ```
31
32
 
32
33
  ## Parameters
33
34
 
34
35
  - `linearTaskId` - Linear task ID (e.g., MOB-123)
36
+ - `--auto` - Non-interactive mode: skip ALL `AskUserQuestion` prompts. Auto-approve plan before saving, auto-delete stale `plan.md` attachment without confirmation, and silently skip when the existing plan is up to date. Designed for CI / GitHub Actions runs where no human is at the keyboard.
37
+
38
+ ## Auto Mode (`--auto`)
39
+
40
+ When `--auto` is set, the skill MUST run end-to-end without any human-in-the-loop prompts:
41
+
42
+ | Default behavior | `--auto` override |
43
+ | ------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
44
+ | Ask user to confirm deletion of old `plan.md` attachment | Delete old attachment automatically before saving the new one |
45
+ | Ask "regenerate?" when plan is up-to-date but keywords detect | Ignore the secondary signal; only the mtime rule decides regeneration |
46
+ | Final approval of generated plan content before saving | Skip the approval gate (Step 4a); proceed directly to attachment save (auto-approve) |
47
+ | Any `AskUserQuestion` | Use the **(Recommended)** option; if none, fail fast with a Linear comment |
48
+
49
+ Every decision MUST be logged as a Linear comment in Polish (audit trail). The mtime rule remains authoritative.
50
+
51
+ **Detection**: The flag `--auto` is provided as a positional/named arg. Treat any of `--auto`, `--ci`, `--non-interactive` as equivalent.
35
52
 
36
53
  ## 🚨 Hard Rules — read before doing anything
37
54
 
@@ -156,6 +173,40 @@ Structure the plan as follows:
156
173
  | - | [Subtask 2] | Medium | 2 |
157
174
  ```
158
175
 
176
+ ### Step 4a: User Approval of Generated Plan
177
+
178
+ **MANDATORY.** Before any Linear write (subtask creation, attachment delete, attachment create, label apply), the user MUST approve the generated plan content. This is the gate FRA-126 added.
179
+
180
+ **`--auto` mode**: Skip this entire step. The plan is auto-approved. Record the auto-approval in the final Linear audit comment (e.g. `Plan zaakceptowany automatycznie (--auto)`). Proceed to Step 5.
181
+
182
+ **Default mode** (interactive):
183
+
184
+ 1. **Render the full plan in chat.** Print the markdown produced in Step 4. The `AskUserQuestion` option labels alone do not give the user enough context — the full text must be visible above the prompt.
185
+
186
+ 2. **Ask for approval** via `AskUserQuestion`:
187
+
188
+ ```markdown
189
+ ## Akceptacja planu
190
+
191
+ Powyżej znajduje się wygenerowany plan dla zadania <linearTaskId>.
192
+ Czy akceptujesz plan i mogę zapisać go jako załącznik `plan.md` w Linear?
193
+ ```
194
+
195
+ Options:
196
+
197
+ - **"Tak, zapisz plan do Linear"** _(Recommended)_ — user accepts. Proceed to Step 5 (create subtasks if needed) and Step 6 (save attachment).
198
+ - **"Wygeneruj plan ponownie"** — user wants a different plan. Go to step 3 (regeneration loop) below.
199
+ - **"Anuluj"** — user rejects. Stop the whole skill. Do NOT create subtasks. Do NOT delete the existing `plan.md` attachment. Do NOT save a new one. Do NOT apply the `AI Plan` label. Print a short status in Polish (`Plan nie został zapisany. Anulowano na żądanie użytkownika.`) and exit.
200
+
201
+ 3. **Regeneration branch**: if the user chose "Wygeneruj plan ponownie":
202
+
203
+ - Ask a follow-up `AskUserQuestion` (or accept the free-text the user typed alongside the rejection) to capture what should change: scope, structure, missed files, wrong approach, etc.
204
+ - Loop back to **Step 4 (Create Implementation Plan)** with the user's feedback in mind. Do NOT re-run Steps 1–3 — the Linear task, comments, and codebase analysis have not changed.
205
+ - On the regenerated plan, return to **Step 4a step 1** (render + ask again).
206
+ - **Cap the loop at 3 regenerations.** On the 3rd rejection, surface the situation to the user (`Plan został odrzucony 3 razy. Przerywam, abyś mógł doprecyzować wymagania.`) and exit without saving.
207
+
208
+ 4. **State invariant on entry to Step 5**: the only path that reaches Step 5 is the explicit "Tak, zapisz plan do Linear" choice (or `--auto`). Treat plan content as final.
209
+
159
210
  ### Step 5: Create Subtasks (if needed)
160
211
 
161
212
  For complex tasks, create subtasks in Linear:
@@ -171,12 +222,16 @@ Upload the plan directly to Linear via `mcp__linear__create_attachment` — Line
171
222
 
172
223
  #### 6.1 — If replacing an existing plan, confirm with user
173
224
 
174
- If a `plan.md` attachment is being replaced, ask the user via `AskUserQuestion`:
225
+ If a `plan.md` attachment is being replaced:
175
226
 
176
- - "Tak, usuń stary plan i zapisz nowy" (Recommended)
177
- - "Anuluj"
227
+ - **Default mode**: ask the user via `AskUserQuestion`:
178
228
 
179
- If confirmed, delete the Linear attachment via `mcp__linear__delete_attachment({ id: oldAttachmentId })`.
229
+ - "Tak, usuń stary plan i zapisz nowy" (Recommended)
230
+ - "Anuluj"
231
+
232
+ If confirmed, delete the Linear attachment via `mcp__linear__delete_attachment({ id: oldAttachmentId })`.
233
+
234
+ - **`--auto` mode**: skip the prompt; delete the old Linear attachment via `mcp__linear__delete_attachment({ id: oldAttachmentId })` automatically and proceed.
180
235
 
181
236
  #### 6.2 — Write `plan.md` locally
182
237
 
@@ -217,15 +272,21 @@ Delete `/tmp/claude-plans/<taskId>-plan.md` after the attachment is created. `/p
217
272
 
218
273
  ### Step 8: Confirm to User
219
274
 
275
+ The plan has been approved in Step 4a (or auto-approved in `--auto`). Step 8 is purely informational — **do NOT ask another question here**, just print the status.
276
+
277
+ **Default mode**:
278
+
220
279
  ```markdown
221
280
  ## Plan zapisany
222
281
 
223
282
  Plan implementacji został dodany jako załącznik `plan.md` do zadania [linearTaskId].
224
283
  Etykieta `AI Plan` została dodana.
225
284
 
226
- Czy plan jest zaakceptowany? Po akceptacji uruchom `/impl [linearTaskId]` aby rozpocząć implementację.
285
+ Uruchom `/impl [linearTaskId]` aby rozpocząć implementację.
227
286
  ```
228
287
 
288
+ **`--auto` mode**: post a Linear comment confirming the plan was saved (no question asked) and exit. The comment is the audit trail for the CI run.
289
+
229
290
  ## Guidelines
230
291
 
231
292
  1. **Always analyze existing code first** before planning
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "flow-legacy",
3
3
  "description": "Development flow skills for legacy Angular 14 projects with Linear-driven workflow",
4
- "version": "2.82.0"
4
+ "version": "2.84.0"
5
5
  }
@@ -56,7 +56,7 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
56
56
  - [ ] **5. MANDATORY: Agent orchestration plan** — delegate to `shared-impl-orchestrator` with `Angular Version: 14 (LEGACY)`, save result as `orchestration.md` attachment via `mcp__linear__create_attachment` (replace any existing one). **Calling `mcp__linear__save_comment` with the orchestration body is FORBIDDEN.**
57
57
  - [ ] **6. Check external library blockers** — if blockers found, set status to Blocked and skip
58
58
  - [ ] **7. Capture "before" screenshots** — if `UI_CHANGE_REQUIRED: YES`, launch `screenshot-reporter` in background
59
- - [ ] **8. MANDATORY: Implement with 3x3 rule** — pause every 3 changes, use `shared-tdd-developer` for ALL code (RED → GREEN → REFACTOR)
59
+ - [ ] **8. MANDATORY: Implement with 3x3 rule** — pause every 3 changes (skip pause in `--auto`, log checkpoint as Linear comment instead), use `shared-tdd-developer` for ALL code (RED → GREEN → REFACTOR)
60
60
  - [ ] **9. MANDATORY: Use Angular 14 patterns** — `*ngIf`/`*ngFor`, constructor DI, `@Input()`/`@Output()`, BehaviorSubject — NEVER signals, `@if`/`@for`, `inject()`
61
61
  - [ ] **10. Verify implementation** — run tests, lint, build check
62
62
  - [ ] **11. Capture "after" screenshots** — if `UI_CHANGE_REQUIRED: YES`, capture + post comparison to Linear + cleanup
@@ -65,12 +65,12 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
65
65
  - [ ] **14. MANDATORY: Write reports in Polish** — all Linear comments must be in Polish language
66
66
  - [ ] **15. Update status** — delegate to `shared-linear-subtask-iterator` for status determination
67
67
  - [ ] **16. Agent evolution** — if user confirmed feedback, delegate to `shared-agent-evolver`
68
- - [ ] **17. Pause for user confirmation** — ALWAYS wait before proceeding to next subtask
68
+ - [ ] **17. Pause for user confirmation** — wait before proceeding to next subtask (skipped in `--auto`; post completion comment and continue)
69
69
 
70
70
  ### Finalization
71
71
 
72
72
  - [ ] **18. Final summary** — present summary of all subtasks with statuses
73
- - [ ] **19. ALWAYS pause** — wait for user confirmation at end
73
+ - [ ] **19. ALWAYS pause** — wait for user confirmation at end (skipped in `--auto`; post final summary comment and exit)
74
74
 
75
75
  ### Task Progress Tracking
76
76
 
@@ -218,11 +218,30 @@ export class DataService {
218
218
 
219
219
  ```
220
220
  /impl [linearTaskId]
221
+ /impl [linearTaskId] --auto # Non-interactive mode for CI / GitHub Actions
221
222
  ```
222
223
 
223
224
  ## Parameters
224
225
 
225
226
  - `linearTaskId` - Linear task ID (e.g., ENG-123)
227
+ - `--auto` - Non-interactive mode: skip ALL `AskUserQuestion` prompts, 3x3 checkpoint pauses, per-subtask pauses, and the final end pause. If `plan.md` attachment is missing, auto-invoke `/plan` flow to generate it instead of posting a "run /plan first" comment and skipping. Designed for CI / GitHub Actions runs where no human is at the keyboard.
228
+
229
+ ## Auto Mode (`--auto`)
230
+
231
+ **When `--auto` is set, the skill MUST run end-to-end without any human-in-the-loop prompts.** Apply these overrides:
232
+
233
+ | Default behavior | `--auto` override |
234
+ | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
235
+ | Post comment "no plan.md found, run /plan first" + skip | Inline-invoke `/plan` flow for the task to generate `plan.md` attachment + `AI Plan` label, then continue |
236
+ | 3x3 rule pauses every 3 changes asking "Continue?" | Log the checkpoint summary as a status comment, then continue automatically |
237
+ | Pause after each subtask waiting for user confirmation | Post subtask completion comment, then proceed to next subtask |
238
+ | Final end pause "wait for user confirmation" | Post final summary comment and exit cleanly |
239
+ | `AskUserQuestion` for any decision | Use the option marked **(Recommended)**; if none, fail fast with a Linear comment explaining why |
240
+ | Confirmation before destructive ops (delete attachments) | Proceed without confirmation — replace old `orchestration.md` automatically |
241
+
242
+ **Hard requirement in `--auto`**: every checkpoint, decision, or skip MUST be logged as a Linear comment in Polish so the run remains auditable after the fact. Comments replace the interactive prompts — they are the audit trail.
243
+
244
+ **Detection**: The flag `--auto` is provided as a positional/named arg. Treat any of `--auto`, `--ci`, `--non-interactive` as equivalent.
226
245
 
227
246
  ## Instructions
228
247
 
@@ -272,7 +291,12 @@ Parse the markdown for:
272
291
  - Testing Strategy
273
292
  - External Library Changes (blockers — not to be implemented)
274
293
 
275
- **If no `plan.md` attachment found**: Create a comment noting that no plan was found, suggest running `/plan <taskId>` first, and skip this task. Set status back to "To Do". Do NOT fall back to parsing plan content from comments — the attachment is the source of truth.
294
+ **If no `plan.md` attachment found**:
295
+
296
+ - **Default mode**: Create a comment noting that no plan was found, suggest running `/plan <taskId>` first, and skip this task. Set status back to "To Do".
297
+ - **`--auto` mode**: Inline-invoke the `/plan` skill flow for this task to generate `plan.md` attachment + `AI Plan` label, then proceed with implementation. Post a comment in Polish noting the plan was auto-generated. Do NOT skip the task.
298
+
299
+ Do NOT fall back to parsing plan content from comments — the attachment is the source of truth.
276
300
 
277
301
  #### Step 3b-classify: MANDATORY UI Change Classification
278
302
 
@@ -607,7 +631,10 @@ The agent will provide:
607
631
  - Next subtask details (if any)
608
632
  - Pause point for user confirmation
609
633
 
610
- **IMPORTANT**: ALWAYS wait for user confirmation before proceeding to next subtask.
634
+ **IMPORTANT**:
635
+
636
+ - **Default mode**: ALWAYS wait for user confirmation before proceeding to next subtask.
637
+ - **`--auto` mode**: Skip the wait. The completion comment from Step 3f is the audit trail; proceed directly to Step 3i.
611
638
 
612
639
  #### Step 3i: Move to Next Subtask
613
640
 
@@ -629,7 +656,10 @@ When all subtasks are processed, the agent will return `🏁 Iteration Complete`
629
656
  - Statistics (completed, partial, blocked)
630
657
  - Recommendations for follow-up
631
658
 
632
- **IMPORTANT**: ALWAYS pause and present the final summary to the user.
659
+ **IMPORTANT**:
660
+
661
+ - **Default mode**: ALWAYS pause and present the final summary to the user.
662
+ - **`--auto` mode**: Post the final summary as a Linear comment in Polish on the parent task (or invoked task) and exit cleanly without pausing.
633
663
 
634
664
  ## Status Flow
635
665
 
@@ -641,18 +671,18 @@ To Do → In Progress → In Review (if completed)
641
671
 
642
672
  ## Pause Points (3x3 Rule)
643
673
 
644
- **ALWAYS stop and wait for user confirmation at these points:**
674
+ **ALWAYS stop and wait for user confirmation at these points** (skipped in `--auto` — see overrides):
645
675
 
646
- | Pause Point | When | What to Show |
647
- | -------------------- | ----------------------------------- | ----------------------------------------- |
648
- | **3x3 Checkpoint** | After every 3 changes | Summary of 3 changes + next 3 steps |
649
- | **Subtask Complete** | After finishing each subtask | Subtask summary + next subtask info |
650
- | **Task Complete** | After finishing all subtasks | Final summary with all results |
651
- | **Blocker Found** | When external dependency found | Blocker details + options |
652
- | **Error/Issue** | When unexpected problem occurs | Error details + proposed solution |
653
- | **Agent Evolution** | After subtask / after final summary | Evolution report with filed Linear issues |
676
+ | Pause Point | When | What to Show | `--auto` behavior |
677
+ | -------------------- | ----------------------------------- | ----------------------------------------- | ------------------------------------------------------------- |
678
+ | **3x3 Checkpoint** | After every 3 changes | Summary of 3 changes + next 3 steps | Post checkpoint as Linear comment, continue |
679
+ | **Subtask Complete** | After finishing each subtask | Subtask summary + next subtask info | Post completion comment, continue to next subtask |
680
+ | **Task Complete** | After finishing all subtasks | Final summary with all results | Post final summary comment, exit |
681
+ | **Blocker Found** | When external dependency found | Blocker details + options | Set status to Blocked, post blocker comment, skip subtask |
682
+ | **Error/Issue** | When unexpected problem occurs | Error details + proposed solution | Post error comment to Linear, fail the run with non-zero exit |
683
+ | **Agent Evolution** | After subtask / after final summary | Evolution report with filed Linear issues | Skip evolution prompt, file issues silently if any |
654
684
 
655
- **Never proceed automatically** - always wait for explicit user confirmation before:
685
+ **In default mode, never proceed automatically** - always wait for explicit user confirmation before:
656
686
 
657
687
  - Continuing after 3x3 checkpoint
658
688
  - Moving to next subtask
@@ -52,8 +52,8 @@ Execute each step in order. Do not skip any step marked as MANDATORY.
52
52
  - [ ] **9. Analyze external library deps** — check if `@smartsoft001` or `@smartsoft001-mobilems` changes are needed (mark as separate process)
53
53
  - [ ] **10. Create implementation plans** — generate structured plans per task/subtask with all required sections, using Angular 14 patterns
54
54
  - [ ] **11. MANDATORY: Write plans in Polish** — all plan content must be in Polish language
55
- - [ ] **12. Show plans to user** — present plans for review and approval before saving
56
- - [ ] **13. MANDATORY: Confirm old plan deletion** — if replacing existing `plan.md`, ask user to confirm deletion of old attachment before proceeding
55
+ - [ ] **12. MANDATORY: Get user approval of generated plan** — present the full plan content in the chat, then call `AskUserQuestion` with three options: save / regenerate / cancel. Save and label steps below MUST NOT run without approval. Skipped only in `--auto` (auto-approved; logged in audit comment).
56
+ - [ ] **13. MANDATORY: Confirm old plan deletion** — if replacing existing `plan.md`, ask user to confirm deletion of old attachment before proceeding (skipped in `--auto`; delete old attachment automatically)
57
57
  - [ ] **14. 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.
58
58
  - [ ] **15. 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)
59
59
  - [ ] **16. Confirm to user** — list saved plans with summaries and Linear links
@@ -115,11 +115,29 @@ You create plans that are:
115
115
 
116
116
  ```
117
117
  /plan [linearTaskId]
118
+ /plan [linearTaskId] --auto # Non-interactive mode for CI / GitHub Actions
118
119
  ```
119
120
 
120
121
  ## Parameters
121
122
 
122
123
  - `linearTaskId` - Linear task ID (e.g., ENG-123)
124
+ - `--auto` - Non-interactive mode: skip ALL `AskUserQuestion` prompts. Auto-approve plans before saving (no review step), auto-delete stale `plan.md` attachments without confirmation, and silently skip when all plans are up to date (no "regenerate anyway?" prompt). Designed for CI / GitHub Actions runs where no human is at the keyboard.
125
+
126
+ ## Auto Mode (`--auto`)
127
+
128
+ **When `--auto` is set, the skill MUST run end-to-end without any human-in-the-loop prompts.** Apply these overrides:
129
+
130
+ | Default behavior | `--auto` override |
131
+ | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
132
+ | Final approval of generated plan content before saving | Skip the approval gate; proceed directly to attachment save (auto-approve) |
133
+ | Ask user to confirm deletion of old `plan.md` attachments | Delete old attachments automatically before saving new ones |
134
+ | Ask "regenerate anyway?" when all plans are up-to-date | Exit cleanly with a Linear comment noting all plans are current; no regeneration |
135
+ | Secondary signal prompt (keyword-triggered confirmation to regen) | Ignore the secondary signal; only the mtime rule decides regeneration |
136
+ | `AskUserQuestion` for any decision | Use the option marked **(Recommended)**; if none, fail fast with a Linear comment explaining why |
137
+
138
+ **Hard requirement in `--auto`**: every decision (save, replace, skip) MUST be logged as a Linear comment in Polish so the run remains auditable after the fact. The mtime rule remains authoritative — `--auto` does not change _what_ gets regenerated, only that no human is asked.
139
+
140
+ **Detection**: The flag `--auto` is provided as a positional/named arg. Treat any of `--auto`, `--ci`, `--non-interactive` as equivalent.
123
141
 
124
142
  ## Angular 14 Legacy Patterns
125
143
 
@@ -206,7 +224,10 @@ If `planAttachment` exists and no comment is newer than it, but the user's lates
206
224
  - `tasksWithExistingPlan`: Array of task IDs with up-to-date plans
207
225
  - `oldPlanAttachments`: Map of task ID → `attachmentId` for plans being replaced
208
226
 
209
- **Important**: If ALL tasks already have up-to-date plans, inform the user and ask if they want to regenerate anyway.
227
+ **Important**: If ALL tasks already have up-to-date plans:
228
+
229
+ - **Default mode**: Inform the user and ask if they want to regenerate anyway.
230
+ - **`--auto` mode**: Exit cleanly with a Linear comment in Polish noting all plans are current; do NOT regenerate.
210
231
 
211
232
  ### Step 4: Analyze Previous Commits
212
233
 
@@ -525,11 +546,47 @@ _Plan generated by Claude Code (flow-legacy)_
525
546
  _Plan generated by Claude Code (flow-legacy)_
526
547
  ```
527
548
 
549
+ ### Step 8a: User Approval of Generated Plan
550
+
551
+ **MANDATORY.** Before any Linear write (deletion of old `plan.md`, creation of new `plan.md`, label apply), the user MUST approve the generated plan content. This is the gate FRA-126 added.
552
+
553
+ **`--auto` mode**: Skip this entire step. The plan is auto-approved. Record the auto-approval in the final Linear audit comment (e.g. `Plan zaakceptowany automatycznie (--auto)`). Proceed to Step 9.
554
+
555
+ **Default mode** (interactive):
556
+
557
+ 1. **Render the full plan(s) in chat.** Print the markdown produced in Step 8 for every task/subtask that needs planning. The `AskUserQuestion` option labels alone do not give the user enough context — the full text must be visible above the prompt.
558
+
559
+ 2. **Ask for approval** via `AskUserQuestion`:
560
+
561
+ ```markdown
562
+ ## Akceptacja planu
563
+
564
+ Powyżej znajduje się wygenerowany plan dla zadania <linearTaskId> (oraz <N> podzadań, jeśli dotyczy).
565
+ Czy akceptujesz plan i mogę zapisać go jako załącznik `plan.md` w Linear?
566
+ ```
567
+
568
+ Options (use exactly these labels for consistency with Step 9):
569
+
570
+ - **"Tak, zapisz plan do Linear"** _(Recommended)_ — user accepts. Proceed to Step 9 (delete old attachment if replacing, then save). Existing flow continues unchanged from here.
571
+ - **"Wygeneruj plan ponownie"** — user wants a different plan. Go to step 3 (regeneration loop) below.
572
+ - **"Anuluj"** — user rejects. Stop the whole skill. Do NOT delete the existing `plan.md` attachment. Do NOT save a new one. Do NOT apply the `AI Plan` label. Print a short status in Polish (`Plan nie został zapisany. Anulowano na żądanie użytkownika.`) and exit.
573
+
574
+ 3. **Regeneration branch**: if the user chose "Wygeneruj plan ponownie":
575
+
576
+ - Ask a follow-up `AskUserQuestion` (or accept the free-text the user typed alongside the rejection) to capture what should change: scope, structure, missed files, wrong approach, etc.
577
+ - Loop back to **Step 7 (Create Implementation Plans)** with the user's feedback in mind. Do NOT re-run Steps 1–6 — the Linear task, comments, commits, and codebase analysis have not changed.
578
+ - On the regenerated plan, return to **Step 8a step 1** (render + ask again).
579
+ - **Cap the loop at 3 regenerations.** On the 3rd rejection, surface the situation to the user (`Plan został odrzucony 3 razy. Przerywam, abyś mógł doprecyzować wymagania.`) and exit without saving.
580
+
581
+ 4. **State invariants on entry to Step 9**: the only path that reaches Step 9 is the explicit "Tak, zapisz plan do Linear" choice (or `--auto`). Treat plan content as final.
582
+
528
583
  ### Step 9: Confirm and Delete Old Plan Attachments
529
584
 
530
585
  **This step applies only when replacing existing plans** (`oldPlanAttachments` from Step 3a is not empty).
531
586
 
532
- Before saving new plans, ask the user to confirm deletion of old `plan.md` attachments:
587
+ **`--auto` mode**: Skip the confirmation prompt. For each task in `oldPlanAttachments`, delete the Linear attachment via `mcp__linear__delete_attachment({ id: attachmentId })` and proceed directly to Step 9a. Log the deletions in the final summary comment.
588
+
589
+ **Default mode** (interactive): The plan content was already approved in Step 8a; this prompt is strictly about confirming deletion of the **existing** Linear attachment that will be overwritten. Ask the user:
533
590
 
534
591
  ```markdown
535
592
  ## Zastąpienie istniejących planów
@@ -643,4 +700,9 @@ After saving:
643
700
 
644
701
  ---
645
702
 
646
- **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.
703
+ **Important**:
704
+
705
+ - **Default mode**: Before saving the plans as attachments, show them to the user for review and approval.
706
+ - **`--auto` mode**: Skip the review step; proceed directly to saving the attachments.
707
+
708
+ 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.