diff --git a/content/.metadata.json b/content/.metadata.json
index db852cacd..b2c089fd4 100644
--- a/content/.metadata.json
+++ b/content/.metadata.json
@@ -1,7 +1,7 @@
{
"metadata": {
"version": "1.0",
- "fetch_date": "2025-09-13T06:21:07Z",
+ "fetch_date": "2025-09-15T01:19:20Z",
"format": "md"
},
"versions": {
@@ -47,17 +47,17 @@
"sha256": "a4708c1851b8ca1907ef980c248198be4be94670a7866be9ccf3f815febc7686",
"size": 21168,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/api/claude-code-analytics-api",
"kind": "raw",
"path": "claude-code-docs/api/claude-code-analytics-api.md",
- "sha256": "d1425e9fc403aa73244dcc19af49748cb20268eb8b03938fac176db84ab6dbc4",
+ "sha256": "d322a710450e1398cdd190a5fd4ab82dc8bb6482df871d301b78d8aac57bc9e1",
"size": 11646,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -67,17 +67,17 @@
"sha256": "7e9b2e9ed6f791054149cd38e0ae942e656d0b7aafb2442c18ff6b57c5de6e10",
"size": 8037,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/analytics",
"kind": "raw",
"path": "claude-code-docs/analytics.md",
- "sha256": "21d5d85a64d11712f4b8010211696ecd3ccda4a6a327a94000a95f73b054804e",
- "size": 2459,
+ "sha256": "fbf212ffbd829173343d76a014819d26b46646d5ac06cb442e31d87bb8bb4306",
+ "size": 2458,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -87,7 +87,7 @@
"sha256": "f5e2351e2ccd5239521dcaba3c8a6aaa047dcbb744fd9e4bc29dab1cb184f5ca",
"size": 7669,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -97,7 +97,7 @@
"sha256": "4004b1fe2440bbebb2d8c041f944d4a79a7bb8c61bd3bd355596340a1cf3f723",
"size": 25142,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -107,7 +107,7 @@
"sha256": "1225bb4cbc94d0cd8ce469f67cde3b7fdb66d291072930f26a236d7aa8d7b044",
"size": 6510,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -117,7 +117,7 @@
"sha256": "dd1c5e4f5b6bad954fe63f8a7979cac59b31adb959072f4aa4cf11e53c6c0924",
"size": 8029,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -127,7 +127,7 @@
"sha256": "f2b226218e186226700e711322bf5fcdacaf53f40566224dd11ee67d339c0f44",
"size": 4416,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -137,7 +137,7 @@
"sha256": "de4f4b56f46236c29eb47e0f6c2b2ef2f31c52b2f436cf9dc3e353e605f80c45",
"size": 26649,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -147,7 +147,7 @@
"sha256": "6b2201f7a6b7be42165b3e3655a3a6ece8c09bcce1eeee34ed767451c3fdcc6b",
"size": 17598,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -157,7 +157,7 @@
"sha256": "a9ed91f61818cb0c96bbb725da50d736df7ee2c7504efc7523c406a80a68f387",
"size": 6048,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -167,7 +167,7 @@
"sha256": "218596daf32354ca64f49e8ab30dd480254cf99e7749946207baacea819c84fe",
"size": 23040,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -177,7 +177,7 @@
"sha256": "a8347a1951dfe7a55e644c95b5dced0ab1bdb5ef387f4e3443dac610a8cac836",
"size": 9549,
"mime": "text/x-script.python",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -187,7 +187,7 @@
"sha256": "5d57610d909251d911a9c6b3a16d4988fed29ef302efb09d5bfdf772dc465d9c",
"size": 11338,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -197,7 +197,7 @@
"sha256": "5c42f451d1344a51db3a1d88f0dc15af8432d6b7369d37c4f2d3c5a1cf963faa",
"size": 6627,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -207,7 +207,7 @@
"sha256": "64615ef94295923ce71d9979d3e3aa93c388cf2875040e287808b1d04e836513",
"size": 4793,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -217,7 +217,7 @@
"sha256": "0204d2f835282a350861c31c5c3bf2f2d9905861132b528ddf475c2bd95f3386",
"size": 1545,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -227,7 +227,7 @@
"sha256": "20b5de414f605c23d2fd32646ef2f002dd4838c3593beec15221a0790b841581",
"size": 4199,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -237,7 +237,7 @@
"sha256": "84a885fe250ec6a0254051bbff7564d9d9ac2a578bb4e34db1de161f5df210f4",
"size": 37163,
"mime": "application/javascript",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -247,7 +247,7 @@
"sha256": "fb91c5ca36a50ad644648bb0a4af00dab4fa5489a1317d5ca8a33c593fd18b1c",
"size": 6355,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -257,7 +257,7 @@
"sha256": "c00bb65754f4dcd9596ff92f916a61a041a8b9e462c150bd77d6260332520048",
"size": 4879,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -267,7 +267,7 @@
"sha256": "3f506e5b43b17d6701fc1b0a95a7d1c2507294af9119ce9043cff061c8012c41",
"size": 22235,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -277,7 +277,7 @@
"sha256": "30b0ceb28df56f1d91d7b64c5e6984cd5e249b4507c3bbddd2b8e6c7c4fd6512",
"size": 3106,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -287,7 +287,7 @@
"sha256": "12d774955a3e3596fbe7d72d52ac27182573396b93ff08d5a25c5f038d9f9867",
"size": 3648,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -297,7 +297,7 @@
"sha256": "292193171a314151e088a6a296e6c3bd306f8354088d59f080de437c6d4fb10a",
"size": 4332,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -307,37 +307,37 @@
"sha256": "bd2798770a64b026d80a25088f0fb8c034955c991204110e355ad080784e2358",
"size": 8223,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/sdk/custom-tools",
"kind": "raw",
"path": "claude-code-docs/sdk/custom-tools.md",
- "sha256": "7cb3754f5c50f5868eea8f27f285551f6fe194d860be433926d5308906572504",
- "size": 23065,
- "mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "sha256": "b5de83977008e54e5b4eede17303ef84ad899a01fdf52f479f04a130c01293c2",
+ "size": 23275,
+ "mime": "text/x-c",
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/sdk/modifying-system-prompts",
"kind": "raw",
"path": "claude-code-docs/sdk/modifying-system-prompts.md",
- "sha256": "621fc27b2a641f40eeadbc68cd893efb60fa6a12be0fa34993efabe629e716cf",
- "size": 9616,
+ "sha256": "40ffad204e8216ad55f97a63b5bbe27e510069eda9808fbdd07140608804bd88",
+ "size": 9598,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-cost-tracking",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-cost-tracking.md",
- "sha256": "a418bd4e115b211376336b0dcf413e21fb33e44c83b41a3b8184c99b2b7a187d",
- "size": 11114,
+ "sha256": "fae4d3a5fc7fcb739fa559a0c141074ea7d4caac9ba7120fd24cb569ee5a4af0",
+ "size": 11102,
"mime": "text/x-c++",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -347,17 +347,17 @@
"sha256": "a3887800ab82e9ab880fd88161c150aa140563282a539954a389c48a6d3b101d",
"size": 8800,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-mcp",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-mcp.md",
- "sha256": "096b6c8a58945d0f733d68eedcf6dbf677df953d199ce2d2839227a61bade5e8",
- "size": 7571,
+ "sha256": "5f7f38093fbabb7ce8f8b6290934dedee4f7e80539b3d1183736ab15cf576298",
+ "size": 7553,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -367,27 +367,27 @@
"sha256": "13d93fa8287184e281b3494cd015494cedf98116d96ecd454656451319f0316c",
"size": 4321,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-permissions",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-permissions.md",
- "sha256": "bd2670eb528ead16729431eb382ea94cb7c993b2efdef6de17320f3ffce5b5b5",
- "size": 18374,
+ "sha256": "ea987bf510050011aaee49aee11d902452de3d31264f2bd24829fad8b4df0111",
+ "size": 18356,
"mime": "text/html",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-python",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-python.md",
- "sha256": "d35c1b95e99a1806e1bef7fff67035a0077b505a0c1e882695e82a4acf4f41db",
- "size": 34289,
+ "sha256": "da17274c1b6600e17df4ddb032158b8b77507add25f5ca7ee4b1d064424cfda0",
+ "size": 47751,
"mime": "text/x-script.python",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -397,17 +397,17 @@
"sha256": "22f08be0fb8b14c6e70750eeccb2aae26697213faeff96518e04468c8c1acd73",
"size": 11526,
"mime": "text/x-script.python",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-slash-commands",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-slash-commands.md",
- "sha256": "d4d586ed5e17206760f02c566cedadf23b2801edf95b6a7be309aab0095c5dd6",
- "size": 12764,
+ "sha256": "eac1a66a8ab7bdbb69169a045d4a78ed52f58ebdb92fc3d02f1c8e016966a1ae",
+ "size": 12722,
"mime": "text/x-c",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -417,17 +417,17 @@
"sha256": "fd03a7987cb8cbc6e06581a7979349443f909d6926197f5448276852781fb6ed",
"size": 36351,
"mime": "text/html",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/sdk/streaming-vs-single-mode",
"kind": "raw",
"path": "claude-code-docs/sdk/streaming-vs-single-mode.md",
- "sha256": "e6aaad4dcd173e21db3b3783b31f4048d1683335fef8836aed3005fc4f375cea",
- "size": 6697,
+ "sha256": "974cc9e7e3f47b3aa9205f32b96acb13bce7a5b785034e237aa32460b31d7d45",
+ "size": 8644,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -437,17 +437,17 @@
"sha256": "2e4e0a7d2d42b10315ebed1ecddf1123320c3a80afdd8235a698a04082a85a41",
"size": 5817,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
"url": "https://docs.anthropic.com/en/docs/claude-code/sdk/todo-tracking",
"kind": "raw",
"path": "claude-code-docs/sdk/todo-tracking.md",
- "sha256": "aa051b55a2e13f57cc560ca77795894aec3c9147ed97086c81273d31133b0a54",
- "size": 5568,
+ "sha256": "89da2fa7bf2efabf1fff0d9ab1f853c24e496028037e8a1737ebe749839ddc1a",
+ "size": 5556,
"mime": "text/x-script.python",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -457,7 +457,7 @@
"sha256": "6719407b518e91df9fe04ac85b55b949caa89966e02cf34f66cf0416d2ebff91",
"size": 7068,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -467,7 +467,7 @@
"sha256": "7ee29ac76a8e574f3cceb181a6c928b9d1ed369f003781e9d07f20cacd9ea50f",
"size": 28032,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -477,7 +477,7 @@
"sha256": "98c6b8570665d0d413c0942bc7f8f7baac99f970f68a3bc712d7b738e3814b7d",
"size": 6252,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -487,7 +487,7 @@
"sha256": "a92657563011b0d9cf1b59de5c493e3d3cb5f4f1f5aa31ae3a3acf3bd97d7750",
"size": 12889,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -497,7 +497,7 @@
"sha256": "7e9ba7d4046c8f50477b4b86fdfb40909738492094f7adabff9e7db814597baa",
"size": 5698,
"mime": "application/javascript",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -507,7 +507,7 @@
"sha256": "4897316c00d2bbb93701c5569580d521d11b430a0a7b37b96c7fea6946b58f5b",
"size": 11804,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -517,7 +517,7 @@
"sha256": "f43b3d3ff68b017ff8c039aa896bc6dd5df213141f6341f4ed012ff05de08efb",
"size": 2943,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -527,7 +527,7 @@
"sha256": "b3a72f412bb1300558a02d6daee88389985af0792c35dfb030d2a2f4a6cbce62",
"size": 7880,
"mime": "text/html",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -537,7 +537,7 @@
"sha256": "81f3ba7936c8e03bb30beb5efdf880098572bd59564ecba669136983548bd473",
"size": 12072,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "docs",
@@ -547,7 +547,7 @@
"sha256": "6fdd703940478612a68b5ab56fe52f8cca56dd73a5028a334b57a642631a0d45",
"size": 344,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -557,7 +557,7 @@
"sha256": "5f4b51488c19699cc9c17e56f996612737004913c9cf19db79a2bbf50e756e4f",
"size": 37209,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -567,7 +567,7 @@
"sha256": "274ea990c0201f965c5bd168c722d7208e4a6274f9f878e30a038a39d7b8fc8b",
"size": 21825,
"mime": "text/x-java",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -577,7 +577,7 @@
"sha256": "63350ce50c250dd5d3859c0e5d318b3599ad45e277642274cdf5c33da9c21dff",
"size": 15252,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -587,7 +587,7 @@
"sha256": "159f7e761f44b02d216cadfc68794cbfd6c7ce310ca8d8afd62e0c865f089a8c",
"size": 18077,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -597,7 +597,7 @@
"sha256": "ccddd5d62634905e2bb8443af2ffc8fc02a615992064da026d88de13ee0352ef",
"size": 113176,
"mime": "application/javascript",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -607,7 +607,7 @@
"sha256": "cdb63912864eaa1c838745f5c920e234a2de78fda90be0684c825257fa30a9e2",
"size": 14963,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -617,7 +617,7 @@
"sha256": "acd61e9c70dd498275e1b487003d0e9643eb4a2b8c290b89b633ff40d527f482",
"size": 6827,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -627,7 +627,7 @@
"sha256": "8635b330371e0672287ae123fb0ed3f0c3da7069ab353d22cc69ba3708080a4f",
"size": 9054,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -637,7 +637,7 @@
"sha256": "497cec7f149b8f357c73e18b83af6f2ccead015aae1b00b010d6c2730580dec2",
"size": 35897,
"mime": "text/x-c",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -647,7 +647,7 @@
"sha256": "1a2b728100a14c1107481ecc4dc0ba564a10da9c436e73c900a5d06bfa0ac006",
"size": 83394,
"mime": "text/x-java",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -657,7 +657,7 @@
"sha256": "86d80524a8f53cc6478eeaa8a0cd7032c43a9f17d3b853a3755beebf469b1d95",
"size": 18933,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -667,7 +667,7 @@
"sha256": "64d0d1b9e2b2f7dd23e94a1ad0d4f41e88b699fc58d7a485025a3ed5f5e7be7d",
"size": 22655,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -677,7 +677,7 @@
"sha256": "7c6612371ab460fce495b50e3c3103f589448ef38b3a90fa5cdcefdd666dfba2",
"size": 64214,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -687,7 +687,7 @@
"sha256": "faf4233f5b5e125addb624fc1093361887a494fb5b02ec2a37e80226c43ff295",
"size": 7041,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -697,7 +697,7 @@
"sha256": "5b22b0c4ebba228991423dc5990b6e918f2ee6b4c3aae4abf124f9f41dd9b4aa",
"size": 16721,
"mime": "application/javascript",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -707,7 +707,7 @@
"sha256": "aacf290271855538dd609ed31e0a9659dc8ead4101349ec1ce76286b1c006090",
"size": 3679,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -717,7 +717,7 @@
"sha256": "911efed18a280a64d820d883cc9ddef9777eb02ad291424aedb29632a19e9c8f",
"size": 13087,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -727,7 +727,7 @@
"sha256": "816674ad979e711d64746569bb4beed60b526e330e9ce2a3eedf7bc35187c8b3",
"size": 5010,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -737,7 +737,7 @@
"sha256": "fce81e4f2ac7efedee524844367fd49d618f1be0ed62bab805d9425a47b69ac0",
"size": 14761,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -747,7 +747,7 @@
"sha256": "cb68cca745ed3b674cc0c2451267aba48d3843d2814bc8e43321cc3a024fdfef",
"size": 2216,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -757,7 +757,7 @@
"sha256": "136fc92e2fcd0ea3b049c4791efbe2be5a67a3b51304569e8ef502c1fb8f82f7",
"size": 7242,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -767,7 +767,7 @@
"sha256": "dde7ecba338512468270a179c66bf902b6ab14b73292df62c90be3569d4bb314",
"size": 3728,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -777,7 +777,7 @@
"sha256": "3ccdb2d39106cd59d147b2d350d91447e7b8b66f582e4d5cd6319ce90ffa7018",
"size": 18600,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -787,7 +787,7 @@
"sha256": "1461408cd592a5c8a48ef78aa154d84b71a669378d0d856c88a8b745483c0d82",
"size": 22301,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -797,7 +797,7 @@
"sha256": "efa10a9b378b5e2243e65fda75be5419cecc614c22dbc5c82f5266c676d7fada",
"size": 24434,
"mime": "text/x-script.python",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -807,7 +807,7 @@
"sha256": "8b160282626fbad203a20ef72f1c1e994b0d9bfabb596bd8534d4b133e4842e6",
"size": 23485,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -817,7 +817,7 @@
"sha256": "1a4214cb0469b22b3586f16a4e73cac43014990bd37c072268f549f1e1887a9b",
"size": 24417,
"mime": "text/x-java",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "build",
@@ -827,27 +827,27 @@
"sha256": "646e5770f28cdd48aba0b8e0ba975b6bdad54e5110f6e6b038e49b59b8b5b613",
"size": 37339,
"mime": "text/x-java",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "anthropic",
"url": "https://www.anthropic.com/claude-code",
"kind": "raw",
"path": "anthropic-blog/claude-code.md",
- "sha256": "5830d04f2ed85ecf42ebcfd850cba30eeccbaea36462bca97654b5bc49708026",
- "size": 35799,
+ "sha256": "5499bc57c4721aa06a30a9b8961975627bac59c8d96d85c42e8e838637948ffd",
+ "size": 35800,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "anthropic",
"url": "https://www.anthropic.com/engineering/claude-code-best-practices",
"kind": "raw",
"path": "anthropic-blog/engineering/claude-code-best-practices.md",
- "sha256": "533cbd6e34b3ed8370ee768ef1c6e551cc05f2b270650f0665ec6724f646e98d",
+ "sha256": "46b0924f99798a4741091fd9d1e7fc7f13a8e46a1472678ebbbd3ec130df3ab8",
"size": 30483,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "anthropic",
@@ -857,7 +857,7 @@
"sha256": "d1300dee01c3a034d4d02a71a9b6723bf09b99cbdf1f1f7e20b2d9e0993ccdeb",
"size": 4647,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "anthropic",
@@ -867,7 +867,7 @@
"sha256": "b26c237e1b0b627059386ed626e793cfeff6265b4b0e4a30ec6d11e013ace89f",
"size": 4964,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "anthropic",
@@ -877,7 +877,7 @@
"sha256": "322f9ab2140d07c71f26b7977583bd59c3090ee39c1466647fc644cc0c3d44cb",
"size": 2476,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "anthropic",
@@ -887,7 +887,7 @@
"sha256": "eef0e20fd1e53d8dfcfc676892989b89252cac85af15e53870c3f0788b8fca87",
"size": 8227,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "github",
@@ -897,7 +897,7 @@
"sha256": "b72af06d84f5cd72fee2ed95dcdd183cf8b74d4e89a9e1dada496ecca6e71014",
"size": 23068,
"mime": "text/plain",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
},
{
"source": "npm",
@@ -907,7 +907,7 @@
"sha256": "d501f7c11b823a1a3f08deff32055ec8600eada92ca54303d30a8f8552fc0826",
"size": 3072,
"mime": "application/json",
- "fetched_at": "2025-09-13T06:21:07Z"
+ "fetched_at": "2025-09-15T01:19:20Z"
}
],
"by_url": {
@@ -924,7 +924,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/api/claude-code-analytics-api.md",
- "sha256": "d1425e9fc403aa73244dcc19af49748cb20268eb8b03938fac176db84ab6dbc4"
+ "sha256": "d322a710450e1398cdd190a5fd4ab82dc8bb6482df871d301b78d8aac57bc9e1"
}
],
"https://docs.anthropic.com/en/docs/build-with-claude/batch-processing": [
@@ -1164,7 +1164,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/analytics.md",
- "sha256": "21d5d85a64d11712f4b8010211696ecd3ccda4a6a327a94000a95f73b054804e"
+ "sha256": "fbf212ffbd829173343d76a014819d26b46646d5ac06cb442e31d87bb8bb4306"
}
],
"https://docs.anthropic.com/en/docs/claude-code/cli-reference": [
@@ -1356,7 +1356,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/sdk/custom-tools.md",
- "sha256": "7cb3754f5c50f5868eea8f27f285551f6fe194d860be433926d5308906572504"
+ "sha256": "b5de83977008e54e5b4eede17303ef84ad899a01fdf52f479f04a130c01293c2"
}
],
"https://docs.anthropic.com/en/docs/claude-code/sdk/modifying-system-prompts": [
@@ -1364,7 +1364,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/sdk/modifying-system-prompts.md",
- "sha256": "621fc27b2a641f40eeadbc68cd893efb60fa6a12be0fa34993efabe629e716cf"
+ "sha256": "40ffad204e8216ad55f97a63b5bbe27e510069eda9808fbdd07140608804bd88"
}
],
"https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-cost-tracking": [
@@ -1372,7 +1372,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-cost-tracking.md",
- "sha256": "a418bd4e115b211376336b0dcf413e21fb33e44c83b41a3b8184c99b2b7a187d"
+ "sha256": "fae4d3a5fc7fcb739fa559a0c141074ea7d4caac9ba7120fd24cb569ee5a4af0"
}
],
"https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-headless": [
@@ -1388,7 +1388,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-mcp.md",
- "sha256": "096b6c8a58945d0f733d68eedcf6dbf677df953d199ce2d2839227a61bade5e8"
+ "sha256": "5f7f38093fbabb7ce8f8b6290934dedee4f7e80539b3d1183736ab15cf576298"
}
],
"https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-overview": [
@@ -1404,7 +1404,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-permissions.md",
- "sha256": "bd2670eb528ead16729431eb382ea94cb7c993b2efdef6de17320f3ffce5b5b5"
+ "sha256": "ea987bf510050011aaee49aee11d902452de3d31264f2bd24829fad8b4df0111"
}
],
"https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-python": [
@@ -1412,7 +1412,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-python.md",
- "sha256": "d35c1b95e99a1806e1bef7fff67035a0077b505a0c1e882695e82a4acf4f41db"
+ "sha256": "da17274c1b6600e17df4ddb032158b8b77507add25f5ca7ee4b1d064424cfda0"
}
],
"https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-sessions": [
@@ -1428,7 +1428,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/sdk/sdk-slash-commands.md",
- "sha256": "d4d586ed5e17206760f02c566cedadf23b2801edf95b6a7be309aab0095c5dd6"
+ "sha256": "eac1a66a8ab7bdbb69169a045d4a78ed52f58ebdb92fc3d02f1c8e016966a1ae"
}
],
"https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-typescript": [
@@ -1444,7 +1444,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/sdk/streaming-vs-single-mode.md",
- "sha256": "e6aaad4dcd173e21db3b3783b31f4048d1683335fef8836aed3005fc4f375cea"
+ "sha256": "974cc9e7e3f47b3aa9205f32b96acb13bce7a5b785034e237aa32460b31d7d45"
}
],
"https://docs.anthropic.com/en/docs/claude-code/sdk/subagents": [
@@ -1460,7 +1460,7 @@
"source": "docs",
"kind": "raw",
"path": "claude-code-docs/sdk/todo-tracking.md",
- "sha256": "aa051b55a2e13f57cc560ca77795894aec3c9147ed97086c81273d31133b0a54"
+ "sha256": "89da2fa7bf2efabf1fff0d9ab1f853c24e496028037e8a1737ebe749839ddc1a"
}
],
"https://docs.anthropic.com/en/docs/claude-code/security": [
@@ -1564,7 +1564,7 @@
"source": "anthropic",
"kind": "raw",
"path": "anthropic-blog/claude-code.md",
- "sha256": "5830d04f2ed85ecf42ebcfd850cba30eeccbaea36462bca97654b5bc49708026"
+ "sha256": "5499bc57c4721aa06a30a9b8961975627bac59c8d96d85c42e8e838637948ffd"
}
],
"https://www.anthropic.com/engineering/claude-code-best-practices": [
@@ -1572,7 +1572,7 @@
"source": "anthropic",
"kind": "raw",
"path": "anthropic-blog/engineering/claude-code-best-practices.md",
- "sha256": "533cbd6e34b3ed8370ee768ef1c6e551cc05f2b270650f0665ec6724f646e98d"
+ "sha256": "46b0924f99798a4741091fd9d1e7fc7f13a8e46a1472678ebbbd3ec130df3ab8"
}
],
"https://www.anthropic.com/news/automate-security-reviews-with-claude-code": [
diff --git a/content/anthropic-blog/claude-code.md b/content/anthropic-blog/claude-code.md
index 893cb4d93..e17209b8a 100644
--- a/content/anthropic-blog/claude-code.md
+++ b/content/anthropic-blog/claude-code.md
@@ -25,8 +25,8 @@ Plans
* [Enterprise plan](https://www.anthropic.com/enterprise)
* [Explore pricing](https://www.anthropic.com/pricing)
- * [Download apps](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/download)
- * [Claude log in](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38)
+ * [Download apps](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/download)
+ * [Claude log in](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6)
[ News Claude’s Character](https://www.anthropic.com/news/claude-character)
@@ -103,7 +103,7 @@ Company
* [News](https://www.anthropic.com/news)
* EN [This is some text inside of a div block.](https://www.anthropic.com/claude-code#)
-* [Try Claude](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/login)Try Claude Try Claude [Download App](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/download)Download App Download App
+* [Try Claude](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/login)Try Claude Try Claude [Download App](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/download)Download App Download App
[](https://www.anthropic.com/)
@@ -121,8 +121,8 @@ Plans
* [Enterprise plan](https://www.anthropic.com/enterprise)
* [Explore pricing](https://www.anthropic.com/pricing)
- * [Download apps](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/download)
- * [Claude log in](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38)
+ * [Download apps](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/download)
+ * [Claude log in](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6)
[ News Claude’s Character](https://www.anthropic.com/news/claude-character)
@@ -199,7 +199,7 @@ Company
* [News](https://www.anthropic.com/news)
* EN [This is some text inside of a div block.](https://www.anthropic.com/claude-code#)
-* [Try Claude](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/login)Try Claude Try Claude [Download App](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/download)Download App Download App
+* [Try Claude](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/login)Try Claude Try Claude [Download App](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/download)Download App Download App
Your code’s new collaborator
============================
@@ -217,19 +217,19 @@ Install [Node.js 18+](https://nodejs.org/en/download), then run:
[npm install-g @anthropic-ai/claude-code](https://www.anthropic.com/claude-code#)
-[Try Claude Code on Max](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/upgrade/max?returnTo=/claude-code-install)Try Claude Code on Max
+[Try Claude Code on Max](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/upgrade/max?returnTo=/claude-code-install)Try Claude Code on Max
Try Claude Code on Max
-[Try Claude Code on Max](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/upgrade/max?returnTo=/claude-code-install)Try Claude Code on Max
+[Try Claude Code on Max](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/upgrade/max?returnTo=/claude-code-install)Try Claude Code on Max
Try Claude Code on Max
[See our pricing options](https://www.anthropic.com/claude-code#get-started)
-∗
+✽
-Clauding…
+Transmuting…
Trusted by engineers at
-----------------------
@@ -258,15 +258,15 @@ Claude Code embeds Claude Opus 4.1—the same model our researchers and engineer
[Terminal](https://www.anthropic.com/claude-code#)[Result](https://www.anthropic.com/claude-code#)
-∗
+✽
-Pontificating…
+Marinating…
[Terminal](https://www.anthropic.com/claude-code#)[Result](https://www.anthropic.com/claude-code#)
-∗
+✽
-Ruminating…
+Cogitating…
### Powerful intelligence
@@ -335,13 +335,13 @@ What could you do with Claude Code?
[Code onboarding](https://www.anthropic.com/claude-code#w-tabs-1-data-w-pane-0)[Triage issues](https://www.anthropic.com/claude-code#w-tabs-1-data-w-pane-1)[Refactor code](https://www.anthropic.com/claude-code#w-tabs-1-data-w-pane-2)
-∗
+✽
-Hustling…
+Synthesizing…
-∗
+✽
-Accomplishing…
+Schlepping…
Install [Node.js 18+](https://nodejs.org/en/download), then run:
@@ -425,14 +425,14 @@ Get started with Claude Code
[Individual](https://www.anthropic.com/claude-code#w-tabs-2-data-w-pane-0)[Team &Enterprise](https://www.anthropic.com/claude-code#w-tabs-2-data-w-pane-1)
-* ### Pro $17 Per month with annual subscription discount; $200 billed up front. $20 if billed monthly. Claude Code is included in your Pro plan. Perfect for short coding sprints in smaller codebases with Claude Sonnet 4. [Sign up](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/upgrade/pro?returnTo=/claude-code-install)Sign up Sign up
-* ### Max 5x $100 Per person billed monthly Claude Code is included in your Max plan. Great value for everyday use in larger codebases with access to both Claude Sonnet 4 & Claude Opus 4.1. [Sign up](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/upgrade/max?plan=max_5x&returnTo=/claude-code-install)Sign up Sign up
-* ### Max 20x $200 Per person billed monthly Even more Claude Code included in your Max plan. Great value for power users with the most access to Claude Opus 4.1. [Sign up](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/upgrade/max?plan=max_20x&returnTo=/claude-code-install)Sign up Sign up
+* ### Pro $17 Per month with annual subscription discount; $200 billed up front. $20 if billed monthly. Claude Code is included in your Pro plan. Perfect for short coding sprints in smaller codebases with Claude Sonnet 4. [Sign up](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/upgrade/pro?returnTo=/claude-code-install)Sign up Sign up
+* ### Max 5x $100 Per person billed monthly Claude Code is included in your Max plan. Great value for everyday use in larger codebases with access to both Claude Sonnet 4 & Claude Opus 4.1. [Sign up](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/upgrade/max?plan=max_5x&returnTo=/claude-code-install)Sign up Sign up
+* ### Max 20x $200 Per person billed monthly Even more Claude Code included in your Max plan. Great value for power users with the most access to Claude Opus 4.1. [Sign up](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/upgrade/max?plan=max_20x&returnTo=/claude-code-install)Sign up Sign up
*Additional [usage limits](https://support.anthropic.com/en/articles/9797557-usage-limit-best-practices) apply. Prices shown do not include applicable tax.
* ### Anthropic API Pay as you go with standard Anthropic API pricing. Deploy to unlimited developers with no per-seat fee or platform charges. [Start building](https://console.anthropic.com/login?returnTo=%2F%3F)Start building Start building
-* ### Team $150 Per person / month. Minimum 5 members. Claude Code is included with Team plan premium seats. Includes self-serve seat management and additional usage at standard API rates, plus access to both Claude Sonnet 4 and Claude Opus 4.1. [Get the Team plan](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/login)Get the Team plan Get the Team plan
+* ### Team $150 Per person / month. Minimum 5 members. Claude Code is included with Team plan premium seats. Includes self-serve seat management and additional usage at standard API rates, plus access to both Claude Sonnet 4 and Claude Opus 4.1. [Get the Team plan](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/login)Get the Team plan Get the Team plan
* ### Enterprise Enterprise plan premium seats include everything in the Team plan, plus advanced security, data, and user management. [Contact sales](https://anthropic.com/contact-sales)Contact sales Contact sales
Prices shown do not include applicable tax. [Usage limits](https://support.anthropic.com/en/articles/9797557-usage-limit-best-practices) may apply.
@@ -548,9 +548,9 @@ Footer
* [Max plan](https://www.anthropic.com/max)
* [Team plan](https://www.anthropic.com/team)
* [Enterprise plan](https://www.anthropic.com/enterprise)
-* [Download Claude apps](https://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/download)
+* [Download Claude apps](https://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/download)
* [Claude.ai pricing plans](https://www.anthropic.com/pricing)
-* [Claude.ai login](http://claude.ai/redirect/website.v1.7ab658d3-e107-43c6-98ed-94e383a00c38/login)
+* [Claude.ai login](http://claude.ai/redirect/website.v1.ebe782dd-db6f-4205-820d-3c43366878f6/login)
### API Platform
diff --git a/content/anthropic-blog/engineering/claude-code-best-practices.md b/content/anthropic-blog/engineering/claude-code-best-practices.md
index d385bf681..78d52f448 100644
--- a/content/anthropic-blog/engineering/claude-code-best-practices.md
+++ b/content/anthropic-blog/engineering/claude-code-best-practices.md
@@ -9,7 +9,7 @@ Claude Code is intentionally low-level and unopinionated, providing close to raw
This post outlines general patterns that have proven effective, both for Anthropic's internal teams and for external engineers using Claude Code across various codebases, languages, and environments. Nothing in this list is set in stone nor universally applicable; consider these suggestions as starting points. We encourage you to experiment and find what works best for you!
-_Looking for more detailed information? Our comprehensive documentation at [claude.ai/code](https://claude.ai/redirect/website.v1.6e592fcc-e67c-44da-a388-31ff8f7aa151/code)_ _covers all the features mentioned in this post and provides additional examples, implementation details, and advanced techniques._
+_Looking for more detailed information? Our comprehensive documentation at [claude.ai/code](https://claude.ai/redirect/website.v1.6c5235db-5a2f-4daa-9e44-5463c6b067ee/code)_ _covers all the features mentioned in this post and provides additional examples, implementation details, and advanced techniques._
1. Customize your setup
-----------------------
diff --git a/content/claude-code-docs/analytics.md b/content/claude-code-docs/analytics.md
index 87e5411cc..9299aff9e 100644
--- a/content/claude-code-docs/analytics.md
+++ b/content/claude-code-docs/analytics.md
@@ -10,7 +10,7 @@ Claude Code provides an analytics dashboard that helps organizations understand
## Access analytics
-Navigate to the analytics dashboard at [console.anthropic.com/claude\_code](https://console.anthropic.com/claude_code).
+Navigate to the analytics dashboard at [console.anthropic.com/claude-code](https://console.anthropic.com/claude-code).
### Required roles
diff --git a/content/claude-code-docs/api/claude-code-analytics-api.md b/content/claude-code-docs/api/claude-code-analytics-api.md
index 0e1bba488..bdaedbc7b 100644
--- a/content/claude-code-docs/api/claude-code-analytics-api.md
+++ b/content/claude-code-docs/api/claude-code-analytics-api.md
@@ -6,7 +6,7 @@
**The Admin API is unavailable for individual accounts.** To collaborate with teammates and add members, set up your organization in **Console → Settings → Organization**.
-The Claude Code Analytics Admin API provides programmatic access to daily aggregated usage metrics for Claude Code users, enabling organizations to analyze developer productivity and build custom dashboards. This API bridges the gap between our basic [Analytics dashboard](https://console.anthropic.com/claude_code) and the complex OpenTelemetry integration.
+The Claude Code Analytics Admin API provides programmatic access to daily aggregated usage metrics for Claude Code users, enabling organizations to analyze developer productivity and build custom dashboards. This API bridges the gap between our basic [Analytics dashboard](https://console.anthropic.com/claude-code) and the complex OpenTelemetry integration.
This API enables you to better monitor, analyze, and optimize your Claude Code adoption:
@@ -264,7 +264,7 @@ The Claude Code Analytics API helps you understand and optimize your team's deve
* [Admin API overview](/en/api/administration-api)
* [Admin API reference](https://docs.anthropic.com/en/api/admin-api)
-* [Claude Code Analytics dashboard](https://console.anthropic.com/claude_code)
+* [Claude Code Analytics dashboard](https://console.anthropic.com/claude-code)
* [Usage and Cost API](/en/api/usage-cost-api) - Track API usage across all Anthropic services
* [Identity and access management](/en/docs/claude-code/iam)
* [Monitoring usage with OpenTelemetry](/en/docs/claude-code/monitoring-usage) for custom metrics and alerting
diff --git a/content/claude-code-docs/sdk/custom-tools.md b/content/claude-code-docs/sdk/custom-tools.md
index ed959c2e8..8ca2e9787 100644
--- a/content/claude-code-docs/sdk/custom-tools.md
+++ b/content/claude-code-docs/sdk/custom-tools.md
@@ -132,31 +132,26 @@ You can control which tools Claude can use via the `allowedTools` option:
```python Python
from claude_code_sdk import ClaudeSDKClient, ClaudeCodeOptions
+ import asyncio
+
+ # Use the custom tools with Claude
+ options = ClaudeCodeOptions(
+ mcp_servers={"my-custom-tools": custom_server},
+ allowed_tools=[
+ "mcp__my-custom-tools__get_weather", # Allow the weather tool
+ # Add other tools as needed
+ ]
+ )
- # Use the custom tools in your query with streaming input
- async def message_generator():
- yield {
- "type": "user",
- "message": {
- "role": "user",
- "content": "What's the weather in San Francisco?"
- }
- }
+ async def main():
+ async with ClaudeSDKClient(options=options) as client:
+ await client.query("What's the weather in San Francisco?")
+
+ # Extract and print response
+ async for msg in client.receive_response():
+ print(msg)
- async for message in query(
- prompt=message_generator(), # Use async generator for streaming input
- options=ClaudeCodeOptions(
- mcp_servers={"my-custom-tools": custom_server}, # Pass as dict, not list
- # Optionally specify which tools Claude can use
- allowed_tools=[
- "mcp__my-custom-tools__get_weather", # Allow the weather tool
- # Add other tools as needed
- ],
- max_turns=3
- )
- ):
- if hasattr(message, 'result'):
- print(message.result)
+ asyncio.run(main())
```
@@ -205,7 +200,9 @@ When your MCP server has multiple tools, you can selectively allow them:
```
```python Python
- from claude_code_sdk import ClaudeSDKClient, ClaudeCodeOptions
+ from claude_code_sdk import ClaudeSDKClient, ClaudeCodeOptions, tool, create_sdk_mcp_server
+ from typing import Any
+ import asyncio
# Define multiple tools using the @tool decorator
@tool("calculate", "Perform calculations", {"expression": str})
@@ -239,6 +236,7 @@ When your MCP server has multiple tools, you can selectively allow them:
}
}
+ <<<<<<< Updated upstream
async for message in query(
prompt=message_generator(), # Use async generator for streaming input
options=ClaudeCodeOptions(
@@ -252,6 +250,17 @@ When your MCP server has multiple tools, you can selectively allow them:
):
if hasattr(message, 'result'):
print(message.result)
+ =======
+ async def main():
+ async with ClaudeSDKClient(options=options) as client:
+ await client.query("Calculate 5 + 3 and translate 'hello' to Spanish")
+
+ # Process messages
+ async for msg in client.receive_response():
+ print(msg)
+
+ asyncio.run(main())
+ >>>>>>> Stashed changes
```
diff --git a/content/claude-code-docs/sdk/modifying-system-prompts.md b/content/claude-code-docs/sdk/modifying-system-prompts.md
index d8981c6b7..404ed93fc 100644
--- a/content/claude-code-docs/sdk/modifying-system-prompts.md
+++ b/content/claude-code-docs/sdk/modifying-system-prompts.md
@@ -128,7 +128,7 @@ The `appendSystemPrompt` option adds your custom instructions to the default sys
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
messages = []
@@ -176,7 +176,7 @@ The `customSystemPrompt` option replaces the entire default system prompt with y
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
custom_prompt = """You are a Python coding specialist.
Follow these guidelines:
@@ -279,7 +279,7 @@ You can combine these methods for maximum flexibility:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
# Assuming "Code Reviewer" output style is active (via /output-style)
# Add session-specific focus areas
diff --git a/content/claude-code-docs/sdk/sdk-cost-tracking.md b/content/claude-code-docs/sdk/sdk-cost-tracking.md
index bec574b52..d0adc8674 100644
--- a/content/claude-code-docs/sdk/sdk-cost-tracking.md
+++ b/content/claude-code-docs/sdk/sdk-cost-tracking.md
@@ -43,7 +43,7 @@ When Claude executes tools, the usage reporting differs based on whether tools a
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
# Example: Tracking usage in a conversation
async def track_usage(message):
@@ -187,7 +187,7 @@ Here's a complete example of implementing a cost tracking system:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
from datetime import datetime
class CostTracker:
diff --git a/content/claude-code-docs/sdk/sdk-mcp.md b/content/claude-code-docs/sdk/sdk-mcp.md
index e5e3b5d66..121efc3c6 100644
--- a/content/claude-code-docs/sdk/sdk-mcp.md
+++ b/content/claude-code-docs/sdk/sdk-mcp.md
@@ -62,7 +62,7 @@ Configure MCP servers in `.mcp.json` at your project root:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async for message in query(
prompt="List files in my project",
@@ -201,7 +201,7 @@ MCP servers can expose resources that Claude can list and read:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
# List available resources
async for message in query(
@@ -301,7 +301,7 @@ Handle MCP connection failures gracefully:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async for message in query(
prompt="Process data",
diff --git a/content/claude-code-docs/sdk/sdk-permissions.md b/content/claude-code-docs/sdk/sdk-permissions.md
index 26331561b..20f5d95c1 100644
--- a/content/claude-code-docs/sdk/sdk-permissions.md
+++ b/content/claude-code-docs/sdk/sdk-permissions.md
@@ -131,7 +131,7 @@ Set the mode when creating a query:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
result = await query(
prompt="Help me refactor this code",
@@ -187,7 +187,7 @@ Change the mode during a streaming session:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async def stream_input():
"""Async generator for streaming input"""
@@ -347,7 +347,7 @@ Here's a complete example showing how to implement interactive tool approval:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async def prompt_for_tool_approval(tool_name: str, input_params: dict):
print(f"\n🔧 Tool Request:")
diff --git a/content/claude-code-docs/sdk/sdk-python.md b/content/claude-code-docs/sdk/sdk-python.md
index c3ef7c7ce..671a4f146 100644
--- a/content/claude-code-docs/sdk/sdk-python.md
+++ b/content/claude-code-docs/sdk/sdk-python.md
@@ -2,11 +2,48 @@
> Complete API reference for the Claude Code Python SDK, including all functions, types, and classes.
+## Choosing Between `query()` and `ClaudeSDKClient`
+
+The Python SDK provides two ways to interact with Claude Code:
+
+### Quick Comparison
+
+| Feature | `query()` | `ClaudeSDKClient` |
+| :------------------ | :---------------------------- | :--------------------------------- |
+| **Session** | Creates new session each time | Reuses same session |
+| **Conversation** | Single exchange | Multiple exchanges in same context |
+| **Connection** | Managed automatically | Manual control |
+| **Streaming Input** | ✅ Supported | ✅ Supported |
+| **Interrupts** | ❌ Not supported | ✅ Supported |
+| **Hooks** | ❌ Not supported | ✅ Supported |
+| **Custom Tools** | ❌ Not supported | ✅ Supported |
+| **Continue Chat** | ❌ New session each time | ✅ Maintains conversation |
+| **Use Case** | One-off tasks | Continuous conversations |
+
+### When to Use `query()` (New Session Each Time)
+
+**Best for:**
+
+* One-off questions where you don't need conversation history
+* Independent tasks that don't require context from previous exchanges
+* Simple automation scripts
+* When you want a fresh start each time
+
+### When to Use `ClaudeSDKClient` (Continuous Conversation)
+
+**Best for:**
+
+* **Continuing conversations** - When you need Claude to remember context
+* **Follow-up questions** - Building on previous responses
+* **Interactive applications** - Chat interfaces, REPLs
+* **Response-driven logic** - When next action depends on Claude's response
+* **Session control** - Managing conversation lifecycle explicitly
+
## Functions
### `query()`
-The primary async function for interacting with Claude Code. Returns an async iterator that yields messages as they arrive.
+Creates a new session for each interaction with Claude Code. Returns an async iterator that yields messages as they arrive. Each call to `query()` starts fresh with no memory of previous interactions.
```python
async def query(
@@ -27,19 +64,6 @@ async def query(
Returns an `AsyncIterator[Message]` that yields messages from the conversation.
-#### Example - Simple query
-
-```python
-import asyncio
-from claude_code_sdk import query
-
-async def main():
- async for message in query(prompt="What is 2+2?"):
- print(message)
-
-asyncio.run(main())
-```
-
#### Example - With options
```python
@@ -187,7 +211,16 @@ options = ClaudeCodeOptions(
### `ClaudeSDKClient`
-Client for bidirectional, interactive conversations with Claude Code. Provides full control over conversation flow with support for streaming, interrupts, and dynamic message sending.
+**Maintains a conversation session across multiple exchanges.** This is the Python equivalent of how the TypeScript SDK's `query()` function works internally - it creates a client object that can continue conversations.
+
+#### Key Features
+
+* **Session Continuity**: Maintains conversation context across multiple `query()` calls
+* **Same Conversation**: Claude remembers previous messages in the session
+* **Interrupt Support**: Can stop Claude mid-execution
+* **Explicit Lifecycle**: You control when the session starts and ends
+* **Response-driven Flow**: Can react to responses and send follow-ups
+* **Custom Tools & Hooks**: Supports custom tools (created with `@tool` decorator) and hooks
```python
class ClaudeSDKClient:
@@ -225,7 +258,7 @@ async with ClaudeSDKClient() as client:
> **Important:** When iterating over messages, avoid using `break` to exit early as this can cause asyncio cleanup issues. Instead, let the iteration complete naturally or use flags to track when you've found what you need.
-#### Example - Interactive conversation
+#### Example - Continuing a conversation
```python
import asyncio
@@ -233,20 +266,151 @@ from claude_code_sdk import ClaudeSDKClient, AssistantMessage, TextBlock, Result
async def main():
async with ClaudeSDKClient() as client:
- # Send initial message
- await client.query("Let's solve a math problem step by step")
+ # First question
+ await client.query("What's the capital of France?")
- # Receive and process response
+ # Process response
async for message in client.receive_response():
if isinstance(message, AssistantMessage):
for block in message.content:
if isinstance(block, TextBlock):
- print(f"Assistant: {block.text[:100]}...")
- elif isinstance(message, ResultMessage):
- print("Response complete")
+ print(f"Claude: {block.text}")
+
+ # Follow-up question - Claude remembers the previous context
+ await client.query("What's the population of that city?")
- # Send follow-up based on response
- await client.query("What's 15% of 80?")
+ async for message in client.receive_response():
+ if isinstance(message, AssistantMessage):
+ for block in message.content:
+ if isinstance(block, TextBlock):
+ print(f"Claude: {block.text}")
+
+ # Another follow-up - still in the same conversation
+ await client.query("What are some famous landmarks there?")
+
+ async for message in client.receive_response():
+ if isinstance(message, AssistantMessage):
+ for block in message.content:
+ if isinstance(block, TextBlock):
+ print(f"Claude: {block.text}")
+
+asyncio.run(main())
+```
+
+#### Example - Streaming input with ClaudeSDKClient
+
+```python
+import asyncio
+from claude_code_sdk import ClaudeSDKClient
+
+async def message_stream():
+ """Generate messages dynamically."""
+ yield {"type": "text", "text": "Analyze the following data:"}
+ await asyncio.sleep(0.5)
+ yield {"type": "text", "text": "Temperature: 25°C"}
+ await asyncio.sleep(0.5)
+ yield {"type": "text", "text": "Humidity: 60%"}
+ await asyncio.sleep(0.5)
+ yield {"type": "text", "text": "What patterns do you see?"}
+
+async def main():
+ async with ClaudeSDKClient() as client:
+ # Stream input to Claude
+ await client.query(message_stream())
+
+ # Process response
+ async for message in client.receive_response():
+ print(message)
+
+ # Follow-up in same session
+ await client.query("Should we be concerned about these readings?")
+
+ async for message in client.receive_response():
+ print(message)
+
+asyncio.run(main())
+```
+
+#### Example - Using interrupts
+
+```python
+import asyncio
+from claude_code_sdk import ClaudeSDKClient, ClaudeCodeOptions
+
+async def interruptible_task():
+ options = ClaudeCodeOptions(
+ allowed_tools=["Bash"],
+ permission_mode="acceptEdits"
+ )
+
+ async with ClaudeSDKClient(options=options) as client:
+ # Start a long-running task
+ await client.query("Count from 1 to 100 slowly")
+
+ # Let it run for a bit
+ await asyncio.sleep(2)
+
+ # Interrupt the task
+ await client.interrupt()
+ print("Task interrupted!")
+
+ # Send a new command
+ await client.query("Just say hello instead")
+
+ async for message in client.receive_response():
+ # Process the new response
+ pass
+
+asyncio.run(interruptible_task())
+```
+
+#### Example - Advanced permission control
+
+```python
+from claude_code_sdk import (
+ ClaudeSDKClient,
+ ClaudeCodeOptions,
+ PermissionResultAllow,
+ PermissionResultDeny,
+ ToolPermissionContext
+)
+
+async def custom_permission_handler(
+ tool_name: str,
+ input_data: dict,
+ context: ToolPermissionContext
+):
+ """Custom logic for tool permissions."""
+
+ # Block writes to system directories
+ if tool_name == "Write" and input_data.get("file_path", "").startswith("/system/"):
+ return PermissionResultDeny(
+ message="System directory write not allowed",
+ interrupt=True
+ )
+
+ # Redirect sensitive file operations
+ if tool_name in ["Write", "Edit"] and "config" in input_data.get("file_path", ""):
+ safe_path = f"./sandbox/{input_data['file_path']}"
+ return PermissionResultAllow(
+ updated_input={**input_data, "file_path": safe_path}
+ )
+
+ # Allow everything else
+ return PermissionResultAllow()
+
+async def main():
+ options = ClaudeCodeOptions(
+ can_use_tool=custom_permission_handler,
+ allowed_tools=["Read", "Write", "Edit"]
+ )
+
+ async with ClaudeSDKClient(options=options) as client:
+ await client.query("Update the system config file")
+
+ async for message in client.receive_response():
+ # Will use sandbox path instead
+ print(message)
asyncio.run(main())
```
@@ -1144,9 +1308,215 @@ Documentation of input/output schemas for all built-in Claude Code tools. While
}
```
+## Advanced Features with ClaudeSDKClient
+
+### Building a Continuous Conversation Interface
+
+```python
+from claude_code_sdk import ClaudeSDKClient, ClaudeCodeOptions, AssistantMessage, TextBlock
+import asyncio
+
+class ConversationSession:
+ """Maintains a single conversation session with Claude."""
+
+ def __init__(self, options: ClaudeCodeOptions = None):
+ self.client = ClaudeSDKClient(options)
+ self.turn_count = 0
+
+ async def start(self):
+ await self.client.connect()
+ print("Starting conversation session. Claude will remember context.")
+ print("Commands: 'exit' to quit, 'interrupt' to stop current task, 'new' for new session")
+
+ while True:
+ user_input = input(f"\n[Turn {self.turn_count + 1}] You: ")
+
+ if user_input.lower() == 'exit':
+ break
+ elif user_input.lower() == 'interrupt':
+ await self.client.interrupt()
+ print("Task interrupted!")
+ continue
+ elif user_input.lower() == 'new':
+ # Disconnect and reconnect for a fresh session
+ await self.client.disconnect()
+ await self.client.connect()
+ self.turn_count = 0
+ print("Started new conversation session (previous context cleared)")
+ continue
+
+ # Send message - Claude remembers all previous messages in this session
+ await self.client.query(user_input)
+ self.turn_count += 1
+
+ # Process response
+ print(f"[Turn {self.turn_count}] Claude: ", end="")
+ async for message in self.client.receive_response():
+ if isinstance(message, AssistantMessage):
+ for block in message.content:
+ if isinstance(block, TextBlock):
+ print(block.text, end="")
+ print() # New line after response
+
+ await self.client.disconnect()
+ print(f"Conversation ended after {self.turn_count} turns.")
+
+async def main():
+ options = ClaudeCodeOptions(
+ allowed_tools=["Read", "Write", "Bash"],
+ permission_mode="acceptEdits"
+ )
+ session = ConversationSession(options)
+ await session.start()
+
+# Example conversation:
+# Turn 1 - You: "Create a file called hello.py"
+# Turn 1 - Claude: "I'll create a hello.py file for you..."
+# Turn 2 - You: "What's in that file?"
+# Turn 2 - Claude: "The hello.py file I just created contains..." (remembers!)
+# Turn 3 - You: "Add a main function to it"
+# Turn 3 - Claude: "I'll add a main function to hello.py..." (knows which file!)
+
+asyncio.run(main())
+```
+
+### Using Hooks for Behavior Modification
+
+```python
+from claude_code_sdk import (
+ ClaudeSDKClient,
+ ClaudeCodeOptions,
+ HookMatcher,
+ HookContext
+)
+import asyncio
+from typing import Any
+
+async def pre_tool_logger(
+ input_data: dict[str, Any],
+ tool_use_id: str | None,
+ context: HookContext
+) -> dict[str, Any]:
+ """Log all tool usage before execution."""
+ tool_name = input_data.get('tool_name', 'unknown')
+ print(f"[PRE-TOOL] About to use: {tool_name}")
+
+ # You can modify or block the tool execution here
+ if tool_name == "Bash" and "rm -rf" in str(input_data.get('tool_input', {})):
+ return {
+ 'hookSpecificOutput': {
+ 'hookEventName': 'PreToolUse',
+ 'permissionDecision': 'deny',
+ 'permissionDecisionReason': 'Dangerous command blocked'
+ }
+ }
+ return {}
+
+async def post_tool_logger(
+ input_data: dict[str, Any],
+ tool_use_id: str | None,
+ context: HookContext
+) -> dict[str, Any]:
+ """Log results after tool execution."""
+ tool_name = input_data.get('tool_name', 'unknown')
+ print(f"[POST-TOOL] Completed: {tool_name}")
+ return {}
+
+async def user_prompt_modifier(
+ input_data: dict[str, Any],
+ tool_use_id: str | None,
+ context: HookContext
+) -> dict[str, Any]:
+ """Add context to user prompts."""
+ original_prompt = input_data.get('prompt', '')
+
+ # Add timestamp to all prompts
+ from datetime import datetime
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+
+ return {
+ 'hookSpecificOutput': {
+ 'hookEventName': 'UserPromptSubmit',
+ 'updatedPrompt': f"[{timestamp}] {original_prompt}"
+ }
+ }
+
+async def main():
+ options = ClaudeCodeOptions(
+ hooks={
+ 'PreToolUse': [
+ HookMatcher(hooks=[pre_tool_logger]),
+ HookMatcher(matcher='Bash', hooks=[pre_tool_logger])
+ ],
+ 'PostToolUse': [
+ HookMatcher(hooks=[post_tool_logger])
+ ],
+ 'UserPromptSubmit': [
+ HookMatcher(hooks=[user_prompt_modifier])
+ ]
+ },
+ allowed_tools=["Read", "Write", "Bash"]
+ )
+
+ async with ClaudeSDKClient(options=options) as client:
+ await client.query("List files in current directory")
+
+ async for message in client.receive_response():
+ # Hooks will automatically log tool usage
+ pass
+
+asyncio.run(main())
+```
+
+### Real-time Progress Monitoring
+
+```python
+from claude_code_sdk import (
+ ClaudeSDKClient,
+ ClaudeCodeOptions,
+ AssistantMessage,
+ ToolUseBlock,
+ ToolResultBlock,
+ TextBlock
+)
+import asyncio
+
+async def monitor_progress():
+ options = ClaudeCodeOptions(
+ allowed_tools=["Write", "Bash"],
+ permission_mode="acceptEdits"
+ )
+
+ async with ClaudeSDKClient(options=options) as client:
+ await client.query(
+ "Create 5 Python files with different sorting algorithms"
+ )
+
+ # Monitor progress in real-time
+ files_created = []
+ async for message in client.receive_messages():
+ if isinstance(message, AssistantMessage):
+ for block in message.content:
+ if isinstance(block, ToolUseBlock):
+ if block.name == "Write":
+ file_path = block.input.get("file_path", "")
+ print(f"🔨 Creating: {file_path}")
+ elif isinstance(block, ToolResultBlock):
+ print(f"✅ Completed tool execution")
+ elif isinstance(block, TextBlock):
+ print(f"💭 Claude says: {block.text[:100]}...")
+
+ # Check if we've received the final result
+ if hasattr(message, 'subtype') and message.subtype in ['success', 'error']:
+ print(f"\n🎯 Task completed!")
+ break
+
+asyncio.run(monitor_progress())
+```
+
## Example Usage
-### Basic file operations
+### Basic file operations (using query)
```python
from claude_code_sdk import query, ClaudeCodeOptions, AssistantMessage, ToolUseBlock
@@ -1217,11 +1587,11 @@ async def interactive_session():
asyncio.run(interactive_session())
```
-### Using custom tools
+### Using custom tools with ClaudeSDKClient
```python
from claude_code_sdk import (
- query,
+ ClaudeSDKClient,
ClaudeCodeOptions,
tool,
create_sdk_mcp_server,
@@ -1279,15 +1649,25 @@ async def main():
]
)
- # Query Claude with custom tools available
- async for message in query(
- prompt="What's 123 * 456 and what time is it?",
- options=options
- ):
- if isinstance(message, AssistantMessage):
- for block in message.content:
- if isinstance(block, TextBlock):
- print(block.text)
+ # Use ClaudeSDKClient for interactive tool usage
+ async with ClaudeSDKClient(options=options) as client:
+ await client.query("What's 123 * 456?")
+
+ # Process calculation response
+ async for message in client.receive_response():
+ if isinstance(message, AssistantMessage):
+ for block in message.content:
+ if isinstance(block, TextBlock):
+ print(f"Calculation: {block.text}")
+
+ # Follow up with time query
+ await client.query("What time is it now?")
+
+ async for message in client.receive_response():
+ if isinstance(message, AssistantMessage):
+ for block in message.content:
+ if isinstance(block, TextBlock):
+ print(f"Time: {block.text}")
asyncio.run(main())
```
diff --git a/content/claude-code-docs/sdk/sdk-slash-commands.md b/content/claude-code-docs/sdk/sdk-slash-commands.md
index 024706606..426214101 100644
--- a/content/claude-code-docs/sdk/sdk-slash-commands.md
+++ b/content/claude-code-docs/sdk/sdk-slash-commands.md
@@ -25,7 +25,7 @@ The Claude Code SDK provides information about available slash commands in the s
```python Python
import asyncio
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async def main():
async for message in query(
@@ -61,7 +61,7 @@ Send slash commands by including them in your prompt string, just like regular t
```python Python
import asyncio
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async def main():
# Send a slash command
@@ -100,7 +100,7 @@ The `/compact` command reduces the size of your conversation history by summariz
```python Python
import asyncio
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async def main():
async for message in query(
@@ -140,7 +140,7 @@ The `/clear` command starts a fresh conversation by clearing all previous histor
```python Python
import asyncio
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async def main():
# Clear conversation and start fresh
@@ -237,7 +237,7 @@ Once defined in the filesystem, custom commands are automatically available thro
```python Python
import asyncio
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async def main():
# Use a custom command
@@ -300,7 +300,7 @@ Use in SDK:
```python Python
import asyncio
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async def main():
# Pass arguments to custom command
@@ -448,7 +448,7 @@ Use these commands through the SDK:
```python Python
import asyncio
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async def main():
# Run code review
diff --git a/content/claude-code-docs/sdk/streaming-vs-single-mode.md b/content/claude-code-docs/sdk/streaming-vs-single-mode.md
index a4e6c7d31..498c9ea31 100644
--- a/content/claude-code-docs/sdk/streaming-vs-single-mode.md
+++ b/content/claude-code-docs/sdk/streaming-vs-single-mode.md
@@ -20,22 +20,30 @@ It allows the agent to operate as a long lived process that takes in user input,
### How It Works
```mermaid
+%%{init: {"theme": "base", "themeVariables": {"edgeLabelBackground": "#F0F0EB", "lineColor": "#91918D", "primaryColor": "#F0F0EB", "primaryTextColor": "#191919", "primaryBorderColor": "#D9D8D5", "secondaryColor": "#F5E6D8", "tertiaryColor": "#CC785C", "noteBkgColor": "#FAF0E6", "noteBorderColor": "#91918D"}, "sequence": {"actorMargin": 50, "width": 150, "height": 65, "boxMargin": 10, "boxTextMargin": 5, "noteMargin": 10, "messageMargin": 35}}}%%
sequenceDiagram
participant App as Your Application
participant Agent as Claude Agent
participant Tools as Tools/Hooks
+ participant FS as Environment/
File System
App->>Agent: Initialize with AsyncGenerator
activate Agent
App->>Agent: Yield Message 1
Agent->>Tools: Execute tools
+ Tools->>FS: Read files
+ FS-->>Tools: File contents
+ Tools->>FS: Write/Edit files
+ FS-->>Tools: Success/Error
Agent-->>App: Stream partial response
Agent-->>App: Stream more content...
Agent->>App: Complete Message 1
App->>Agent: Yield Message 2 + Image
Agent->>Tools: Process image & execute
+ Tools->>FS: Access filesystem
+ FS-->>Tools: Operation results
Agent-->>App: Stream response 2
App->>Agent: Queue Message 3
@@ -43,6 +51,7 @@ sequenceDiagram
Agent->>App: Handle interruption
Note over App,Agent: Session stays alive
+ Note over Tools,FS: Persistent file system
state maintained
deactivate Agent
```
@@ -133,8 +142,9 @@ sequenceDiagram
```
```python Python
- from anthropic_claude_code import query, ClaudeCodeOptions
+ from claude_code_sdk import ClaudeSDKClient, ClaudeCodeOptions, AssistantMessage, TextBlock
import asyncio
+ import base64
async def streaming_analysis():
async def message_generator():
@@ -150,25 +160,49 @@ sequenceDiagram
# Wait for conditions
await asyncio.sleep(2)
- # Follow-up message
+ # Follow-up with image
+ with open("diagram.png", "rb") as f:
+ image_data = base64.b64encode(f.read()).decode()
+
yield {
- "type": "user",
+ "type": "user",
"message": {
"role": "user",
- "content": "Check for authentication vulnerabilities"
+ "content": [
+ {
+ "type": "text",
+ "text": "Review this architecture diagram"
+ },
+ {
+ "type": "image",
+ "source": {
+ "type": "base64",
+ "media_type": "image/png",
+ "data": image_data
+ }
+ }
+ ]
}
}
- # Process streaming responses
- async for message in query(
- prompt=message_generator(),
- options=ClaudeCodeOptions(
- max_turns=10,
- allowed_tools=["Read", "Grep"]
- )
- ):
- if hasattr(message, 'result'):
- print(message.result)
+ # Use ClaudeSDKClient for streaming input
+ options = ClaudeCodeOptions(
+ max_turns=10,
+ allowed_tools=["Read", "Grep"]
+ )
+
+ async with ClaudeSDKClient(options) as client:
+ # Send streaming input
+ await client.query(message_generator())
+
+ # Process responses
+ async for message in client.receive_response():
+ if isinstance(message, AssistantMessage):
+ for block in message.content:
+ if isinstance(block, TextBlock):
+ print(block.text)
+
+ asyncio.run(streaming_analysis())
```
@@ -230,28 +264,32 @@ Use single message input when:
```
```python Python
- from anthropic_claude_code import query, ClaudeCodeOptions
+ from claude_code_sdk import query, ClaudeCodeOptions, ResultMessage
+ import asyncio
- # Simple one-shot query
- async for message in query(
- prompt="Explain the authentication flow",
- options=ClaudeCodeOptions(
- max_turns=1,
- allowed_tools=["Read", "Grep"]
- )
- ):
- if hasattr(message, 'result'):
- print(message.result)
-
- # Continue with session management
- async for message in query(
- prompt="Now explain the authorization process",
- options=ClaudeCodeOptions(
- continue_conversation=True,
- max_turns=1
- )
- ):
- if hasattr(message, 'result'):
- print(message.result)
+ async def single_message_example():
+ # Simple one-shot query using query() function
+ async for message in query(
+ prompt="Explain the authentication flow",
+ options=ClaudeCodeOptions(
+ max_turns=1,
+ allowed_tools=["Read", "Grep"]
+ )
+ ):
+ if isinstance(message, ResultMessage):
+ print(message.result)
+
+ # Continue conversation with session management
+ async for message in query(
+ prompt="Now explain the authorization process",
+ options=ClaudeCodeOptions(
+ continue_conversation=True,
+ max_turns=1
+ )
+ ):
+ if isinstance(message, ResultMessage):
+ print(message.result)
+
+ asyncio.run(single_message_example())
```
diff --git a/content/claude-code-docs/sdk/todo-tracking.md b/content/claude-code-docs/sdk/todo-tracking.md
index 3f9cdc2cb..ce5b14dc9 100644
--- a/content/claude-code-docs/sdk/todo-tracking.md
+++ b/content/claude-code-docs/sdk/todo-tracking.md
@@ -49,7 +49,7 @@ The SDK automatically creates todos for:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
async for message in query(
prompt="Optimize my React app performance and track progress with todos",
@@ -113,7 +113,7 @@ The SDK automatically creates todos for:
```
```python Python
- from anthropic_claude_code import query
+ from claude_code_sdk import query
from typing import List, Dict
class TodoTracker: