@famonfa/mono 0.0.0-stage → 0.1.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 (61) hide show
  1. package/bin/mono.mjs +210 -0
  2. package/node_modules/@anthropic-ai/claude-agent-sdk/LICENSE.md +1 -0
  3. package/node_modules/@anthropic-ai/claude-agent-sdk/README.md +69 -0
  4. package/node_modules/@anthropic-ai/claude-agent-sdk/agentSdkTypes.d.ts +1 -0
  5. package/node_modules/@anthropic-ai/claude-agent-sdk/bridge.d.ts +396 -0
  6. package/node_modules/@anthropic-ai/claude-agent-sdk/bridge.mjs +142 -0
  7. package/node_modules/@anthropic-ai/claude-agent-sdk/browser-sdk.d.ts +208 -0
  8. package/node_modules/@anthropic-ai/claude-agent-sdk/browser-sdk.js +145 -0
  9. package/node_modules/@anthropic-ai/claude-agent-sdk/core-36zyfan5.mjs +52 -0
  10. package/node_modules/@anthropic-ai/claude-agent-sdk/core-5682eevd.mjs +27 -0
  11. package/node_modules/@anthropic-ai/claude-agent-sdk/core-nne0e2ds.mjs +40 -0
  12. package/node_modules/@anthropic-ai/claude-agent-sdk/core-xpxe8nzb.mjs +26 -0
  13. package/node_modules/@anthropic-ai/claude-agent-sdk/core.d.ts +22 -0
  14. package/node_modules/@anthropic-ai/claude-agent-sdk/core.mjs +34 -0
  15. package/node_modules/@anthropic-ai/claude-agent-sdk/extractFromBunfs.d.ts +1 -0
  16. package/node_modules/@anthropic-ai/claude-agent-sdk/extractFromBunfs.js +156 -0
  17. package/node_modules/@anthropic-ai/claude-agent-sdk/manifest.json +82 -0
  18. package/node_modules/@anthropic-ai/claude-agent-sdk/manifest.zst.json +90 -0
  19. package/node_modules/@anthropic-ai/claude-agent-sdk/package.json +94 -0
  20. package/node_modules/@anthropic-ai/claude-agent-sdk/sdk-tools.d.ts +4222 -0
  21. package/node_modules/@anthropic-ai/claude-agent-sdk/sdk.d.ts +10277 -0
  22. package/node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs +169 -0
  23. package/node_modules/ws/LICENSE +20 -0
  24. package/node_modules/ws/README.md +548 -0
  25. package/node_modules/ws/browser.js +8 -0
  26. package/node_modules/ws/index.js +22 -0
  27. package/node_modules/ws/lib/buffer-util.js +131 -0
  28. package/node_modules/ws/lib/constants.js +19 -0
  29. package/node_modules/ws/lib/event-target.js +292 -0
  30. package/node_modules/ws/lib/extension.js +203 -0
  31. package/node_modules/ws/lib/limiter.js +55 -0
  32. package/node_modules/ws/lib/permessage-deflate.js +530 -0
  33. package/node_modules/ws/lib/receiver.js +743 -0
  34. package/node_modules/ws/lib/sender.js +607 -0
  35. package/node_modules/ws/lib/stream.js +161 -0
  36. package/node_modules/ws/lib/subprotocol.js +62 -0
  37. package/node_modules/ws/lib/validation.js +152 -0
  38. package/node_modules/ws/lib/websocket-server.js +562 -0
  39. package/node_modules/ws/lib/websocket.js +1421 -0
  40. package/node_modules/ws/package.json +74 -0
  41. package/node_modules/ws/wrapper.mjs +21 -0
  42. package/package.json +126 -3
  43. package/skills/workspace/SKILL.md +108 -0
  44. package/src/api.mjs +279 -0
  45. package/src/chats.mjs +419 -0
  46. package/src/commands.mjs +100 -0
  47. package/src/groups.mjs +84 -0
  48. package/src/launcher.mjs +212 -0
  49. package/src/main.mjs +42 -0
  50. package/src/paths.mjs +44 -0
  51. package/src/projects.mjs +199 -0
  52. package/src/refresh.mjs +124 -0
  53. package/src/remote.mjs +129 -0
  54. package/src/sessions.mjs +422 -0
  55. package/src/store.mjs +253 -0
  56. package/web/assets/index-BMbPwlF6.js +55 -0
  57. package/web/assets/index-Ke-WlOuz.css +1 -0
  58. package/web/icon.svg +1 -0
  59. package/web/index.html +17 -0
  60. package/web/manifest.webmanifest +9 -0
  61. package/README.md +0 -3
@@ -0,0 +1,4222 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ /**
9
+ * JSON Schema definitions for Claude CLI tool inputs
10
+ */
11
+ export type ToolInputSchemas =
12
+ | AgentInput
13
+ | BashInput
14
+ | ExitPlanModeInput
15
+ | FileEditInput
16
+ | FileReadInput
17
+ | FileWriteInput
18
+ | GlobInput
19
+ | GrepInput
20
+ | TaskStopInput
21
+ | ListMcpResourcesInput
22
+ | RefreshMcpToolsInput
23
+ | McpInput
24
+ | NotebookEditInput
25
+ | ReadMcpResourceDirInput
26
+ | ReadMcpResourceInput
27
+ | ReportFindingsInput
28
+ | TodoWriteInput
29
+ | WebFetchInput
30
+ | WebSearchInput
31
+ | AskUserQuestionInput
32
+ | SendFeedbackInput
33
+ | ClaudeDesignInput
34
+ | ProjectsInput
35
+ | EnterPlanModeInput
36
+ | TaskCreateInput
37
+ | TaskGetInput
38
+ | TaskUpdateInput
39
+ | TaskListInput
40
+ | WorkflowInput
41
+ | CronCreateInput
42
+ | CronDeleteInput
43
+ | CronListInput
44
+ | ScheduleWakeupInput
45
+ | RemoteTriggerInput
46
+ | ShowOnboardingRolePickerInput
47
+ | OfferChromeSetupInput
48
+ | ReadNotificationsInput
49
+ | MonitorInput
50
+ | ProposeSkillsInput
51
+ | ProposeGoalInput
52
+ | ArtifactInput
53
+ | PushNotificationInput
54
+ | EnterWorktreeInput
55
+ | ExitWorktreeInput
56
+ | ToolOutputSchemas;
57
+ export type ToolOutputSchemas =
58
+ | AgentOutput
59
+ | BashOutput
60
+ | ExitPlanModeOutput
61
+ | FileEditOutput
62
+ | FileReadOutput
63
+ | FileWriteOutput
64
+ | GlobOutput
65
+ | GrepOutput
66
+ | TaskStopOutput
67
+ | ListMcpResourcesOutput
68
+ | RefreshMcpToolsOutput
69
+ | McpOutput
70
+ | NotebookEditOutput
71
+ | ReadMcpResourceDirOutput
72
+ | ReadMcpResourceOutput
73
+ | ReportFindingsOutput
74
+ | TodoWriteOutput
75
+ | WebFetchOutput
76
+ | WebSearchOutput
77
+ | AskUserQuestionOutput
78
+ | SendFeedbackOutput
79
+ | EnterWorktreeOutput
80
+ | ExitWorktreeOutput
81
+ | TaskCreateOutput
82
+ | TaskGetOutput
83
+ | TaskUpdateOutput
84
+ | TaskListOutput
85
+ | ArtifactOutput
86
+ | RemoteTriggerOutput
87
+ | ShowOnboardingRolePickerOutput
88
+ | OfferChromeSetupOutput
89
+ | ReadNotificationsOutput
90
+ | ScheduleWakeupOutput
91
+ | MonitorOutput
92
+ | ProposeSkillsOutput
93
+ | ProposeGoalOutput
94
+ | EnterPlanModeOutput
95
+ | WorkflowOutput
96
+ | CronCreateOutput
97
+ | CronDeleteOutput
98
+ | CronListOutput
99
+ | PushNotificationOutput
100
+ | ClaudeDesignOutput
101
+ | ProjectsOutput;
102
+ export type AgentOutput =
103
+ | {
104
+ agentId: string;
105
+ agentType?: string;
106
+ content: {
107
+ type: "text";
108
+ text: string;
109
+ citations?: unknown[] | null;
110
+ }[];
111
+ resolvedModel?: string;
112
+ modelsUsed?: string[];
113
+ totalToolUseCount: number;
114
+ totalDurationMs: number;
115
+ totalTokens: number;
116
+ usage: {
117
+ input_tokens: number;
118
+ output_tokens: number;
119
+ cache_creation_input_tokens: number | null;
120
+ cache_read_input_tokens: number | null;
121
+ server_tool_use: {
122
+ web_search_requests: number;
123
+ web_fetch_requests: number;
124
+ } | null;
125
+ service_tier: string | null;
126
+ cache_creation: {
127
+ ephemeral_1h_input_tokens: number;
128
+ ephemeral_5m_input_tokens: number;
129
+ } | null;
130
+ inference_geo?: string | null;
131
+ speed?: string | null;
132
+ iterations?: unknown;
133
+ output_tokens_details?: {
134
+ thinking_tokens?: number | null;
135
+ } | null;
136
+ fallback_credit?: unknown;
137
+ };
138
+ toolStats?: {
139
+ readCount: number;
140
+ searchCount: number;
141
+ bashCount: number;
142
+ editFileCount: number;
143
+ linesAdded: number;
144
+ linesRemoved: number;
145
+ otherToolCount: number;
146
+ frameCount?: number;
147
+ };
148
+ status: "completed";
149
+ prompt: string;
150
+ worktreePath?: string;
151
+ worktreeBranch?: string;
152
+ }
153
+ | {
154
+ status: "async_launched";
155
+ isAsync?: true;
156
+ /**
157
+ * The ID of the async agent
158
+ */
159
+ agentId: string;
160
+ /**
161
+ * The description of the task
162
+ */
163
+ description: string;
164
+ /**
165
+ * Model in use at the backgrounding transition (a pre-background swap is reflected here)
166
+ */
167
+ resolvedModel?: string;
168
+ /**
169
+ * Ordered distinct models used before backgrounding (length > 1 means a mid-run swap)
170
+ */
171
+ modelsUsed?: string[];
172
+ /**
173
+ * The prompt for the agent
174
+ */
175
+ prompt: string;
176
+ /**
177
+ * Path to the output file for checking agent progress
178
+ */
179
+ outputFile: string;
180
+ /**
181
+ * Whether the calling agent has Read/Bash tools to check progress
182
+ */
183
+ canReadOutputFile?: boolean;
184
+ }
185
+ | {
186
+ status: "remote_launched";
187
+ /**
188
+ * The ID of the remote agent task
189
+ */
190
+ taskId: string;
191
+ /**
192
+ * The URL of the cloud session
193
+ */
194
+ sessionUrl: string;
195
+ /**
196
+ * The description of the task
197
+ */
198
+ description: string;
199
+ /**
200
+ * The prompt for the agent
201
+ */
202
+ prompt: string;
203
+ /**
204
+ * Path to the output file for checking agent progress
205
+ */
206
+ outputFile: string;
207
+ };
208
+ export type FileReadOutput =
209
+ | {
210
+ type: "text";
211
+ file: {
212
+ /**
213
+ * The path to the file that was read
214
+ */
215
+ filePath: string;
216
+ /**
217
+ * The content of the file
218
+ */
219
+ content: string;
220
+ /**
221
+ * Number of lines in the returned content
222
+ */
223
+ numLines: number;
224
+ /**
225
+ * The starting line number
226
+ */
227
+ startLine: number;
228
+ /**
229
+ * Total number of lines in the file
230
+ */
231
+ totalLines: number;
232
+ /**
233
+ * True when a whole-file read was auto-paginated because it exceeded the token cap (the content is a partial first page). A programmatic signal for internal consumers; survives output reconstruction (unlike the render-time banner).
234
+ */
235
+ truncatedByTokenCap?: boolean;
236
+ };
237
+ /**
238
+ * Set when this Read completed a saved Artifact source file: the Artifact and the version of it that now counts as viewed.
239
+ */
240
+ artifactRead?: {
241
+ slug: string;
242
+ ver: string;
243
+ };
244
+ }
245
+ | {
246
+ type: "image";
247
+ file: {
248
+ /**
249
+ * Base64-encoded image data
250
+ */
251
+ base64: string;
252
+ /**
253
+ * The MIME type of the image
254
+ */
255
+ type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
256
+ /**
257
+ * Original file size in bytes
258
+ */
259
+ originalSize: number;
260
+ /**
261
+ * Image dimension info for coordinate mapping
262
+ */
263
+ dimensions?: {
264
+ /**
265
+ * Original image width in pixels
266
+ */
267
+ originalWidth?: number;
268
+ /**
269
+ * Original image height in pixels
270
+ */
271
+ originalHeight?: number;
272
+ /**
273
+ * Displayed image width in pixels (after resizing)
274
+ */
275
+ displayWidth?: number;
276
+ /**
277
+ * Displayed image height in pixels (after resizing)
278
+ */
279
+ displayHeight?: number;
280
+ };
281
+ };
282
+ }
283
+ | {
284
+ type: "notebook";
285
+ file: {
286
+ /**
287
+ * The path to the notebook file
288
+ */
289
+ filePath: string;
290
+ /**
291
+ * Array of notebook cells
292
+ */
293
+ cells: unknown[];
294
+ };
295
+ }
296
+ | {
297
+ type: "pdf";
298
+ file: {
299
+ /**
300
+ * The path to the PDF file
301
+ */
302
+ filePath: string;
303
+ /**
304
+ * Base64-encoded PDF data
305
+ */
306
+ base64: string;
307
+ /**
308
+ * Original file size in bytes
309
+ */
310
+ originalSize: number;
311
+ };
312
+ }
313
+ | {
314
+ type: "parts";
315
+ file: {
316
+ /**
317
+ * The path to the PDF file
318
+ */
319
+ filePath: string;
320
+ /**
321
+ * Original file size in bytes
322
+ */
323
+ originalSize: number;
324
+ /**
325
+ * Number of pages extracted
326
+ */
327
+ count: number;
328
+ /**
329
+ * Directory containing extracted page images
330
+ */
331
+ outputDir: string;
332
+ };
333
+ /**
334
+ * Document page number of the first extracted page (1 when no range was requested); labels the page images in the model-facing tool_result
335
+ */
336
+ firstPage?: number;
337
+ /**
338
+ * Extracted page images, in page order. Present only transiently in-process: the page image bytes are delivered solely as image blocks in the model-facing tool_result content and are not retained on the tool_use_result, so this key is absent on the emitted/persisted result
339
+ */
340
+ pages?: {
341
+ /**
342
+ * Base64-encoded page image; empty when the page could not be processed
343
+ */
344
+ base64: string;
345
+ /**
346
+ * The MIME type of the image
347
+ */
348
+ mediaType: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
349
+ /**
350
+ * Why the page could not be processed as an image; set only when base64 is empty
351
+ */
352
+ error?: string;
353
+ }[];
354
+ }
355
+ | {
356
+ type: "file_unchanged";
357
+ file: {
358
+ /**
359
+ * The path to the file
360
+ */
361
+ filePath: string;
362
+ };
363
+ /**
364
+ * Set when the dedup matched a startup-seeded entry (CLAUDE.md / nested memory) rather than a prior Read tool_result
365
+ */
366
+ source?: "seeded";
367
+ };
368
+ export type ListMcpResourcesOutput = {
369
+ /**
370
+ * Resource URI
371
+ */
372
+ uri: string;
373
+ /**
374
+ * Resource name
375
+ */
376
+ name: string;
377
+ /**
378
+ * MIME type of the resource
379
+ */
380
+ mimeType?: string;
381
+ /**
382
+ * Resource description
383
+ */
384
+ description?: string;
385
+ /**
386
+ * Server that provides this resource
387
+ */
388
+ server: string;
389
+ }[];
390
+ export type RefreshMcpToolsOutput = {
391
+ /**
392
+ * Server name
393
+ */
394
+ server: string;
395
+ /**
396
+ * refreshed: tool list re-queried and applied. error: the re-query failed and the previous tool set was kept. not_connected: the server has no live connection to query (this tool never dials).
397
+ */
398
+ status: "refreshed" | "error" | "not_connected";
399
+ /**
400
+ * Number of tools now available from this server
401
+ */
402
+ toolCount?: number;
403
+ /**
404
+ * Tool names this refresh added
405
+ */
406
+ added?: string[];
407
+ /**
408
+ * Tool names this refresh removed
409
+ */
410
+ removed?: string[];
411
+ /**
412
+ * Why the refresh failed or the server was unavailable
413
+ */
414
+ error?: string;
415
+ }[];
416
+ /**
417
+ * MCP tool execution result
418
+ */
419
+ export type McpOutput =
420
+ | string
421
+ | {
422
+ type: string;
423
+ [k: string]: unknown;
424
+ }[]
425
+ | {
426
+ [k: string]: unknown;
427
+ };
428
+ export type ArtifactOutput =
429
+ | {
430
+ url: string;
431
+ path: string;
432
+ artifact_id?: string;
433
+ title?: string;
434
+ version?: string;
435
+ capabilities?: unknown;
436
+ stored?: {
437
+ contract: string;
438
+ preferredContract?: string;
439
+ capabilities?: {
440
+ [k: string]: unknown;
441
+ };
442
+ carried?: boolean;
443
+ read?: string;
444
+ };
445
+ warnings?: string[];
446
+ publishesRemaining?: number;
447
+ publishesResetAt?: number;
448
+ contract?: string;
449
+ updated?: boolean;
450
+ owned?: boolean;
451
+ icon?: string;
452
+ faviconSent?: true;
453
+ iconDropped?: true;
454
+ audience?: string;
455
+ seq?: number;
456
+ unchanged?: true;
457
+ liveSubscription?: string;
458
+ pinned?: boolean;
459
+ }
460
+ | {
461
+ artifacts: {
462
+ title: string;
463
+ url: string;
464
+ favicon?: string;
465
+ updatedAt?: string;
466
+ rel?: "mine" | "shared";
467
+ external?: true;
468
+ role?: "editor" | "commenter" | "reader" | "viewer";
469
+ pinned?: boolean;
470
+ }[];
471
+ truncated?: boolean;
472
+ total?: number;
473
+ total_at_least?: true;
474
+ pins_enabled?: boolean;
475
+ scope?: "shared" | "all";
476
+ external_listed?: true;
477
+ }
478
+ | {
479
+ read: {
480
+ url: string;
481
+ bytes: number;
482
+ code: number;
483
+ codeText: string;
484
+ result: string;
485
+ durationMs: number;
486
+ title?: string;
487
+ };
488
+ owned?: boolean;
489
+ artifactRead?: {
490
+ slug: string;
491
+ ver?: string;
492
+ seeded?: false;
493
+ };
494
+ }
495
+ | {
496
+ watch: {
497
+ url: string;
498
+ watching: boolean;
499
+ outcome: string;
500
+ reason?: string;
501
+ durable_skip_reason?: string;
502
+ task_id?: string;
503
+ since?: number;
504
+ token_expires_at?: number;
505
+ rail?: string;
506
+ trigger_id?: string;
507
+ durable_since?: string;
508
+ status?: number;
509
+ detail?: string;
510
+ note?: string;
511
+ events?: string[];
512
+ };
513
+ }
514
+ | {
515
+ unwatch: {
516
+ url: string;
517
+ was_watching: boolean;
518
+ };
519
+ }
520
+ | {
521
+ watches: (
522
+ | {
523
+ url: string;
524
+ task_id: string;
525
+ since: number;
526
+ explicit: boolean;
527
+ connected: boolean;
528
+ connecting?: boolean;
529
+ token_expires_at: number;
530
+ armed_via?: string;
531
+ }
532
+ | {
533
+ url: string;
534
+ rail: "durable_wake";
535
+ trigger_id: string;
536
+ since: string;
537
+ events?: string[];
538
+ restored?: boolean;
539
+ }
540
+ | {
541
+ url: string;
542
+ rail: "live_stopped";
543
+ since?: number;
544
+ explicit?: boolean;
545
+ armed_via?: string;
546
+ stop_kind: string;
547
+ }
548
+ )[];
549
+ filter_url?: string;
550
+ arms?: {
551
+ url: string;
552
+ rail?: string;
553
+ state: string;
554
+ reconnect?: boolean;
555
+ failures?: number;
556
+ max_failures?: number;
557
+ next_in_s?: number;
558
+ last_failure?: string;
559
+ reason?: string;
560
+ detail?: string;
561
+ server_message?: string;
562
+ at?: number;
563
+ }[];
564
+ }
565
+ | {
566
+ written?: {
567
+ url: string;
568
+ };
569
+ owned?: boolean;
570
+ asset_upload: {
571
+ id: string;
572
+ url: string;
573
+ size_bytes: number;
574
+ content_type: string;
575
+ sha256?: string;
576
+ file_name: string;
577
+ };
578
+ }
579
+ | {
580
+ written?: {
581
+ url: string;
582
+ };
583
+ owned?: boolean;
584
+ asset_uploads: {
585
+ url: string;
586
+ /**
587
+ * @minItems 1
588
+ * @maxItems 25
589
+ */
590
+ results: [
591
+ (
592
+ | {
593
+ file_path: string;
594
+ status: "uploaded";
595
+ id: string;
596
+ url: string;
597
+ size_bytes: number;
598
+ content_type: string;
599
+ sha256?: string;
600
+ file_name: string;
601
+ }
602
+ | {
603
+ file_path: string;
604
+ status: "failed" | "not_attempted";
605
+ reason: string;
606
+ message: string;
607
+ may_be_stored?: true;
608
+ }
609
+ ),
610
+ ...(
611
+ | {
612
+ file_path: string;
613
+ status: "uploaded";
614
+ id: string;
615
+ url: string;
616
+ size_bytes: number;
617
+ content_type: string;
618
+ sha256?: string;
619
+ file_name: string;
620
+ }
621
+ | {
622
+ file_path: string;
623
+ status: "failed" | "not_attempted";
624
+ reason: string;
625
+ message: string;
626
+ may_be_stored?: true;
627
+ }
628
+ )[]
629
+ ];
630
+ };
631
+ }
632
+ | {
633
+ asset_list: {
634
+ url: string;
635
+ /**
636
+ * @maxItems 1000
637
+ */
638
+ assets: {
639
+ id: string;
640
+ url: string;
641
+ content_type: string;
642
+ size_bytes: number;
643
+ sha256?: string;
644
+ created_at: string;
645
+ }[];
646
+ usage: {
647
+ files: number;
648
+ bytes: number;
649
+ max_files: number;
650
+ max_bytes: number;
651
+ };
652
+ next?: string;
653
+ cowritten?: true;
654
+ outside_writer?: true;
655
+ };
656
+ }
657
+ | {
658
+ asset_read: {
659
+ id: string;
660
+ path: string;
661
+ size_bytes: number;
662
+ content_type: string;
663
+ sha256: string;
664
+ cowritten?: true;
665
+ outside_writer?: true;
666
+ public_read?: true;
667
+ foreign?: true;
668
+ };
669
+ }
670
+ | {
671
+ written?: {
672
+ url: string;
673
+ };
674
+ owned?: boolean;
675
+ asset_delete: {
676
+ id: string;
677
+ deleted: boolean;
678
+ };
679
+ }
680
+ | {
681
+ pin: {
682
+ action: "pin" | "unpin";
683
+ url: string;
684
+ pinned: boolean;
685
+ title?: string;
686
+ };
687
+ };
688
+ export type ProjectsOutput =
689
+ | {
690
+ method: "project_info";
691
+ notice?: string;
692
+ name: string;
693
+ description: string;
694
+ instructions: string;
695
+ docs: {
696
+ path: string;
697
+ created_at: string | null;
698
+ }[];
699
+ files?: {
700
+ path: string;
701
+ file_kind: string;
702
+ created_at: string | null;
703
+ }[];
704
+ sync_sources?: {
705
+ type: string | null;
706
+ config: {
707
+ [k: string]: unknown;
708
+ };
709
+ }[];
710
+ knowledge: {
711
+ knowledge_size: number;
712
+ max_knowledge_size: number;
713
+ };
714
+ }
715
+ | {
716
+ method: "project_read";
717
+ notice?: string;
718
+ path: string;
719
+ file_kind?: string;
720
+ content?: string;
721
+ local_file?: string;
722
+ created_at: string | null;
723
+ }
724
+ | {
725
+ method: "project_search";
726
+ notice?: string;
727
+ rag: boolean;
728
+ hits?: {
729
+ name?: string;
730
+ doc_uuid?: string;
731
+ text?: string;
732
+ }[];
733
+ docs?: string[];
734
+ }
735
+ | {
736
+ method: "project_write";
737
+ notice?: string;
738
+ path: string;
739
+ doc_uuid: string;
740
+ replaced: boolean;
741
+ present_to_user?: boolean;
742
+ local_path?: string;
743
+ }
744
+ | {
745
+ method: "project_delete";
746
+ notice?: string;
747
+ path: string;
748
+ deleted: boolean;
749
+ }
750
+ | {
751
+ method: "project_memory_list";
752
+ notice?: string;
753
+ files: {
754
+ path: string;
755
+ size_bytes: number;
756
+ updated_at: string | null;
757
+ truncated: boolean;
758
+ }[];
759
+ truncated: boolean;
760
+ }
761
+ | {
762
+ method: "project_memory_read";
763
+ notice?: string;
764
+ path: string;
765
+ content?: string;
766
+ local_file?: string;
767
+ size_bytes: number;
768
+ updated_at: string | null;
769
+ truncated: boolean;
770
+ };
771
+
772
+ export interface AgentInput {
773
+ /**
774
+ * A short (3-5 word) description of the task
775
+ */
776
+ description: string;
777
+ /**
778
+ * The task for the agent to perform
779
+ */
780
+ prompt: string;
781
+ /**
782
+ * The type of specialized agent to use for this task
783
+ */
784
+ subagent_type?: string;
785
+ /**
786
+ * Optional model override for this agent. Takes precedence over the agent definition's model frontmatter and the configured default subagent model. If omitted, uses the agent definition's model, else the default (inherits from the parent unless a default subagent model is configured). Ignored for subagent_type: "fork" — forks always inherit the parent model.
787
+ */
788
+ model?: "sonnet" | "opus" | "haiku" | "fable";
789
+ /**
790
+ * Reasoning effort for this agent. Set this ONLY when the user, or instructions such as CLAUDE.md or a skill, explicitly ask that this agent or delegated work run at a specific effort level, never on your own judgment; otherwise omit it and the agent runs at its usual effort. Ignored for subagent_type: "fork": a fork runs at your own effort.
791
+ */
792
+ effort?: "low" | "medium" | "high" | "xhigh" | "max";
793
+ /**
794
+ * Agents run in the background by default; you will be notified when one completes. Set to false only when your very next action depends on this agent's result and nothing else could usefully happen while it runs — otherwise leave it in the background so the user can hand you other work.
795
+ */
796
+ run_in_background?: boolean;
797
+ /**
798
+ * Name for the spawned agent. Makes it addressable via SendMessage({to: name}) while running.
799
+ */
800
+ name?: string;
801
+ /**
802
+ * Deprecated; ignored. The session has a single implicit team.
803
+ */
804
+ team_name?: string;
805
+ /**
806
+ * Deprecated; ignored. Subagents inherit the parent session's permission mode; agent-definition frontmatter may override it.
807
+ */
808
+ mode?: "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan";
809
+ /**
810
+ * Isolation mode. "worktree" creates a temporary git worktree so the agent works on an isolated copy of the repo. "remote" launches the agent in a remote cloud environment (always runs in background; availability is gated).
811
+ */
812
+ isolation?: "worktree" | "remote";
813
+ }
814
+ export interface BashInput {
815
+ /**
816
+ * The command to execute
817
+ */
818
+ command: string;
819
+ /**
820
+ * Optional timeout in milliseconds (max 600000 for a foreground command)
821
+ */
822
+ timeout?: number;
823
+ /**
824
+ * Clear, concise description of what this command does in active voice. Never use words like "complex" or "risk" in the description - just describe what it does.
825
+ *
826
+ * Say what the command does in plain words: do not echo the command's text, its flags, or file paths - the user reads this description, often without seeing the command.
827
+ *
828
+ * For simple commands (git, npm, standard CLI tools), keep it brief (5-10 words):
829
+ * - ls → "List files in current directory"
830
+ * - git status → "Show working tree status"
831
+ * - npm install → "Install package dependencies"
832
+ *
833
+ * For commands that are harder to parse at a glance (piped commands, obscure flags, etc.), add enough context to clarify what it does:
834
+ * - find . -name "*.tmp" -exec rm {} \; → "Find and delete all .tmp files recursively"
835
+ * - git reset --hard origin/main → "Discard all local changes and match remote main"
836
+ * - curl -s url | jq '.data[]' → "Fetch JSON from URL and extract data array elements"
837
+ */
838
+ description?: string;
839
+ /**
840
+ * Set to true to run this command in the background. With it, `timeout` limits how long the command may run in the background before it is stopped (default 1800000 ms, max 7200000 ms).
841
+ */
842
+ run_in_background?: boolean;
843
+ /**
844
+ * Set this to true to dangerously override sandbox mode and run commands without sandboxing.
845
+ */
846
+ dangerouslyDisableSandbox?: boolean;
847
+ }
848
+ export interface ExitPlanModeInput {
849
+ /**
850
+ * Deprecated: no longer used.
851
+ */
852
+ allowedPrompts?: {
853
+ /**
854
+ * The tool this prompt applies to
855
+ */
856
+ tool: "Bash";
857
+ /**
858
+ * Semantic description of the action, e.g. "run tests", "install dependencies"
859
+ */
860
+ prompt: string;
861
+ }[];
862
+ [k: string]: unknown;
863
+ }
864
+ export interface FileEditInput {
865
+ /**
866
+ * The absolute path to the file to modify
867
+ */
868
+ file_path: string;
869
+ /**
870
+ * The text to replace
871
+ */
872
+ old_string: string;
873
+ /**
874
+ * The text to replace it with (must be different from old_string)
875
+ */
876
+ new_string: string;
877
+ /**
878
+ * Replace all occurrences of old_string (default false)
879
+ */
880
+ replace_all?: boolean;
881
+ }
882
+ export interface FileReadInput {
883
+ /**
884
+ * The absolute path to the file to read
885
+ */
886
+ file_path: string;
887
+ /**
888
+ * The line number to start reading from. Only provide if the file is too large to read at once
889
+ */
890
+ offset?: number;
891
+ /**
892
+ * The number of lines to read. Only provide if the file is too large to read at once.
893
+ */
894
+ limit?: number;
895
+ /**
896
+ * Page range for PDF files (e.g., "1-5", "3", "10-20"). Only applicable to PDF files. Maximum 20 pages per request.
897
+ */
898
+ pages?: string;
899
+ /**
900
+ * Set to true to read a text file, or a line range of one, that is over the usual size limits, up to what still fits in your context. Only use this when you genuinely need all of it or the user asked for the whole file; otherwise read it in parts with offset and limit, or search it.
901
+ */
902
+ allow_large?: boolean;
903
+ }
904
+ export interface FileWriteInput {
905
+ /**
906
+ * The absolute path to the file to write (must be absolute, not relative)
907
+ */
908
+ file_path: string;
909
+ /**
910
+ * The content to write to the file
911
+ */
912
+ content: string;
913
+ }
914
+ export interface GlobInput {
915
+ /**
916
+ * The glob pattern to match files against
917
+ */
918
+ pattern: string;
919
+ /**
920
+ * The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.
921
+ */
922
+ path?: string;
923
+ }
924
+ export interface GrepInput {
925
+ /**
926
+ * The regular expression pattern to search for in file contents
927
+ */
928
+ pattern: string;
929
+ /**
930
+ * File or directory to search in (rg PATH). Defaults to current working directory.
931
+ */
932
+ path?: string;
933
+ /**
934
+ * Glob pattern to filter files (e.g. "*.js", "*.{ts,tsx}") - maps to rg --glob
935
+ */
936
+ glob?: string;
937
+ /**
938
+ * Output mode: "content" shows matching lines (supports -A/-B/-C context, -n line numbers, head_limit), "files_with_matches" shows file paths (supports head_limit), "count" shows match counts (supports head_limit). Defaults to "files_with_matches".
939
+ */
940
+ output_mode?: "content" | "files_with_matches" | "count";
941
+ /**
942
+ * Number of lines to show before each match (rg -B). Requires output_mode: "content", ignored otherwise.
943
+ */
944
+ "-B"?: number;
945
+ /**
946
+ * Number of lines to show after each match (rg -A). Requires output_mode: "content", ignored otherwise.
947
+ */
948
+ "-A"?: number;
949
+ /**
950
+ * Alias for context.
951
+ */
952
+ "-C"?: number;
953
+ /**
954
+ * Number of lines to show before and after each match (rg -C). Requires output_mode: "content", ignored otherwise.
955
+ */
956
+ context?: number;
957
+ /**
958
+ * Show line numbers in output (rg -n). Requires output_mode: "content", ignored otherwise. Defaults to true.
959
+ */
960
+ "-n"?: boolean;
961
+ /**
962
+ * Case insensitive search (rg -i)
963
+ */
964
+ "-i"?: boolean;
965
+ /**
966
+ * Print only the matched (non-empty) parts of each matching line, one match per output line (rg -o / --only-matching). Requires output_mode: "content", ignored otherwise. Defaults to false.
967
+ */
968
+ "-o"?: boolean;
969
+ /**
970
+ * File type to search (rg --type). Common types: js, py, rust, go, java, etc. More efficient than include for standard file types.
971
+ */
972
+ type?: string;
973
+ /**
974
+ * Limit output to first N lines/entries, equivalent to "| head -N". Works across all output modes: content (limits output lines), files_with_matches (limits file paths), count (limits count entries). Defaults to 250 when unspecified. Pass 0 for unlimited (use sparingly — large result sets waste context).
975
+ */
976
+ head_limit?: number;
977
+ /**
978
+ * Skip first N lines/entries before applying head_limit, equivalent to "| tail -n +N | head -N". Works across all output modes. Defaults to 0.
979
+ */
980
+ offset?: number;
981
+ /**
982
+ * Enable multiline mode where . matches newlines and patterns can span lines (rg -U --multiline-dotall). Default: false.
983
+ */
984
+ multiline?: boolean;
985
+ }
986
+ export interface TaskStopInput {
987
+ /**
988
+ * The ID of the background task to stop. Agent-team teammates and named background agents are also accepted by agent ID or name.
989
+ */
990
+ task_id?: string;
991
+ /**
992
+ * Deprecated: use task_id instead
993
+ */
994
+ shell_id?: string;
995
+ }
996
+ export interface ListMcpResourcesInput {
997
+ /**
998
+ * Optional server name to filter resources by
999
+ */
1000
+ server?: string;
1001
+ }
1002
+ export interface RefreshMcpToolsInput {
1003
+ /**
1004
+ * Optional server name: refresh only this server. Omit to refresh all connected servers.
1005
+ */
1006
+ server?: string;
1007
+ }
1008
+ export interface McpInput {
1009
+ [k: string]: unknown;
1010
+ }
1011
+ export interface NotebookEditInput {
1012
+ /**
1013
+ * The absolute path to the Jupyter notebook file to edit (must be absolute, not relative)
1014
+ */
1015
+ notebook_path: string;
1016
+ /**
1017
+ * The ID of the cell to edit. When inserting a new cell, the new cell will be inserted after the cell with this ID, or at the beginning if not specified.
1018
+ */
1019
+ cell_id?: string;
1020
+ /**
1021
+ * The new source for the cell
1022
+ */
1023
+ new_source: string;
1024
+ /**
1025
+ * The type of the cell (code or markdown). If not specified, it defaults to the current cell type. If using edit_mode=insert, this is required.
1026
+ */
1027
+ cell_type?: "code" | "markdown";
1028
+ /**
1029
+ * The type of edit to make (replace, insert, delete). Defaults to replace.
1030
+ */
1031
+ edit_mode?: "replace" | "insert" | "delete";
1032
+ }
1033
+ export interface ReadMcpResourceDirInput {
1034
+ /**
1035
+ * The MCP server name
1036
+ */
1037
+ server: string;
1038
+ /**
1039
+ * The directory resource URI to list
1040
+ */
1041
+ uri: string;
1042
+ }
1043
+ export interface ReadMcpResourceInput {
1044
+ /**
1045
+ * The MCP server name
1046
+ */
1047
+ server: string;
1048
+ /**
1049
+ * The resource URI to read
1050
+ */
1051
+ uri: string;
1052
+ }
1053
+ export interface ReportFindingsInput {
1054
+ /**
1055
+ * Effort level the review ran at
1056
+ */
1057
+ level?: "low" | "medium" | "high" | "xhigh" | "max";
1058
+ /**
1059
+ * Verified findings, most-severe first; empty if none survived
1060
+ *
1061
+ * @maxItems 32
1062
+ */
1063
+ findings: {
1064
+ /**
1065
+ * Repo-relative path of the file the finding is in
1066
+ */
1067
+ file: string;
1068
+ /**
1069
+ * 1-indexed line the finding anchors to
1070
+ */
1071
+ line?: number;
1072
+ /**
1073
+ * One-sentence statement of the defect
1074
+ */
1075
+ summary: string;
1076
+ /**
1077
+ * Compressed label for compact UI (≤60 chars): the claim alone, no rationale or consequence clause
1078
+ */
1079
+ short_summary?: string;
1080
+ /**
1081
+ * Concrete inputs/state → wrong output/crash
1082
+ */
1083
+ failure_scenario: string;
1084
+ /**
1085
+ * Short kebab-case slug of the finding type, e.g. "correctness", "simplification", "efficiency", "test-coverage"
1086
+ */
1087
+ category?: string;
1088
+ /**
1089
+ * Set when a verify pass ran; absent on inline-only reviews
1090
+ */
1091
+ verdict?: "CONFIRMED" | "PLAUSIBLE";
1092
+ /**
1093
+ * Set ONLY when re-reporting after applying fixes: what happened to this finding
1094
+ */
1095
+ outcome?: "fixed" | "skipped" | "no_change_needed";
1096
+ }[];
1097
+ }
1098
+ export interface TodoWriteInput {
1099
+ /**
1100
+ * The updated todo list
1101
+ */
1102
+ todos: {
1103
+ content: string;
1104
+ status: "pending" | "in_progress" | "completed";
1105
+ activeForm: string;
1106
+ }[];
1107
+ }
1108
+ export interface WebFetchInput {
1109
+ /**
1110
+ * The URL to fetch content from
1111
+ */
1112
+ url: string;
1113
+ /**
1114
+ * The prompt to run on the fetched content
1115
+ */
1116
+ prompt: string;
1117
+ /**
1118
+ * Character position in the page text to start reading from. Use it to read on through a page too long for one call, with the value the previous result gave.
1119
+ */
1120
+ offset?: number;
1121
+ }
1122
+ export interface WebSearchInput {
1123
+ /**
1124
+ * The search query to use
1125
+ */
1126
+ query: string;
1127
+ /**
1128
+ * Only include search results from these domains
1129
+ */
1130
+ allowed_domains?: string[];
1131
+ /**
1132
+ * Never include search results from these domains
1133
+ */
1134
+ blocked_domains?: string[];
1135
+ }
1136
+ export interface AskUserQuestionInput {
1137
+ /**
1138
+ * Questions to ask the user (1-4 questions)
1139
+ *
1140
+ * @minItems 1
1141
+ * @maxItems 4
1142
+ */
1143
+ questions:
1144
+ | [
1145
+ {
1146
+ /**
1147
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1148
+ */
1149
+ question: string;
1150
+ /**
1151
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1152
+ */
1153
+ header: string;
1154
+ /**
1155
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1156
+ *
1157
+ * @minItems 2
1158
+ * @maxItems 4
1159
+ */
1160
+ options:
1161
+ | [
1162
+ {
1163
+ /**
1164
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1165
+ */
1166
+ label: string;
1167
+ /**
1168
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1169
+ */
1170
+ description: string;
1171
+ /**
1172
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1173
+ */
1174
+ preview?: string;
1175
+ },
1176
+ {
1177
+ /**
1178
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1179
+ */
1180
+ label: string;
1181
+ /**
1182
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1183
+ */
1184
+ description: string;
1185
+ /**
1186
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1187
+ */
1188
+ preview?: string;
1189
+ }
1190
+ ]
1191
+ | [
1192
+ {
1193
+ /**
1194
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1195
+ */
1196
+ label: string;
1197
+ /**
1198
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1199
+ */
1200
+ description: string;
1201
+ /**
1202
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1203
+ */
1204
+ preview?: string;
1205
+ },
1206
+ {
1207
+ /**
1208
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1209
+ */
1210
+ label: string;
1211
+ /**
1212
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1213
+ */
1214
+ description: string;
1215
+ /**
1216
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1217
+ */
1218
+ preview?: string;
1219
+ },
1220
+ {
1221
+ /**
1222
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1223
+ */
1224
+ label: string;
1225
+ /**
1226
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1227
+ */
1228
+ description: string;
1229
+ /**
1230
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1231
+ */
1232
+ preview?: string;
1233
+ }
1234
+ ]
1235
+ | [
1236
+ {
1237
+ /**
1238
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1239
+ */
1240
+ label: string;
1241
+ /**
1242
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1243
+ */
1244
+ description: string;
1245
+ /**
1246
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1247
+ */
1248
+ preview?: string;
1249
+ },
1250
+ {
1251
+ /**
1252
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1253
+ */
1254
+ label: string;
1255
+ /**
1256
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1257
+ */
1258
+ description: string;
1259
+ /**
1260
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1261
+ */
1262
+ preview?: string;
1263
+ },
1264
+ {
1265
+ /**
1266
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1267
+ */
1268
+ label: string;
1269
+ /**
1270
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1271
+ */
1272
+ description: string;
1273
+ /**
1274
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1275
+ */
1276
+ preview?: string;
1277
+ },
1278
+ {
1279
+ /**
1280
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1281
+ */
1282
+ label: string;
1283
+ /**
1284
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1285
+ */
1286
+ description: string;
1287
+ /**
1288
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1289
+ */
1290
+ preview?: string;
1291
+ }
1292
+ ];
1293
+ /**
1294
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1295
+ */
1296
+ multiSelect: boolean;
1297
+ }
1298
+ ]
1299
+ | [
1300
+ {
1301
+ /**
1302
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1303
+ */
1304
+ question: string;
1305
+ /**
1306
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1307
+ */
1308
+ header: string;
1309
+ /**
1310
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1311
+ *
1312
+ * @minItems 2
1313
+ * @maxItems 4
1314
+ */
1315
+ options:
1316
+ | [
1317
+ {
1318
+ /**
1319
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1320
+ */
1321
+ label: string;
1322
+ /**
1323
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1324
+ */
1325
+ description: string;
1326
+ /**
1327
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1328
+ */
1329
+ preview?: string;
1330
+ },
1331
+ {
1332
+ /**
1333
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1334
+ */
1335
+ label: string;
1336
+ /**
1337
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1338
+ */
1339
+ description: string;
1340
+ /**
1341
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1342
+ */
1343
+ preview?: string;
1344
+ }
1345
+ ]
1346
+ | [
1347
+ {
1348
+ /**
1349
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1350
+ */
1351
+ label: string;
1352
+ /**
1353
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1354
+ */
1355
+ description: string;
1356
+ /**
1357
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1358
+ */
1359
+ preview?: string;
1360
+ },
1361
+ {
1362
+ /**
1363
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1364
+ */
1365
+ label: string;
1366
+ /**
1367
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1368
+ */
1369
+ description: string;
1370
+ /**
1371
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1372
+ */
1373
+ preview?: string;
1374
+ },
1375
+ {
1376
+ /**
1377
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1378
+ */
1379
+ label: string;
1380
+ /**
1381
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1382
+ */
1383
+ description: string;
1384
+ /**
1385
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1386
+ */
1387
+ preview?: string;
1388
+ }
1389
+ ]
1390
+ | [
1391
+ {
1392
+ /**
1393
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1394
+ */
1395
+ label: string;
1396
+ /**
1397
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1398
+ */
1399
+ description: string;
1400
+ /**
1401
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1402
+ */
1403
+ preview?: string;
1404
+ },
1405
+ {
1406
+ /**
1407
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1408
+ */
1409
+ label: string;
1410
+ /**
1411
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1412
+ */
1413
+ description: string;
1414
+ /**
1415
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1416
+ */
1417
+ preview?: string;
1418
+ },
1419
+ {
1420
+ /**
1421
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1422
+ */
1423
+ label: string;
1424
+ /**
1425
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1426
+ */
1427
+ description: string;
1428
+ /**
1429
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1430
+ */
1431
+ preview?: string;
1432
+ },
1433
+ {
1434
+ /**
1435
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1436
+ */
1437
+ label: string;
1438
+ /**
1439
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1440
+ */
1441
+ description: string;
1442
+ /**
1443
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1444
+ */
1445
+ preview?: string;
1446
+ }
1447
+ ];
1448
+ /**
1449
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1450
+ */
1451
+ multiSelect: boolean;
1452
+ },
1453
+ {
1454
+ /**
1455
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1456
+ */
1457
+ question: string;
1458
+ /**
1459
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1460
+ */
1461
+ header: string;
1462
+ /**
1463
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1464
+ *
1465
+ * @minItems 2
1466
+ * @maxItems 4
1467
+ */
1468
+ options:
1469
+ | [
1470
+ {
1471
+ /**
1472
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1473
+ */
1474
+ label: string;
1475
+ /**
1476
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1477
+ */
1478
+ description: string;
1479
+ /**
1480
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1481
+ */
1482
+ preview?: string;
1483
+ },
1484
+ {
1485
+ /**
1486
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1487
+ */
1488
+ label: string;
1489
+ /**
1490
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1491
+ */
1492
+ description: string;
1493
+ /**
1494
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1495
+ */
1496
+ preview?: string;
1497
+ }
1498
+ ]
1499
+ | [
1500
+ {
1501
+ /**
1502
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1503
+ */
1504
+ label: string;
1505
+ /**
1506
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1507
+ */
1508
+ description: string;
1509
+ /**
1510
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1511
+ */
1512
+ preview?: string;
1513
+ },
1514
+ {
1515
+ /**
1516
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1517
+ */
1518
+ label: string;
1519
+ /**
1520
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1521
+ */
1522
+ description: string;
1523
+ /**
1524
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1525
+ */
1526
+ preview?: string;
1527
+ },
1528
+ {
1529
+ /**
1530
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1531
+ */
1532
+ label: string;
1533
+ /**
1534
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1535
+ */
1536
+ description: string;
1537
+ /**
1538
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1539
+ */
1540
+ preview?: string;
1541
+ }
1542
+ ]
1543
+ | [
1544
+ {
1545
+ /**
1546
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1547
+ */
1548
+ label: string;
1549
+ /**
1550
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1551
+ */
1552
+ description: string;
1553
+ /**
1554
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1555
+ */
1556
+ preview?: string;
1557
+ },
1558
+ {
1559
+ /**
1560
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1561
+ */
1562
+ label: string;
1563
+ /**
1564
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1565
+ */
1566
+ description: string;
1567
+ /**
1568
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1569
+ */
1570
+ preview?: string;
1571
+ },
1572
+ {
1573
+ /**
1574
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1575
+ */
1576
+ label: string;
1577
+ /**
1578
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1579
+ */
1580
+ description: string;
1581
+ /**
1582
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1583
+ */
1584
+ preview?: string;
1585
+ },
1586
+ {
1587
+ /**
1588
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1589
+ */
1590
+ label: string;
1591
+ /**
1592
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1593
+ */
1594
+ description: string;
1595
+ /**
1596
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1597
+ */
1598
+ preview?: string;
1599
+ }
1600
+ ];
1601
+ /**
1602
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1603
+ */
1604
+ multiSelect: boolean;
1605
+ }
1606
+ ]
1607
+ | [
1608
+ {
1609
+ /**
1610
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1611
+ */
1612
+ question: string;
1613
+ /**
1614
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1615
+ */
1616
+ header: string;
1617
+ /**
1618
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1619
+ *
1620
+ * @minItems 2
1621
+ * @maxItems 4
1622
+ */
1623
+ options:
1624
+ | [
1625
+ {
1626
+ /**
1627
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1628
+ */
1629
+ label: string;
1630
+ /**
1631
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1632
+ */
1633
+ description: string;
1634
+ /**
1635
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1636
+ */
1637
+ preview?: string;
1638
+ },
1639
+ {
1640
+ /**
1641
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1642
+ */
1643
+ label: string;
1644
+ /**
1645
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1646
+ */
1647
+ description: string;
1648
+ /**
1649
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1650
+ */
1651
+ preview?: string;
1652
+ }
1653
+ ]
1654
+ | [
1655
+ {
1656
+ /**
1657
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1658
+ */
1659
+ label: string;
1660
+ /**
1661
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1662
+ */
1663
+ description: string;
1664
+ /**
1665
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1666
+ */
1667
+ preview?: string;
1668
+ },
1669
+ {
1670
+ /**
1671
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1672
+ */
1673
+ label: string;
1674
+ /**
1675
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1676
+ */
1677
+ description: string;
1678
+ /**
1679
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1680
+ */
1681
+ preview?: string;
1682
+ },
1683
+ {
1684
+ /**
1685
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1686
+ */
1687
+ label: string;
1688
+ /**
1689
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1690
+ */
1691
+ description: string;
1692
+ /**
1693
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1694
+ */
1695
+ preview?: string;
1696
+ }
1697
+ ]
1698
+ | [
1699
+ {
1700
+ /**
1701
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1702
+ */
1703
+ label: string;
1704
+ /**
1705
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1706
+ */
1707
+ description: string;
1708
+ /**
1709
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1710
+ */
1711
+ preview?: string;
1712
+ },
1713
+ {
1714
+ /**
1715
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1716
+ */
1717
+ label: string;
1718
+ /**
1719
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1720
+ */
1721
+ description: string;
1722
+ /**
1723
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1724
+ */
1725
+ preview?: string;
1726
+ },
1727
+ {
1728
+ /**
1729
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1730
+ */
1731
+ label: string;
1732
+ /**
1733
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1734
+ */
1735
+ description: string;
1736
+ /**
1737
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1738
+ */
1739
+ preview?: string;
1740
+ },
1741
+ {
1742
+ /**
1743
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1744
+ */
1745
+ label: string;
1746
+ /**
1747
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1748
+ */
1749
+ description: string;
1750
+ /**
1751
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1752
+ */
1753
+ preview?: string;
1754
+ }
1755
+ ];
1756
+ /**
1757
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1758
+ */
1759
+ multiSelect: boolean;
1760
+ },
1761
+ {
1762
+ /**
1763
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1764
+ */
1765
+ question: string;
1766
+ /**
1767
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1768
+ */
1769
+ header: string;
1770
+ /**
1771
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1772
+ *
1773
+ * @minItems 2
1774
+ * @maxItems 4
1775
+ */
1776
+ options:
1777
+ | [
1778
+ {
1779
+ /**
1780
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1781
+ */
1782
+ label: string;
1783
+ /**
1784
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1785
+ */
1786
+ description: string;
1787
+ /**
1788
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1789
+ */
1790
+ preview?: string;
1791
+ },
1792
+ {
1793
+ /**
1794
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1795
+ */
1796
+ label: string;
1797
+ /**
1798
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1799
+ */
1800
+ description: string;
1801
+ /**
1802
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1803
+ */
1804
+ preview?: string;
1805
+ }
1806
+ ]
1807
+ | [
1808
+ {
1809
+ /**
1810
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1811
+ */
1812
+ label: string;
1813
+ /**
1814
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1815
+ */
1816
+ description: string;
1817
+ /**
1818
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1819
+ */
1820
+ preview?: string;
1821
+ },
1822
+ {
1823
+ /**
1824
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1825
+ */
1826
+ label: string;
1827
+ /**
1828
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1829
+ */
1830
+ description: string;
1831
+ /**
1832
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1833
+ */
1834
+ preview?: string;
1835
+ },
1836
+ {
1837
+ /**
1838
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1839
+ */
1840
+ label: string;
1841
+ /**
1842
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1843
+ */
1844
+ description: string;
1845
+ /**
1846
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1847
+ */
1848
+ preview?: string;
1849
+ }
1850
+ ]
1851
+ | [
1852
+ {
1853
+ /**
1854
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1855
+ */
1856
+ label: string;
1857
+ /**
1858
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1859
+ */
1860
+ description: string;
1861
+ /**
1862
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1863
+ */
1864
+ preview?: string;
1865
+ },
1866
+ {
1867
+ /**
1868
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1869
+ */
1870
+ label: string;
1871
+ /**
1872
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1873
+ */
1874
+ description: string;
1875
+ /**
1876
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1877
+ */
1878
+ preview?: string;
1879
+ },
1880
+ {
1881
+ /**
1882
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1883
+ */
1884
+ label: string;
1885
+ /**
1886
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1887
+ */
1888
+ description: string;
1889
+ /**
1890
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1891
+ */
1892
+ preview?: string;
1893
+ },
1894
+ {
1895
+ /**
1896
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1897
+ */
1898
+ label: string;
1899
+ /**
1900
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1901
+ */
1902
+ description: string;
1903
+ /**
1904
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1905
+ */
1906
+ preview?: string;
1907
+ }
1908
+ ];
1909
+ /**
1910
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1911
+ */
1912
+ multiSelect: boolean;
1913
+ },
1914
+ {
1915
+ /**
1916
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1917
+ */
1918
+ question: string;
1919
+ /**
1920
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1921
+ */
1922
+ header: string;
1923
+ /**
1924
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1925
+ *
1926
+ * @minItems 2
1927
+ * @maxItems 4
1928
+ */
1929
+ options:
1930
+ | [
1931
+ {
1932
+ /**
1933
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1934
+ */
1935
+ label: string;
1936
+ /**
1937
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1938
+ */
1939
+ description: string;
1940
+ /**
1941
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1942
+ */
1943
+ preview?: string;
1944
+ },
1945
+ {
1946
+ /**
1947
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1948
+ */
1949
+ label: string;
1950
+ /**
1951
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1952
+ */
1953
+ description: string;
1954
+ /**
1955
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1956
+ */
1957
+ preview?: string;
1958
+ }
1959
+ ]
1960
+ | [
1961
+ {
1962
+ /**
1963
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1964
+ */
1965
+ label: string;
1966
+ /**
1967
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1968
+ */
1969
+ description: string;
1970
+ /**
1971
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1972
+ */
1973
+ preview?: string;
1974
+ },
1975
+ {
1976
+ /**
1977
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1978
+ */
1979
+ label: string;
1980
+ /**
1981
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1982
+ */
1983
+ description: string;
1984
+ /**
1985
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1986
+ */
1987
+ preview?: string;
1988
+ },
1989
+ {
1990
+ /**
1991
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1992
+ */
1993
+ label: string;
1994
+ /**
1995
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1996
+ */
1997
+ description: string;
1998
+ /**
1999
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2000
+ */
2001
+ preview?: string;
2002
+ }
2003
+ ]
2004
+ | [
2005
+ {
2006
+ /**
2007
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2008
+ */
2009
+ label: string;
2010
+ /**
2011
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2012
+ */
2013
+ description: string;
2014
+ /**
2015
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2016
+ */
2017
+ preview?: string;
2018
+ },
2019
+ {
2020
+ /**
2021
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2022
+ */
2023
+ label: string;
2024
+ /**
2025
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2026
+ */
2027
+ description: string;
2028
+ /**
2029
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2030
+ */
2031
+ preview?: string;
2032
+ },
2033
+ {
2034
+ /**
2035
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2036
+ */
2037
+ label: string;
2038
+ /**
2039
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2040
+ */
2041
+ description: string;
2042
+ /**
2043
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2044
+ */
2045
+ preview?: string;
2046
+ },
2047
+ {
2048
+ /**
2049
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2050
+ */
2051
+ label: string;
2052
+ /**
2053
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2054
+ */
2055
+ description: string;
2056
+ /**
2057
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2058
+ */
2059
+ preview?: string;
2060
+ }
2061
+ ];
2062
+ /**
2063
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2064
+ */
2065
+ multiSelect: boolean;
2066
+ }
2067
+ ]
2068
+ | [
2069
+ {
2070
+ /**
2071
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
2072
+ */
2073
+ question: string;
2074
+ /**
2075
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
2076
+ */
2077
+ header: string;
2078
+ /**
2079
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
2080
+ *
2081
+ * @minItems 2
2082
+ * @maxItems 4
2083
+ */
2084
+ options:
2085
+ | [
2086
+ {
2087
+ /**
2088
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2089
+ */
2090
+ label: string;
2091
+ /**
2092
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2093
+ */
2094
+ description: string;
2095
+ /**
2096
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2097
+ */
2098
+ preview?: string;
2099
+ },
2100
+ {
2101
+ /**
2102
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2103
+ */
2104
+ label: string;
2105
+ /**
2106
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2107
+ */
2108
+ description: string;
2109
+ /**
2110
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2111
+ */
2112
+ preview?: string;
2113
+ }
2114
+ ]
2115
+ | [
2116
+ {
2117
+ /**
2118
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2119
+ */
2120
+ label: string;
2121
+ /**
2122
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2123
+ */
2124
+ description: string;
2125
+ /**
2126
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2127
+ */
2128
+ preview?: string;
2129
+ },
2130
+ {
2131
+ /**
2132
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2133
+ */
2134
+ label: string;
2135
+ /**
2136
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2137
+ */
2138
+ description: string;
2139
+ /**
2140
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2141
+ */
2142
+ preview?: string;
2143
+ },
2144
+ {
2145
+ /**
2146
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2147
+ */
2148
+ label: string;
2149
+ /**
2150
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2151
+ */
2152
+ description: string;
2153
+ /**
2154
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2155
+ */
2156
+ preview?: string;
2157
+ }
2158
+ ]
2159
+ | [
2160
+ {
2161
+ /**
2162
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2163
+ */
2164
+ label: string;
2165
+ /**
2166
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2167
+ */
2168
+ description: string;
2169
+ /**
2170
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2171
+ */
2172
+ preview?: string;
2173
+ },
2174
+ {
2175
+ /**
2176
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2177
+ */
2178
+ label: string;
2179
+ /**
2180
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2181
+ */
2182
+ description: string;
2183
+ /**
2184
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2185
+ */
2186
+ preview?: string;
2187
+ },
2188
+ {
2189
+ /**
2190
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2191
+ */
2192
+ label: string;
2193
+ /**
2194
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2195
+ */
2196
+ description: string;
2197
+ /**
2198
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2199
+ */
2200
+ preview?: string;
2201
+ },
2202
+ {
2203
+ /**
2204
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2205
+ */
2206
+ label: string;
2207
+ /**
2208
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2209
+ */
2210
+ description: string;
2211
+ /**
2212
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2213
+ */
2214
+ preview?: string;
2215
+ }
2216
+ ];
2217
+ /**
2218
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2219
+ */
2220
+ multiSelect: boolean;
2221
+ },
2222
+ {
2223
+ /**
2224
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
2225
+ */
2226
+ question: string;
2227
+ /**
2228
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
2229
+ */
2230
+ header: string;
2231
+ /**
2232
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
2233
+ *
2234
+ * @minItems 2
2235
+ * @maxItems 4
2236
+ */
2237
+ options:
2238
+ | [
2239
+ {
2240
+ /**
2241
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2242
+ */
2243
+ label: string;
2244
+ /**
2245
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2246
+ */
2247
+ description: string;
2248
+ /**
2249
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2250
+ */
2251
+ preview?: string;
2252
+ },
2253
+ {
2254
+ /**
2255
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2256
+ */
2257
+ label: string;
2258
+ /**
2259
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2260
+ */
2261
+ description: string;
2262
+ /**
2263
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2264
+ */
2265
+ preview?: string;
2266
+ }
2267
+ ]
2268
+ | [
2269
+ {
2270
+ /**
2271
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2272
+ */
2273
+ label: string;
2274
+ /**
2275
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2276
+ */
2277
+ description: string;
2278
+ /**
2279
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2280
+ */
2281
+ preview?: string;
2282
+ },
2283
+ {
2284
+ /**
2285
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2286
+ */
2287
+ label: string;
2288
+ /**
2289
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2290
+ */
2291
+ description: string;
2292
+ /**
2293
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2294
+ */
2295
+ preview?: string;
2296
+ },
2297
+ {
2298
+ /**
2299
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2300
+ */
2301
+ label: string;
2302
+ /**
2303
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2304
+ */
2305
+ description: string;
2306
+ /**
2307
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2308
+ */
2309
+ preview?: string;
2310
+ }
2311
+ ]
2312
+ | [
2313
+ {
2314
+ /**
2315
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2316
+ */
2317
+ label: string;
2318
+ /**
2319
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2320
+ */
2321
+ description: string;
2322
+ /**
2323
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2324
+ */
2325
+ preview?: string;
2326
+ },
2327
+ {
2328
+ /**
2329
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2330
+ */
2331
+ label: string;
2332
+ /**
2333
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2334
+ */
2335
+ description: string;
2336
+ /**
2337
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2338
+ */
2339
+ preview?: string;
2340
+ },
2341
+ {
2342
+ /**
2343
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2344
+ */
2345
+ label: string;
2346
+ /**
2347
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2348
+ */
2349
+ description: string;
2350
+ /**
2351
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2352
+ */
2353
+ preview?: string;
2354
+ },
2355
+ {
2356
+ /**
2357
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2358
+ */
2359
+ label: string;
2360
+ /**
2361
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2362
+ */
2363
+ description: string;
2364
+ /**
2365
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2366
+ */
2367
+ preview?: string;
2368
+ }
2369
+ ];
2370
+ /**
2371
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2372
+ */
2373
+ multiSelect: boolean;
2374
+ },
2375
+ {
2376
+ /**
2377
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
2378
+ */
2379
+ question: string;
2380
+ /**
2381
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
2382
+ */
2383
+ header: string;
2384
+ /**
2385
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
2386
+ *
2387
+ * @minItems 2
2388
+ * @maxItems 4
2389
+ */
2390
+ options:
2391
+ | [
2392
+ {
2393
+ /**
2394
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2395
+ */
2396
+ label: string;
2397
+ /**
2398
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2399
+ */
2400
+ description: string;
2401
+ /**
2402
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2403
+ */
2404
+ preview?: string;
2405
+ },
2406
+ {
2407
+ /**
2408
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2409
+ */
2410
+ label: string;
2411
+ /**
2412
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2413
+ */
2414
+ description: string;
2415
+ /**
2416
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2417
+ */
2418
+ preview?: string;
2419
+ }
2420
+ ]
2421
+ | [
2422
+ {
2423
+ /**
2424
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2425
+ */
2426
+ label: string;
2427
+ /**
2428
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2429
+ */
2430
+ description: string;
2431
+ /**
2432
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2433
+ */
2434
+ preview?: string;
2435
+ },
2436
+ {
2437
+ /**
2438
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2439
+ */
2440
+ label: string;
2441
+ /**
2442
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2443
+ */
2444
+ description: string;
2445
+ /**
2446
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2447
+ */
2448
+ preview?: string;
2449
+ },
2450
+ {
2451
+ /**
2452
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2453
+ */
2454
+ label: string;
2455
+ /**
2456
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2457
+ */
2458
+ description: string;
2459
+ /**
2460
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2461
+ */
2462
+ preview?: string;
2463
+ }
2464
+ ]
2465
+ | [
2466
+ {
2467
+ /**
2468
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2469
+ */
2470
+ label: string;
2471
+ /**
2472
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2473
+ */
2474
+ description: string;
2475
+ /**
2476
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2477
+ */
2478
+ preview?: string;
2479
+ },
2480
+ {
2481
+ /**
2482
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2483
+ */
2484
+ label: string;
2485
+ /**
2486
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2487
+ */
2488
+ description: string;
2489
+ /**
2490
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2491
+ */
2492
+ preview?: string;
2493
+ },
2494
+ {
2495
+ /**
2496
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2497
+ */
2498
+ label: string;
2499
+ /**
2500
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2501
+ */
2502
+ description: string;
2503
+ /**
2504
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2505
+ */
2506
+ preview?: string;
2507
+ },
2508
+ {
2509
+ /**
2510
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2511
+ */
2512
+ label: string;
2513
+ /**
2514
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2515
+ */
2516
+ description: string;
2517
+ /**
2518
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2519
+ */
2520
+ preview?: string;
2521
+ }
2522
+ ];
2523
+ /**
2524
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2525
+ */
2526
+ multiSelect: boolean;
2527
+ },
2528
+ {
2529
+ /**
2530
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
2531
+ */
2532
+ question: string;
2533
+ /**
2534
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
2535
+ */
2536
+ header: string;
2537
+ /**
2538
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
2539
+ *
2540
+ * @minItems 2
2541
+ * @maxItems 4
2542
+ */
2543
+ options:
2544
+ | [
2545
+ {
2546
+ /**
2547
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2548
+ */
2549
+ label: string;
2550
+ /**
2551
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2552
+ */
2553
+ description: string;
2554
+ /**
2555
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2556
+ */
2557
+ preview?: string;
2558
+ },
2559
+ {
2560
+ /**
2561
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2562
+ */
2563
+ label: string;
2564
+ /**
2565
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2566
+ */
2567
+ description: string;
2568
+ /**
2569
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2570
+ */
2571
+ preview?: string;
2572
+ }
2573
+ ]
2574
+ | [
2575
+ {
2576
+ /**
2577
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2578
+ */
2579
+ label: string;
2580
+ /**
2581
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2582
+ */
2583
+ description: string;
2584
+ /**
2585
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2586
+ */
2587
+ preview?: string;
2588
+ },
2589
+ {
2590
+ /**
2591
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2592
+ */
2593
+ label: string;
2594
+ /**
2595
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2596
+ */
2597
+ description: string;
2598
+ /**
2599
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2600
+ */
2601
+ preview?: string;
2602
+ },
2603
+ {
2604
+ /**
2605
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2606
+ */
2607
+ label: string;
2608
+ /**
2609
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2610
+ */
2611
+ description: string;
2612
+ /**
2613
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2614
+ */
2615
+ preview?: string;
2616
+ }
2617
+ ]
2618
+ | [
2619
+ {
2620
+ /**
2621
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2622
+ */
2623
+ label: string;
2624
+ /**
2625
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2626
+ */
2627
+ description: string;
2628
+ /**
2629
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2630
+ */
2631
+ preview?: string;
2632
+ },
2633
+ {
2634
+ /**
2635
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2636
+ */
2637
+ label: string;
2638
+ /**
2639
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2640
+ */
2641
+ description: string;
2642
+ /**
2643
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2644
+ */
2645
+ preview?: string;
2646
+ },
2647
+ {
2648
+ /**
2649
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2650
+ */
2651
+ label: string;
2652
+ /**
2653
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2654
+ */
2655
+ description: string;
2656
+ /**
2657
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2658
+ */
2659
+ preview?: string;
2660
+ },
2661
+ {
2662
+ /**
2663
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2664
+ */
2665
+ label: string;
2666
+ /**
2667
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2668
+ */
2669
+ description: string;
2670
+ /**
2671
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2672
+ */
2673
+ preview?: string;
2674
+ }
2675
+ ];
2676
+ /**
2677
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2678
+ */
2679
+ multiSelect: boolean;
2680
+ }
2681
+ ];
2682
+ /**
2683
+ * User answers collected by the permission component
2684
+ */
2685
+ answers?: {
2686
+ [k: string]: string;
2687
+ };
2688
+ /**
2689
+ * Optional per-question annotations from the user (e.g., notes on preview selections). Keyed by question text.
2690
+ */
2691
+ annotations?: {
2692
+ [k: string]: {
2693
+ /**
2694
+ * The preview content of the selected option, if the question used previews.
2695
+ */
2696
+ preview?: string;
2697
+ /**
2698
+ * Free-text notes the user added to their selection.
2699
+ */
2700
+ notes?: string;
2701
+ };
2702
+ };
2703
+ /**
2704
+ * Optional metadata for tracking and analytics purposes. Not displayed to user.
2705
+ */
2706
+ metadata?: {
2707
+ /**
2708
+ * Optional identifier for the source of this question (e.g., "remember" for /remember command). Used for analytics tracking.
2709
+ */
2710
+ source?: string;
2711
+ };
2712
+ }
2713
+ export interface SendFeedbackInput {
2714
+ /**
2715
+ * What kind of feedback this is.
2716
+ */
2717
+ type: "bug" | "idea" | "missing_capability";
2718
+ /**
2719
+ * Short, specific one-line summary of the issue.
2720
+ */
2721
+ title: string;
2722
+ /**
2723
+ * Labeled bullets, in order: **What happened:** (observed vs. expected, exact error text if short); **What the user said:** (quoted, or "User didn't comment; observed by the model."); **Repro:** (minimal steps); **Evidence:** (request IDs, timestamps, paths, versions; omit if none); optionally a final **Cause:** only if verified in-session. One to three lines per bullet. No narrative paragraphs, no speculation, no secrets.
2724
+ */
2725
+ details: string;
2726
+ /**
2727
+ * Optional short tag naming the part of Claude Code this is about (e.g. "hooks config", "/help", "file editing"). Leave blank if unclear.
2728
+ */
2729
+ area?: string;
2730
+ /**
2731
+ * When the report is about MODEL BEHAVIOR (not a product bug), the closest failure mode, or `other` when it is a model-behavior issue that fits no listed value. Omit only when the report is a product/tool bug with no model-behavior component.
2732
+ */
2733
+ failure_mode?:
2734
+ | "instruction_following"
2735
+ | "destructive_actions"
2736
+ | "code_quality"
2737
+ | "repetition_and_looping"
2738
+ | "model_regression"
2739
+ | "overconfidence_and_hallucination"
2740
+ | "context_and_memory"
2741
+ | "overeager"
2742
+ | "over_correction"
2743
+ | "stopping_short"
2744
+ | "dispute_or_decline"
2745
+ | "subagent_overspawn"
2746
+ | "tone_or_preachiness"
2747
+ | "excessive_questions"
2748
+ | "unwanted_scope"
2749
+ | "other";
2750
+ /**
2751
+ * What kind of task the session was doing when the issue occurred, or `other` when it is a clear task that fits no listed value. Omit only if genuinely unclear.
2752
+ */
2753
+ task_category?: "code_edit" | "debug" | "explain" | "plan" | "shell" | "search" | "review" | "other";
2754
+ }
2755
+ export interface ClaudeDesignInput {
2756
+ /**
2757
+ * Claude Design action to perform. Call with "list" first to discover the available operations and their argument schemas.
2758
+ */
2759
+ operation: string;
2760
+ /**
2761
+ * Action input object (server-validated). Pass {} for operations that take no input.
2762
+ */
2763
+ arguments: {
2764
+ [k: string]: unknown;
2765
+ };
2766
+ }
2767
+ export interface ProjectsInput {
2768
+ method:
2769
+ | "project_info"
2770
+ | "project_read"
2771
+ | "project_search"
2772
+ | "project_write"
2773
+ | "project_delete"
2774
+ | "project_memory_list"
2775
+ | "project_memory_read";
2776
+ /**
2777
+ * project_read/project_write/project_delete: doc path. project_write: an existing path is replaced in place; a new bare filename (no "/") is namespaced to "claude/<name>". project_memory_read: memory file path as listed by project_memory_list.
2778
+ */
2779
+ path?: string;
2780
+ /**
2781
+ * project_write: inline doc text. Mutually exclusive with local_path. Use local_path for anything you have on disk.
2782
+ */
2783
+ content?: string;
2784
+ /**
2785
+ * project_write: a file inside the working directory to upload. The tool reads, encodes, and uploads directly — contents never enter your context. Mutually exclusive with content.
2786
+ */
2787
+ local_path?: string;
2788
+ /**
2789
+ * project_write: true marks this doc as the file the user needs to see — the deliverable they asked for or must act on. Defaults to false; leave it unset for routine saves, notes, and bulk writes.
2790
+ */
2791
+ present_to_user?: boolean;
2792
+ /**
2793
+ * project_search: knowledge-base query
2794
+ */
2795
+ query?: string;
2796
+ /**
2797
+ * project_search: number of hits (default 5)
2798
+ */
2799
+ n?: number;
2800
+ }
2801
+ export interface EnterPlanModeInput {}
2802
+ export interface TaskCreateInput {
2803
+ /**
2804
+ * A brief title for the task
2805
+ */
2806
+ subject: string;
2807
+ /**
2808
+ * What needs to be done
2809
+ */
2810
+ description: string;
2811
+ /**
2812
+ * Present continuous form shown in spinner when in_progress (e.g., "Running tests")
2813
+ */
2814
+ activeForm?: string;
2815
+ /**
2816
+ * Arbitrary metadata to attach to the task
2817
+ */
2818
+ metadata?: {
2819
+ [k: string]: unknown;
2820
+ };
2821
+ }
2822
+ export interface TaskGetInput {
2823
+ /**
2824
+ * The ID of the task to retrieve
2825
+ */
2826
+ taskId: string;
2827
+ }
2828
+ export interface TaskUpdateInput {
2829
+ /**
2830
+ * The ID of the task to update
2831
+ */
2832
+ taskId: string;
2833
+ /**
2834
+ * New subject for the task
2835
+ */
2836
+ subject?: string;
2837
+ /**
2838
+ * New description for the task
2839
+ */
2840
+ description?: string;
2841
+ /**
2842
+ * Present continuous form shown in spinner when in_progress (e.g., "Running tests")
2843
+ */
2844
+ activeForm?: string;
2845
+ /**
2846
+ * New status for the task
2847
+ */
2848
+ status?: ("pending" | "in_progress" | "completed") | "deleted";
2849
+ /**
2850
+ * Task IDs that this task blocks
2851
+ */
2852
+ addBlocks?: string[];
2853
+ /**
2854
+ * Task IDs that block this task
2855
+ */
2856
+ addBlockedBy?: string[];
2857
+ /**
2858
+ * New owner for the task
2859
+ */
2860
+ owner?: string;
2861
+ /**
2862
+ * Metadata keys to merge into the task. Set a key to null to delete it.
2863
+ */
2864
+ metadata?: {
2865
+ [k: string]: unknown;
2866
+ };
2867
+ }
2868
+ export interface TaskListInput {}
2869
+ export interface WorkflowInput {
2870
+ /**
2871
+ * Self-contained workflow script. Must begin with `export const meta = { name, description, phases }` (pure literal, no computed values) followed by the script body using agent()/parallel()/pipeline()/phase().
2872
+ */
2873
+ script?: string;
2874
+ /**
2875
+ * Name of a predefined workflow (built-in or from .claude/workflows/). Resolves to a self-contained script.
2876
+ */
2877
+ name?: string;
2878
+ /**
2879
+ * Ignored — set the workflow description in the script's `meta` block.
2880
+ */
2881
+ description?: string;
2882
+ /**
2883
+ * Ignored — set the workflow title in the script's `meta` block.
2884
+ */
2885
+ title?: string;
2886
+ /**
2887
+ * Optional input value exposed to the script as the global `args`, verbatim. Pass arrays/objects as actual JSON values, NOT as a JSON-encoded string — a stringified list breaks `args.filter`/`args.map` in the script. Use for parameterized named workflows (e.g. a research question).
2888
+ */
2889
+ args?: {
2890
+ [k: string]: unknown;
2891
+ };
2892
+ /**
2893
+ * Path to a workflow script file on disk. Every Workflow invocation persists its script under the session directory and returns the path in the tool result. To iterate, edit that file with Write/Edit and re-invoke Workflow with the same `scriptPath` instead of re-sending the full script. Takes precedence over `script` and `name`.
2894
+ */
2895
+ scriptPath?: string;
2896
+ /**
2897
+ * Run ID of a prior Workflow invocation to resume from. Completed agent() calls with unchanged (prompt, opts) return their cached results instantly; only edited or new calls re-run. Same-session only. Stop the prior run first (TaskStop) before resuming.
2898
+ */
2899
+ resumeFromRunId?: string;
2900
+ }
2901
+ export interface CronCreateInput {
2902
+ /**
2903
+ * Standard 5-field cron expression in local time: "M H DoM Mon DoW" (e.g. "* /5 * * * *" = every 5 minutes, "30 14 28 2 *" = Feb 28 at 2:30pm local once).
2904
+ */
2905
+ cron: string;
2906
+ /**
2907
+ * The prompt to enqueue at each fire time.
2908
+ */
2909
+ prompt: string;
2910
+ /**
2911
+ * true (default) = fire on every cron match until deleted or auto-expired after 7 days. false = fire once at the next match, then auto-delete. Use false for "remind me at X" one-shot requests with pinned minute/hour/dom/month.
2912
+ */
2913
+ recurring?: boolean;
2914
+ /**
2915
+ * true = persist to .claude/scheduled_tasks.json and survive restarts. false (default) = in-memory only, dies when this Claude session ends. Use true only when the user asks the task to survive across sessions.
2916
+ */
2917
+ durable?: boolean;
2918
+ }
2919
+ export interface CronDeleteInput {
2920
+ /**
2921
+ * Job ID returned by CronCreate.
2922
+ */
2923
+ id: string;
2924
+ }
2925
+ export interface CronListInput {}
2926
+ export interface ScheduleWakeupInput {
2927
+ /**
2928
+ * Seconds from now to wake up. Clamped to [60, 3600] by the runtime. Required unless `stop` is true.
2929
+ */
2930
+ delaySeconds?: number;
2931
+ /**
2932
+ * One short sentence explaining the chosen delay. Goes to telemetry and is shown to the user. Be specific. Required unless `stop` is true.
2933
+ */
2934
+ reason?: string;
2935
+ /**
2936
+ * The /loop input to fire on wake-up. Pass the same /loop input verbatim each turn so the next firing re-enters the skill and continues the loop. For autonomous /loop (no user prompt), pass the literal sentinel `<<autonomous-loop-dynamic>>` instead (the dynamic-pacing variant, not the CronCreate-mode `<<autonomous-loop>>`). Required unless `stop` is true.
2937
+ */
2938
+ prompt?: string;
2939
+ /**
2940
+ * Set to true to end the dynamic loop immediately instead of scheduling another wakeup. When true, all other fields are ignored and no further wakeups fire.
2941
+ */
2942
+ stop?: boolean;
2943
+ /**
2944
+ * true = nothing changed (you checked and there is nothing to report). false = something happened worth keeping (edited a file, posted a message, advanced state, surfaced a finding). Consecutive noop:true ticks are collapsed in the user's terminal view and tracked as a streak. Required unless `stop` is true.
2945
+ */
2946
+ noop?: boolean;
2947
+ }
2948
+ export interface RemoteTriggerInput {
2949
+ action: "list" | "get" | "create" | "update" | "run" | "create_webhook_trigger" | "list_runs" | "get_run_log";
2950
+ /**
2951
+ * Required for get, update, run, and list_runs
2952
+ */
2953
+ trigger_id?: string;
2954
+ /**
2955
+ * Required for get_run_log: a run session id (cse_… or session_…, from list_runs)
2956
+ */
2957
+ session_id?: string;
2958
+ /**
2959
+ * next_cursor from a previous list_runs or get_run_log page
2960
+ */
2961
+ cursor?: string;
2962
+ /**
2963
+ * Required for create and update; optional for run
2964
+ */
2965
+ body?: {
2966
+ [k: string]: unknown;
2967
+ };
2968
+ }
2969
+ export interface ShowOnboardingRolePickerInput {}
2970
+ export interface OfferChromeSetupInput {
2971
+ /**
2972
+ * A short phrase naming what the task needs the user's own browser for.
2973
+ */
2974
+ reason?: string;
2975
+ }
2976
+ export interface ReadNotificationsInput {}
2977
+ export interface MonitorInput {
2978
+ /**
2979
+ * Short human-readable description of what you are monitoring (shown in notifications).
2980
+ */
2981
+ description: string;
2982
+ /**
2983
+ * Kill the monitor after this deadline. Default 300000ms. Deadlines above 1800000ms are capped to 1800000ms. You are notified at expiry and can re-arm.
2984
+ */
2985
+ timeout_ms: number;
2986
+ /**
2987
+ * Shell command or script. Each stdout line is an event; exit ends the watch.
2988
+ */
2989
+ command?: string;
2990
+ /**
2991
+ * WebSocket to open. Each text frame is an event; binary frames are reported as a placeholder line. Socket close ends the watch. Cannot be combined with command.
2992
+ */
2993
+ ws?: {
2994
+ url: string;
2995
+ protocols?: string[];
2996
+ };
2997
+ }
2998
+ export interface ProposeSkillsInput {
2999
+ /**
3000
+ * @minItems 1
3001
+ * @maxItems 3
3002
+ */
3003
+ proposals:
3004
+ | [
3005
+ {
3006
+ /**
3007
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3008
+ */
3009
+ name: string;
3010
+ kind: "new" | "improvement";
3011
+ /**
3012
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3013
+ */
3014
+ target?: string;
3015
+ /**
3016
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3017
+ */
3018
+ description: string;
3019
+ /**
3020
+ * memory file paths where this procedure was observed
3021
+ */
3022
+ evidence?: string[];
3023
+ /**
3024
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3025
+ */
3026
+ skillMd: string;
3027
+ }
3028
+ ]
3029
+ | [
3030
+ {
3031
+ /**
3032
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3033
+ */
3034
+ name: string;
3035
+ kind: "new" | "improvement";
3036
+ /**
3037
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3038
+ */
3039
+ target?: string;
3040
+ /**
3041
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3042
+ */
3043
+ description: string;
3044
+ /**
3045
+ * memory file paths where this procedure was observed
3046
+ */
3047
+ evidence?: string[];
3048
+ /**
3049
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3050
+ */
3051
+ skillMd: string;
3052
+ },
3053
+ {
3054
+ /**
3055
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3056
+ */
3057
+ name: string;
3058
+ kind: "new" | "improvement";
3059
+ /**
3060
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3061
+ */
3062
+ target?: string;
3063
+ /**
3064
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3065
+ */
3066
+ description: string;
3067
+ /**
3068
+ * memory file paths where this procedure was observed
3069
+ */
3070
+ evidence?: string[];
3071
+ /**
3072
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3073
+ */
3074
+ skillMd: string;
3075
+ }
3076
+ ]
3077
+ | [
3078
+ {
3079
+ /**
3080
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3081
+ */
3082
+ name: string;
3083
+ kind: "new" | "improvement";
3084
+ /**
3085
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3086
+ */
3087
+ target?: string;
3088
+ /**
3089
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3090
+ */
3091
+ description: string;
3092
+ /**
3093
+ * memory file paths where this procedure was observed
3094
+ */
3095
+ evidence?: string[];
3096
+ /**
3097
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3098
+ */
3099
+ skillMd: string;
3100
+ },
3101
+ {
3102
+ /**
3103
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3104
+ */
3105
+ name: string;
3106
+ kind: "new" | "improvement";
3107
+ /**
3108
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3109
+ */
3110
+ target?: string;
3111
+ /**
3112
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3113
+ */
3114
+ description: string;
3115
+ /**
3116
+ * memory file paths where this procedure was observed
3117
+ */
3118
+ evidence?: string[];
3119
+ /**
3120
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3121
+ */
3122
+ skillMd: string;
3123
+ },
3124
+ {
3125
+ /**
3126
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3127
+ */
3128
+ name: string;
3129
+ kind: "new" | "improvement";
3130
+ /**
3131
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3132
+ */
3133
+ target?: string;
3134
+ /**
3135
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3136
+ */
3137
+ description: string;
3138
+ /**
3139
+ * memory file paths where this procedure was observed
3140
+ */
3141
+ evidence?: string[];
3142
+ /**
3143
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3144
+ */
3145
+ skillMd: string;
3146
+ }
3147
+ ];
3148
+ }
3149
+ export interface ProposeGoalInput {
3150
+ /**
3151
+ * The completion condition to propose, written so a separate evaluator can verify it from the conversation (e.g. "all tests in test/auth pass (bun test exits 0)"). At most 500 characters — the user must be able to read the whole condition in the approval dialog.
3152
+ */
3153
+ condition: string;
3154
+ /**
3155
+ * Whether to ask the user for approval before the goal is set. Defaults to true — an approval dialog is shown. Set false ONLY when the user's own words in this conversation stated this outcome as what they want; the goal is then set directly, with a visible notice in the transcript, and the user can clear it with /goal clear.
3156
+ */
3157
+ ask_user?: boolean;
3158
+ }
3159
+ export interface ArtifactInput {
3160
+ /**
3161
+ * Omit (or 'publish') to publish file_path. 'list' enumerates artifacts — the user's own by default, see `scope`; only `limit` and `scope` may accompany it. 'read' returns the content of the published artifact at `url` (raw HTML for the user's own; an isolated summary, steered by the optional `prompt`, for one someone else owns, though a page published in this session's own Slack channel can come back in full as untrusted content) — see **Calls**. 'watch', 'unwatch', and 'status' manage live-update subscriptions through which a session keeps track of new versions of an artifact published elsewhere, and those aren't available in this session: 'watch' only reports that — this session does not keep track of new versions — and 'status' lists this session's artifact watches (pass `url` to check one). 'upload_asset' adds one local media, PDF, font, or text file to an existing artifact — pass `url` and `file_path` (or `file_paths` for several in one call). 'list_assets' lists the files in an artifact's asset store (pass `url`; `after` continues a listing), 'read_asset' saves one of them to a local file named by its id (pass `url` and `asset_id`, optionally `out_dir`), and 'delete_asset' permanently removes one (pass `url` and `asset_id`). See **Artifact assets** above. 'pin' adds the artifact at `url` to the user's pinned list in their claude.ai sidebar and 'unpin' removes it (nothing else may accompany either) — private to the user, reversible, and no change to who can see the artifact.
3162
+ */
3163
+ action?:
3164
+ | "publish"
3165
+ | "list"
3166
+ | "read"
3167
+ | "list_types"
3168
+ | "watch"
3169
+ | "unwatch"
3170
+ | "status"
3171
+ | "upload_asset"
3172
+ | "list_assets"
3173
+ | "read_asset"
3174
+ | "delete_asset"
3175
+ | "pin"
3176
+ | "unpin";
3177
+ /**
3178
+ * Path to the .html file to render. Required to publish (the default action). Use a short, distinctive basename — it is the last-resort title when the HTML has no <title> and no `title` parameter is given. For 'upload_asset', the local image, video, PDF, font, stylesheet (CSS), script (JS), or text (CSV, Markdown, JSON, plain text) file to upload.
3179
+ */
3180
+ file_path?: string;
3181
+ /**
3182
+ * Deprecated; omit it. Use `icon`.
3183
+ */
3184
+ favicon?: string;
3185
+ /**
3186
+ * One short generic word for the artifact's browser-tab icon, such as chart, calendar, recipe, code or map — a plain signifier, not a product or brand name. Include it on every page's first publish; omit when republishing to keep the current icon, and pass a new one only when the user asks.
3187
+ */
3188
+ icon?: string;
3189
+ /**
3190
+ * list only: maximum artifacts to return (default 25).
3191
+ */
3192
+ limit?: number;
3193
+ /**
3194
+ * list only: 'mine' (default) lists artifacts the user owns; 'shared' lists artifacts other people shared with the user; 'all' lists both. Rows are labeled (mine)/(shared) whenever scope is not 'mine'.
3195
+ */
3196
+ scope?: "mine" | "shared" | "all";
3197
+ /**
3198
+ * Title for the artifact — the name shown in the browser tab and gallery. A short, distinctive noun-phrase name — not a generic label, a summary, or a name with an appended explainer. Prefer a <title> tag at the top of the HTML itself; this parameter fills in only when the file lacks one in the first 8KB of the file, and never overrides the tag. HTML publishes only — Markdown pages keep their filename identity. Content always comes from file_path — there is no inline content parameter.
3199
+ */
3200
+ title?: string;
3201
+ /**
3202
+ * One-sentence subtitle shown on the gallery card. Say what the page is or does.
3203
+ */
3204
+ description?: string;
3205
+ /**
3206
+ * A short name for this publish, max 60 chars (e.g. "Draft to legal"). Optional — a few words, not a description.
3207
+ */
3208
+ label?: string;
3209
+ /**
3210
+ * An existing artifact's claude.ai link (claude.ai/artifact/{id} or claude.ai/code/artifact/{uuid}; a chat, project or session link is not one) to update in place. Pass whenever the user wants to update an artifact this conversation did not publish — "update my artifact", "keep the same link", a pasted artifact URL — and find the URL with action: "list" or ask the user for the link if you don't have it; without this, the publish creates a separate artifact instead of updating the existing one. Omit for new artifacts and same-conversation redeploys. Must be an artifact the user owns or was given edit access to (a read of it says "writer"). Before publishing to an artifact this conversation has neither read nor published, read it (action: "read") and build on what comes back; a publish sent without that read is refused. A refusal that hands you the live version counts as that read: merge your edits into that version and publish that; never resend the refused content unchanged. For 'read' and the other url-addressed actions: the artifact to act on.
3211
+ */
3212
+ url?: string;
3213
+ /**
3214
+ * read only: what to extract from an artifact shared with the user — its content reaches you as an isolated summary answering this. Ignored for artifacts the user owns and for a page published in this session's own Slack channel (raw content is returned); optional.
3215
+ */
3216
+ prompt?: string;
3217
+ /**
3218
+ * Last-resort overwrite that DISCARDS the newer published version's page — another session's publish, or someone's save from a page that can publish new versions of itself. On a conflict the fix is to merge your changes onto the newer content (handed to you in the rejection, or re-read) and publish again — not force. Pass force:true only when the user has explicitly said to discard that specific version; never to get past a conflict on your own judgment. The tracked baseVersion is still sent; with force:true the server treats it as informational and overwrites, unless it refuses force over a version saved from inside the page. Omit (or false) so a concurrent write conflicts instead of being silently clobbered.
3219
+ */
3220
+ force?: boolean;
3221
+ /**
3222
+ * publish only: true also pins the published artifact to the user's claude.ai sidebar once it is published — pass it only when the user asked for that; a pin that fails never fails the publish (the result says so).
3223
+ */
3224
+ pin?: boolean;
3225
+ /**
3226
+ * read_asset: directory to save into — default: this artifact’s folder in your scratchpad directory, where saving needs no approval and which you can Read from. read_asset names the file by the asset id plus the extension for its type; saving to any directory other than the default is an ordinary file save the user may be asked to approve.
3227
+ */
3228
+ out_dir?: string;
3229
+ /**
3230
+ * upload_asset: several local image, video, PDF, font, stylesheet or script files in place of `file_path`, up to 25 in one call, all into the artifact that `url` names; one approval covers the call, and the result lists each file's id and url, or why it was not uploaded. A CSV, Markdown, JSON or plain-text file, a symbolic or hard link, and a file outside the working directory each go in a call of their own with `file_path`.
3231
+ *
3232
+ * @minItems 1
3233
+ * @maxItems 25
3234
+ */
3235
+ file_paths?: [string, ...string[]];
3236
+ /**
3237
+ * read_asset and delete_asset: the asset's id (32 hex characters), from a list_assets or upload_asset result.
3238
+ */
3239
+ asset_id?: string;
3240
+ /**
3241
+ * list_assets only: the `next` value from a previous list_assets result, to continue that listing.
3242
+ */
3243
+ after?: string;
3244
+ /**
3245
+ * Runtime capabilities this page declares, as {name: config}. The control plane is the authority on valid names and config shapes. An empty object clears any previously stored declaration; omit the field on a redeploy to carry the stored declaration forward unchanged. Before declaring any capability, load the `artifact-capabilities` skill for the current contract and per-capability guidance.
3246
+ */
3247
+ capabilities?: {
3248
+ [k: string]: unknown;
3249
+ };
3250
+ /**
3251
+ * The artifact's runtime version. Omit to keep its current version (the default); 'latest' to upgrade; a specific version to pin or roll back. Changing it changes how the published page behaves — pass only when the author explicitly intends the change, never as a side effect of editing.
3252
+ */
3253
+ contract?: "latest" | string;
3254
+ }
3255
+ export interface PushNotificationInput {
3256
+ /**
3257
+ * The notification body. Keep it under 200 characters; mobile OSes truncate.
3258
+ */
3259
+ message: string;
3260
+ status: "proactive";
3261
+ }
3262
+ export interface EnterWorktreeInput {
3263
+ /**
3264
+ * Optional name for a new worktree. Each "/"-separated segment may contain only letters, digits, dots, underscores, and dashes; max 64 chars total. A random name is generated if not provided. Mutually exclusive with `path`.
3265
+ */
3266
+ name?: string;
3267
+ /**
3268
+ * Path to an existing worktree to switch into instead of creating a new one. Must appear in `git worktree list` for the current repo — or, on first entry from the launch directory, for a repo nested inside it (multi-repo workspace). Mutually exclusive with `name`.
3269
+ */
3270
+ path?: string;
3271
+ }
3272
+ export interface ExitWorktreeInput {
3273
+ /**
3274
+ * "keep" leaves the worktree and branch on disk; "remove" deletes both.
3275
+ */
3276
+ action: "keep" | "remove";
3277
+ /**
3278
+ * Required true when action is "remove" and the worktree has uncommitted files or unmerged commits. The tool will refuse and list them otherwise.
3279
+ */
3280
+ discard_changes?: boolean;
3281
+ }
3282
+ export interface BashOutput {
3283
+ /**
3284
+ * The standard output of the command
3285
+ */
3286
+ stdout: string;
3287
+ /**
3288
+ * The standard error output of the command
3289
+ */
3290
+ stderr: string;
3291
+ /**
3292
+ * Path to raw output file for large MCP tool outputs
3293
+ */
3294
+ rawOutputPath?: string;
3295
+ /**
3296
+ * Whether the command was interrupted
3297
+ */
3298
+ interrupted: boolean;
3299
+ /**
3300
+ * Flag to indicate if stdout contains image data
3301
+ */
3302
+ isImage?: boolean;
3303
+ /**
3304
+ * ID of the background task if command is running in background
3305
+ */
3306
+ backgroundTaskId?: string;
3307
+ /**
3308
+ * True if the user manually backgrounded the command with Ctrl+B
3309
+ */
3310
+ backgroundedByUser?: boolean;
3311
+ /**
3312
+ * Set when the command hit its timeout and was auto-backgrounded; the timeout value in ms
3313
+ */
3314
+ timedOutAfterMs?: number;
3315
+ /**
3316
+ * Model-facing note that the session cwd was not changed by a backgrounded command containing a directory-change builtin (cd/pushd/popd/chdir)
3317
+ */
3318
+ backgroundCwdHint?: string;
3319
+ /**
3320
+ * True when this backgrounded command is terminated at its caller's final response, so no completion notification can follow (a synchronous subagent's command, or a headless session that takes no further input and is not waiting for background commands); absent when the command survives
3321
+ */
3322
+ backgroundEndsWithFinalResponse?: true;
3323
+ /**
3324
+ * Flag to indicate if sandbox mode was overridden
3325
+ */
3326
+ dangerouslyDisableSandbox?: boolean;
3327
+ /**
3328
+ * Semantic interpretation for non-error exit codes with special meaning
3329
+ */
3330
+ returnCodeInterpretation?: string;
3331
+ /**
3332
+ * Whether the command is expected to produce no output on success
3333
+ */
3334
+ noOutputExpected?: boolean;
3335
+ /**
3336
+ * Structured content blocks
3337
+ */
3338
+ structuredContent?: unknown[];
3339
+ /**
3340
+ * Path to the persisted full output in tool-results dir (set when output is too large for inline)
3341
+ */
3342
+ persistedOutputPath?: string;
3343
+ /**
3344
+ * Total size of the output in bytes (set when output is too large for inline)
3345
+ */
3346
+ persistedOutputSize?: number;
3347
+ /**
3348
+ * Model-facing note listing readFileState entries whose mtime bumped during this command (set when WRITE_COMMAND_MARKERS matches)
3349
+ */
3350
+ staleReadFileStateHint?: string;
3351
+ /**
3352
+ * Model-facing system-reminder appended when a gh command reports a GitHub API rate-limit error
3353
+ */
3354
+ ghRateLimitHint?: string;
3355
+ /**
3356
+ * Structured classification of git/gh operations detected in this command (commit/push/merge/rebase/PR). Client-facing — lets clients render git activity without re-parsing stdout; not surfaced to the model.
3357
+ */
3358
+ gitOperation?: {
3359
+ commit?: {
3360
+ sha: string;
3361
+ kind: "committed" | "amended" | "cherry-picked";
3362
+ branch?: string;
3363
+ };
3364
+ push?: {
3365
+ branch: string;
3366
+ };
3367
+ branch?: {
3368
+ ref: string;
3369
+ action: "merged" | "rebased";
3370
+ };
3371
+ pr?: {
3372
+ number: number;
3373
+ url?: string;
3374
+ action:
3375
+ | "created"
3376
+ | "edited"
3377
+ | "merged"
3378
+ | "commented"
3379
+ | "closed"
3380
+ | "reopened"
3381
+ | "ready"
3382
+ | "draft"
3383
+ | "auto-merge-enabled"
3384
+ | "auto-merge-disabled";
3385
+ };
3386
+ };
3387
+ }
3388
+ export interface ExitPlanModeOutput {
3389
+ /**
3390
+ * The plan that was presented to the user
3391
+ */
3392
+ plan: string | null;
3393
+ isAgent: boolean;
3394
+ /**
3395
+ * The file path where the plan was saved
3396
+ */
3397
+ filePath?: string;
3398
+ /**
3399
+ * Whether the Agent tool is available in the current context
3400
+ */
3401
+ hasTaskTool?: boolean;
3402
+ /**
3403
+ * True when the user edited the plan (CCR web UI or Ctrl+G); determines whether the plan is echoed back in tool_result
3404
+ */
3405
+ planWasEdited?: boolean;
3406
+ /**
3407
+ * When true, the teammate has sent a plan approval request to the team leader
3408
+ */
3409
+ awaitingLeaderApproval?: boolean;
3410
+ /**
3411
+ * Unique identifier for the plan approval request
3412
+ */
3413
+ requestId?: string;
3414
+ }
3415
+ export interface FileEditOutput {
3416
+ /**
3417
+ * The file path that was edited
3418
+ */
3419
+ filePath: string;
3420
+ /**
3421
+ * The original string that was replaced
3422
+ */
3423
+ oldString: string;
3424
+ /**
3425
+ * The new string that replaced it
3426
+ */
3427
+ newString: string;
3428
+ /**
3429
+ * The original file contents before editing
3430
+ */
3431
+ originalFile: string | null;
3432
+ /**
3433
+ * Diff patch showing the changes
3434
+ */
3435
+ structuredPatch: {
3436
+ oldStart: number;
3437
+ oldLines: number;
3438
+ newStart: number;
3439
+ newLines: number;
3440
+ lines: string[];
3441
+ }[];
3442
+ /**
3443
+ * Whether the user modified the proposed changes
3444
+ */
3445
+ userModified: boolean;
3446
+ /**
3447
+ * Whether all occurrences were replaced
3448
+ */
3449
+ replaceAll: boolean;
3450
+ gitDiff?: {
3451
+ filename: string;
3452
+ status: "modified" | "added";
3453
+ additions: number;
3454
+ deletions: number;
3455
+ changes: number;
3456
+ patch: string;
3457
+ /**
3458
+ * GitHub owner/repo when available
3459
+ */
3460
+ repository?: string | null;
3461
+ };
3462
+ /**
3463
+ * True when the edit was held for the machine owner to review instead of written; the file is unchanged
3464
+ */
3465
+ staged?: boolean;
3466
+ }
3467
+ export interface FileWriteOutput {
3468
+ /**
3469
+ * Whether a new file was created or an existing file was updated
3470
+ */
3471
+ type: "create" | "update";
3472
+ /**
3473
+ * The path to the file that was written
3474
+ */
3475
+ filePath: string;
3476
+ /**
3477
+ * The content that was written to the file
3478
+ */
3479
+ content: string;
3480
+ /**
3481
+ * Diff patch showing the changes (empty when nothing changed, the diff timed out, or — with originalFile null on an update — the previous content was too large to diff)
3482
+ */
3483
+ structuredPatch: {
3484
+ oldStart: number;
3485
+ oldLines: number;
3486
+ newStart: number;
3487
+ newLines: number;
3488
+ lines: string[];
3489
+ }[];
3490
+ /**
3491
+ * The original file content before the write (null for new files, or when the previous content was too large to include)
3492
+ */
3493
+ originalFile: string | null;
3494
+ gitDiff?: {
3495
+ filename: string;
3496
+ status: "modified" | "added";
3497
+ additions: number;
3498
+ deletions: number;
3499
+ changes: number;
3500
+ patch: string;
3501
+ /**
3502
+ * GitHub owner/repo when available
3503
+ */
3504
+ repository?: string | null;
3505
+ };
3506
+ /**
3507
+ * True when the user edited the proposed content in the permission dialog before accepting
3508
+ */
3509
+ userModified?: boolean;
3510
+ /**
3511
+ * True when the write was held for the machine owner to review instead of written; the file is unchanged
3512
+ */
3513
+ staged?: boolean;
3514
+ }
3515
+ export interface GlobOutput {
3516
+ /**
3517
+ * Time taken to execute the search in milliseconds
3518
+ */
3519
+ durationMs: number;
3520
+ /**
3521
+ * Number of file paths returned (after any truncation)
3522
+ */
3523
+ numFiles: number;
3524
+ /**
3525
+ * Array of file paths that match the pattern
3526
+ */
3527
+ filenames: string[];
3528
+ /**
3529
+ * Whether results were truncated (limited to 100 files)
3530
+ */
3531
+ truncated: boolean;
3532
+ /**
3533
+ * Total number of matching files before truncation. A lower bound when countIsComplete is false. Absent on results persisted by CLI versions predating this field.
3534
+ */
3535
+ totalMatches?: number;
3536
+ /**
3537
+ * Whether totalMatches is the exact total (true) or a floor because the underlying search truncated its own output (false). Absent on results persisted by CLI versions predating this field.
3538
+ */
3539
+ countIsComplete?: boolean;
3540
+ }
3541
+ export interface GrepOutput {
3542
+ mode?: "content" | "files_with_matches" | "count";
3543
+ numFiles: number;
3544
+ filenames: string[];
3545
+ content?: string;
3546
+ numLines?: number;
3547
+ numMatches?: number;
3548
+ totalFiles?: number;
3549
+ totalLines?: number;
3550
+ appliedLimit?: number;
3551
+ appliedOffset?: number;
3552
+ }
3553
+ export interface TaskStopOutput {
3554
+ /**
3555
+ * Status message about the operation
3556
+ */
3557
+ message: string;
3558
+ /**
3559
+ * The ID of the task that was stopped
3560
+ */
3561
+ task_id: string;
3562
+ /**
3563
+ * The type of the task that was stopped
3564
+ */
3565
+ task_type: string;
3566
+ /**
3567
+ * The command or description of the stopped task
3568
+ */
3569
+ command?: string;
3570
+ }
3571
+ export interface NotebookEditOutput {
3572
+ /**
3573
+ * The new source code that was written to the cell
3574
+ */
3575
+ new_source: string;
3576
+ /**
3577
+ * The previous cell source (replace/delete only). Enables cell-relative diff rendering without re-reading the notebook.
3578
+ */
3579
+ old_source?: string;
3580
+ /**
3581
+ * The ID of the cell that was edited
3582
+ */
3583
+ cell_id?: string;
3584
+ /**
3585
+ * The type of the cell
3586
+ */
3587
+ cell_type: "code" | "markdown";
3588
+ /**
3589
+ * The programming language of the notebook
3590
+ */
3591
+ language: string;
3592
+ /**
3593
+ * The edit mode that was used
3594
+ */
3595
+ edit_mode: string;
3596
+ /**
3597
+ * Error message if the operation failed
3598
+ */
3599
+ error?: string;
3600
+ /**
3601
+ * The path to the notebook file
3602
+ */
3603
+ notebook_path: string;
3604
+ /**
3605
+ * The original notebook content before modification
3606
+ */
3607
+ original_file: string;
3608
+ /**
3609
+ * The updated notebook content after modification
3610
+ */
3611
+ updated_file: string;
3612
+ }
3613
+ export interface ReadMcpResourceDirOutput {
3614
+ /**
3615
+ * Direct children of the directory resource. Subdirectories appear with mimeType "inode/directory".
3616
+ */
3617
+ resources: {
3618
+ /**
3619
+ * Child resource URI
3620
+ */
3621
+ uri: string;
3622
+ /**
3623
+ * Child resource name
3624
+ */
3625
+ name: string;
3626
+ /**
3627
+ * Child MIME type
3628
+ */
3629
+ mimeType?: string;
3630
+ }[];
3631
+ /**
3632
+ * Human-readable error when the server could not list the directory
3633
+ */
3634
+ error?: string;
3635
+ }
3636
+ export interface ReadMcpResourceOutput {
3637
+ contents: {
3638
+ /**
3639
+ * Resource URI
3640
+ */
3641
+ uri: string;
3642
+ /**
3643
+ * MIME type of the content
3644
+ */
3645
+ mimeType?: string;
3646
+ /**
3647
+ * Text content of the resource
3648
+ */
3649
+ text?: string;
3650
+ /**
3651
+ * Path where binary blob content was saved
3652
+ */
3653
+ blobSavedTo?: string;
3654
+ }[];
3655
+ /**
3656
+ * Human-readable error when the server could not read the resource
3657
+ */
3658
+ error?: string;
3659
+ }
3660
+ export interface ReportFindingsOutput {
3661
+ /**
3662
+ * Number of findings reported
3663
+ */
3664
+ count: number;
3665
+ /**
3666
+ * Effort level the review ran at
3667
+ */
3668
+ level?: "low" | "medium" | "high" | "xhigh" | "max";
3669
+ /**
3670
+ * Echoed for the result body
3671
+ */
3672
+ findings: {
3673
+ /**
3674
+ * Repo-relative path of the file the finding is in
3675
+ */
3676
+ file: string;
3677
+ /**
3678
+ * 1-indexed line the finding anchors to
3679
+ */
3680
+ line?: number;
3681
+ /**
3682
+ * One-sentence statement of the defect
3683
+ */
3684
+ summary: string;
3685
+ /**
3686
+ * Compressed label for compact UI (≤60 chars): the claim alone, no rationale or consequence clause
3687
+ */
3688
+ short_summary?: string;
3689
+ /**
3690
+ * Concrete inputs/state → wrong output/crash
3691
+ */
3692
+ failure_scenario: string;
3693
+ /**
3694
+ * Short kebab-case slug of the finding type, e.g. "correctness", "simplification", "efficiency", "test-coverage"
3695
+ */
3696
+ category?: string;
3697
+ /**
3698
+ * Set when a verify pass ran; absent on inline-only reviews
3699
+ */
3700
+ verdict?: "CONFIRMED" | "PLAUSIBLE";
3701
+ /**
3702
+ * Set ONLY when re-reporting after applying fixes: what happened to this finding
3703
+ */
3704
+ outcome?: "fixed" | "skipped" | "no_change_needed";
3705
+ }[];
3706
+ }
3707
+ export interface TodoWriteOutput {
3708
+ /**
3709
+ * The todo list before the update
3710
+ */
3711
+ oldTodos: {
3712
+ content: string;
3713
+ status: "pending" | "in_progress" | "completed";
3714
+ activeForm: string;
3715
+ }[];
3716
+ /**
3717
+ * The todo list after the update
3718
+ */
3719
+ newTodos: {
3720
+ content: string;
3721
+ status: "pending" | "in_progress" | "completed";
3722
+ activeForm: string;
3723
+ }[];
3724
+ }
3725
+ export interface WebFetchOutput {
3726
+ /**
3727
+ * Size of the fetched content in bytes
3728
+ */
3729
+ bytes: number;
3730
+ /**
3731
+ * HTTP response code
3732
+ */
3733
+ code: number;
3734
+ /**
3735
+ * HTTP response code text
3736
+ */
3737
+ codeText: string;
3738
+ /**
3739
+ * Processed result from applying the prompt to the content
3740
+ */
3741
+ result: string;
3742
+ /**
3743
+ * Time taken to fetch and process the content
3744
+ */
3745
+ durationMs: number;
3746
+ /**
3747
+ * The URL that was fetched
3748
+ */
3749
+ url: string;
3750
+ artifactRead?: {
3751
+ slug: string;
3752
+ ver?: string;
3753
+ seeded?: false;
3754
+ };
3755
+ }
3756
+ export interface WebSearchOutput {
3757
+ /**
3758
+ * The search query that was executed
3759
+ */
3760
+ query: string;
3761
+ /**
3762
+ * Search results and/or text commentary from the model
3763
+ */
3764
+ results: (
3765
+ | {
3766
+ /**
3767
+ * ID of the tool use
3768
+ */
3769
+ tool_use_id: string;
3770
+ /**
3771
+ * Array of search hits
3772
+ */
3773
+ content: {
3774
+ /**
3775
+ * The title of the search result
3776
+ */
3777
+ title: string;
3778
+ /**
3779
+ * The URL of the search result
3780
+ */
3781
+ url: string;
3782
+ /**
3783
+ * Page text. PostToolUse hooks get it; tool_use_result does not.
3784
+ */
3785
+ snippet?: string;
3786
+ }[];
3787
+ }
3788
+ | string
3789
+ )[];
3790
+ /**
3791
+ * Time taken to complete the search operation
3792
+ */
3793
+ durationSeconds: number;
3794
+ /**
3795
+ * Number of web searches performed
3796
+ */
3797
+ searchCount?: number;
3798
+ }
3799
+ export interface AskUserQuestionOutput {
3800
+ /**
3801
+ * The questions that were asked
3802
+ */
3803
+ questions: {
3804
+ /**
3805
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
3806
+ */
3807
+ question: string;
3808
+ /**
3809
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
3810
+ */
3811
+ header: string;
3812
+ /**
3813
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
3814
+ *
3815
+ * @minItems 2
3816
+ * @maxItems 4
3817
+ */
3818
+ options:
3819
+ | [
3820
+ {
3821
+ /**
3822
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3823
+ */
3824
+ label: string;
3825
+ /**
3826
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3827
+ */
3828
+ description: string;
3829
+ /**
3830
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3831
+ */
3832
+ preview?: string;
3833
+ },
3834
+ {
3835
+ /**
3836
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3837
+ */
3838
+ label: string;
3839
+ /**
3840
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3841
+ */
3842
+ description: string;
3843
+ /**
3844
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3845
+ */
3846
+ preview?: string;
3847
+ }
3848
+ ]
3849
+ | [
3850
+ {
3851
+ /**
3852
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3853
+ */
3854
+ label: string;
3855
+ /**
3856
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3857
+ */
3858
+ description: string;
3859
+ /**
3860
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3861
+ */
3862
+ preview?: string;
3863
+ },
3864
+ {
3865
+ /**
3866
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3867
+ */
3868
+ label: string;
3869
+ /**
3870
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3871
+ */
3872
+ description: string;
3873
+ /**
3874
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3875
+ */
3876
+ preview?: string;
3877
+ },
3878
+ {
3879
+ /**
3880
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3881
+ */
3882
+ label: string;
3883
+ /**
3884
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3885
+ */
3886
+ description: string;
3887
+ /**
3888
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3889
+ */
3890
+ preview?: string;
3891
+ }
3892
+ ]
3893
+ | [
3894
+ {
3895
+ /**
3896
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3897
+ */
3898
+ label: string;
3899
+ /**
3900
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3901
+ */
3902
+ description: string;
3903
+ /**
3904
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3905
+ */
3906
+ preview?: string;
3907
+ },
3908
+ {
3909
+ /**
3910
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3911
+ */
3912
+ label: string;
3913
+ /**
3914
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3915
+ */
3916
+ description: string;
3917
+ /**
3918
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3919
+ */
3920
+ preview?: string;
3921
+ },
3922
+ {
3923
+ /**
3924
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3925
+ */
3926
+ label: string;
3927
+ /**
3928
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3929
+ */
3930
+ description: string;
3931
+ /**
3932
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3933
+ */
3934
+ preview?: string;
3935
+ },
3936
+ {
3937
+ /**
3938
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3939
+ */
3940
+ label: string;
3941
+ /**
3942
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3943
+ */
3944
+ description: string;
3945
+ /**
3946
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3947
+ */
3948
+ preview?: string;
3949
+ }
3950
+ ];
3951
+ /**
3952
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
3953
+ */
3954
+ multiSelect: boolean;
3955
+ }[];
3956
+ /**
3957
+ * The answers provided by the user (question text -> answer string; multi-select answers are comma-separated)
3958
+ */
3959
+ answers: {
3960
+ [k: string]: string;
3961
+ };
3962
+ /**
3963
+ * Freeform text the user typed instead of selecting a structured option
3964
+ */
3965
+ response?: string;
3966
+ /**
3967
+ * Optional per-question annotations from the user (e.g., notes on preview selections). Keyed by question text.
3968
+ */
3969
+ annotations?: {
3970
+ [k: string]: {
3971
+ /**
3972
+ * The preview content of the selected option, if the question used previews.
3973
+ */
3974
+ preview?: string;
3975
+ /**
3976
+ * Free-text notes the user added to their selection.
3977
+ */
3978
+ notes?: string;
3979
+ };
3980
+ };
3981
+ /**
3982
+ * Set when the dialog auto-resolved after this many milliseconds of idle (user away from keyboard). Absent on every human-resolved path.
3983
+ */
3984
+ afkTimeoutMs?: number;
3985
+ }
3986
+ export interface SendFeedbackOutput {
3987
+ success: boolean;
3988
+ message: string;
3989
+ }
3990
+ export interface EnterWorktreeOutput {
3991
+ worktreePath: string;
3992
+ worktreeBranch?: string;
3993
+ message: string;
3994
+ }
3995
+ export interface ExitWorktreeOutput {
3996
+ action: "keep" | "remove";
3997
+ originalCwd: string;
3998
+ worktreePath: string;
3999
+ worktreeBranch?: string;
4000
+ tmuxSessionName?: string;
4001
+ discardedFiles?: number;
4002
+ discardedCommits?: number;
4003
+ message: string;
4004
+ }
4005
+ export interface TaskCreateOutput {
4006
+ task: {
4007
+ id: string;
4008
+ subject: string;
4009
+ };
4010
+ }
4011
+ export interface TaskGetOutput {
4012
+ task: {
4013
+ id: string;
4014
+ subject: string;
4015
+ description: string;
4016
+ status: "pending" | "in_progress" | "completed";
4017
+ blocks: string[];
4018
+ blockedBy: string[];
4019
+ } | null;
4020
+ }
4021
+ export interface TaskUpdateOutput {
4022
+ success: boolean;
4023
+ taskId: string;
4024
+ updatedFields: string[];
4025
+ error?: string;
4026
+ statusChange?: {
4027
+ from: string;
4028
+ to: string;
4029
+ };
4030
+ }
4031
+ export interface TaskListOutput {
4032
+ tasks: {
4033
+ id: string;
4034
+ subject: string;
4035
+ status: "pending" | "in_progress" | "completed";
4036
+ owner?: string;
4037
+ blockedBy: string[];
4038
+ }[];
4039
+ }
4040
+ export interface RemoteTriggerOutput {
4041
+ status: number;
4042
+ json: string;
4043
+ summary?: string;
4044
+ }
4045
+ export interface ShowOnboardingRolePickerOutput {
4046
+ role?: string;
4047
+ dismissed?: boolean;
4048
+ }
4049
+ export interface OfferChromeSetupOutput {
4050
+ outcome: "connected" | "not_now" | "no_attempt_yet";
4051
+ }
4052
+ export interface ReadNotificationsOutput {
4053
+ notifications: {
4054
+ /**
4055
+ * Server-assigned stable id — the dedup key across redeliveries.
4056
+ */
4057
+ notification_id: string;
4058
+ /**
4059
+ * Server-attested source token: "github_webhook" | "trigger_fire" | "mcp_send_message" (open set; unknown well-formed tokens pass through verbatim, off-grammar values coerce to "unknown").
4060
+ */
4061
+ origin: string;
4062
+ /**
4063
+ * RFC3339 timestamp of when the backend queued it.
4064
+ */
4065
+ queued_at: string;
4066
+ /**
4067
+ * Verbatim notification body.
4068
+ */
4069
+ content: string;
4070
+ /**
4071
+ * RFC3339 timestamp, by this machine's clock, of when the notification reached this session's queue. Missing from results saved before this field existed.
4072
+ */
4073
+ arrived_at?: string;
4074
+ }[];
4075
+ /**
4076
+ * Notifications still queued after this drain (drains are size-budgeted); call the tool again to read them.
4077
+ */
4078
+ remaining: number;
4079
+ /**
4080
+ * RFC3339 timestamp, by this machine's clock, of when this call read the queue. Missing from results saved before this field existed.
4081
+ */
4082
+ read_at?: string;
4083
+ }
4084
+ export interface ScheduleWakeupOutput {
4085
+ /**
4086
+ * Epoch ms timestamp when the next wakeup will fire
4087
+ */
4088
+ scheduledFor: number;
4089
+ /**
4090
+ * Actual delay used after clamping to runtime bounds
4091
+ */
4092
+ clampedDelaySeconds: number;
4093
+ /**
4094
+ * True if the requested delaySeconds was outside [60, 3600]
4095
+ */
4096
+ wasClamped: boolean;
4097
+ /**
4098
+ * True when the model ended the loop via `stop: true`
4099
+ */
4100
+ stopped?: boolean;
4101
+ /**
4102
+ * How many pending dynamic-loop wakeups stop:true cancelled. 0 means nothing was pending — a recurring /loop cron is not cancelled by stop:true.
4103
+ */
4104
+ cancelledWakeups?: number;
4105
+ }
4106
+ export interface MonitorOutput {
4107
+ /**
4108
+ * ID of the background monitor task.
4109
+ */
4110
+ taskId: string;
4111
+ /**
4112
+ * Timeout deadline in milliseconds (0 when persistent).
4113
+ */
4114
+ timeoutMs: number;
4115
+ /**
4116
+ * No timeout — runs until TaskStop or session end.
4117
+ */
4118
+ persistent?: boolean;
4119
+ }
4120
+ export interface ProposeSkillsOutput {
4121
+ /**
4122
+ * Number of proposals shown on the review card
4123
+ */
4124
+ proposalCount: number;
4125
+ }
4126
+ export interface ProposeGoalOutput {
4127
+ /**
4128
+ * The condition shown to the user for approval, or set directly when ask_user was false
4129
+ */
4130
+ condition: string;
4131
+ /**
4132
+ * Whether the user was asked for approval (true) or the goal was set directly (false)
4133
+ */
4134
+ askUser: boolean;
4135
+ }
4136
+ export interface EnterPlanModeOutput {
4137
+ /**
4138
+ * Confirmation that plan mode was entered
4139
+ */
4140
+ message: string;
4141
+ }
4142
+ export interface WorkflowOutput {
4143
+ status: "async_launched" | "remote_launched";
4144
+ taskId: string;
4145
+ /**
4146
+ * TaskType of the registered background task — 'local_workflow' for in-process runs, 'remote_agent' when remote:true dispatches to CCR. Set on all new writes; absent only on transcripts written before this field existed.
4147
+ */
4148
+ taskType?: "local_workflow" | "remote_agent";
4149
+ /**
4150
+ * meta.name from the workflow script — same value as task_started.workflow_name. Set on all new writes; absent only on transcripts written before this field existed.
4151
+ */
4152
+ workflowName?: string;
4153
+ /**
4154
+ * Local workflow run identifier for resumeFromRunId. Absent for remote_launched (the CCR session URL is the resume handle there) and on transcripts written before this field existed.
4155
+ */
4156
+ runId?: string;
4157
+ summary?: string;
4158
+ /**
4159
+ * Directory where subagent transcripts are written during execution
4160
+ */
4161
+ transcriptDir?: string;
4162
+ /**
4163
+ * Path to the persisted workflow script for this invocation. Editable via Write/Edit; pass back as `scriptPath` to re-run without resending the script.
4164
+ */
4165
+ scriptPath?: string;
4166
+ /**
4167
+ * CCR session URL when status is remote_launched
4168
+ */
4169
+ sessionUrl?: string;
4170
+ /**
4171
+ * Non-blocking heads-up (e.g. local git state diverges from the pushed branch the cloud session will clone)
4172
+ */
4173
+ warning?: string;
4174
+ /**
4175
+ * Set if syntax check failed
4176
+ */
4177
+ error?: string;
4178
+ }
4179
+ export interface CronCreateOutput {
4180
+ id: string;
4181
+ humanSchedule: string;
4182
+ recurring: boolean;
4183
+ durable?: boolean;
4184
+ /**
4185
+ * Epoch ms of the job's next run, the scheduler's per-job offset included
4186
+ */
4187
+ nextFireAt?: number;
4188
+ }
4189
+ export interface CronDeleteOutput {
4190
+ id: string;
4191
+ }
4192
+ export interface CronListOutput {
4193
+ jobs: {
4194
+ id: string;
4195
+ cron: string;
4196
+ humanSchedule: string;
4197
+ prompt: string;
4198
+ recurring?: boolean;
4199
+ durable?: boolean;
4200
+ /**
4201
+ * Epoch ms of the job's next run, the scheduler's per-job offset included
4202
+ */
4203
+ nextFireAt?: number;
4204
+ }[];
4205
+ }
4206
+ export interface PushNotificationOutput {
4207
+ message: string;
4208
+ pushSent?: boolean;
4209
+ localSent?: boolean;
4210
+ disabledReason?: "config_off" | "user_present" | "no_transport";
4211
+ /**
4212
+ * ISO timestamp captured at tool execution on the emitting process. Optional — resumed sessions replay pre-sentAt outputs verbatim.
4213
+ */
4214
+ sentAt?: string;
4215
+ }
4216
+ export interface ClaudeDesignOutput {
4217
+ operation: string;
4218
+ content: {
4219
+ [k: string]: unknown;
4220
+ }[];
4221
+ isError?: boolean;
4222
+ }