takt 0.14.0 → 0.16.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.
Files changed (90) hide show
  1. package/README.md +25 -3
  2. package/builtins/en/config.yaml +61 -57
  3. package/builtins/en/instructions/loop-monitor-ai-fix.md +12 -0
  4. package/builtins/en/pieces/backend-cqrs.yaml +1 -1
  5. package/builtins/en/pieces/backend.yaml +1 -1
  6. package/builtins/en/pieces/coding.yaml +2 -2
  7. package/builtins/en/pieces/default.yaml +3 -3
  8. package/builtins/en/pieces/e2e-test.yaml +3 -3
  9. package/builtins/en/pieces/expert-cqrs.yaml +14 -1
  10. package/builtins/en/pieces/expert.yaml +14 -1
  11. package/builtins/en/pieces/frontend.yaml +1 -1
  12. package/builtins/en/pieces/minimal.yaml +5 -5
  13. package/builtins/en/pieces/passthrough.yaml +1 -1
  14. package/builtins/en/pieces/review-fix-minimal.yaml +5 -5
  15. package/builtins/en/pieces/structural-reform.yaml +2 -2
  16. package/builtins/en/pieces/unit-test.yaml +3 -3
  17. package/builtins/ja/config.yaml +61 -57
  18. package/builtins/ja/instructions/loop-monitor-ai-fix.md +12 -0
  19. package/builtins/ja/pieces/backend-cqrs.yaml +1 -1
  20. package/builtins/ja/pieces/backend.yaml +1 -1
  21. package/builtins/ja/pieces/coding.yaml +2 -2
  22. package/builtins/ja/pieces/default.yaml +3 -3
  23. package/builtins/ja/pieces/e2e-test.yaml +3 -3
  24. package/builtins/ja/pieces/expert-cqrs.yaml +14 -1
  25. package/builtins/ja/pieces/expert.yaml +14 -1
  26. package/builtins/ja/pieces/frontend.yaml +1 -1
  27. package/builtins/ja/pieces/minimal.yaml +5 -5
  28. package/builtins/ja/pieces/passthrough.yaml +1 -1
  29. package/builtins/ja/pieces/review-fix-minimal.yaml +5 -5
  30. package/builtins/ja/pieces/structural-reform.yaml +2 -2
  31. package/builtins/ja/pieces/unit-test.yaml +3 -3
  32. package/builtins/skill/references/yaml-schema.md +1 -1
  33. package/dist/core/models/global-config.d.ts +8 -1
  34. package/dist/core/models/global-config.d.ts.map +1 -1
  35. package/dist/core/models/index.d.ts +1 -1
  36. package/dist/core/models/index.d.ts.map +1 -1
  37. package/dist/core/models/index.js.map +1 -1
  38. package/dist/core/models/piece-types.d.ts +13 -2
  39. package/dist/core/models/piece-types.d.ts.map +1 -1
  40. package/dist/core/models/provider-profiles.d.ts +16 -0
  41. package/dist/core/models/provider-profiles.d.ts.map +1 -0
  42. package/dist/core/models/provider-profiles.js +5 -0
  43. package/dist/core/models/provider-profiles.js.map +1 -0
  44. package/dist/core/models/schemas.d.ts +216 -5
  45. package/dist/core/models/schemas.d.ts.map +1 -1
  46. package/dist/core/models/schemas.js +38 -3
  47. package/dist/core/models/schemas.js.map +1 -1
  48. package/dist/core/models/types.d.ts +2 -1
  49. package/dist/core/models/types.d.ts.map +1 -1
  50. package/dist/core/piece/engine/OptionsBuilder.d.ts.map +1 -1
  51. package/dist/core/piece/engine/OptionsBuilder.js +13 -1
  52. package/dist/core/piece/engine/OptionsBuilder.js.map +1 -1
  53. package/dist/core/piece/engine/PieceEngine.d.ts +1 -0
  54. package/dist/core/piece/engine/PieceEngine.d.ts.map +1 -1
  55. package/dist/core/piece/engine/PieceEngine.js +18 -0
  56. package/dist/core/piece/engine/PieceEngine.js.map +1 -1
  57. package/dist/core/piece/engine/TeamLeaderRunner.js +1 -1
  58. package/dist/core/piece/engine/TeamLeaderRunner.js.map +1 -1
  59. package/dist/core/piece/permission-profile-resolution.d.ts +24 -0
  60. package/dist/core/piece/permission-profile-resolution.d.ts.map +1 -0
  61. package/dist/core/piece/permission-profile-resolution.js +61 -0
  62. package/dist/core/piece/permission-profile-resolution.js.map +1 -0
  63. package/dist/core/piece/types.d.ts +9 -0
  64. package/dist/core/piece/types.d.ts.map +1 -1
  65. package/dist/core/runtime/presets/prepare-gradle.sh +11 -0
  66. package/dist/core/runtime/presets/prepare-node.sh +11 -0
  67. package/dist/core/runtime/runtime-environment.d.ts +10 -0
  68. package/dist/core/runtime/runtime-environment.d.ts.map +1 -0
  69. package/dist/core/runtime/runtime-environment.js +167 -0
  70. package/dist/core/runtime/runtime-environment.js.map +1 -0
  71. package/dist/features/tasks/execute/pieceExecution.d.ts.map +1 -1
  72. package/dist/features/tasks/execute/pieceExecution.js +10 -1
  73. package/dist/features/tasks/execute/pieceExecution.js.map +1 -1
  74. package/dist/features/tasks/execute/taskExecution.d.ts.map +1 -1
  75. package/dist/features/tasks/execute/taskExecution.js +6 -1
  76. package/dist/features/tasks/execute/taskExecution.js.map +1 -1
  77. package/dist/features/tasks/execute/types.d.ts +9 -0
  78. package/dist/features/tasks/execute/types.d.ts.map +1 -1
  79. package/dist/infra/config/global/globalConfig.d.ts.map +1 -1
  80. package/dist/infra/config/global/globalConfig.js +35 -0
  81. package/dist/infra/config/global/globalConfig.js.map +1 -1
  82. package/dist/infra/config/loaders/pieceParser.d.ts.map +1 -1
  83. package/dist/infra/config/loaders/pieceParser.js +12 -1
  84. package/dist/infra/config/loaders/pieceParser.js.map +1 -1
  85. package/dist/infra/config/project/projectConfig.d.ts.map +1 -1
  86. package/dist/infra/config/project/projectConfig.js +37 -3
  87. package/dist/infra/config/project/projectConfig.js.map +1 -1
  88. package/dist/infra/config/types.d.ts +5 -0
  89. package/dist/infra/config/types.d.ts.map +1 -1
  90. package/package.json +2 -2
package/README.md CHANGED
@@ -366,7 +366,7 @@ movements:
366
366
  policy: coding
367
367
  knowledge: architecture
368
368
  edit: true
369
- permission_mode: edit
369
+ required_permission_mode: edit
370
370
  rules:
371
371
  - condition: Implementation complete
372
372
  next: review
@@ -578,12 +578,28 @@ concurrency: 1 # Parallel task count for takt run (1-10, default: 1 =
578
578
  task_poll_interval_ms: 500 # Polling interval for new tasks during takt run (100-5000, default: 500)
579
579
  interactive_preview_movements: 3 # Movement previews in interactive mode (0-10, default: 3)
580
580
 
581
+ # Runtime environment defaults (applies to all pieces unless piece_config.runtime overrides)
582
+ # runtime:
583
+ # prepare:
584
+ # - gradle # Prepare Gradle cache/config in .runtime/
585
+ # - node # Prepare npm cache in .runtime/
586
+
581
587
  # Per-persona provider overrides (optional)
582
588
  # Route specific personas to different providers without duplicating pieces
583
589
  # persona_providers:
584
590
  # coder: codex # Run coder on Codex
585
591
  # ai-antipattern-reviewer: claude # Keep reviewers on Claude
586
592
 
593
+ # Provider-specific permission profiles (optional)
594
+ # Priority: project override → global override → project default → global default → required_permission_mode (floor)
595
+ # provider_profiles:
596
+ # codex:
597
+ # default_permission_mode: full
598
+ # movement_permission_overrides:
599
+ # ai_review: readonly
600
+ # claude:
601
+ # default_permission_mode: edit
602
+
587
603
  # API Key configuration (optional)
588
604
  # Can be overridden by environment variables TAKT_ANTHROPIC_API_KEY / TAKT_OPENAI_API_KEY / TAKT_OPENCODE_API_KEY
589
605
  anthropic_api_key: sk-ant-... # For Claude (Anthropic)
@@ -733,7 +749,7 @@ movements:
733
749
  - name: implement
734
750
  persona: coder
735
751
  edit: true
736
- permission_mode: edit
752
+ required_permission_mode: edit
737
753
  pass_previous_response: true
738
754
  rules:
739
755
  - condition: Complete
@@ -802,7 +818,7 @@ Special `next` values: `COMPLETE` (success), `ABORT` (failure)
802
818
  | `allowed_tools` | - | List of tools agent can use (Read, Glob, Grep, Edit, Write, Bash, etc.) |
803
819
  | `provider` | - | Override provider for this movement (`claude`, `codex`, or `opencode`) |
804
820
  | `model` | - | Override model for this movement |
805
- | `permission_mode` | - | Permission mode: `readonly`, `edit`, `full` (provider-independent) |
821
+ | `required_permission_mode` | - | Required minimum permission mode: `readonly`, `edit`, `full` (acts as floor; actual mode resolved via `provider_profiles`) |
806
822
  | `provider_options` | - | Provider-specific options (e.g. `codex.network_access`, `opencode.network_access`) |
807
823
  | `output_contracts` | - | Output contract definitions for report files |
808
824
  | `quality_gates` | - | AI directives for movement completion requirements |
@@ -817,8 +833,14 @@ piece_config:
817
833
  network_access: true
818
834
  opencode:
819
835
  network_access: true
836
+ runtime:
837
+ prepare:
838
+ - gradle
839
+ - node
820
840
  ```
821
841
 
842
+ Runtime `prepare` entries can be builtin presets (`gradle`, `node`) or paths to custom shell scripts. Scripts receive `TAKT_RUNTIME_ROOT` and related env vars, and can export additional variables via stdout.
843
+
822
844
  ## API Usage Example
823
845
 
824
846
  ```typescript
@@ -1,85 +1,92 @@
1
- # TAKT Global Configuration
1
+ # TAKT global configuration sample
2
2
  # Location: ~/.takt/config.yaml
3
3
 
4
- # ── Basic ──
5
-
6
- # Language (en | ja)
4
+ # ---- Core ----
7
5
  language: en
8
-
9
- # Default piece when no piece is specified
10
6
  default_piece: default
11
-
12
- # Log level (debug | info | warn | error)
13
7
  log_level: info
14
8
 
15
- # ── Provider & Model ──
16
-
17
- # Provider runtime (claude | codex)
9
+ # ---- Provider ----
10
+ # provider: claude | codex | opencode | mock
18
11
  provider: claude
19
12
 
20
- # Default model (optional)
21
- # Claude: opus, sonnet, haiku
22
- # Codex: gpt-5.2-codex, gpt-5.1-codex, etc.
13
+ # Model (optional)
14
+ # Claude examples: opus, sonnet, haiku
15
+ # Codex examples: gpt-5.2-codex, gpt-5.1-codex
16
+ # OpenCode format: provider/model
23
17
  # model: sonnet
24
18
 
25
- # Per-persona provider override (optional)
26
- # Override provider for specific personas. Others use the global provider.
19
+ # Per-persona provider override
27
20
  # persona_providers:
28
21
  # coder: codex
29
-
30
- # ── API Keys ──
31
- # Optional. Environment variables take priority:
32
- # TAKT_ANTHROPIC_API_KEY, TAKT_OPENAI_API_KEY
33
-
22
+ # reviewer: claude
23
+
24
+ # Provider-specific movement permission policy
25
+ # Priority:
26
+ # 1) project provider_profiles override
27
+ # 2) global provider_profiles override
28
+ # 3) project provider_profiles default
29
+ # 4) global provider_profiles default
30
+ # 5) movement.required_permission_mode (minimum floor)
31
+ # provider_profiles:
32
+ # codex:
33
+ # default_permission_mode: full
34
+ # movement_permission_overrides:
35
+ # ai_review: readonly
36
+ # claude:
37
+ # default_permission_mode: edit
38
+
39
+ # Provider-specific runtime options
40
+ # provider_options:
41
+ # codex:
42
+ # network_access: true
43
+ # claude:
44
+ # sandbox:
45
+ # allow_unsandboxed_commands: true
46
+
47
+ # ---- API Keys ----
48
+ # Environment variables take priority:
49
+ # TAKT_ANTHROPIC_API_KEY / TAKT_OPENAI_API_KEY / TAKT_OPENCODE_API_KEY
34
50
  # anthropic_api_key: ""
35
51
  # openai_api_key: ""
52
+ # opencode_api_key: ""
36
53
 
37
- # ── Execution ──
54
+ # ---- Runtime ----
55
+ # Global runtime preparation (piece_config.runtime overrides this)
56
+ # runtime:
57
+ # prepare:
58
+ # - gradle
59
+ # - node
38
60
 
39
- # Worktree (shared clone) directory (default: ../{clone-name} relative to project)
61
+ # ---- Execution ----
40
62
  # worktree_dir: ~/takt-worktrees
41
-
42
- # Auto-create PR after worktree execution (default: prompt in interactive mode)
43
63
  # auto_pr: false
44
-
45
- # Prevent macOS idle sleep during execution using caffeinate (default: false)
46
64
  # prevent_sleep: false
47
65
 
48
- # ── Parallel Execution (takt run) ──
49
-
50
- # Number of tasks to run concurrently (1 = sequential, max: 10)
66
+ # ---- Run Loop ----
51
67
  # concurrency: 1
52
-
53
- # Polling interval in ms for picking up new tasks (100-5000, default: 500)
54
68
  # task_poll_interval_ms: 500
55
-
56
- # ── Interactive Mode ──
57
-
58
- # Number of movement previews shown in interactive mode (0 to disable, max: 10)
59
69
  # interactive_preview_movements: 3
60
-
61
- # Branch name generation strategy (romaji: fast default | ai: slow)
62
70
  # branch_name_strategy: romaji
63
71
 
64
- # ── Output ──
65
-
66
- # Notification sounds (default: true)
67
- # notification_sound: true
68
-
69
- # Minimal output for CI - suppress AI output (default: false)
72
+ # ---- Output ----
70
73
  # minimal_output: false
71
-
72
- # ── Builtin Pieces ──
73
-
74
- # Enable builtin pieces (default: true)
74
+ # notification_sound: true
75
+ # notification_sound_events:
76
+ # iteration_limit: true
77
+ # piece_complete: true
78
+ # piece_abort: true
79
+ # run_complete: true
80
+ # run_abort: true
81
+ # observability:
82
+ # provider_events: true
83
+
84
+ # ---- Builtins ----
75
85
  # enable_builtin_pieces: true
76
-
77
- # Exclude specific builtins from loading
78
86
  # disabled_builtins:
79
87
  # - magi
80
88
 
81
- # ── Pipeline Mode (--pipeline) ──
82
-
89
+ # ---- Pipeline ----
83
90
  # pipeline:
84
91
  # default_branch_prefix: "takt/"
85
92
  # commit_message_template: "feat: {title} (#{issue})"
@@ -88,14 +95,11 @@ provider: claude
88
95
  # {issue_body}
89
96
  # Closes #{issue}
90
97
 
91
- # ── Preferences ──
92
-
93
- # Custom paths for preference files
98
+ # ---- Preferences ----
94
99
  # bookmarks_file: ~/.takt/preferences/bookmarks.yaml
95
100
  # piece_categories_file: ~/.takt/preferences/piece-categories.yaml
96
101
 
97
- # ── Debug ──
98
-
102
+ # ---- Debug ----
99
103
  # debug:
100
104
  # enabled: false
101
105
  # log_file: ~/.takt/logs/debug.log
@@ -0,0 +1,12 @@
1
+ The ai_review ↔ ai_fix loop has repeated {cycle_count} times.
2
+
3
+ Review the reports from each cycle and determine whether this loop
4
+ is healthy (making progress) or unproductive (repeating the same issues).
5
+
6
+ **Reports to reference:**
7
+ - AI Review results: {report:03-ai-review.md}
8
+
9
+ **Judgment criteria:**
10
+ - Are new issues being found/fixed in each cycle?
11
+ - Are the same findings being repeated?
12
+ - Are fixes actually being applied?
@@ -219,7 +219,7 @@ movements:
219
219
  - Bash
220
220
  - WebSearch
221
221
  - WebFetch
222
- permission_mode: edit
222
+ required_permission_mode: edit
223
223
  rules:
224
224
  - condition: Fix complete
225
225
  next: reviewers
@@ -216,7 +216,7 @@ movements:
216
216
  - Bash
217
217
  - WebSearch
218
218
  - WebFetch
219
- permission_mode: edit
219
+ required_permission_mode: edit
220
220
  rules:
221
221
  - condition: Fix complete
222
222
  next: reviewers
@@ -51,7 +51,7 @@ movements:
51
51
  - Bash
52
52
  - WebSearch
53
53
  - WebFetch
54
- permission_mode: edit
54
+ required_permission_mode: edit
55
55
  rules:
56
56
  - condition: Implementation complete
57
57
  next: reviewers
@@ -132,7 +132,7 @@ movements:
132
132
  - Bash
133
133
  - WebSearch
134
134
  - WebFetch
135
- permission_mode: edit
135
+ required_permission_mode: edit
136
136
  rules:
137
137
  - condition: Fix complete
138
138
  next: reviewers
@@ -82,7 +82,7 @@ movements:
82
82
  - Bash
83
83
  - WebSearch
84
84
  - WebFetch
85
- permission_mode: edit
85
+ required_permission_mode: edit
86
86
  rules:
87
87
  - condition: Implementation complete
88
88
  next: ai_review
@@ -142,7 +142,7 @@ movements:
142
142
  - Bash
143
143
  - WebSearch
144
144
  - WebFetch
145
- permission_mode: edit
145
+ required_permission_mode: edit
146
146
  rules:
147
147
  - condition: AI issues fixed
148
148
  next: ai_review
@@ -234,7 +234,7 @@ movements:
234
234
  - Bash
235
235
  - WebSearch
236
236
  - WebFetch
237
- permission_mode: edit
237
+ required_permission_mode: edit
238
238
  rules:
239
239
  - condition: Fix complete
240
240
  next: reviewers
@@ -85,7 +85,7 @@ movements:
85
85
  - Bash
86
86
  - WebSearch
87
87
  - WebFetch
88
- permission_mode: edit
88
+ required_permission_mode: edit
89
89
  rules:
90
90
  - condition: Test implementation complete
91
91
  next: ai_review
@@ -145,7 +145,7 @@ movements:
145
145
  - Bash
146
146
  - WebSearch
147
147
  - WebFetch
148
- permission_mode: edit
148
+ required_permission_mode: edit
149
149
  rules:
150
150
  - condition: AI issues fixed
151
151
  next: ai_review
@@ -212,7 +212,7 @@ movements:
212
212
  - Bash
213
213
  - WebSearch
214
214
  - WebFetch
215
- permission_mode: edit
215
+ required_permission_mode: edit
216
216
  rules:
217
217
  - condition: Fix complete
218
218
  next: review_test
@@ -9,6 +9,19 @@ piece_config:
9
9
 
10
10
  max_movements: 30
11
11
  initial_movement: plan
12
+ loop_monitors:
13
+ - cycle:
14
+ - ai_review
15
+ - ai_fix
16
+ threshold: 3
17
+ judge:
18
+ persona: supervisor
19
+ instruction_template: loop-monitor-ai-fix
20
+ rules:
21
+ - condition: Healthy (making progress)
22
+ next: ai_review
23
+ - condition: Unproductive (same findings repeated or fixes not reflected)
24
+ next: ai_no_fix
12
25
  movements:
13
26
  - name: plan
14
27
  edit: false
@@ -241,7 +254,7 @@ movements:
241
254
  - Bash
242
255
  - WebSearch
243
256
  - WebFetch
244
- permission_mode: edit
257
+ required_permission_mode: edit
245
258
  rules:
246
259
  - condition: Fix complete
247
260
  next: reviewers
@@ -9,6 +9,19 @@ piece_config:
9
9
 
10
10
  max_movements: 30
11
11
  initial_movement: plan
12
+ loop_monitors:
13
+ - cycle:
14
+ - ai_review
15
+ - ai_fix
16
+ threshold: 3
17
+ judge:
18
+ persona: supervisor
19
+ instruction_template: loop-monitor-ai-fix
20
+ rules:
21
+ - condition: Healthy (making progress)
22
+ next: ai_review
23
+ - condition: Unproductive (same findings repeated or fixes not reflected)
24
+ next: ai_no_fix
12
25
  movements:
13
26
  - name: plan
14
27
  edit: false
@@ -238,7 +251,7 @@ movements:
238
251
  - Bash
239
252
  - WebSearch
240
253
  - WebFetch
241
- permission_mode: edit
254
+ required_permission_mode: edit
242
255
  rules:
243
256
  - condition: Fix complete
244
257
  next: reviewers
@@ -235,7 +235,7 @@ movements:
235
235
  - Bash
236
236
  - WebSearch
237
237
  - WebFetch
238
- permission_mode: edit
238
+ required_permission_mode: edit
239
239
  rules:
240
240
  - condition: Fix complete
241
241
  next: reviewers
@@ -25,7 +25,7 @@ movements:
25
25
  - Bash
26
26
  - WebSearch
27
27
  - WebFetch
28
- permission_mode: edit
28
+ required_permission_mode: edit
29
29
  instruction: implement
30
30
  rules:
31
31
  - condition: Implementation complete
@@ -106,7 +106,7 @@ movements:
106
106
  - Bash
107
107
  - WebSearch
108
108
  - WebFetch
109
- permission_mode: edit
109
+ required_permission_mode: edit
110
110
  rules:
111
111
  - condition: AI Reviewer's issues fixed
112
112
  - condition: No fix needed (verified target files/spec)
@@ -126,7 +126,7 @@ movements:
126
126
  - Bash
127
127
  - WebSearch
128
128
  - WebFetch
129
- permission_mode: edit
129
+ required_permission_mode: edit
130
130
  rules:
131
131
  - condition: Supervisor's issues fixed
132
132
  - condition: Cannot proceed, insufficient info
@@ -151,7 +151,7 @@ movements:
151
151
  - Bash
152
152
  - WebSearch
153
153
  - WebFetch
154
- permission_mode: edit
154
+ required_permission_mode: edit
155
155
  rules:
156
156
  - condition: AI Reviewer's issues fixed
157
157
  next: reviewers
@@ -175,7 +175,7 @@ movements:
175
175
  - Bash
176
176
  - WebSearch
177
177
  - WebFetch
178
- permission_mode: edit
178
+ required_permission_mode: edit
179
179
  rules:
180
180
  - condition: Supervisor's issues fixed
181
181
  next: reviewers
@@ -25,7 +25,7 @@ movements:
25
25
  - Bash
26
26
  - WebSearch
27
27
  - WebFetch
28
- permission_mode: edit
28
+ required_permission_mode: edit
29
29
  rules:
30
30
  - condition: Task complete
31
31
  next: COMPLETE
@@ -25,7 +25,7 @@ movements:
25
25
  - Bash
26
26
  - WebSearch
27
27
  - WebFetch
28
- permission_mode: edit
28
+ required_permission_mode: edit
29
29
  instruction: implement
30
30
  rules:
31
31
  - condition: Implementation complete
@@ -106,7 +106,7 @@ movements:
106
106
  - Bash
107
107
  - WebSearch
108
108
  - WebFetch
109
- permission_mode: edit
109
+ required_permission_mode: edit
110
110
  rules:
111
111
  - condition: AI Reviewer's issues fixed
112
112
  - condition: No fix needed (verified target files/spec)
@@ -126,7 +126,7 @@ movements:
126
126
  - Bash
127
127
  - WebSearch
128
128
  - WebFetch
129
- permission_mode: edit
129
+ required_permission_mode: edit
130
130
  rules:
131
131
  - condition: Supervisor's issues fixed
132
132
  - condition: Cannot proceed, insufficient info
@@ -151,7 +151,7 @@ movements:
151
151
  - Bash
152
152
  - WebSearch
153
153
  - WebFetch
154
- permission_mode: edit
154
+ required_permission_mode: edit
155
155
  rules:
156
156
  - condition: AI Reviewer's issues fixed
157
157
  next: reviewers
@@ -175,7 +175,7 @@ movements:
175
175
  - Bash
176
176
  - WebSearch
177
177
  - WebFetch
178
- permission_mode: edit
178
+ required_permission_mode: edit
179
179
  rules:
180
180
  - condition: Supervisor's issues fixed
181
181
  next: reviewers
@@ -226,7 +226,7 @@ movements:
226
226
  - Bash
227
227
  - WebSearch
228
228
  - WebFetch
229
- permission_mode: edit
229
+ required_permission_mode: edit
230
230
  instruction: implement
231
231
  rules:
232
232
  - condition: Implementation complete
@@ -309,7 +309,7 @@ movements:
309
309
  - Bash
310
310
  - WebSearch
311
311
  - WebFetch
312
- permission_mode: edit
312
+ required_permission_mode: edit
313
313
  rules:
314
314
  - condition: Fix complete
315
315
  next: reviewers
@@ -85,7 +85,7 @@ movements:
85
85
  - Bash
86
86
  - WebSearch
87
87
  - WebFetch
88
- permission_mode: edit
88
+ required_permission_mode: edit
89
89
  rules:
90
90
  - condition: Test implementation complete
91
91
  next: ai_review
@@ -145,7 +145,7 @@ movements:
145
145
  - Bash
146
146
  - WebSearch
147
147
  - WebFetch
148
- permission_mode: edit
148
+ required_permission_mode: edit
149
149
  rules:
150
150
  - condition: AI issues fixed
151
151
  next: ai_review
@@ -212,7 +212,7 @@ movements:
212
212
  - Bash
213
213
  - WebSearch
214
214
  - WebFetch
215
- permission_mode: edit
215
+ required_permission_mode: edit
216
216
  rules:
217
217
  - condition: Fix complete
218
218
  next: review_test