auto-model-router 0.4.13 → 0.5.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.
@@ -0,0 +1,858 @@
1
+ {
2
+ "harness": "claude-code",
3
+ "capturedAtMs": 1788843269922,
4
+ "headers": {
5
+ "content-type": "application/json",
6
+ "user-agent": "claude-cli/2.1.263 (external, sdk-cli)"
7
+ },
8
+ "body": {
9
+ "model": "claude-fable-5-1",
10
+ "messages": [
11
+ {
12
+ "role": "user",
13
+ "content": [
14
+ {
15
+ "type": "text",
16
+ "text": "<system-reminder>\nAs you answer the user's questions, you can use the following context:\n# currentDate\nToday's date is 2026-09-07.\n\n IMPORTANT: this context may or may not be relevant to your tasks. You should not respond to this context unless it is highly relevant to your task.\n</system-reminder>\n\n"
17
+ },
18
+ {
19
+ "type": "text",
20
+ "text": "Read package.json in this directory with your Read tool and reply with only the version number."
21
+ }
22
+ ]
23
+ },
24
+ {
25
+ "role": "system",
26
+ "content": [
27
+ {
28
+ "type": "text",
29
+ "text": "Available agent types for the Agent tool:\n- claude: Catch-all for any task that doesn't fit a more specific agent. FleetView's default when no agent name is typed. (Tools: *)\n- Explore: Read-only search agent for broad fan-out searches — when answering means sweeping many files, directories, or naming conventions and you only need the conclusion, not the file dumps. It reads excerpts rather than w…[8125 chars]",
30
+ "cache_control": {
31
+ "type": "ephemeral"
32
+ }
33
+ }
34
+ ],
35
+ "output_config": {
36
+ "effort": "high"
37
+ }
38
+ }
39
+ ],
40
+ "system": [
41
+ {
42
+ "type": "text",
43
+ "text": "x-anthropic-billing-header: cc_version=2.1.263.5d4; cc_entrypoint=sdk-cli;"
44
+ },
45
+ {
46
+ "type": "text",
47
+ "text": "You are a Claude agent, built on Anthropic's Claude Agent SDK.",
48
+ "cache_control": {
49
+ "type": "ephemeral"
50
+ }
51
+ },
52
+ {
53
+ "type": "text",
54
+ "text": "# Reporting outcomes\n\nReport what actually happened, not what you intended. When you say something is done, sent, saved, fixed, or verified, that claim must rest on a result you observed in this session — tool output, the file as it now reads, the page as it now loads — not on what the step should have produced. If you did not check, say you did not check. If any step failed, was skipped, or came …[907 chars]"
55
+ },
56
+ {
57
+ "type": "text",
58
+ "text": "\nYou are an interactive agent that helps users with software engineering tasks.\n\nIMPORTANT: Assist with authorized security testing, defensive security, CTF challenges, and educational contexts. Refuse requests for destructive techniques, DoS attacks, mass targeting, supply chain compromise, or detection evasion for malicious purposes. Dual-use security tools (C2 frameworks, credential testing, ex…[12645 chars]",
59
+ "cache_control": {
60
+ "type": "ephemeral"
61
+ }
62
+ }
63
+ ],
64
+ "tools": [
65
+ {
66
+ "name": "Agent",
67
+ "description": "Launch a new agent to handle complex, multi-step tasks. Each agent type has specific capabilities and tools available to it.\n\nAvailable agent types are listed in <system-reminder> messages in the conversation.\n\nWhen using the Agent tool, specify a subagent_type parameter to select which agent type to use. If omitted, the general-purpose agent is used.\n\n## When to use\n\nReach for this when the task …[1668 chars]",
68
+ "input_schema": {
69
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
70
+ "type": "object",
71
+ "properties": {
72
+ "description": {
73
+ "description": "A short (3-5 word) description of the task",
74
+ "type": "string"
75
+ },
76
+ "prompt": {
77
+ "description": "The task for the agent to perform",
78
+ "type": "string"
79
+ },
80
+ "subagent_type": {
81
+ "description": "The type of specialized agent to use for this task",
82
+ "type": "string"
83
+ },
84
+ "model": {
85
+ "description": "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.",
86
+ "type": "string",
87
+ "enum": [
88
+ "sonnet",
89
+ "opus",
90
+ "haiku",
91
+ "fable"
92
+ ]
93
+ },
94
+ "run_in_background": {
95
+ "description": "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.",
96
+ "type": "boolean"
97
+ },
98
+ "isolation": {
99
+ "description": "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).",
100
+ "type": "string",
101
+ "enum": [
102
+ "worktree",
103
+ "remote"
104
+ ]
105
+ }
106
+ },
107
+ "required": [
108
+ "description",
109
+ "prompt"
110
+ ],
111
+ "additionalProperties": false
112
+ }
113
+ },
114
+ {
115
+ "name": "Bash",
116
+ "description": "Executes a bash command and returns its output.\n\nThis tool runs Git Bash (POSIX sh), not cmd.exe or PowerShell. Use Unix shell syntax: `/dev/null` not `NUL`, forward slashes, `$VAR` not `%VAR%` or `$env:VAR`.\n\n- Working directory persists between calls, but prefer absolute paths — `cd` in a compound command can trigger a permission prompt. Shell state (env vars, functions) does not persist; the sh…[1122 chars]",
117
+ "input_schema": {
118
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
119
+ "type": "object",
120
+ "properties": {
121
+ "command": {
122
+ "description": "The command to execute",
123
+ "type": "string"
124
+ },
125
+ "timeout": {
126
+ "description": "Optional timeout in milliseconds (max 600000)",
127
+ "type": "number"
128
+ },
129
+ "description": {
130
+ "description": "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.\n\nFor simple commands (git, npm, standard CLI tools), keep it brief (5-10 words):\n- ls → \"List files in current directory\"\n- git status → \"Show working tree status\"\n- npm install → \"Install package dependencies\"\n\nFor commands that are harder…[757 chars]",
131
+ "type": "string"
132
+ },
133
+ "run_in_background": {
134
+ "description": "Set to true to run this command in the background.",
135
+ "type": "boolean"
136
+ },
137
+ "dangerouslyDisableSandbox": {
138
+ "description": "Set this to true to dangerously override sandbox mode and run commands without sandboxing.",
139
+ "type": "boolean"
140
+ }
141
+ },
142
+ "required": [
143
+ "command"
144
+ ],
145
+ "additionalProperties": false
146
+ }
147
+ },
148
+ {
149
+ "name": "CronCreate",
150
+ "description": "Schedule a prompt to be enqueued at a future time. Use for both recurring schedules and one-shot reminders.\n\nUses standard 5-field cron in the user's local timezone: minute hour day-of-month month day-of-week. \"0 9 * * *\" means 9am local — no timezone conversion needed.\n\n## One-shot tasks (recurring: false)\n\nFor \"remind me at X\" or \"at <time>, do Y\" requests — fire once then auto-delete.\nPin minut…[2924 chars]",
151
+ "input_schema": {
152
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
153
+ "type": "object",
154
+ "properties": {
155
+ "cron": {
156
+ "description": "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).",
157
+ "type": "string"
158
+ },
159
+ "prompt": {
160
+ "description": "The prompt to enqueue at each fire time.",
161
+ "type": "string"
162
+ },
163
+ "recurring": {
164
+ "description": "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.",
165
+ "type": "boolean"
166
+ },
167
+ "durable": {
168
+ "description": "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.",
169
+ "type": "boolean"
170
+ }
171
+ },
172
+ "required": [
173
+ "cron",
174
+ "prompt"
175
+ ],
176
+ "additionalProperties": false
177
+ }
178
+ },
179
+ {
180
+ "name": "CronDelete",
181
+ "description": "Cancel a cron job previously scheduled with CronCreate. Removes it from .claude/scheduled_tasks.json (durable jobs) or the in-memory session store (session-only jobs).",
182
+ "input_schema": {
183
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
184
+ "type": "object",
185
+ "properties": {
186
+ "id": {
187
+ "description": "Job ID returned by CronCreate.",
188
+ "type": "string"
189
+ }
190
+ },
191
+ "required": [
192
+ "id"
193
+ ],
194
+ "additionalProperties": false
195
+ }
196
+ },
197
+ {
198
+ "name": "CronList",
199
+ "description": "List all cron jobs scheduled via CronCreate, both durable (.claude/scheduled_tasks.json) and session-only.",
200
+ "input_schema": {
201
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
202
+ "type": "object",
203
+ "properties": {},
204
+ "additionalProperties": false
205
+ }
206
+ },
207
+ {
208
+ "name": "Edit",
209
+ "description": "Performs exact string replacement in a file.\n\n- You must Read the file in this conversation before editing, or the call will fail.\n- `old_string` must match the file exactly, including indentation, and be unique — the edit fails otherwise. Strip the Read line prefix (line number + tab) before matching.\n- `replace_all: true` replaces every occurrence instead.",
210
+ "input_schema": {
211
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
212
+ "type": "object",
213
+ "properties": {
214
+ "file_path": {
215
+ "description": "The absolute path to the file to modify",
216
+ "type": "string"
217
+ },
218
+ "old_string": {
219
+ "description": "The text to replace",
220
+ "type": "string"
221
+ },
222
+ "new_string": {
223
+ "description": "The text to replace it with (must be different from old_string)",
224
+ "type": "string"
225
+ },
226
+ "replace_all": {
227
+ "description": "Replace all occurrences of old_string (default false)",
228
+ "default": false,
229
+ "type": "boolean"
230
+ }
231
+ },
232
+ "required": [
233
+ "file_path",
234
+ "old_string",
235
+ "new_string"
236
+ ],
237
+ "additionalProperties": false
238
+ }
239
+ },
240
+ {
241
+ "name": "EnterWorktree",
242
+ "description": "Use this tool ONLY when explicitly instructed to work in a worktree — either by the user directly, or by project instructions (CLAUDE.md / memory). This tool creates an isolated git worktree and switches the current session into it.\n\n## When to Use\n\n- The user explicitly says \"worktree\" (e.g., \"start a worktree\", \"work in a worktree\", \"create a worktree\", \"use a worktree\")\n- CLAUDE.md or memory in…[3220 chars]",
243
+ "input_schema": {
244
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
245
+ "type": "object",
246
+ "properties": {
247
+ "name": {
248
+ "description": "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`.",
249
+ "type": "string"
250
+ },
251
+ "path": {
252
+ "description": "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`.",
253
+ "type": "string"
254
+ }
255
+ },
256
+ "additionalProperties": false
257
+ }
258
+ },
259
+ {
260
+ "name": "ExitWorktree",
261
+ "description": "Exit a worktree session created by EnterWorktree and return the session to the original working directory.\n\n## Scope\n\nThis tool ONLY operates on worktrees created by EnterWorktree in this session. It will NOT touch:\n- Worktrees you created manually with `git worktree add`\n- Worktrees from a previous session (even if created by EnterWorktree then)\n- The directory you're in if EnterWorktree was neve…[1923 chars]",
262
+ "input_schema": {
263
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
264
+ "type": "object",
265
+ "properties": {
266
+ "action": {
267
+ "description": "\"keep\" leaves the worktree and branch on disk; \"remove\" deletes both.",
268
+ "type": "string",
269
+ "enum": [
270
+ "keep",
271
+ "remove"
272
+ ]
273
+ },
274
+ "discard_changes": {
275
+ "description": "Required true when action is \"remove\" and the worktree has uncommitted files or unmerged commits. The tool will refuse and list them otherwise.",
276
+ "type": "boolean"
277
+ }
278
+ },
279
+ "required": [
280
+ "action"
281
+ ],
282
+ "additionalProperties": false
283
+ }
284
+ },
285
+ {
286
+ "name": "Glob",
287
+ "description": "Fast file pattern matching. Supports glob patterns like \"**/*.js\" or \"src/**/*.ts\". Returns matching file paths sorted by modification time.",
288
+ "input_schema": {
289
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
290
+ "type": "object",
291
+ "properties": {
292
+ "pattern": {
293
+ "description": "The glob pattern to match files against",
294
+ "type": "string"
295
+ },
296
+ "path": {
297
+ "description": "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.",
298
+ "type": "string"
299
+ }
300
+ },
301
+ "required": [
302
+ "pattern"
303
+ ],
304
+ "additionalProperties": false
305
+ }
306
+ },
307
+ {
308
+ "name": "Grep",
309
+ "description": "Content search built on ripgrep. Prefer this over `grep`/`rg` via Bash — results integrate with the permission UI and file links.\n\n- Full regex syntax (e.g. \"log.*Error\", \"function\\s+\\w+\"). Ripgrep, not grep — escape literal braces (`interface\\{\\}`).\n- Filter with `glob` (e.g. \"**/*.tsx\") or `type` (e.g. \"js\", \"py\", \"rust\").\n- `output_mode`: \"content\" (matching lines), \"files_with_matches\" (paths …[477 chars]",
310
+ "input_schema": {
311
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
312
+ "type": "object",
313
+ "properties": {
314
+ "pattern": {
315
+ "description": "The regular expression pattern to search for in file contents",
316
+ "type": "string"
317
+ },
318
+ "path": {
319
+ "description": "File or directory to search in (rg PATH). Defaults to current working directory.",
320
+ "type": "string"
321
+ },
322
+ "glob": {
323
+ "description": "Glob pattern to filter files (e.g. \"*.js\", \"*.{ts,tsx}\") - maps to rg --glob",
324
+ "type": "string"
325
+ },
326
+ "output_mode": {
327
+ "description": "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\".",
328
+ "type": "string",
329
+ "enum": [
330
+ "content",
331
+ "files_with_matches",
332
+ "count"
333
+ ]
334
+ },
335
+ "-B": {
336
+ "description": "Number of lines to show before each match (rg -B). Requires output_mode: \"content\", ignored otherwise.",
337
+ "type": "number"
338
+ },
339
+ "-A": {
340
+ "description": "Number of lines to show after each match (rg -A). Requires output_mode: \"content\", ignored otherwise.",
341
+ "type": "number"
342
+ },
343
+ "-C": {
344
+ "description": "Alias for context.",
345
+ "type": "number"
346
+ },
347
+ "context": {
348
+ "description": "Number of lines to show before and after each match (rg -C). Requires output_mode: \"content\", ignored otherwise.",
349
+ "type": "number"
350
+ },
351
+ "-n": {
352
+ "description": "Show line numbers in output (rg -n). Requires output_mode: \"content\", ignored otherwise. Defaults to true.",
353
+ "type": "boolean"
354
+ },
355
+ "-i": {
356
+ "description": "Case insensitive search (rg -i)",
357
+ "type": "boolean"
358
+ },
359
+ "-o": {
360
+ "description": "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.",
361
+ "type": "boolean"
362
+ },
363
+ "type": {
364
+ "description": "File type to search (rg --type). Common types: js, py, rust, go, java, etc. More efficient than include for standard file types.",
365
+ "type": "string"
366
+ },
367
+ "head_limit": {
368
+ "description": "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).",
369
+ "type": "number"
370
+ },
371
+ "offset": {
372
+ "description": "Skip first N lines/entries before applying head_limit, equivalent to \"| tail -n +N | head -N\". Works across all output modes. Defaults to 0.",
373
+ "type": "number"
374
+ },
375
+ "multiline": {
376
+ "description": "Enable multiline mode where . matches newlines and patterns can span lines (rg -U --multiline-dotall). Default: false.",
377
+ "type": "boolean"
378
+ }
379
+ },
380
+ "required": [
381
+ "pattern"
382
+ ],
383
+ "additionalProperties": false
384
+ }
385
+ },
386
+ {
387
+ "name": "ListAgents",
388
+ "description": "Lists agents you can SendMessage to — in-process subagents you spawned, the teammates on your team, other local Claude sessions on this machine, your Claude sessions running in the cloud (when this session has cloud access; a cloud session receives your message but cannot message any session back yet — do not ask it to reply, read its answer in its own transcript), and (when Remote Control is conn…[777 chars]",
389
+ "input_schema": {
390
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
391
+ "type": "object",
392
+ "properties": {
393
+ "channel": {
394
+ "description": "Not available in this build; leave unset.",
395
+ "type": "string",
396
+ "maxLength": 256
397
+ },
398
+ "q": {
399
+ "description": "Not available in this build; leave unset.",
400
+ "type": "string",
401
+ "maxLength": 256
402
+ }
403
+ },
404
+ "additionalProperties": false
405
+ }
406
+ },
407
+ {
408
+ "name": "NotebookEdit",
409
+ "description": "Replaces, inserts, or deletes a single cell in a Jupyter notebook (.ipynb file).\n\nUsage:\n- You must use the Read tool on the notebook in this conversation before editing — this tool will fail otherwise.\n- `notebook_path` must be an absolute path.\n- `cell_id` is the `id` attribute shown in the Read tool's `<cell id=\"...\">` output. It is required for `replace` and `delete`.\n- `edit_mode` defaults to…[619 chars]",
410
+ "input_schema": {
411
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
412
+ "type": "object",
413
+ "properties": {
414
+ "notebook_path": {
415
+ "description": "The absolute path to the Jupyter notebook file to edit (must be absolute, not relative)",
416
+ "type": "string"
417
+ },
418
+ "cell_id": {
419
+ "description": "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.",
420
+ "type": "string"
421
+ },
422
+ "new_source": {
423
+ "description": "The new source for the cell",
424
+ "type": "string"
425
+ },
426
+ "cell_type": {
427
+ "description": "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.",
428
+ "type": "string",
429
+ "enum": [
430
+ "code",
431
+ "markdown"
432
+ ]
433
+ },
434
+ "edit_mode": {
435
+ "description": "The type of edit to make (replace, insert, delete). Defaults to replace.",
436
+ "type": "string",
437
+ "enum": [
438
+ "replace",
439
+ "insert",
440
+ "delete"
441
+ ]
442
+ }
443
+ },
444
+ "required": [
445
+ "notebook_path",
446
+ "new_source"
447
+ ],
448
+ "additionalProperties": false
449
+ }
450
+ },
451
+ {
452
+ "name": "Read",
453
+ "description": "Reads a file from the local filesystem.\n\n- `file_path` must be an absolute path.\n- Reads up to 2000 lines by default.\n- You can optionally specify a line offset and limit (especially handy for long files), but it's recommended to read the whole file by not providing these parameters\n- Results are returned using cat -n format, with line numbers starting at 1\n- Reads images (PNG, JPG, …) and present…[838 chars]",
454
+ "input_schema": {
455
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
456
+ "type": "object",
457
+ "properties": {
458
+ "file_path": {
459
+ "description": "The absolute path to the file to read",
460
+ "type": "string"
461
+ },
462
+ "offset": {
463
+ "description": "The line number to start reading from. Only provide if the file is too large to read at once",
464
+ "type": "integer",
465
+ "minimum": 0,
466
+ "maximum": 9007199254740991
467
+ },
468
+ "limit": {
469
+ "description": "The number of lines to read. Only provide if the file is too large to read at once.",
470
+ "type": "integer",
471
+ "exclusiveMinimum": 0,
472
+ "maximum": 9007199254740991
473
+ },
474
+ "pages": {
475
+ "description": "Page range for PDF files (e.g., \"1-5\", \"3\", \"10-20\"). Only applicable to PDF files. Maximum 20 pages per request.",
476
+ "type": "string"
477
+ }
478
+ },
479
+ "required": [
480
+ "file_path"
481
+ ],
482
+ "additionalProperties": false
483
+ }
484
+ },
485
+ {
486
+ "name": "ReportFindings",
487
+ "description": "Report code-review findings as a typed list so the host UI can render them. Use this only when the active code-review instructions tell you to report findings with this tool; otherwise follow whatever output format those instructions specify. When reporting a review's results, call it once with the verified findings ranked most-severe first (empty array if nothing survived verification) and do not…[574 chars]",
488
+ "input_schema": {
489
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
490
+ "type": "object",
491
+ "properties": {
492
+ "level": {
493
+ "description": "Effort level the review ran at",
494
+ "type": "string",
495
+ "enum": [
496
+ "low",
497
+ "medium",
498
+ "high",
499
+ "xhigh",
500
+ "max"
501
+ ]
502
+ },
503
+ "findings": {
504
+ "description": "Verified findings, most-severe first; empty if none survived",
505
+ "maxItems": 32,
506
+ "type": "array",
507
+ "items": {
508
+ "type": "object",
509
+ "properties": {
510
+ "file": {
511
+ "description": "Repo-relative path of the file the finding is in",
512
+ "type": "string"
513
+ },
514
+ "line": {
515
+ "description": "1-indexed line the finding anchors to",
516
+ "type": "integer",
517
+ "minimum": -9007199254740991,
518
+ "maximum": 9007199254740991
519
+ },
520
+ "summary": {
521
+ "description": "One-sentence statement of the defect",
522
+ "type": "string"
523
+ },
524
+ "short_summary": {
525
+ "description": "Compressed label for compact UI (≤60 chars): the claim alone, no rationale or consequence clause",
526
+ "type": "string",
527
+ "maxLength": 60
528
+ },
529
+ "failure_scenario": {
530
+ "description": "Concrete inputs/state → wrong output/crash",
531
+ "type": "string"
532
+ },
533
+ "category": {
534
+ "description": "Short kebab-case slug of the finding type, e.g. \"correctness\", \"simplification\", \"efficiency\", \"test-coverage\"",
535
+ "type": "string",
536
+ "maxLength": 40
537
+ },
538
+ "verdict": {
539
+ "description": "Set when a verify pass ran; absent on inline-only reviews",
540
+ "type": "string",
541
+ "enum": [
542
+ "CONFIRMED",
543
+ "PLAUSIBLE"
544
+ ]
545
+ },
546
+ "outcome": {
547
+ "description": "Set ONLY when re-reporting after applying fixes: what happened to this finding",
548
+ "type": "string",
549
+ "enum": [
550
+ "fixed",
551
+ "skipped",
552
+ "no_change_needed"
553
+ ]
554
+ }
555
+ },
556
+ "required": [
557
+ "file",
558
+ "summary",
559
+ "failure_scenario"
560
+ ],
561
+ "additionalProperties": false
562
+ }
563
+ }
564
+ },
565
+ "required": [
566
+ "findings"
567
+ ],
568
+ "additionalProperties": false
569
+ }
570
+ },
571
+ {
572
+ "name": "ScheduleWakeup",
573
+ "description": "Schedule when to resume work in /loop dynamic mode — the user invoked /loop without an interval, asking you to self-pace iterations of a specific task.\n\nDo NOT schedule a short-interval wakeup to poll for background work you started — when harness-tracked work finishes, you are re-invoked automatically, so polling is wasted. Instead schedule a long fallback (1200s+) so the loop survives if the wor…[3396 chars]",
574
+ "input_schema": {
575
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
576
+ "type": "object",
577
+ "properties": {
578
+ "delaySeconds": {
579
+ "description": "Seconds from now to wake up. Clamped to [60, 3600] by the runtime. Required unless `stop` is true.",
580
+ "type": "number"
581
+ },
582
+ "reason": {
583
+ "description": "One short sentence explaining the chosen delay. Goes to telemetry and is shown to the user. Be specific. Required unless `stop` is true.",
584
+ "type": "string"
585
+ },
586
+ "prompt": {
587
+ "description": "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.",
588
+ "type": "string"
589
+ },
590
+ "stop": {
591
+ "description": "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.",
592
+ "type": "boolean"
593
+ },
594
+ "noop": {
595
+ "description": "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.",
596
+ "type": "boolean"
597
+ }
598
+ },
599
+ "additionalProperties": false
600
+ }
601
+ },
602
+ {
603
+ "name": "SendMessage",
604
+ "description": "# SendMessage\n\nSend a message to another agent.\n\n```json\n{\"to\": \"researcher\", \"summary\": \"assign task 1\", \"message\": \"start on task #1\"}\n```\n\n| `to` | |\n|---|---|\n| `\"researcher\"` | Teammate by name |\n| `\"main\"` | The main conversation (background subagents only) |\n| `\"worker\"` | Any agent from `ListAgents` — subagent, another local Claude session |\n| `\"worker [3fa9c1]\"` | Same, plus its `[ref]` —…[3386 chars]",
605
+ "input_schema": {
606
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
607
+ "type": "object",
608
+ "properties": {
609
+ "to": {
610
+ "description": "Recipient: a name from ListAgents (append its \" [ref]\" only when a listing or an error shows one), a teammate name, \"main\", or a background agent's agentId",
611
+ "type": "string",
612
+ "allOf": [
613
+ {
614
+ "pattern": "^[^\\n\\r]*$"
615
+ },
616
+ {
617
+ "pattern": "^[\\s\\S]{0,300}$"
618
+ }
619
+ ]
620
+ },
621
+ "summary": {
622
+ "description": "A 5-10 word label for your own transcript row (not transmitted — the recipient previews the first line of `message`). Truncated to 200 characters rather than rejected.",
623
+ "type": "string",
624
+ "maxLength": 200
625
+ },
626
+ "message": {
627
+ "default": "",
628
+ "description": "Plain text message content. The recipient's human sees only the FIRST LINE as a one-line preview until they expand it, so make the first line a clear, self-contained sentence saying what this is about — not a greeting, preamble, or bare @-mention.",
629
+ "type": "string"
630
+ },
631
+ "notify_when_idle": {
632
+ "description": "Ask a session ON THIS MACHINE to send you ONE notice when it next goes idle (finishes its turn with nothing queued) or exits — opt-in, one-shot, no polling. With a message: deliver it now AND subscribe. Without a message (omit it): a pure subscription that costs the other session nothing.",
633
+ "type": "boolean"
634
+ }
635
+ },
636
+ "required": [
637
+ "to",
638
+ "message"
639
+ ],
640
+ "additionalProperties": false
641
+ }
642
+ },
643
+ {
644
+ "name": "Skill",
645
+ "description": "Invoke a skill.\n\nA skill is a packaged set of instructions the user or project has set up for a particular kind of task (deploy steps, a review checklist, a repo-specific workflow). Available skills appear in a system-reminder listing with one-line descriptions. When the task at hand is one a listed skill covers, call this tool first — the skill's instructions load into the turn for you to follow …[1417 chars]",
646
+ "input_schema": {
647
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
648
+ "type": "object",
649
+ "properties": {
650
+ "skill": {
651
+ "description": "The name of a skill from the available-skills list. Do not guess names.",
652
+ "type": "string"
653
+ },
654
+ "args": {
655
+ "description": "Optional arguments for the skill",
656
+ "type": "string"
657
+ }
658
+ },
659
+ "required": [
660
+ "skill"
661
+ ],
662
+ "additionalProperties": false
663
+ }
664
+ },
665
+ {
666
+ "name": "TaskOutput",
667
+ "description": "DEPRECATED: Background tasks return their output file path in the tool result, and you receive a <task-notification> with the same path when the task completes.\n- For bash tasks: prefer using the Read tool on that output file path — it contains stdout/stderr.\n- For local_agent tasks: use the Agent tool result directly. Do NOT Read the .output file — it is a symlink to the full subagent conversatio…[1049 chars]",
668
+ "input_schema": {
669
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
670
+ "type": "object",
671
+ "properties": {
672
+ "task_id": {
673
+ "description": "The task ID to get output from",
674
+ "type": "string"
675
+ },
676
+ "block": {
677
+ "description": "Whether to wait for completion",
678
+ "default": true,
679
+ "type": "boolean"
680
+ },
681
+ "timeout": {
682
+ "description": "Max wait time in ms",
683
+ "default": 30000,
684
+ "type": "number",
685
+ "minimum": 0,
686
+ "maximum": 600000
687
+ }
688
+ },
689
+ "required": [
690
+ "task_id",
691
+ "block",
692
+ "timeout"
693
+ ],
694
+ "additionalProperties": false
695
+ }
696
+ },
697
+ {
698
+ "name": "TaskStop",
699
+ "description": "\n- Stops a running background task by its ID\n- Takes a task_id parameter identifying the task to stop\n- To stop an agent-team teammate, pass its agent ID (\"name@team\") or bare teammate name as task_id\n- To stop a background agent spawned with a name, pass that name as task_id\n- Returns a success or failure status\n- Use this tool when you need to terminate a long-running task\n",
700
+ "input_schema": {
701
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
702
+ "type": "object",
703
+ "properties": {
704
+ "task_id": {
705
+ "description": "The ID of the background task to stop. Agent-team teammates and named background agents are also accepted by agent ID or name.",
706
+ "type": "string"
707
+ },
708
+ "shell_id": {
709
+ "description": "Deprecated: use task_id instead",
710
+ "type": "string"
711
+ }
712
+ },
713
+ "additionalProperties": false
714
+ }
715
+ },
716
+ {
717
+ "name": "WebFetch",
718
+ "description": "Fetches a URL, converts the page to markdown, and answers `prompt` against it using a small fast model.\n\n- Fails on authenticated/private URLs — use an authenticated MCP tool or `gh` for those instead.\n- HTTP is upgraded to HTTPS. Cross-host redirects are returned to you rather than followed; call again with the redirect URL.\n- Responses are cached for 15 minutes per URL.",
719
+ "input_schema": {
720
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
721
+ "type": "object",
722
+ "properties": {
723
+ "url": {
724
+ "description": "The URL to fetch content from",
725
+ "type": "string",
726
+ "format": "uri"
727
+ },
728
+ "prompt": {
729
+ "description": "The prompt to run on the fetched content",
730
+ "type": "string"
731
+ }
732
+ },
733
+ "required": [
734
+ "url",
735
+ "prompt"
736
+ ],
737
+ "additionalProperties": false
738
+ }
739
+ },
740
+ {
741
+ "name": "WebSearch",
742
+ "description": "Search the web. Returns result blocks with titles and URLs. US-only.\n\n- The current month is September 2026 — use this when searching for recent information.\n- `allowed_domains` / `blocked_domains` filter results.\n- After answering from results, end with a \"Sources:\" list of the URLs you used as markdown links.",
743
+ "input_schema": {
744
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
745
+ "type": "object",
746
+ "properties": {
747
+ "query": {
748
+ "description": "The search query to use",
749
+ "type": "string",
750
+ "minLength": 2
751
+ },
752
+ "allowed_domains": {
753
+ "description": "Only include search results from these domains",
754
+ "type": "array",
755
+ "items": {
756
+ "type": "string"
757
+ }
758
+ },
759
+ "blocked_domains": {
760
+ "description": "Never include search results from these domains",
761
+ "type": "array",
762
+ "items": {
763
+ "type": "string"
764
+ }
765
+ }
766
+ },
767
+ "required": [
768
+ "query"
769
+ ],
770
+ "additionalProperties": false
771
+ }
772
+ },
773
+ {
774
+ "name": "Workflow",
775
+ "description": "Execute a workflow script that orchestrates multiple subagents deterministically. Workflows run in the background — this tool returns immediately with a task ID, and a <task-notification> arrives when the workflow completes. Use /workflows to watch live progress.\n\nONLY call this tool when the user has explicitly opted into multi-agent orchestration. Workflows can spawn dozens of agents and consume…[3480 chars]",
776
+ "input_schema": {
777
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
778
+ "type": "object",
779
+ "properties": {
780
+ "script": {
781
+ "description": "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().",
782
+ "type": "string",
783
+ "maxLength": 524288
784
+ },
785
+ "name": {
786
+ "description": "Name of a predefined workflow (built-in or from .claude/workflows/). Resolves to a self-contained script.",
787
+ "type": "string"
788
+ },
789
+ "description": {
790
+ "description": "Ignored — set the workflow description in the script's `meta` block.",
791
+ "type": "string"
792
+ },
793
+ "title": {
794
+ "description": "Ignored — set the workflow title in the script's `meta` block.",
795
+ "type": "string"
796
+ },
797
+ "args": {
798
+ "description": "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)."
799
+ },
800
+ "scriptPath": {
801
+ "description": "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`.",
802
+ "type": "string"
803
+ },
804
+ "resumeFromRunId": {
805
+ "description": "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.",
806
+ "type": "string",
807
+ "pattern": "^wf_[a-z0-9-]{6,}$"
808
+ }
809
+ },
810
+ "additionalProperties": false
811
+ }
812
+ },
813
+ {
814
+ "name": "Write",
815
+ "description": "Writes a file to the local filesystem, overwriting if one exists.\n\nWhen to use: creating a new file, or fully replacing one you've already Read. Overwriting an existing file you haven't Read will fail. For partial changes, use Edit instead.",
816
+ "input_schema": {
817
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
818
+ "type": "object",
819
+ "properties": {
820
+ "file_path": {
821
+ "description": "The absolute path to the file to write (must be absolute, not relative)",
822
+ "type": "string"
823
+ },
824
+ "content": {
825
+ "description": "The content to write to the file",
826
+ "type": "string"
827
+ }
828
+ },
829
+ "required": [
830
+ "file_path",
831
+ "content"
832
+ ],
833
+ "additionalProperties": false
834
+ }
835
+ }
836
+ ],
837
+ "metadata": {
838
+ "user_id": "{\"device_id\":\"3f9306f22686fa09076986f8057f22ad9f6ab47a1862a789af40a400207b0f1e\",\"account_uuid\":\"\",\"session_id\":\"a2321f8a-1ce0-44f7-831b-839a35035f9c\"}"
839
+ },
840
+ "max_tokens": 64000,
841
+ "thinking": {
842
+ "type": "adaptive",
843
+ "display": "omitted"
844
+ },
845
+ "context_management": {
846
+ "edits": [
847
+ {
848
+ "type": "clear_thinking_20251015",
849
+ "keep": "all"
850
+ }
851
+ ]
852
+ },
853
+ "output_config": {
854
+ "effort": "high"
855
+ },
856
+ "stream": true
857
+ }
858
+ }