toga-ai 1.0.985 → 1.0.987

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.
@@ -1,310 +1,307 @@
1
1
  {
2
- "hooks": {
3
- "UserPromptSubmit": [
4
- {
5
- "hooks": [
6
- {
7
- "type": "command",
8
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/start-gate.js\"",
9
- "timeout": 3000
10
- }
11
- ]
12
- },
13
- {
14
- "hooks": [
15
- {
16
- "type": "command",
17
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/plain-talk.js\"",
18
- "timeout": 3000
19
- }
20
- ]
21
- },
22
- {
23
- "hooks": [
24
- {
25
- "type": "command",
26
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/session-files.js\"",
27
- "timeout": 3000
28
- }
29
- ]
30
- }
31
- ],
32
- "PreToolUse": [
33
- {
34
- "matcher": "Bash|PowerShell|Read|Grep|Glob|Edit|Write|MultiEdit|NotebookEdit|Task|Agent|WebFetch|WebSearch|mcp__.*[Cc][Ll][Ii][Cc][Kk][Uu][Pp].*",
35
- "hooks": [
36
- {
37
- "type": "command",
38
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/start-gate.js\"",
39
- "timeout": 3000
40
- }
41
- ]
42
- },
43
- {
44
- "matcher": "Bash",
45
- "hooks": [
46
- {
47
- "type": "command",
48
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/block-destructive.js\"",
49
- "timeout": 3000
50
- }
51
- ]
52
- },
53
- {
54
- "matcher": "Write|Edit|MultiEdit",
55
- "hooks": [
56
- {
57
- "type": "command",
58
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/guard-index.js\"",
59
- "timeout": 3000
60
- }
61
- ]
62
- },
63
- {
64
- "matcher": "Write|Edit|MultiEdit",
65
- "hooks": [
66
- {
67
- "type": "command",
68
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/dbchanges2-cluster-isolation.js\"",
69
- "timeout": 3000
70
- }
71
- ]
72
- },
73
- {
74
- "matcher": "Write|Edit|MultiEdit",
75
- "hooks": [
76
- {
77
- "type": "command",
78
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/dbchanges2-record-ids.js\"",
79
- "timeout": 3000
80
- }
81
- ]
82
- },
83
- {
84
- "matcher": "Write|Edit|MultiEdit",
85
- "hooks": [
86
- {
87
- "type": "command",
88
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/sql-file-location.js\"",
89
- "timeout": 3000
90
- }
91
- ]
92
- },
93
- {
94
- "matcher": "Edit|Write|MultiEdit",
95
- "hooks": [
96
- {
97
- "type": "command",
98
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/design-fidelity-reminder.js\"",
99
- "timeout": 3000
100
- }
101
- ]
102
- },
103
- {
104
- "matcher": "Write|Edit",
105
- "hooks": [
106
- {
107
- "type": "command",
108
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/platform-reuse-reminder.js\"",
109
- "timeout": 3000
110
- }
111
- ]
112
- }
113
- ],
114
- "PostToolUseFailure": [
115
- {
116
- "matcher": "mcp__.*[Cc][Ll][Ii][Cc][Kk][Uu][Pp].*",
117
- "hooks": [
118
- {
119
- "type": "command",
120
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/start-gate.js\"",
121
- "timeout": 3000
122
- }
123
- ]
124
- }
125
- ],
126
- "PostToolUse": [
127
- {
128
- "matcher": "Bash|PowerShell|mcp__.*[Cc][Ll][Ii][Cc][Kk][Uu][Pp].*",
129
- "hooks": [
130
- {
131
- "type": "command",
132
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/start-gate.js\"",
133
- "timeout": 3000
134
- }
135
- ]
136
- },
137
- {
138
- "matcher": "Write|Edit|MultiEdit",
139
- "hooks": [
140
- {
141
- "type": "command",
142
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/post-edit-validate.js\"",
143
- "timeout": 15000
144
- }
145
- ]
146
- },
147
- {
148
- "matcher": "Write|Edit|MultiEdit",
149
- "hooks": [
150
- {
151
- "type": "command",
152
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/remind-php-review.js\"",
153
- "timeout": 3000
154
- }
155
- ]
156
- },
157
- {
158
- "matcher": "Write|Edit|MultiEdit",
159
- "hooks": [
160
- {
161
- "type": "command",
162
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/remind-sql-review.js\"",
163
- "timeout": 3000
164
- }
165
- ]
166
- },
167
- {
168
- "matcher": "Write|Edit|MultiEdit",
169
- "hooks": [
170
- {
171
- "type": "command",
172
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/scope-counter.js\"",
173
- "timeout": 3000
174
- }
175
- ]
176
- },
177
- {
178
- "matcher": "Write|Edit|MultiEdit",
179
- "hooks": [
180
- {
181
- "type": "command",
182
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/remind-frontend-review.js\"",
183
- "timeout": 3000
184
- }
185
- ]
186
- },
187
- {
188
- "matcher": "Write|Edit|MultiEdit",
189
- "hooks": [
190
- {
191
- "type": "command",
192
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/sql-cross-cluster-check.js\"",
193
- "timeout": 3000
194
- }
195
- ]
196
- },
197
- {
198
- "matcher": "Write|Edit|MultiEdit",
199
- "hooks": [
200
- {
201
- "type": "command",
202
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/dbchanges2-file-sprawl.js\"",
203
- "timeout": 3000
204
- }
205
- ]
206
- },
207
- {
208
- "matcher": "Write|Edit|MultiEdit",
209
- "hooks": [
210
- {
211
- "type": "command",
212
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/memory-scope-guard.js\"",
213
- "timeout": 3000
214
- }
215
- ]
216
- },
217
- {
218
- "matcher": "Edit|Write|MultiEdit|NotebookEdit",
219
- "hooks": [
220
- {
221
- "type": "command",
222
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/session-files.js\"",
223
- "timeout": 3000
224
- }
225
- ]
226
- }
227
- ],
228
- "SessionStart": [
229
- {
230
- "hooks": [
231
- {
232
- "type": "command",
233
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/session-start.js\"",
234
- "timeout": 5000
235
- }
236
- ]
237
- }
238
- ],
239
- "Stop": [
240
- {
241
- "hooks": [
242
- {
243
- "type": "command",
244
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/session-end.js\"",
245
- "timeout": 5000
246
- }
247
- ]
248
- },
249
- {
250
- "hooks": [
251
- {
252
- "type": "command",
253
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/evaluate-session.js\"",
254
- "timeout": 5000
255
- }
256
- ]
257
- },
258
- {
259
- "hooks": [
260
- {
261
- "type": "command",
262
- "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/remind-php-lint.js\"",
263
- "timeout": 3000
264
- }
265
- ]
266
- }
267
- ]
268
- },
269
- "permissions": {
270
- "allow": [
271
- "Bash(node .claude/knowledge.js *)",
272
- "Bash(node .claude/hooks/toga/*.js)",
273
- "Bash(node sync-skills.js *)",
274
- "Bash(node scripts/harness.js *)",
275
- "Bash(node scripts/install.js *)",
276
- "Bash(php -l *)",
277
- "Bash(git status)",
278
- "Bash(git diff *)",
279
- "Bash(git log *)",
280
- "Bash(git add *)",
281
- "Bash(git commit *)",
282
- "Bash(git checkout *)",
283
- "Bash(git branch *)",
284
- "Bash(git pull *)",
285
- "Bash(npm *)",
286
- "Bash(npx *)"
287
- ],
288
- "ask": [
289
- "mcp__clickup__clickup_update_task",
290
- "Bash(git push *)"
291
- ],
292
- "deny": [
293
- "mcp__clickup__clickup_delete_task",
294
- "mcp__clickup__clickup_delete_comment",
295
- "mcp__clickup__clickup_create_task",
296
- "mcp__clickup__clickup_execute_operator",
297
- "mcp__clickup__clickup_merge_tasks",
298
- "mcp__clickup__clickup_move_task",
299
- "mcp__claude_ai_ClickUP_for_Dev",
300
- "Bash(git push --force*)",
301
- "Bash(git push -f*)",
302
- "Bash(git push *--force*)",
303
- "Bash(git push * -f*)",
304
- "Bash(git push * +*)"
305
- ]
306
- },
307
- "env": {
308
- "GATEGUARD_BASH_ROUTINE_DISABLED": "1"
309
- }
2
+ "hooks": {
3
+ "UserPromptSubmit": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/start-gate.js\"",
9
+ "timeout": 3000
10
+ }
11
+ ]
12
+ },
13
+ {
14
+ "hooks": [
15
+ {
16
+ "type": "command",
17
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/plain-talk.js\"",
18
+ "timeout": 3000
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "hooks": [
24
+ {
25
+ "type": "command",
26
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/session-files.js\"",
27
+ "timeout": 3000
28
+ }
29
+ ]
30
+ }
31
+ ],
32
+ "PreToolUse": [
33
+ {
34
+ "matcher": "Bash|PowerShell|Read|Grep|Glob|Edit|Write|MultiEdit|NotebookEdit|Task|Agent|WebFetch|WebSearch|mcp__.*[Cc][Ll][Ii][Cc][Kk][Uu][Pp].*",
35
+ "hooks": [
36
+ {
37
+ "type": "command",
38
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/start-gate.js\"",
39
+ "timeout": 3000
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "matcher": "Bash",
45
+ "hooks": [
46
+ {
47
+ "type": "command",
48
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/block-destructive.js\"",
49
+ "timeout": 3000
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "matcher": "Write|Edit|MultiEdit",
55
+ "hooks": [
56
+ {
57
+ "type": "command",
58
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/guard-index.js\"",
59
+ "timeout": 3000
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "matcher": "Write|Edit|MultiEdit",
65
+ "hooks": [
66
+ {
67
+ "type": "command",
68
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/dbchanges2-cluster-isolation.js\"",
69
+ "timeout": 3000
70
+ }
71
+ ]
72
+ },
73
+ {
74
+ "matcher": "Write|Edit|MultiEdit",
75
+ "hooks": [
76
+ {
77
+ "type": "command",
78
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/dbchanges2-record-ids.js\"",
79
+ "timeout": 3000
80
+ }
81
+ ]
82
+ },
83
+ {
84
+ "matcher": "Write|Edit|MultiEdit",
85
+ "hooks": [
86
+ {
87
+ "type": "command",
88
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/sql-file-location.js\"",
89
+ "timeout": 3000
90
+ }
91
+ ]
92
+ },
93
+ {
94
+ "matcher": "Edit|Write|MultiEdit",
95
+ "hooks": [
96
+ {
97
+ "type": "command",
98
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/design-fidelity-reminder.js\"",
99
+ "timeout": 3000
100
+ }
101
+ ]
102
+ },
103
+ {
104
+ "matcher": "Write|Edit",
105
+ "hooks": [
106
+ {
107
+ "type": "command",
108
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/platform-reuse-reminder.js\"",
109
+ "timeout": 3000
110
+ }
111
+ ]
112
+ }
113
+ ],
114
+ "PostToolUseFailure": [
115
+ {
116
+ "matcher": "mcp__.*[Cc][Ll][Ii][Cc][Kk][Uu][Pp].*",
117
+ "hooks": [
118
+ {
119
+ "type": "command",
120
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/start-gate.js\"",
121
+ "timeout": 3000
122
+ }
123
+ ]
124
+ }
125
+ ],
126
+ "PostToolUse": [
127
+ {
128
+ "matcher": "Bash|PowerShell|mcp__.*[Cc][Ll][Ii][Cc][Kk][Uu][Pp].*",
129
+ "hooks": [
130
+ {
131
+ "type": "command",
132
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/start-gate.js\"",
133
+ "timeout": 3000
134
+ }
135
+ ]
136
+ },
137
+ {
138
+ "matcher": "Write|Edit|MultiEdit",
139
+ "hooks": [
140
+ {
141
+ "type": "command",
142
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/post-edit-validate.js\"",
143
+ "timeout": 15000
144
+ }
145
+ ]
146
+ },
147
+ {
148
+ "matcher": "Write|Edit|MultiEdit",
149
+ "hooks": [
150
+ {
151
+ "type": "command",
152
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/remind-php-review.js\"",
153
+ "timeout": 3000
154
+ }
155
+ ]
156
+ },
157
+ {
158
+ "matcher": "Write|Edit|MultiEdit",
159
+ "hooks": [
160
+ {
161
+ "type": "command",
162
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/remind-sql-review.js\"",
163
+ "timeout": 3000
164
+ }
165
+ ]
166
+ },
167
+ {
168
+ "matcher": "Write|Edit|MultiEdit",
169
+ "hooks": [
170
+ {
171
+ "type": "command",
172
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/scope-counter.js\"",
173
+ "timeout": 3000
174
+ }
175
+ ]
176
+ },
177
+ {
178
+ "matcher": "Write|Edit|MultiEdit",
179
+ "hooks": [
180
+ {
181
+ "type": "command",
182
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/remind-frontend-review.js\"",
183
+ "timeout": 3000
184
+ }
185
+ ]
186
+ },
187
+ {
188
+ "matcher": "Write|Edit|MultiEdit",
189
+ "hooks": [
190
+ {
191
+ "type": "command",
192
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/sql-cross-cluster-check.js\"",
193
+ "timeout": 3000
194
+ }
195
+ ]
196
+ },
197
+ {
198
+ "matcher": "Write|Edit|MultiEdit",
199
+ "hooks": [
200
+ {
201
+ "type": "command",
202
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/dbchanges2-file-sprawl.js\"",
203
+ "timeout": 3000
204
+ }
205
+ ]
206
+ },
207
+ {
208
+ "matcher": "Write|Edit|MultiEdit",
209
+ "hooks": [
210
+ {
211
+ "type": "command",
212
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/memory-scope-guard.js\"",
213
+ "timeout": 3000
214
+ }
215
+ ]
216
+ },
217
+ {
218
+ "matcher": "Edit|Write|MultiEdit|NotebookEdit",
219
+ "hooks": [
220
+ {
221
+ "type": "command",
222
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/session-files.js\"",
223
+ "timeout": 3000
224
+ }
225
+ ]
226
+ }
227
+ ],
228
+ "SessionStart": [
229
+ {
230
+ "hooks": [
231
+ {
232
+ "type": "command",
233
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/session-start.js\"",
234
+ "timeout": 5000
235
+ }
236
+ ]
237
+ }
238
+ ],
239
+ "Stop": [
240
+ {
241
+ "hooks": [
242
+ {
243
+ "type": "command",
244
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/session-end.js\"",
245
+ "timeout": 5000
246
+ }
247
+ ]
248
+ },
249
+ {
250
+ "hooks": [
251
+ {
252
+ "type": "command",
253
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/evaluate-session.js\"",
254
+ "timeout": 5000
255
+ }
256
+ ]
257
+ },
258
+ {
259
+ "hooks": [
260
+ {
261
+ "type": "command",
262
+ "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/toga/remind-php-lint.js\"",
263
+ "timeout": 3000
264
+ }
265
+ ]
266
+ }
267
+ ]
268
+ },
269
+ "permissions": {
270
+ "allow": [
271
+ "Bash(node .claude/knowledge.js *)",
272
+ "Bash(node .claude/hooks/toga/*.js)",
273
+ "Bash(node sync-skills.js *)",
274
+ "Bash(node scripts/harness.js *)",
275
+ "Bash(node scripts/install.js *)",
276
+ "Bash(php -l *)",
277
+ "Bash(git status)",
278
+ "Bash(git diff *)",
279
+ "Bash(git log *)",
280
+ "Bash(git add *)",
281
+ "Bash(git commit *)",
282
+ "Bash(git checkout *)",
283
+ "Bash(git branch *)",
284
+ "Bash(git pull *)",
285
+ "Bash(npm *)",
286
+ "Bash(npx *)"
287
+ ],
288
+ "ask": ["Bash(git push *)"],
289
+ "deny": [
290
+ "mcp__clickup__clickup_delete_task",
291
+ "mcp__clickup__clickup_delete_comment",
292
+ "mcp__clickup__clickup_create_task",
293
+ "mcp__clickup__clickup_execute_operator",
294
+ "mcp__clickup__clickup_merge_tasks",
295
+ "mcp__clickup__clickup_move_task",
296
+ "mcp__claude_ai_ClickUP_for_Dev",
297
+ "Bash(git push --force*)",
298
+ "Bash(git push -f*)",
299
+ "Bash(git push *--force*)",
300
+ "Bash(git push * -f*)",
301
+ "Bash(git push * +*)"
302
+ ]
303
+ },
304
+ "env": {
305
+ "GATEGUARD_BASH_ROUTINE_DISABLED": "1"
306
+ }
310
307
  }
@@ -16,6 +16,8 @@ files:
16
16
  - claude/agents/ticket-reader.md
17
17
  - claude/scripts/hooks/start-gate.js
18
18
  - claude/skills/start/scripts/start-helper.js
19
+ - claude/.claude/settings.json
20
+ - claude/scripts/install.js
19
21
  related:
20
22
  - ./ticket-branch-creation-safety.md
21
23
  - ./harness-distribution.md
@@ -73,9 +75,13 @@ writes, and agents until the session has a ticket. These replaced `/kickoff`, `/
73
75
 
74
76
  - Writes go only to the session's own ticket — the `start-gate` hook blocks any other task id,
75
77
  and blocks task creation, deletion, moves, tags, links, docs, chat, and time tracking.
76
- - `permissions.ask` makes Claude Code ask the developer before every `clickup_update_task`
77
- (it cannot be scoped to one argument, so the status change asks too). `clickup_create_comment`
78
- posts without a prompt.
78
+ - The `start-gate` hook is the hard limit: session ticket only; fields Application,
79
+ Stakeholders, Task Type, Pseudocode, Has UI Changes, and the name; statuses `in progress` and
80
+ `development finished` only.
81
+ - No permission prompt for `clickup_update_task` or `clickup_create_comment` (since 2026-10-09).
82
+ Field changes are written only after the developer's yes in chat; status changes and the PM
83
+ comment need no question. Only `Bash(git push *)` stays in `permissions.ask`. `npx toga-ai`
84
+ strips the old ClickUp rules from a dev's existing `permissions.ask` (see harness distribution).
79
85
  - Use only the `clickup` MCP server (`mcp__clickup__clickup_*`). The old read-only
80
86
  "claude.ai ClickUP for Dev" server (`mcp__claude_ai_ClickUP_for_Dev__*`) is blocked.
81
87
 
@@ -156,6 +162,8 @@ All tested 2026-10-08:
156
162
  those, and `create-branch` creates/switches the ticket branch after the dev's yes. (jcardinal)
157
163
  - 2026-10-09 — `/start` sets status `to do` -> `in progress`; the gate allows `in progress` and
158
164
  `development finished` only. (jcardinal)
165
+ - 2026-10-09 — TRUE-82605: `clickup_update_task` and `clickup_create_comment` no longer ask;
166
+ the gate is the limit, field changes need the dev's yes in chat. (jcardinal)
159
167
 
160
168
  ## Related
161
169
 
@@ -6,11 +6,12 @@ project: Claude Harness
6
6
  client: shared
7
7
  type: workflow
8
8
  status: active
9
- updated: 2026-10-06
9
+ updated: 2026-10-09
10
10
  owners: ["jcardinal"]
11
11
  files:
12
12
  - claude/scripts/install.js
13
13
  - claude/knowledge.js
14
+ - claude/.claude/settings.json
14
15
  related:
15
16
  - standalone/apps/claude/workflows/knowledge-publish-pipeline.md
16
17
  ---
@@ -45,6 +46,12 @@ There are **two copies** of `knowledge.js` on a developer's machine, and the ski
45
46
  - **Publish Action (`.github/workflows/publish.yml`, on push to `_main`: bump patch, `npm publish`).** Devs get a change only after a version bump (`/start` runs `npx toga-ai@latest` when installed != latest).
46
47
  - `npm publish` **E404** ("could not be found or you do not have permission") = auth failure, not a missing package: the `NPM_TOKEN` secret in the repo's **Actions environment** expired. Fix: new npm Automation token, update the secret, re-run only the latest failed run.
47
48
  - A publish ships the whole tip of `_main`, so earlier failed runs are not lost. Do not retry old runs (they hit "version already published").
49
+ - **Removing a permission rule from the shipped `.claude/settings.json` does not remove it from devs.** `mergeSettings()` only adds template rules. To retire one, also list it in `RETIRED_TOGA_PERMISSIONS` (`scripts/install.js`); `npx toga-ai` then filters it out of the dev's existing lists.
50
+ - **Auto mode blocks Claude from editing permission rules in `.claude/settings.json`** ("Self-Modification" safety classifier) — subagents too, even when the lead asked, and no approval prompt is shown. A person makes that one edit by hand; Claude can then do the rest (`install.js`, skill text).
51
+
52
+ ## Change history
53
+
54
+ - 2026-10-09 — Added permission-retire (`RETIRED_TOGA_PERMISSIONS`) and auto-mode settings-edit gotchas. (jcardinal)
48
55
 
49
56
  ## Related
50
57
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toga-ai",
3
- "version": "1.0.985",
3
+ "version": "1.0.987",
4
4
  "description": "TOGA Technology Team Claude Knowledge System — shared AI coding harness with skills, knowledge base CLI, and project installer for Claude Code.",
5
5
  "keywords": [
6
6
  "claude",
@@ -439,6 +439,7 @@ const RETIRED_TOGA_HOOKS = ['kickoff-gate.js'];
439
439
  const RETIRED_TOGA_PERMISSIONS = { ask: [
440
440
  'mcp__clickup__clickup_create_task_comment',
441
441
  'mcp__clickup__clickup_create_comment',
442
+ 'mcp__clickup__clickup_update_task',
442
443
  ] };
443
444
 
444
445
  function mergeSettings(claudeDir, sourceDir) {
@@ -25,9 +25,10 @@ The hook already checked the id, wrote the session ticket file
25
25
  `node "<TEAM_REPO>/knowledge.js" kickoff-primed`.
26
26
  3. **open** — normal work. ClickUp writes still only go to this ticket, only with
27
27
  `mcp__clickup__clickup_update_task` (fields: Application, Stakeholders, Task Type,
28
- Pseudocode, Has UI Changes, `name`, status `development finished`) and
29
- `mcp__clickup__clickup_create_comment`. The hook blocks every other ClickUp write, and
30
- Claude Code asks the developer before each one. /start writes only the status `to do` -> `in progress` (Step 6b).
28
+ Pseudocode, Has UI Changes, `name`, status `in progress` / `development finished`) and
29
+ `mcp__clickup__clickup_create_comment`. The hook blocks every other ClickUp write. Field
30
+ changes are written only after the developer says yes in chat; status changes need no
31
+ question. /start writes only the status `to do` -> `in progress` (Step 6b).
31
32
 
32
33
  Trailing text is never permission to skip steps. If a block message appears, do the step it
33
34
  names. Do not fight the gate. (Harness work only: `TOGA_START_GATE_DISABLED=1`.)