@anthropic-ai/claude-agent-sdk 0.3.215 → 0.3.217

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,47 +1,47 @@
1
1
  {
2
- "version": "2.1.215",
3
- "commit": "316ce99628e89900bf0b1328fed3b8fec0c0c92d",
4
- "buildDate": "2026-07-19T00:11:19Z",
2
+ "version": "2.1.217",
3
+ "commit": "9963b018d22c3e6659c99e135e687870301b5c67",
4
+ "buildDate": "2026-07-21T18:45:36Z",
5
5
  "platforms": {
6
6
  "darwin-arm64": {
7
7
  "binary": "claude",
8
- "checksum": "90608b5c5ab504e96e77365cea6203d046e291d59b2bb42cf28dcb2ccdf9dd58",
9
- "size": 247124336
8
+ "checksum": "5840c777fd47115e9ca276e165563c6e121e7c7e2b4d86598e0025f8cc37de56",
9
+ "size": 250456784
10
10
  },
11
11
  "darwin-x64": {
12
12
  "binary": "claude",
13
- "checksum": "1ef5f5e56ede9f7765a9bef654ece6045dba58f48b7f5b699765375953d52b6b",
14
- "size": 256540048
13
+ "checksum": "8387a6fd44edfd40d7e74c5fdc3270a15f5e6b1b58c7c6fee560e70d3d1943da",
14
+ "size": 259908496
15
15
  },
16
16
  "linux-arm64": {
17
17
  "binary": "claude",
18
- "checksum": "2b43a3d5b0787217e5d7381fad42c7314292546fe9db9eb8b9b379de90509b30",
19
- "size": 262060960
18
+ "checksum": "40c53507ac669c1d438366c19760c22f52748a06e50e0fc0e353d2cb73425597",
19
+ "size": 265337760
20
20
  },
21
21
  "linux-x64": {
22
22
  "binary": "claude",
23
- "checksum": "c1efffaaf370aa187cb6a09dd93d4e511c646899b0078476f83791b664bde7fe",
24
- "size": 265239536
23
+ "checksum": "2630fc5dc6db61bc03f86b95daf47766e5ed5b61873f7bb7cfea764c5ac5a9ba",
24
+ "size": 268573680
25
25
  },
26
26
  "linux-arm64-musl": {
27
27
  "binary": "claude",
28
- "checksum": "95f1bb89dd94ae099c7b5e53832f99624fdf82da8e0f11d81e1632b26e61973e",
29
- "size": 255309160
28
+ "checksum": "e219a631e194e71bccbea2f81f5678c75f745aa6e7a74e8a407610c906d1299b",
29
+ "size": 258585960
30
30
  },
31
31
  "linux-x64-musl": {
32
32
  "binary": "claude",
33
- "checksum": "3a14b862d102d0b6b88650a00b8489b1dfec7f84b367f8192ee62c8bdaeb9220",
34
- "size": 259863120
33
+ "checksum": "7c44188927edbf7b918b41bc7a284292359b1ad556b7802db0148adb4b395732",
34
+ "size": 263197264
35
35
  },
36
36
  "win32-x64": {
37
37
  "binary": "claude.exe",
38
- "checksum": "f14452d1e199273795f2920c00fd7a7f818178ddf1f3efb4d005a7e3d4ec4eff",
39
- "size": 256247968
38
+ "checksum": "6e4a3a4679f381178a90cf741de9ce924a3274304b09277695ac3a679628ca17",
39
+ "size": 259460768
40
40
  },
41
41
  "win32-arm64": {
42
42
  "binary": "claude.exe",
43
- "checksum": "0e976441467cb09e35b52c83e661ce8e148c5a8766e0899a4255d95c4b8110f6",
44
- "size": 250623648
43
+ "checksum": "f0128e1a50b8d7dec5bb4dbdff0ef622f617e798df61ebb009ed3f03d2afe613",
44
+ "size": 253836448
45
45
  }
46
46
  },
47
47
  "sdkCompat": {
@@ -66,7 +66,8 @@
66
66
  "0.3.205",
67
67
  "0.3.207",
68
68
  "0.3.208",
69
- "0.3.209"
69
+ "0.3.209",
70
+ "0.3.215"
70
71
  ],
71
72
  "harnessSchema": 1
72
73
  }
package/manifest.zst.json CHANGED
@@ -1,55 +1,55 @@
1
1
  {
2
- "version": "2.1.215",
3
- "commit": "316ce99628e89900bf0b1328fed3b8fec0c0c92d",
4
- "buildDate": "2026-07-19T00:13:19Z",
2
+ "version": "2.1.217",
3
+ "commit": "9963b018d22c3e6659c99e135e687870301b5c67",
4
+ "buildDate": "2026-07-21T18:47:31Z",
5
5
  "platforms": {
6
6
  "darwin-arm64": {
7
7
  "binary": "claude.zst",
8
- "checksum": "ea977b83c55cd9997431293666c0836f88facd7eec5e833db40090a89e064e5f",
9
- "size": 51058017,
8
+ "checksum": "dc3d8d2494e22fa6252ed45797a11205f1a30e37fca74148e3f34250787686a5",
9
+ "size": 51465165,
10
10
  "bundle": {
11
- "checksum": "331d771edc83df2288c27e213a8c7e99fce4782c10778788d179b1ae57af7d98",
12
- "size": 51055405
11
+ "checksum": "aa2146f4d150d3ae31324beab0bdbecce51da975141c7c3d6b031d9187da8d1e",
12
+ "size": 51492491
13
13
  }
14
14
  },
15
15
  "darwin-x64": {
16
16
  "binary": "claude.zst",
17
- "checksum": "3a8da176472282548e7e05d4627e67b2307c48ba820d7597792c7f752bee97ed",
18
- "size": 55527475,
17
+ "checksum": "d7ed84882ce7eb1b85146f33a783c79e05aff520952f39e397ecedcf9c4ffd12",
18
+ "size": 55970349,
19
19
  "bundle": {
20
- "checksum": "78e192d3afb4cff317050874cc6c09c63710ce70d390bad1517c3d29b4fb46d5",
21
- "size": 55530080
20
+ "checksum": "8a652b06f90ceb32d847507b1b1c95c5353d5a946506ac49a122821295462889",
21
+ "size": 55972645
22
22
  }
23
23
  },
24
24
  "linux-arm64": {
25
25
  "binary": "claude.zst",
26
- "checksum": "37f4f0c778b592d1878d235008ba190bdcc7602d87cc17e2a4f65f1438ed93e8",
27
- "size": 59821134
26
+ "checksum": "9a14fe91ce6d1f3872301cf010de153ff6aa4c76998aa045953688548a69d773",
27
+ "size": 60338477
28
28
  },
29
29
  "linux-x64": {
30
30
  "binary": "claude.zst",
31
- "checksum": "7ff9594e53cd89d1af9ceb3c18d3d70be1a5c6d27475e31ee2bed65d748f18c0",
32
- "size": 61214933
31
+ "checksum": "e80654f7acc551154d8f32c54a24767396152973b9addc5fdbe93fb1306a229d",
32
+ "size": 61724295
33
33
  },
34
34
  "linux-arm64-musl": {
35
35
  "binary": "claude.zst",
36
- "checksum": "5be2a8365515a6e62155ae0f612da1571164eff5605dd3ce7341e4351d6d23a4",
37
- "size": 58629351
36
+ "checksum": "49bc1c32b2613a2f88b67e434b96e3298e246c6316b72a8211a608537615040f",
37
+ "size": 59011849
38
38
  },
39
39
  "linux-x64-musl": {
40
40
  "binary": "claude.zst",
41
- "checksum": "55c50d31f4145b6bb6d374a3f453bfee34ffa540f48ad64fe54cdf8cf3c023a7",
42
- "size": 60067478
41
+ "checksum": "2c5bd4127dc469d74e679da001bb01b171aca3f6bcc5823e8f1cd839971da3a9",
42
+ "size": 60425868
43
43
  },
44
44
  "win32-x64": {
45
45
  "binary": "claude.exe.zst",
46
- "checksum": "b26d3a56a5646912971973ee765011502d4887ca0ad2607daead8bc6a7e39714",
47
- "size": 61282091
46
+ "checksum": "1b4bf647ba1ef4eaa7532cd5044b59d056ff2cf56e612103b6805fb54738a646",
47
+ "size": 62045244
48
48
  },
49
49
  "win32-arm64": {
50
50
  "binary": "claude.exe.zst",
51
- "checksum": "56e089a68b94f6e9507164da8632840e2a7422d9ef7a85f9e7e728775d278f56",
52
- "size": 59507909
51
+ "checksum": "2c3547cedf59cf4057c9487993010a67fa5c1a551d64985da753401eb4eb8380",
52
+ "size": 60035027
53
53
  }
54
54
  },
55
55
  "sdkCompat": {
@@ -74,7 +74,8 @@
74
74
  "0.3.205",
75
75
  "0.3.207",
76
76
  "0.3.208",
77
- "0.3.209"
77
+ "0.3.209",
78
+ "0.3.215"
78
79
  ],
79
80
  "harnessSchema": 1
80
81
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anthropic-ai/claude-agent-sdk",
3
- "version": "0.3.215",
3
+ "version": "0.3.217",
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.215",
61
- "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.215",
62
- "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.215",
63
- "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.215",
64
- "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.215",
65
- "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.215",
66
- "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.215",
67
- "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.215"
60
+ "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.217",
61
+ "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.217",
62
+ "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.217",
63
+ "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.217",
64
+ "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.217",
65
+ "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.217",
66
+ "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.217",
67
+ "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.217"
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.215"
83
+ "claudeCodeVersion": "2.1.217"
84
84
  }
package/sdk-tools.d.ts CHANGED
@@ -406,6 +406,7 @@ export type ArtifactOutput =
406
406
  warnings?: string[];
407
407
  contract?: string;
408
408
  updated?: boolean;
409
+ liveSubscription?: string;
409
410
  }
410
411
  | {
411
412
  artifacts: {
@@ -512,7 +513,7 @@ export interface AgentInput {
512
513
  /**
513
514
  * Deprecated; ignored. Subagents inherit the parent session's permission mode; agent-definition frontmatter may override it.
514
515
  */
515
- mode?: "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan" | "bubble";
516
+ mode?: "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan";
516
517
  /**
517
518
  * 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).
518
519
  */
package/sdk.d.ts CHANGED
@@ -2669,6 +2669,10 @@ export declare type RewindFilesResult = {
2669
2669
  filesChanged?: string[];
2670
2670
  insertions?: number;
2671
2671
  deletions?: number;
2672
+ /**
2673
+ * Count of tracked files NOT restored or deleted because a symlink, hard link, or other non-regular file was detected at the tracked path, its parent directory no longer resolves to where it pointed when the checkpoint was taken, or its backup could not be safely read. Only populated by a real (non-dryRun) rewind — on a dryRun response the field is never set and the preview counts do not reflect link-safety refusals. Absent or 0 on a real rewind means no link-safety refusals occurred; other per-file failures (for example a missing backup file) are logged and reported in telemetry but are not counted here.
2674
+ */
2675
+ skippedLinks?: number;
2672
2676
  };
2673
2677
 
2674
2678
  export declare type SandboxCredentialsConfig = NonNullable<z.infer<ReturnType<typeof SandboxCredentialsConfigSchema>>>;
@@ -2700,6 +2704,7 @@ declare const SandboxFilesystemConfigSchema: () => z.ZodOptional<z.ZodObject<{
2700
2704
  denyRead: z.ZodOptional<z.ZodArray<z.ZodString>>;
2701
2705
  allowRead: z.ZodOptional<z.ZodArray<z.ZodString>>;
2702
2706
  allowManagedReadPathsOnly: z.ZodOptional<z.ZodBoolean>;
2707
+ disabled: z.ZodOptional<z.ZodBoolean>;
2703
2708
  }, z.core.$strip>>;
2704
2709
 
2705
2710
  export declare type SandboxIgnoreViolations = NonNullable<SandboxSettings['ignoreViolations']>;
@@ -2756,6 +2761,7 @@ declare const SandboxSettingsSchema: () => z.ZodObject<{
2756
2761
  denyRead: z.ZodOptional<z.ZodArray<z.ZodString>>;
2757
2762
  allowRead: z.ZodOptional<z.ZodArray<z.ZodString>>;
2758
2763
  allowManagedReadPathsOnly: z.ZodOptional<z.ZodBoolean>;
2764
+ disabled: z.ZodOptional<z.ZodBoolean>;
2759
2765
  }, z.core.$strip>>;
2760
2766
  credentials: z.ZodOptional<z.ZodObject<{
2761
2767
  files: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -2895,7 +2901,7 @@ export declare type SDKBackgroundTasksChangedMessage = {
2895
2901
  export declare type SdkBeta = 'context-1m-2025-08-07';
2896
2902
 
2897
2903
  /**
2898
- * Fire-and-forget push of the full slash-command list after a mid-session change (e.g. skills discovered dynamically as the agent works in a subdirectory). Clients should REPLACE their cached command list with this payload: supportedCommands() is captured once at initialize and never reflects mid-session changes, so a client re-fetch would return the stale init list.
2904
+ * Fire-and-forget push of the full slash-command list after a mid-session change (e.g. skills discovered dynamically as the agent works in a subdirectory). Clients should REPLACE their cached command list with this payload; supportedCommands() tracks the latest push, so a re-fetch returns the same fresh list.
2899
2905
  */
2900
2906
  export declare type SDKCommandsChangedMessage = {
2901
2907
  type: 'system';
@@ -3394,7 +3400,7 @@ declare type SDKControlInitializeRequest = {
3394
3400
  */
3395
3401
  title?: string;
3396
3402
  /**
3397
- * When provided, only skills whose names match an entry are loaded into the main session system prompt, using the same rules as AgentDefinition.skills: exact name, plugin-qualified name, or ":name" suffix. Omit to load every discovered skill. Applies to the main session only; subagents use AgentDefinition.skills.
3403
+ * When provided, only skills whose names match an entry are loaded into the main session system prompt, matching the exact canonical name (e.g. "my-plugin:my-skill") or a ":name" suffix of it. Display names and aliases do not match. Omit to load every discovered skill. Applies to the main session only; subagents use AgentDefinition.skills, which additionally resolves display names and aliases.
3398
3404
  */
3399
3405
  skills?: string[];
3400
3406
 
@@ -3764,7 +3770,10 @@ declare type SDKControlSetMaxThinkingTokensRequest = {
3764
3770
  */
3765
3771
  declare type SDKControlSetModelRequest = {
3766
3772
  subtype: 'set_model';
3767
- model?: string;
3773
+ /**
3774
+ * Model to switch to. Omitted, null, or 'default' resets to the session default model.
3775
+ */
3776
+ model?: string | null;
3768
3777
 
3769
3778
  };
3770
3779
 
@@ -3986,6 +3995,10 @@ export declare type SDKMessageOrigin = {
3986
3995
  * Sender display name, normalized by the harness: Unicode control, format, surrogate, and line/paragraph-separator code points stripped (categories Cc/Cf/Cs/Zl/Zp — covers bidi controls, zero-width characters, and tag characters), trimmed, at most 64 code points (+ ellipsis, never splitting a surrogate pair). Sender-asserted display text (the addressable identity is `from`) — render it as reported speech, but no client-side character sanitization is needed. Absent when the wire is not exactly one harness-formed envelope and on messages from older senders.
3987
3996
  */
3988
3997
  name?: string;
3998
+ /**
3999
+ * The sender's host-openable session id (the envelope's `from-session` attribute — e.g. a desktop `local_<uuid>` or a CCR `session_`/`ses_` id), set by the sender's host so a receiving UI can link this message back to the sending session. Sender-asserted like `from`: a navigation target only, never authority. Absent when the sender's host provides none and on messages from older senders.
4000
+ */
4001
+ fromSession?: string;
3989
4002
 
3990
4003
  /**
3991
4004
  * Task id of the in-process background subagent that sent this message, stamped by the harness from the sending loop (never from tool input). Absent for cross-session peers.
@@ -3995,6 +4008,10 @@ export declare type SDKMessageOrigin = {
3995
4008
  * Decoded message body with the peer envelope stripped — byte-exact with what the model sees. Present only when the turn is exactly one harness-formed envelope (or an in-process agent message); render this instead of re-parsing the message text.
3996
4009
  */
3997
4010
  body?: string;
4011
+ /**
4012
+ * Kernel-verified pid of the process that connected to this session's cross-session messaging socket, read from the connection (SO_PEERCRED / LOCAL_PEERPID) — never from the payload. This identifies the CONNECTING process, which for relayed traffic (e.g. a daemon forwarding on another session's behalf) is the relay, not the message's author. Key sender identity on this, never on `from`: `from` is sender-authored and kept only for reply routing, so it is forgeable by any same-user process. Absent when unverifiable (Windows, non-UDS ingress) — never a wrong value. Pids are recyclable: provenance, not an authentication token.
4013
+ */
4014
+ verifiedPeerPid?: number;
3998
4015
  } | {
3999
4016
  kind: 'task-notification';
4000
4017
  /**
@@ -4205,6 +4222,7 @@ export declare type SDKRateLimitInfo = {
4205
4222
  surpassedThreshold?: number;
4206
4223
 
4207
4224
 
4225
+
4208
4226
  errorCode?: 'credits_required';
4209
4227
  canUserPurchaseCredits?: boolean;
4210
4228
  hasChargeableSavedPaymentMethod?: boolean;
@@ -4240,6 +4258,8 @@ export declare type SDKResultSuccess = {
4240
4258
  ttft_ms?: number;
4241
4259
  ttft_stream_ms?: number;
4242
4260
  time_to_request_ms?: number;
4261
+ user_message_uuid?: string;
4262
+ request_sent_wall_ms?: number;
4243
4263
  time_to_request_from_spawn_ms?: number;
4244
4264
  warm_spare_claimed?: boolean;
4245
4265
  time_origin_ms?: number;
@@ -4274,7 +4294,7 @@ export declare type SDKSessionInfo = {
4274
4294
  */
4275
4295
  summary: string;
4276
4296
  /**
4277
- * Last modified time in milliseconds since epoch.
4297
+ * Last modified time in integer milliseconds since epoch.
4278
4298
  */
4279
4299
  lastModified: number;
4280
4300
  /**
@@ -4302,7 +4322,7 @@ export declare type SDKSessionInfo = {
4302
4322
  */
4303
4323
  tag?: string;
4304
4324
  /**
4305
- * Creation time in milliseconds since epoch, extracted from the first entry's timestamp.
4325
+ * Creation time in integer milliseconds since epoch, extracted from the first entry's timestamp.
4306
4326
  */
4307
4327
  createdAt?: number;
4308
4328
  };
@@ -4551,6 +4571,7 @@ export declare type SDKUserMessage = {
4551
4571
 
4552
4572
 
4553
4573
 
4574
+
4554
4575
  uuid?: UUID;
4555
4576
  session_id?: string;
4556
4577
  /**
@@ -4596,6 +4617,7 @@ export declare type SDKUserMessageReplay = {
4596
4617
 
4597
4618
 
4598
4619
 
4620
+
4599
4621
  uuid: UUID;
4600
4622
  session_id: string;
4601
4623
  isReplay: true;
@@ -4764,7 +4786,8 @@ export declare type SessionStore = {
4764
4786
  load(key: SessionKey): Promise<SessionStoreEntry[] | null>;
4765
4787
  /**
4766
4788
  * List sessions for a projectKey. Returns IDs + modification times.
4767
- * `mtime` is Unix epoch milliseconds; adapters without native modification
4789
+ * `mtime` is integer Unix epoch milliseconds (floor fractional sources);
4790
+ * adapters without native modification
4768
4791
  * time (e.g. Redis) must maintain their own index. Result order is
4769
4792
  * unspecified — the SDK sorts by mtime descending.
4770
4793
  * Optional — if undefined, listSessions() with a sessionStore throws.
@@ -6129,6 +6152,10 @@ export declare interface Settings {
6129
6152
  * When true (set in managed settings), only allowRead paths from policySettings are used.
6130
6153
  */
6131
6154
  allowManagedReadPathsOnly?: boolean;
6155
+ /**
6156
+ * macOS and Linux/WSL only: skip filesystem isolation entirely while keeping network and seccomp isolation. Ignored on native Windows, where the sandboxed process runs as a separate user with no inherent rights, so skipping the filesystem rules would withhold every access grant rather than loosen them — filesystem isolation stays on there. Sandboxed commands get unrestricted read/write access to the host filesystem; network egress is still confined to network.allowedDomains. Intended for deployments whose goal is egress control rather than filesystem containment. Does not change Bash prompting: sandbox.autoAllowBashIfSandboxed is independent and still defaults to true, so set it to false to keep prompting for sandboxed commands. Drops the read protection from filesystem.denyRead and credentials.files for sandboxed commands, since both are enforced by the filesystem layer this turns off; credentials.envVars deny/mask is unaffected. Only honored from user, managed/policy, or CLI (`--settings`) settings — project settings (.claude/settings.json and .claude/settings.local.json) are ignored. If managed settings configure sandbox.filesystem at all, or list any sandbox.credentials.files entry, only managed settings can set this: an admin who deployed filesystem restrictions must not have them switched off by a user-writable file. (sandbox.credentials.envVars does not pin it — env scrubbing is independent of the filesystem layer and survives this setting.) When unset, filesystem isolation stays on.
6157
+ */
6158
+ disabled?: boolean;
6132
6159
  };
6133
6160
  credentials?: {
6134
6161
  /**
@@ -6262,6 +6289,10 @@ export declare interface Settings {
6262
6289
  * When false, prompt suggestions are disabled. When absent or true, prompt suggestions are enabled.
6263
6290
  */
6264
6291
  promptSuggestionEnabled?: boolean;
6292
+ /**
6293
+ * When false, the :emoji: shortcode typeahead (the suggestion popup and the :name: inline replacement) is disabled. When absent or true, it is enabled.
6294
+ */
6295
+ emojiCompletionEnabled?: boolean;
6265
6296
 
6266
6297
  /**
6267
6298
  * When true, the plan-approval dialog offers a "clear context" option. Defaults to false.
@@ -6525,6 +6556,10 @@ export declare interface Settings {
6525
6556
  * Prevent claude-cli:// protocol handler registration with the OS
6526
6557
  */
6527
6558
  disableDeepLinkRegistration?: 'disable';
6559
+ /**
6560
+ * Enable voice mode (hold-to-talk dictation)
6561
+ */
6562
+ voiceEnabled?: boolean;
6528
6563
  /**
6529
6564
  * Default transcript view: chat (SendUserMessage checkpoints only) or transcript (full)
6530
6565
  */