@anthropic-ai/claude-agent-sdk 0.3.223 → 0.3.225

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/manifest.json CHANGED
@@ -1,53 +1,51 @@
1
1
  {
2
- "version": "2.1.223",
3
- "commit": "4535f69721056abf01650c73ee8a91c69ba00838",
4
- "buildDate": "2026-08-05T21:55:19Z",
2
+ "version": "2.1.225",
3
+ "commit": "d4b76e8c52c2391af51b60cc71a513246c40a129",
4
+ "buildDate": "2026-08-07T20:01:17Z",
5
5
  "platforms": {
6
6
  "darwin-arm64": {
7
7
  "binary": "claude",
8
- "checksum": "fcbe0b8d47570c501302dd1ad31cc26ac2810f022c45fa253936a6961dee32bf",
9
- "size": 272553824
8
+ "checksum": "08d6e85dd2b80883bb8da93cbeae3dc79b4704d6b84a05d614bf1ff4a5155b69",
9
+ "size": 279661952
10
10
  },
11
11
  "darwin-x64": {
12
12
  "binary": "claude",
13
- "checksum": "350e657428a6d34f7cf71f6738c5ebb6a1952ccb12fc1747f64297e065b1846f",
14
- "size": 282118560
13
+ "checksum": "0065d7155f83a3a5b0e0153ca3b70ad902b33dc06747c8b4e4d0bad58c6e0ec5",
14
+ "size": 289284768
15
15
  },
16
16
  "linux-arm64": {
17
17
  "binary": "claude",
18
- "checksum": "60e83d8db0e894d0e54413e5e7daa256d180db660f51e139a51b614fc30cf3ac",
19
- "size": 287423416
18
+ "checksum": "209d4279c0a3dbb48bee6017d99430269ec6aba59cd8735b1fda0f9664139a45",
19
+ "size": 294566840
20
20
  },
21
21
  "linux-x64": {
22
22
  "binary": "claude",
23
- "checksum": "98226474f802e3094d6a86c5ade8883c16206d0fcb5c400b7401c800063e99d7",
24
- "size": 290728968
23
+ "checksum": "0a3be8d18cb0f5357d38ce2d588601753a60b44cc9c622579ed8b8405dee231e",
24
+ "size": 297831432
25
25
  },
26
26
  "linux-arm64-musl": {
27
27
  "binary": "claude",
28
- "checksum": "f41692eab23ebcd836d342fbc494d8783b1f19efb13d04fbf8461d2806ccb586",
29
- "size": 280737128
28
+ "checksum": "9189e2776d4120288b85a6682d2b26910daa4e937baa48bd75afb3fe3115291e",
29
+ "size": 287880552
30
30
  },
31
31
  "linux-x64-musl": {
32
32
  "binary": "claude",
33
- "checksum": "8a4e561e8af19746d2defcf1a5661f5c0384c9c26dadd87d45e11b67802ad147",
34
- "size": 285336144
33
+ "checksum": "ae2258be1a2d4eeef291514195af5b50a55801cc0561347c3873c4df5c9646f8",
34
+ "size": 292438608
35
35
  },
36
36
  "win32-x64": {
37
37
  "binary": "claude.exe",
38
- "checksum": "a708ba811c4cc46907df358e22f2aa6da3dbc28192747e4d3c4a0869752fe722",
39
- "size": 280233632
38
+ "checksum": "234a59d6ea4262bb4af65d28acf19d795906295d11249750161875fbede3576d",
39
+ "size": 287053472
40
40
  },
41
41
  "win32-arm64": {
42
42
  "binary": "claude.exe",
43
- "checksum": "8efb44f04fda50fac3c7602276903e44ff82d48f1a29a41f1a5d98891a01864b",
44
- "size": 274906784
43
+ "checksum": "1152d683ed9ae20d7140ddc2db04d48e5f16ed214e2b07a8bc95c363c7e63bff",
44
+ "size": 281726112
45
45
  }
46
46
  },
47
47
  "sdkCompat": {
48
48
  "testedWrapperVersions": [
49
- "0.3.182",
50
- "0.3.183",
51
49
  "0.3.185",
52
50
  "0.3.186",
53
51
  "0.3.187",
@@ -72,10 +70,12 @@
72
70
  "0.3.212",
73
71
  "0.3.214",
74
72
  "0.3.215",
73
+ "0.3.216",
75
74
  "0.3.217",
76
75
  "0.3.218",
77
76
  "0.3.220",
78
- "0.3.221"
77
+ "0.3.221",
78
+ "0.3.222"
79
79
  ],
80
80
  "harnessSchema": 1
81
81
  }
package/manifest.zst.json CHANGED
@@ -1,61 +1,59 @@
1
1
  {
2
- "version": "2.1.223",
3
- "commit": "4535f69721056abf01650c73ee8a91c69ba00838",
4
- "buildDate": "2026-08-05T21:57:22Z",
2
+ "version": "2.1.225",
3
+ "commit": "d4b76e8c52c2391af51b60cc71a513246c40a129",
4
+ "buildDate": "2026-08-07T20:03:23Z",
5
5
  "platforms": {
6
6
  "darwin-arm64": {
7
7
  "binary": "claude.zst",
8
- "checksum": "66736b64309852d44c184d5e3b431dd291581a6be9850715a8d3c3ce2aba4a61",
9
- "size": 54612115,
8
+ "checksum": "7cef5c083019c8ed8e58505c8987388fca2b97cbd3b156b6be77d3a3b8ae10eb",
9
+ "size": 55963833,
10
10
  "bundle": {
11
- "checksum": "1aa06b34b3da404d607488aa9a4b946a4f3b0383d549615928a5355f83af89a5",
12
- "size": 54613585
11
+ "checksum": "11f2aa153892c0c72b42de714f8b83b5fb65f969649f3c9f594e89d6845245c1",
12
+ "size": 55954834
13
13
  }
14
14
  },
15
15
  "darwin-x64": {
16
16
  "binary": "claude.zst",
17
- "checksum": "17278d93f4cd9bf7b6243f2d69ae60f7e14bd41672c461857fcb959cce787866",
18
- "size": 59287050,
17
+ "checksum": "3d2774dc46981cf10056bd7dd5adfce9a001d7ad6e46088f90c0e4846071f39e",
18
+ "size": 60638677,
19
19
  "bundle": {
20
- "checksum": "1e115e67b3b9230b0f5877e038b40ed0df9cf6a2cd390e4a3da207d028c9c998",
21
- "size": 59285846
20
+ "checksum": "3333a5d1127541eecc8ec0273ee2dd238b35443faa90ba1969276083e6243482",
21
+ "size": 60635363
22
22
  }
23
23
  },
24
24
  "linux-arm64": {
25
25
  "binary": "claude.zst",
26
- "checksum": "50cefaeb32af65d8da9036f152110357101c24e8705ac0fb311daf37b6b0a574",
27
- "size": 63439231
26
+ "checksum": "15907252edb6577bda10482e2aa1677928aa243e823ccb6577c5158bbae7f272",
27
+ "size": 64830045
28
28
  },
29
29
  "linux-x64": {
30
30
  "binary": "claude.zst",
31
- "checksum": "5f3ccf27ecbf3eca26611380ec5c4bd922fb20fd12a1749744922ff595661aad",
32
- "size": 64854874
31
+ "checksum": "56f6febbbda34e715dcecdc5ad9a2ef8b65f678e735675881f84ecb0ca79a610",
32
+ "size": 66133582
33
33
  },
34
34
  "linux-arm64-musl": {
35
35
  "binary": "claude.zst",
36
- "checksum": "de4dcb573dfc16096bc19cdae9eb64e4f66306d018ac69feb3aa4b1bdf9eab2a",
37
- "size": 62226768
36
+ "checksum": "cc449538fb17e65223c531fdd4b319078c8ed3067356a5df48b64672697eb0fc",
37
+ "size": 63542121
38
38
  },
39
39
  "linux-x64-musl": {
40
40
  "binary": "claude.zst",
41
- "checksum": "acc2132f74191d17baa52ebbedae63bab7dd9f0b841444a24f3437f771b4edee",
42
- "size": 63735968
41
+ "checksum": "74a5cc57c143ef730e284c5b4351bdb26da2f3436be54835a4e3acea29cb3377",
42
+ "size": 64976182
43
43
  },
44
44
  "win32-x64": {
45
45
  "binary": "claude.exe.zst",
46
- "checksum": "a3b7fa65d3b4cc5624314c0a3af20aa1a4876bf2bdc0e3d68f2b75516ad4887a",
47
- "size": 65087938
46
+ "checksum": "0e62dd09aeccceefade7dee10c2d390718e38da4f61258fe8313d9e687afa67e",
47
+ "size": 66322446
48
48
  },
49
49
  "win32-arm64": {
50
50
  "binary": "claude.exe.zst",
51
- "checksum": "28c57b3dbb7d6f01b152f0947a5cbe382f77cdac026ef3a22cb8430fc06ac1d4",
52
- "size": 63251656
51
+ "checksum": "0dbe13b41228e85c14d9dc6f47b42eeaaaa027d77ce669f4ae9ac01a724a5812",
52
+ "size": 64477363
53
53
  }
54
54
  },
55
55
  "sdkCompat": {
56
56
  "testedWrapperVersions": [
57
- "0.3.182",
58
- "0.3.183",
59
57
  "0.3.185",
60
58
  "0.3.186",
61
59
  "0.3.187",
@@ -80,10 +78,12 @@
80
78
  "0.3.212",
81
79
  "0.3.214",
82
80
  "0.3.215",
81
+ "0.3.216",
83
82
  "0.3.217",
84
83
  "0.3.218",
85
84
  "0.3.220",
86
- "0.3.221"
85
+ "0.3.221",
86
+ "0.3.222"
87
87
  ],
88
88
  "harnessSchema": 1
89
89
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anthropic-ai/claude-agent-sdk",
3
- "version": "0.3.223",
3
+ "version": "0.3.225",
4
4
  "main": "sdk.mjs",
5
5
  "types": "sdk.d.ts",
6
6
  "exports": {
@@ -57,14 +57,14 @@
57
57
  "zod": "^4.0.0"
58
58
  },
59
59
  "optionalDependencies": {
60
- "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.223",
61
- "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.223",
62
- "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.223",
63
- "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.223",
64
- "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.223",
65
- "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.223",
66
- "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.223",
67
- "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.223"
60
+ "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.225",
61
+ "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.225",
62
+ "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.225",
63
+ "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.225",
64
+ "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.225",
65
+ "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.225",
66
+ "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.225",
67
+ "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.225"
68
68
  },
69
69
  "files": [
70
70
  "sdk.mjs",
@@ -80,5 +80,5 @@
80
80
  "manifest.json",
81
81
  "manifest.zst.json"
82
82
  ],
83
- "claudeCodeVersion": "2.1.223"
83
+ "claudeCodeVersion": "2.1.225"
84
84
  }
package/sdk-tools.d.ts CHANGED
@@ -2661,7 +2661,7 @@ export interface ScheduleWakeupInput {
2661
2661
  stop?: boolean;
2662
2662
  }
2663
2663
  export interface RemoteTriggerInput {
2664
- action: "list" | "get" | "create" | "update" | "run";
2664
+ action: "list" | "get" | "create" | "update" | "run" | "create_webhook_trigger";
2665
2665
  /**
2666
2666
  * Required for get, update, and run
2667
2667
  */
package/sdk.d.ts CHANGED
@@ -10,7 +10,7 @@ import type { Readable } from 'stream';
10
10
  import type { ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
11
11
  import type { UUID } from 'crypto';
12
12
  import type { Writable } from 'stream';
13
- import { z } from 'zod/v4';
13
+ import * as z from 'zod/v4';
14
14
  import type { ZodRawShape } from 'zod';
15
15
  import type { ZodRawShape as ZodRawShape_2 } from 'zod/v4';
16
16
 
@@ -1300,20 +1300,44 @@ export declare type NotificationHookSpecificOutput = {
1300
1300
  /**
1301
1301
  * Callback for handling MCP elicitation requests.
1302
1302
  * Called when an MCP server requests user input and no hook handles it.
1303
+ *
1304
+ * Return `null` ONLY after the consumer has already sent the
1305
+ * control_response out-of-band (e.g. a signed HTTP POST echoing
1306
+ * `requestId`); the SDK will skip its own transport write. Same contract as
1307
+ * {@link CanUseTool}. Fail-closed: an accidental null means no response is
1308
+ * sent and the elicitation stays pending until the server times it out.
1303
1309
  */
1304
1310
  export declare type OnElicitation = (request: ElicitationRequest, options: {
1305
1311
  signal: AbortSignal;
1306
- }) => Promise<ElicitationResult>;
1312
+ /**
1313
+ * The control_request envelope's `request_id`. A control_response sent
1314
+ * out-of-band (e.g. a signed HTTP POST instead of the SDK's WS write)
1315
+ * must echo this value for the worker to match it.
1316
+ */
1317
+ requestId: string;
1318
+ }) => Promise<ElicitationResult | null>;
1307
1319
 
1308
1320
  /**
1309
1321
  * Callback for handling `request_user_dialog` control requests.
1310
1322
  * Called when the CLI asks the host to render a blocking dialog.
1311
- * If not provided, dialogs are answered as cancelled and the CLI applies
1312
- * each dialog's default behavior.
1323
+ * If not provided, the dialog is left unanswered so a renderer-bearing
1324
+ * client (or the worker's park deadline) can settle it.
1325
+ *
1326
+ * Return `null` ONLY after the consumer has already sent the
1327
+ * control_response out-of-band (e.g. a signed HTTP POST echoing
1328
+ * `requestId`); the SDK will skip its own transport write. Same contract as
1329
+ * {@link CanUseTool}. Fail-closed: an accidental null means no response is
1330
+ * sent and the dialog stays parked until the worker's deadline.
1313
1331
  */
1314
1332
  export declare type OnUserDialog = (request: UserDialogRequest, options: {
1315
1333
  signal: AbortSignal;
1316
- }) => Promise<UserDialogResult>;
1334
+ /**
1335
+ * The control_request envelope's `request_id`. A control_response sent
1336
+ * out-of-band (e.g. a signed HTTP POST instead of the SDK's WS write)
1337
+ * must echo this value for the worker to match it.
1338
+ */
1339
+ requestId: string;
1340
+ }) => Promise<UserDialogResult | null>;
1317
1341
 
1318
1342
  /**
1319
1343
  * Options for the query function.
@@ -2770,6 +2794,10 @@ declare const SandboxCredentialsConfigSchema: () => z.ZodOptional<z.ZodObject<{
2770
2794
  error: "error";
2771
2795
  warn: "warn";
2772
2796
  }>>;
2797
+ decode: z.ZodOptional<z.ZodEnum<{
2798
+ jwt: "jwt";
2799
+ }>>;
2800
+ maskClaims: z.ZodOptional<z.ZodArray<z.ZodString>>;
2773
2801
  maskDuplicates: z.ZodOptional<z.ZodBoolean>;
2774
2802
  injectHosts: z.ZodOptional<z.ZodArray<z.ZodString>>;
2775
2803
  }, z.core.$strip>>>>;
@@ -2779,9 +2807,38 @@ declare const SandboxCredentialsConfigSchema: () => z.ZodOptional<z.ZodObject<{
2779
2807
  deny: "deny";
2780
2808
  mask: "mask";
2781
2809
  }>;
2810
+ extract: z.ZodOptional<z.ZodString>;
2811
+ onExtractNoMatch: z.ZodOptional<z.ZodEnum<{
2812
+ deny: "deny";
2813
+ error: "error";
2814
+ warn: "warn";
2815
+ }>>;
2816
+ decode: z.ZodOptional<z.ZodEnum<{
2817
+ jwt: "jwt";
2818
+ }>>;
2819
+ maskClaims: z.ZodOptional<z.ZodArray<z.ZodString>>;
2782
2820
  injectHosts: z.ZodOptional<z.ZodArray<z.ZodString>>;
2783
2821
  }, z.core.$strip>>>>;
2784
2822
  allowPlaintextInject: z.ZodOptional<z.ZodBoolean>;
2823
+ awsPairs: z.ZodOptional<z.ZodArray<z.ZodObject<{
2824
+ accessKeyIdVar: z.ZodString;
2825
+ secretAccessKeyVar: z.ZodString;
2826
+ sessionTokenVar: z.ZodOptional<z.ZodString>;
2827
+ }, z.core.$strip>>>;
2828
+ sigv4: z.ZodOptional<z.ZodObject<{
2829
+ streaming: z.ZodOptional<z.ZodEnum<{
2830
+ deny: "deny";
2831
+ passthrough: "passthrough";
2832
+ }>>;
2833
+ presigned: z.ZodOptional<z.ZodEnum<{
2834
+ deny: "deny";
2835
+ passthrough: "passthrough";
2836
+ }>>;
2837
+ sigv4a: z.ZodOptional<z.ZodEnum<{
2838
+ deny: "deny";
2839
+ passthrough: "passthrough";
2840
+ }>>;
2841
+ }, z.core.$strip>>;
2785
2842
  }, z.core.$strip>>;
2786
2843
 
2787
2844
  export declare type SandboxFilesystemConfig = NonNullable<z.infer<ReturnType<typeof SandboxFilesystemConfigSchema>>>;
@@ -2869,6 +2926,10 @@ declare const SandboxSettingsSchema: () => z.ZodObject<{
2869
2926
  error: "error";
2870
2927
  warn: "warn";
2871
2928
  }>>;
2929
+ decode: z.ZodOptional<z.ZodEnum<{
2930
+ jwt: "jwt";
2931
+ }>>;
2932
+ maskClaims: z.ZodOptional<z.ZodArray<z.ZodString>>;
2872
2933
  maskDuplicates: z.ZodOptional<z.ZodBoolean>;
2873
2934
  injectHosts: z.ZodOptional<z.ZodArray<z.ZodString>>;
2874
2935
  }, z.core.$strip>>>>;
@@ -2878,9 +2939,38 @@ declare const SandboxSettingsSchema: () => z.ZodObject<{
2878
2939
  deny: "deny";
2879
2940
  mask: "mask";
2880
2941
  }>;
2942
+ extract: z.ZodOptional<z.ZodString>;
2943
+ onExtractNoMatch: z.ZodOptional<z.ZodEnum<{
2944
+ deny: "deny";
2945
+ error: "error";
2946
+ warn: "warn";
2947
+ }>>;
2948
+ decode: z.ZodOptional<z.ZodEnum<{
2949
+ jwt: "jwt";
2950
+ }>>;
2951
+ maskClaims: z.ZodOptional<z.ZodArray<z.ZodString>>;
2881
2952
  injectHosts: z.ZodOptional<z.ZodArray<z.ZodString>>;
2882
2953
  }, z.core.$strip>>>>;
2883
2954
  allowPlaintextInject: z.ZodOptional<z.ZodBoolean>;
2955
+ awsPairs: z.ZodOptional<z.ZodArray<z.ZodObject<{
2956
+ accessKeyIdVar: z.ZodString;
2957
+ secretAccessKeyVar: z.ZodString;
2958
+ sessionTokenVar: z.ZodOptional<z.ZodString>;
2959
+ }, z.core.$strip>>>;
2960
+ sigv4: z.ZodOptional<z.ZodObject<{
2961
+ streaming: z.ZodOptional<z.ZodEnum<{
2962
+ deny: "deny";
2963
+ passthrough: "passthrough";
2964
+ }>>;
2965
+ presigned: z.ZodOptional<z.ZodEnum<{
2966
+ deny: "deny";
2967
+ passthrough: "passthrough";
2968
+ }>>;
2969
+ sigv4a: z.ZodOptional<z.ZodEnum<{
2970
+ deny: "deny";
2971
+ passthrough: "passthrough";
2972
+ }>>;
2973
+ }, z.core.$strip>>;
2884
2974
  }, z.core.$strip>>;
2885
2975
  ignoreViolations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
2886
2976
  enableWeakerNestedSandbox: z.ZodOptional<z.ZodBoolean>;
@@ -4128,9 +4218,9 @@ export declare type SDKMessageOrigin = {
4128
4218
  } | {
4129
4219
  kind: 'task-notification';
4130
4220
  /**
4131
- * Present when the delivery is the fired stored prompt of a scheduled task/routine (stamped from server-asserted provenance; the schedule attests storage, not authorship). The harness frames it as the session's assigned task instead of the generic background-notification frame. Absent on webhook, PR-steward, plugin, and background-event deliveries.
4221
+ * Present when the delivery is the fired stored prompt of a scheduled task/routine ('scheduled-trigger', stamped from server-asserted provenance; the schedule attests storage, not authorship), or a coordinator co-member SendMessage delivery ('peer-send-message': model-authored text from another of the same user's sessions, verified by the server-stamped receiver co-membership — task-notification for prompt authority, but distinguishable so the receive-side crossSessionInbound setting can apply to it). The harness frames a scheduled-trigger delivery as the session's assigned task instead of the generic background-notification frame. Absent on webhook, PR-steward, plugin, and background-event deliveries.
4132
4222
  */
4133
- subkind?: 'scheduled-trigger';
4223
+ subkind?: 'scheduled-trigger' | 'peer-send-message';
4134
4224
  } | {
4135
4225
  kind: 'coordinator';
4136
4226
  } | {
@@ -5775,8 +5865,19 @@ export declare interface Settings {
5775
5865
  * Specific commit SHA to use
5776
5866
  */
5777
5867
  sha?: string;
5868
+ } | {
5869
+ source: 'archive';
5870
+ /**
5871
+ * HTTPS URL of a zip archive containing the plugin. The plugin root (the directory holding .claude-plugin/) may be at the top of the archive or nested one directory deep — a single wrapping directory is stripped.
5872
+ */
5873
+ url: string;
5874
+ /**
5875
+ * SHA-256 digest of the archive. When set, every download is verified against it and the install is refused on mismatch. It also serves as the version identity when neither plugin.json nor the marketplace entry declares a `version`. Recommended. Note the update signal is the version string (plugin.json version, else the entry version, else this digest) — changing only the digest while a version is declared does not trigger an update.
5876
+ */
5877
+ sha256?: string;
5778
5878
  } | {
5779
5879
  source: 'unsupported';
5880
+ error?: string;
5780
5881
  };
5781
5882
  description?: string;
5782
5883
  version?: string;
@@ -5975,8 +6076,19 @@ export declare interface Settings {
5975
6076
  * Specific commit SHA to use
5976
6077
  */
5977
6078
  sha?: string;
6079
+ } | {
6080
+ source: 'archive';
6081
+ /**
6082
+ * HTTPS URL of a zip archive containing the plugin. The plugin root (the directory holding .claude-plugin/) may be at the top of the archive or nested one directory deep — a single wrapping directory is stripped.
6083
+ */
6084
+ url: string;
6085
+ /**
6086
+ * SHA-256 digest of the archive. When set, every download is verified against it and the install is refused on mismatch. It also serves as the version identity when neither plugin.json nor the marketplace entry declares a `version`. Recommended. Note the update signal is the version string (plugin.json version, else the entry version, else this digest) — changing only the digest while a version is declared does not trigger an update.
6087
+ */
6088
+ sha256?: string;
5978
6089
  } | {
5979
6090
  source: 'unsupported';
6091
+ error?: string;
5980
6092
  };
5981
6093
  description?: string;
5982
6094
  version?: string;
@@ -6165,8 +6277,19 @@ export declare interface Settings {
6165
6277
  * Specific commit SHA to use
6166
6278
  */
6167
6279
  sha?: string;
6280
+ } | {
6281
+ source: 'archive';
6282
+ /**
6283
+ * HTTPS URL of a zip archive containing the plugin. The plugin root (the directory holding .claude-plugin/) may be at the top of the archive or nested one directory deep — a single wrapping directory is stripped.
6284
+ */
6285
+ url: string;
6286
+ /**
6287
+ * SHA-256 digest of the archive. When set, every download is verified against it and the install is refused on mismatch. It also serves as the version identity when neither plugin.json nor the marketplace entry declares a `version`. Recommended. Note the update signal is the version string (plugin.json version, else the entry version, else this digest) — changing only the digest while a version is declared does not trigger an update.
6288
+ */
6289
+ sha256?: string;
6168
6290
  } | {
6169
6291
  source: 'unsupported';
6292
+ error?: string;
6170
6293
  };
6171
6294
  description?: string;
6172
6295
  version?: string;
@@ -6324,11 +6447,19 @@ export declare interface Settings {
6324
6447
  */
6325
6448
  extract?: string;
6326
6449
  /**
6327
- * What to do when `extract` matches nothing in the file. `warn` (default) emits a stderr warning and leaves the file readable as-is inside the sandbox (fail-open, for credentials that may be legitimately absent); `deny` degrades the entry to mode `deny` so the file is unreadable (fail-closed) — under `sandbox.filesystem.disabled` it is treated as `error`, since read-denies are dropped in that mode; `error` aborts at sandbox setup so nothing runs until the config is fixed. Only meaningful when mode is `mask` and `extract` is set; accepted but ignored otherwise.
6450
+ * What to do when `extract` matches nothing in the file — or, with `decode`, when no candidate survives verification. `warn` (default) emits a stderr warning and leaves the file readable as-is inside the sandbox (fail-open, for credentials that may be legitimately absent); `deny` degrades the entry to mode `deny` so the file is unreadable (fail-closed) — under `sandbox.filesystem.disabled` it is treated as `error`, since read-denies are dropped in that mode; `error` aborts at sandbox setup so nothing runs until the config is fixed. Only meaningful when mode is `mask` and `extract` or `decode` is set; accepted but ignored otherwise.
6328
6451
  */
6329
6452
  onExtractNoMatch?: 'warn' | 'deny' | 'error';
6330
6453
  /**
6331
- * If true, verbatim occurrences of each captured credential value outside the regex-matched spans are also replaced with the corresponding sentinel for a secret repeated where the regex does not reach (e.g. pasted into a comment). Matches raw substrings, so short or common values may corrupt unrelated content; intended for long, high-entropy secrets. Defaults to false. Only meaningful when mode is `mask` and `extract` is set; accepted but ignored otherwise.
6454
+ * Optional encoded-credential format for `mask` mode. `jwt`: candidates are located with a built-in JWT regex (or the explicit `extract` pattern, if set), verified to actually be JWTs before masking, and replaced with a structurally valid fake JWT so client-side token parsing inside the sandbox keeps working. If no candidate verifies, behavior is governed by `onExtractNoMatch` (default `warn`). Accepted but ignored for `deny`.
6455
+ */
6456
+ decode?: 'jwt';
6457
+ /**
6458
+ * Names of top-level payload claims to mask inside each decoded value, instead of replacing the whole token. Each named claim present with a string value gets its own sentinel and the token is rebuilt around the modified payload; all other claims are preserved so a tool that decodes the token and reads a non-secret claim keeps working. Requires `decode`. If no named claim matches in any verified token, behavior is governed by `onExtractNoMatch` (default `warn`). Only meaningful when mode is `mask`; accepted but ignored for `deny`.
6459
+ */
6460
+ maskClaims?: string[];
6461
+ /**
6462
+ * If true, verbatim occurrences of each captured credential value outside the regex-matched spans are also replaced with the corresponding sentinel — for a secret repeated where the regex does not reach (e.g. pasted into a comment). Matches raw substrings, so short or common values may corrupt unrelated content; intended for long, high-entropy secrets. Defaults to false. Only meaningful when mode is `mask` and `extract` or `decode` is set; accepted but ignored otherwise.
6332
6463
  */
6333
6464
  maskDuplicates?: boolean;
6334
6465
  /**
@@ -6348,6 +6479,22 @@ export declare interface Settings {
6348
6479
  * Access mode for this environment variable. `deny` unsets the variable for sandboxed commands; `mask` shows sandboxed commands a sentinel value and the host proxy swaps sentinel→real on egress to `injectHosts`.
6349
6480
  */
6350
6481
  mode: 'deny' | 'mask';
6482
+ /**
6483
+ * Optional regex for structured masking when mode is `mask`. Applied globally to the value; capture group 1 of each match is a credential value, and only those captured spans are replaced with sentinels — the rest of the value is preserved so a tool that parses it (a `DATABASE_URL` connection string, a composite `KEY:SECRET` pair) still succeeds inside the sandbox. Without `extract`, the entire value is replaced with one sentinel (whole-value masking, suited to bare tokens). If the regex matches nothing, behavior is governed by `onExtractNoMatch` (default `warn`). Cannot be combined with `decode` (the decode path never consults it). Accepted but ignored for `deny`.
6484
+ */
6485
+ extract?: string;
6486
+ /**
6487
+ * What to do when `extract` matches nothing in the value. `warn` (default) emits a stderr warning and lets the variable pass through unmasked (fail-open, for credentials that may be legitimately absent); `deny` unsets the variable inside the sandbox (fail-closed); `error` aborts at sandbox setup so nothing runs until the config is fixed. Only meaningful when mode is `mask` and `extract` is set without `decode`. On a mask entry with `decode`, the runtime takes the decode path and never consults this field, so a fail-closed setting cannot be honored — `deny` and `error` are rejected there; only `warn` is accepted. In all other shapes the field is accepted but ignored.
6488
+ */
6489
+ onExtractNoMatch?: 'warn' | 'deny' | 'error';
6490
+ /**
6491
+ * Optional encoded-credential format for `mask` mode. `jwt`: the variable's whole value is verified to actually be a JWT and replaced with a structurally valid fake JWT so client-side token parsing inside the sandbox keeps working; the proxy swaps the whole fake token on egress. If the value does not verify, the variable is left unmasked with a stderr warning (fail-open). Cannot be combined with `extract` — the decode path never consults it. Accepted but ignored for `deny`.
6492
+ */
6493
+ decode?: 'jwt';
6494
+ /**
6495
+ * Names of top-level payload claims to mask inside the decoded value, instead of replacing the whole token. Each named claim present with a string value gets its own sentinel and the token is rebuilt around the modified payload; all other claims are preserved so claim-reading clients keep working. Requires `decode`. If no named claim matches, the variable is left unmasked with a stderr warning (fail-open). Only meaningful when mode is `mask`; accepted but ignored for `deny`.
6496
+ */
6497
+ maskClaims?: string[];
6351
6498
  /**
6352
6499
  * Optional narrowing of where the proxy substitutes this credential. Only meaningful when mode is `mask`; accepted but ignored for `deny`. If unset, defaults to `network.allowedDomains` — the credential is injected at every reachable host. Each entry must be reachable via `network.allowedDomains` (sandbox-runtime validates this).
6353
6500
  */
@@ -6357,6 +6504,40 @@ export declare interface Settings {
6357
6504
  * Allow sentinel→real substitution on the plain-HTTP proxy path. Defaults to false: without TLS termination the upstream identity is unverified and the credential travels in cleartext. Set only for trusted-network test fixtures. Only honored from user, managed/policy, or CLI (`--settings`) settings — project settings (.claude/settings.json and .claude/settings.local.json) are ignored.
6358
6505
  */
6359
6506
  allowPlaintextInject?: boolean;
6507
+ /**
6508
+ * Explicit groupings of masked env vars into AWS credential pairs for SigV4 re-signing, for non-standard variable names. The conventional AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN trio is paired automatically when masked. Only honored from user, managed/policy, or CLI (`--settings`) settings — project settings (.claude/settings.json and .claude/settings.local.json) are ignored. A member is only usable when its env var is forwarded as a whole-value `mask` entry (an entry carrying `extract` or `decode` does not qualify — re-signing needs the whole real value). A pair whose key id or secret member is unusable never re-signs: it is dropped, unless it names a conventional AWS variable, in which case it is forwarded as an inert suppressor so implicit auto-pairing stays overridden. A pair whose ONLY unusable member is the session token still re-signs, without an x-amz-security-token (temporary-credential requests fail upstream until the entry is fixed).
6509
+ */
6510
+ awsPairs?: {
6511
+ /**
6512
+ * Name of the masked env var holding the AWS access key id.
6513
+ */
6514
+ accessKeyIdVar: string;
6515
+ /**
6516
+ * Name of the masked env var holding the AWS secret access key.
6517
+ */
6518
+ secretAccessKeyVar: string;
6519
+ /**
6520
+ * Optional name of the masked env var holding the AWS session token (temporary credentials). When set, the proxy sends the real token as x-amz-security-token on re-signed requests and adds it to the signed header set if the client did not.
6521
+ */
6522
+ sessionTokenVar?: string;
6523
+ }[];
6524
+ /**
6525
+ * Policies for AWS SigV4 request shapes the proxy cannot re-sign (streaming, presigned, sigv4a) when they reference a masked credential pair: `deny` (default) or `passthrough`. Only honored from user, managed/policy, or CLI (`--settings`) settings — project settings (.claude/settings.json and .claude/settings.local.json) are ignored.
6526
+ */
6527
+ sigv4?: {
6528
+ /**
6529
+ * Policy for aws-chunked streaming uploads (x-amz-content-sha256: STREAMING-*): per-chunk signatures chain off the seed signature, so re-signing would require rewriting the body. `deny` (default) fails closed with a 403; `passthrough` forwards the request unre-signed (the upstream will reject its signature).
6530
+ */
6531
+ streaming?: 'deny' | 'passthrough';
6532
+ /**
6533
+ * Policy for presigned URLs (X-Amz-Algorithm/X-Amz-Signature in the query, no Authorization header): the signature lives in the URL itself. `deny` (default) or `passthrough`.
6534
+ */
6535
+ presigned?: 'deny' | 'passthrough';
6536
+ /**
6537
+ * Policy for SigV4A (AWS4-ECDSA-P256-SHA256) asymmetric signatures: there is no shared-key HMAC to recompute. `deny` (default) or `passthrough`.
6538
+ */
6539
+ sigv4a?: 'deny' | 'passthrough';
6540
+ };
6360
6541
  };
6361
6542
  ignoreViolations?: {
6362
6543
  [k: string]: string[];
@@ -6467,6 +6648,10 @@ export declare interface Settings {
6467
6648
  * Idle time before Claude's questions auto-continue with any answers selected so far. Defaults to never — auto-continue only runs when explicitly set to 60s/5m/10m.
6468
6649
  */
6469
6650
  askUserQuestionTimeout?: '60s' | '5m' | '10m' | 'never';
6651
+ /**
6652
+ * Max time a permission/user dialog forwarded to a remote client stays parked awaiting an answer, and how long a HELD cross-session message awaits approval, before either resolves to its safe no-action default (cancelled / dropped-with-denial). Defaults to 5m to match the long-standing remote-dialog deadline; "never" disables the deadline. Local-only permission prompts (no remote client) are unaffected. The CLAUDE_CODE_USER_DIALOG_TIMEOUT_MS env var, when set, overrides this. Read from trusted sources only (never a checked-in repo settings file).
6653
+ */
6654
+ dialogExpiry?: '60s' | '5m' | '10m' | 'never';
6470
6655
  /**
6471
6656
  * Name of an agent (built-in or custom) to use for the main thread. Applies the agent's system prompt, tool restrictions, and model.
6472
6657
  */
@@ -6708,6 +6893,10 @@ export declare interface Settings {
6708
6893
  * When no background service is running: 'transient' spawns one for this login session; 'ask' offers to install it persistently
6709
6894
  */
6710
6895
  daemonColdStart?: 'transient' | 'ask';
6896
+ /**
6897
+ * Inbound cross-session peer messages (SendMessage from your other sessions): 'accept' delivers them, 'hold' parks them for your review without letting Claude act, 'refuse' opts this session out. An explicit value always wins. Unset (mode parity): a message auto-delivers only when the sending session's permission-mode class matches yours (bypass↔bypass or prompting↔prompting); a mismatched sender's message is held for your approval; a sender that asserts no class is held only while this session bypasses permission prompts.
6898
+ */
6899
+ crossSessionInbound?: 'accept' | 'hold' | 'refuse';
6711
6900
  /**
6712
6901
  * Mirror local sessions to claude.ai as view-only (no remote control)
6713
6902
  */