diff --git a/content/.metadata.json b/content/.metadata.json index 4f0ec5cb..fcab5fd5 100644 --- a/content/.metadata.json +++ b/content/.metadata.json @@ -1,7 +1,7 @@ { "metadata": { "version": "1.0", - "fetch_date": "2026-03-23T11:36:12.875385Z" + "fetch_date": "2026-03-24T03:28:57.424453Z" }, "items": [ { @@ -281,8 +281,8 @@ "url": "https://platform.claude.com/docs/en/build-with-claude/context-editing", "status": "success", "path": "en/build-with-claude/context-editing.md", - "sha256": "fde9ce1ce92685ff0e58df5443cc6b09cc80f0434ed5b154063f57793572f1c3", - "size": 82780 + "sha256": "b53de0eff1a569c25b5aea8d8db2417c5432f798a2e1a885fd203d7aa4ab6be3", + "size": 76632 }, { "url": "https://platform.claude.com/docs/en/build-with-claude/prompt-caching", @@ -389,6 +389,27 @@ "sha256": "26ff7769a888bec8d19806a3a371b1273780d2b4a64b1839e85c581f244059e6", "size": 14531 }, + { + "url": "https://platform.claude.com/docs/en/agent-sdk/mcp", + "status": "success", + "path": "en/agent-sdk/mcp.md", + "sha256": "5d14acb6084469798cd0fa2c56f495bf595eaae07afa82a51647601edce6d5a3", + "size": 23014 + }, + { + "url": "https://platform.claude.com/docs/en/agent-sdk/custom-tools", + "status": "success", + "path": "en/agent-sdk/custom-tools.md", + "sha256": "b15d4fd831df1692c6515296cc219e6258f4d298e7cbb04472b2b24c103b356f", + "size": 31219 + }, + { + "url": "https://platform.claude.com/docs/en/agent-sdk/tool-search", + "status": "success", + "path": "en/agent-sdk/tool-search.md", + "sha256": "cf80a6490afc1e57b5920a08d5d418a6eef651090d0a46c37e917bafecb0d308", + "size": 6445 + }, { "url": "https://platform.claude.com/docs/en/agent-sdk/permissions", "status": "success", @@ -400,8 +421,8 @@ "url": "https://platform.claude.com/docs/en/agent-sdk/user-input", "status": "success", "path": "en/agent-sdk/user-input.md", - "sha256": "45ca422f0af0ca77cfc46fb0d816159ecd89e6a01a01dc951e61408a488425dd", - "size": 30700 + "sha256": "e6e173cbbad614a83010b94dd4bfdc103a8c32b1828331c2063cf4980e3557cf", + "size": 31278 }, { "url": "https://platform.claude.com/docs/en/agent-sdk/hooks", @@ -445,20 +466,6 @@ "sha256": "a6d98fe2611720a367b7b80cdd522d62ee191c2cd2d748205a256e498362bd4c", "size": 14998 }, - { - "url": "https://platform.claude.com/docs/en/agent-sdk/mcp", - "status": "success", - "path": "en/agent-sdk/mcp.md", - "sha256": "ca09a5daef76363f8509cb958455841c07aa91c9183a07efbe618a629a6108fe", - "size": 24378 - }, - { - "url": "https://platform.claude.com/docs/en/agent-sdk/custom-tools", - "status": "success", - "path": "en/agent-sdk/custom-tools.md", - "sha256": "9ec8013ef1a26daf9c2b09ec7dbe9f4b7703735234190e2285be57885db6c9d9", - "size": 22184 - }, { "url": "https://platform.claude.com/docs/en/agent-sdk/subagents", "status": "success", @@ -505,8 +512,8 @@ "url": "https://platform.claude.com/docs/en/agent-sdk/typescript", "status": "success", "path": "en/agent-sdk/typescript.md", - "sha256": "ff33e85ab91f95874ea685bbdf52a96f9bbc565781a195365216000d9a0232f2", - "size": 69161 + "sha256": "8e48a990a1d2730ab813851fd350abd4006fe78d1ba3573081e84a011e7f7a53", + "size": 70891 }, { "url": "https://platform.claude.com/docs/en/agent-sdk/typescript-v2-preview", @@ -519,8 +526,8 @@ "url": "https://platform.claude.com/docs/en/agent-sdk/python", "status": "success", "path": "en/agent-sdk/python.md", - "sha256": "9f513f1154a930a2bd176d0b96b5b2547a29dfbb3377dfb6cd7c2e1d41aa2dfd", - "size": 100032 + "sha256": "018b8ec2a0c9da28f888cb9b33b4849167983ce9c0bb711f38e7631fc2186443", + "size": 103982 }, { "url": "https://platform.claude.com/docs/en/agent-sdk/migration-guide", @@ -2752,946 +2759,946 @@ "url": "https://platform.claude.com/docs/en/api/terraform/completions", "status": "success", "path": "en/api/terraform/completions.md", - "sha256": "41b86ceb4a5e73908df5ae15fe1c47ab8c3eaa3f72a38e8714af09d71c07124e", - "size": 81752 + "sha256": "1de87aa74c40d602ef7acd009befa8abcf90363a958a32d342fc322f14b4b955", + "size": 81893 }, { "url": "https://platform.claude.com/docs/en/api/terraform/completions/create", "status": "success", "path": "en/api/terraform/completions/create.md", - "sha256": "223bcb78588e3b4fdcb4ae8fcad52334c85b6b0d3d58e5cccc547fa2d831c742", - "size": 81777 + "sha256": "83d9c0956001e4c7696395af6fec9b442464202db18ea37c5a64ff2a14ffe310", + "size": 81918 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages", "status": "success", "path": "en/api/terraform/messages.md", - "sha256": "ec551ad40b9f2f9c22cf111f364cafc03d07e5ee8bea2ced109dbb5a46a8d10a", - "size": 81743 + "sha256": "1237794a50e59a8389fdf01c48009138fdccd9f9d29bb0169920c19146def051", + "size": 81884 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages/create", "status": "success", "path": "en/api/terraform/messages/create.md", - "sha256": "1c8791dc1002234c9a49688e084618c3a33cb5da7f86d7c9650fe47f25fd9878", - "size": 81768 + "sha256": "dd6f9069ce6995e355c2d7cfb787f72b1a05761e9f3e73c319e456ccb481aab8", + "size": 81909 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages/count_tokens", "status": "success", "path": "en/api/terraform/messages/count_tokens.md", - "sha256": "235976feee48a32ccb23b1f8df22b2f86452f31d1a87c5477e4e4f95da2c133a", - "size": 81786 + "sha256": "a53a5f75eb58cb1bd8b84a5aa32e86ed041025b8f2f78fe62fba58ca3e928fbc", + "size": 81927 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages/batches", "status": "success", "path": "en/api/terraform/messages/batches.md", - "sha256": "5d357eb665346db8710ae2bd47df3b09a1cf0143dec3e95c86703594c39a5af3", - "size": 81771 + "sha256": "e2d928e4d30826202ede668ad13fb0b31db4a2db2e8720b0d4d5143a6e4f9f0c", + "size": 81912 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages/batches/create", "status": "success", "path": "en/api/terraform/messages/batches/create.md", - "sha256": "d24f59251d0d61ce217d6512962aed9b547d75d540ed98475307278d3ed035ff", - "size": 81796 + "sha256": "e028cff9ff9f8daa9dfea4803944d1ebe81fb80aa81c5eb7e2e86500efd5992f", + "size": 81937 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages/batches/retrieve", "status": "success", "path": "en/api/terraform/messages/batches/retrieve.md", - "sha256": "75fc36a56b426491b66c7bf303f8f8885f5c77d1c1b10ecb7f65a4c6d90a2e6a", - "size": 81802 + "sha256": "a230dc8faad007aeac4f5f58a6764c5b1b592cb621b9692f0d88c91bdad25d85", + "size": 81943 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages/batches/list", "status": "success", "path": "en/api/terraform/messages/batches/list.md", - "sha256": "5999cb8a14d8ca34a8f55f1bf9f2769a5cf95614dce94ebd5e9f00452134af1c", - "size": 81790 + "sha256": "e9e8e03247e139b79fbbd648edb293b2f8a579d8beafb3cbfd1fea124be94f52", + "size": 81931 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages/batches/cancel", "status": "success", "path": "en/api/terraform/messages/batches/cancel.md", - "sha256": "68d125e445980703b95bc092c37a16a41b2506f5d7b3657af00dc26909c5d66f", - "size": 81796 + "sha256": "17b1b7f6d2d1d12e208ba6e96b2d4b7b088f148aebd4b901cdbcbedcc7d747d8", + "size": 81937 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages/batches/delete", "status": "success", "path": "en/api/terraform/messages/batches/delete.md", - "sha256": "61dd25c34055ceaa89ecd68fd41d5c5befccb56ce30a12a496a4ab04d419e232", - "size": 81796 + "sha256": "b220e948b3f6a075fdf5831595a307bcc90bd53de54f6372a19cd77bc6cd7595", + "size": 81937 }, { "url": "https://platform.claude.com/docs/en/api/terraform/messages/batches/results", "status": "success", "path": "en/api/terraform/messages/batches/results.md", - "sha256": "5149b7885f8bc869015fc8d3b77dca8a3a118c7c3407148ccd51226278c2655e", - "size": 81799 + "sha256": "6f778126891956d6d895cbc63bf0d634383abdd12573df7d8dad71cc7f558685", + "size": 81940 }, { "url": "https://platform.claude.com/docs/en/api/terraform/models", "status": "success", "path": "en/api/terraform/models.md", - "sha256": "e046fc88ea67fb42a55873a512ff13a852c2a6aa7c71be4bb4af3424504ddcfa", - "size": 81737 + "sha256": "bfc51f46dacebc5775d0a5761571dcedc7437e17727f439a7081d2278925f1c8", + "size": 81878 }, { "url": "https://platform.claude.com/docs/en/api/terraform/models/list", "status": "success", "path": "en/api/terraform/models/list.md", - "sha256": "b0f15b0ced21d3d835baec71c41a6dd3797c09968ed15cdeb187d39a8d364b80", - "size": 81756 + "sha256": "ee4b316dbcccfe67e0d8ff488eef6fbc9fff9c466d8101aaf3342d5906ba2f72", + "size": 81897 }, { "url": "https://platform.claude.com/docs/en/api/terraform/models/retrieve", "status": "success", "path": "en/api/terraform/models/retrieve.md", - "sha256": "3a2c321d58002724fe9ff3a742edb1fca9922fad18e76460e2a2e7addc0baf05", - "size": 81768 + "sha256": "c6cd5a47f29c3533d4b5da63148eb1accf61c76118f9dbeed60d5ea1a6431a33", + "size": 81909 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta", "status": "success", "path": "en/api/terraform/beta.md", - "sha256": "2759fa2d7ffe2ae70199b7457f30451633184351ebceea76a90d480ec2961fe2", - "size": 81731 + "sha256": "124bc42ed89331a0a0dc5456dd31d2109380911bf6b35d3417780d1f45ede821", + "size": 81872 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/models", "status": "success", "path": "en/api/terraform/beta/models.md", - "sha256": "65a4bae44341856388b6e0bbfffc38bc10e9936c27c3dbcc78a7520da4cc5af5", - "size": 81756 + "sha256": "eee26c59287bbf183d2183991fac1a99f9c10b62e994aa53ca52f67eccfc9696", + "size": 81897 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/models/list", "status": "success", "path": "en/api/terraform/beta/models/list.md", - "sha256": "f2315625a1cfc0437970bedbdcd34bba0d62809e539bf5f822bcc327a74dc5a5", - "size": 81775 + "sha256": "3767b0f78f53e5a4e619c4fa9040569bdead6a6562e616c873f9d90f66e6005c", + "size": 81916 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/models/retrieve", "status": "success", "path": "en/api/terraform/beta/models/retrieve.md", - "sha256": "fff9e78823b84652125f2445c6f620b275e67eb8facaafd3434a1da248dc6fa9", - "size": 81787 + "sha256": "bbce8823b3c73ab6868345f06c2ef1f8255564488183b9807a3e3d977d37dede", + "size": 81928 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages", "status": "success", "path": "en/api/terraform/beta/messages.md", - "sha256": "9804155644ad33e7aeb5390f6b98551217152d79671656f058ec476a7ed24f1d", - "size": 81762 + "sha256": "f68189e654b3771b9df32c9dac6242826e6b6320e44c9ccf8688d800778c9417", + "size": 81903 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages/create", "status": "success", "path": "en/api/terraform/beta/messages/create.md", - "sha256": "a4499441b7f601da94884afa6add410cb68078cbccc8c53f4d0d9694fb6502ae", - "size": 81787 + "sha256": "8835c78df83f71a4bc28173eab1f77ef6798720a4d77e63d8395919e28f80196", + "size": 81928 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages/count_tokens", "status": "success", "path": "en/api/terraform/beta/messages/count_tokens.md", - "sha256": "7f21161310dce2be4b4b65939e9431f0feebe7bfd5c797fbcf9e3ff4b1ba0a93", - "size": 81805 + "sha256": "4516c99b6fa81e32518628e859e8c3542e44df66c96bded8c39368909aa8eb7c", + "size": 81946 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages/batches", "status": "success", "path": "en/api/terraform/beta/messages/batches.md", - "sha256": "c041f9a91e83688cfde9c8db3b3b3d1cc6a48494ac256d0ddb04ec069f036ea1", - "size": 81790 + "sha256": "bea08272e79dd7e55147ea00063acbe020edc4a7c14666be85de02aa22d08cfa", + "size": 81931 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages/batches/create", "status": "success", "path": "en/api/terraform/beta/messages/batches/create.md", - "sha256": "3469a7dbb2c3e9ea161ac840e6247bea24d328c454a602a8def7eba5b0d2c5e0", - "size": 81815 + "sha256": "7d4147159ef5ae48ce76f40f9941216d00b1b5e67dafaef9b4e09cae681d08e7", + "size": 81956 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages/batches/retrieve", "status": "success", "path": "en/api/terraform/beta/messages/batches/retrieve.md", - "sha256": "70a78420bc0ab9bbb271372573196d47b9cc4e710aa1e1a3ce150c5a153980d4", - "size": 81821 + "sha256": "61423664f0e160d04c4c13f210cd298f251e80d21db085c2edad11285f7c459b", + "size": 81962 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages/batches/list", "status": "success", "path": "en/api/terraform/beta/messages/batches/list.md", - "sha256": "2c9b9e40dedef7525da27146c6efd0d55f0067071224f1931ed921dc4a7e1206", - "size": 81809 + "sha256": "d434cd4c78231159a9c3721d6705dc65be69d0c2dd8a89335bb4204b8bc96553", + "size": 81950 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages/batches/cancel", "status": "success", "path": "en/api/terraform/beta/messages/batches/cancel.md", - "sha256": "2ef3be1f5536f6408218680dc9484a2b0aecc40bcddf634e4ded80accfbd7bf6", - "size": 81815 + "sha256": "220df32d40aca74d7522c72133fbeaba22d3a4f5cceb0ff67d0149e6497448a2", + "size": 81956 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages/batches/delete", "status": "success", "path": "en/api/terraform/beta/messages/batches/delete.md", - "sha256": "09cb27a294bf623f8e1a1d1976f254011e7dd8702a8b1479ef740071360d4c28", - "size": 81815 + "sha256": "5c3f734a75b8d04ef0399d65ad223f6fbb224370897d4a2a9b72cfe5ab7e0d4c", + "size": 81956 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/messages/batches/results", "status": "success", "path": "en/api/terraform/beta/messages/batches/results.md", - "sha256": "ed5a01d6247db1ef04fe234484ee8daba74125883dea568b26023d06c0bd5532", - "size": 81818 + "sha256": "13319b416d16fabf61a86c8648bfa84a5330bf9d7ba634871141b19e74a5da02", + "size": 81959 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/files", "status": "success", "path": "en/api/terraform/beta/files.md", - "sha256": "20c2e5112b108f268a6781e914c0007e62f02df7df145754b0b80f9a553599c3", - "size": 81753 + "sha256": "c777547238870b771bb578b279c0dbf1a7eb489ef8c3501d3c40fd45154b6d3f", + "size": 81894 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/files/upload", "status": "success", "path": "en/api/terraform/beta/files/upload.md", - "sha256": "90bf396bdc8af7fe3de3ceca73a6a70f4c770515e6b035c3b965596af1b025c8", - "size": 81778 + "sha256": "97d1e4742801429dc9fabf278a8238e38213e177dae5a662f57eb89654947bf4", + "size": 81919 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/files/list", "status": "success", "path": "en/api/terraform/beta/files/list.md", - "sha256": "a12ad7cbfb89b3f9c1b9e4336820796663afeeff319578bc8bbb856b97035b86", - "size": 81772 + "sha256": "50711e33fbd4849537cb2a307fce7cc30cad5a8e02bf24b1576fa846de3fe6a4", + "size": 81913 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/files/download", "status": "success", "path": "en/api/terraform/beta/files/download.md", - "sha256": "1114b63731ba402b64f57b1eb55def753848f85e9c596e76ac270a42d912522b", - "size": 81784 + "sha256": "64550a05fef7fbee4a89d4c63521e1cc89ba6c7f4bb2e14b47a1fd884d08b9f4", + "size": 81925 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/files/retrieve_metadata", "status": "success", "path": "en/api/terraform/beta/files/retrieve_metadata.md", - "sha256": "0bd981aebe052d96731d49332a7f56e3b45f580373a223aa39194297d151caa3", - "size": 81811 + "sha256": "181a0fafee4c3fc31f26a4f86d40cef684530b89475d8068880590d6b8d052c0", + "size": 81952 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/files/delete", "status": "success", "path": "en/api/terraform/beta/files/delete.md", - "sha256": "b12d33f30a636e1f85b24a49324d7ab4a9dcc7c98529d131d5a2066572d0e0e7", - "size": 81778 + "sha256": "2d39db04cf9cdee856b5739798f6c56677f099f154ea8db9af589cfd0c2d3cf6", + "size": 81919 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills", "status": "success", "path": "en/api/terraform/beta/skills.md", - "sha256": "51065db02c5496892e54ca89e6c6ea990294c3467131f4f56490642237cbc44a", - "size": 81756 + "sha256": "a8e1824a3463b061d496cc00cdb77f50cbdf547d681b54a859598853254fce64", + "size": 81897 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills/create", "status": "success", "path": "en/api/terraform/beta/skills/create.md", - "sha256": "3e7758a137374d07c77a81a78f3cacb4e90a15cb43d98b2c594576594b6b0784", - "size": 81781 + "sha256": "c30f6517454c1a3774efb52b9b3e7d5a8ff9ccf7f2561593e7f5182a19bfcd42", + "size": 81922 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills/list", "status": "success", "path": "en/api/terraform/beta/skills/list.md", - "sha256": "aad853b2f1e1ad3e674c84d101be56d1aa2c837060237e4727c96c143f60118a", - "size": 81775 + "sha256": "555d7ba1c149d7778edd30738e2e7a752f6ccd14a624f44de2c2c64b4dd2af92", + "size": 81916 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills/retrieve", "status": "success", "path": "en/api/terraform/beta/skills/retrieve.md", - "sha256": "e1341fb541c0cf2aba37548f5a8306863a3506a3b3d7c8e9b3df69c064012a1f", - "size": 81787 + "sha256": "9831d81309a920e928b4b98e971047dfbd67dae42a16dc9b6ef8f9215febd66b", + "size": 81928 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills/delete", "status": "success", "path": "en/api/terraform/beta/skills/delete.md", - "sha256": "d55ea74785bf0e712af84775453e4f4cae3b5996bf838a9a0179816a0276116f", - "size": 81781 + "sha256": "6f19f5f52668052a74bff7d8f41433e3ae475ac312d030c3282e2379ee3c6923", + "size": 81922 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills/versions", "status": "success", "path": "en/api/terraform/beta/skills/versions.md", - "sha256": "1de36a7ea3fb5b7a57e972358caf82f5c27ff46b0cc5893e6af989a5488fe71e", - "size": 81787 + "sha256": "da0536ef844298af80a1d48aba293f83f8bd440864a6f8a9e2fe397417706c68", + "size": 81928 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills/versions/create", "status": "success", "path": "en/api/terraform/beta/skills/versions/create.md", - "sha256": "d33babd256d509e807dcfe9876fa47c293c06ddf642b3ad9d602148c2decdaef", - "size": 81812 + "sha256": "8fe706811db2e29cda723d65bae321ff4ec7c58f281f03aadf727f3164fcd81e", + "size": 81953 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills/versions/list", "status": "success", "path": "en/api/terraform/beta/skills/versions/list.md", - "sha256": "117127a962c2f16981a56760fa4c83248c973fb8a9f7d17c8794303693269ac5", - "size": 81806 + "sha256": "52878993a1eaf87573134f84a14ef37c4abe8feced7d18b15800e02ae01ec039", + "size": 81947 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills/versions/retrieve", "status": "success", "path": "en/api/terraform/beta/skills/versions/retrieve.md", - "sha256": "e032f449379205d5e9ec2e8939be3212a6f1051d88b472fb1de3bd2d4cf01c7e", - "size": 81818 + "sha256": "ac3e82a6685927f220bc9c61a9042bed2dbc3ada6fdf673c88992c87d00ce960", + "size": 81959 }, { "url": "https://platform.claude.com/docs/en/api/terraform/beta/skills/versions/delete", "status": "success", "path": "en/api/terraform/beta/skills/versions/delete.md", - "sha256": "3149fbfd5d9005b955b677d043d6c5405e80c40df99394c5e85a43b02e3de7ba", - "size": 81812 + "sha256": "27aa9186380e9ef877099b4e7c60bf4154b3eede6a6769200ad3d9e4081e3c50", + "size": 81953 }, { "url": "https://platform.claude.com/docs/en/api/cli/completions", "status": "success", "path": "en/api/cli/completions.md", - "sha256": "1396bcf20cc663455d0ad30cc3e08fab452d9fe611162a83a8c3259ad407559a", - "size": 81734 + "sha256": "344abd793e54fef75bff0401e9ce909e02efb8b872d78454ff6b7049dcc37f54", + "size": 81875 }, { "url": "https://platform.claude.com/docs/en/api/cli/completions/create", "status": "success", "path": "en/api/cli/completions/create.md", - "sha256": "6cbc65c612db07272c3ab8874c038c4a1c739a87619577a837a650d96c3dca02", - "size": 81759 + "sha256": "5bb6588c063110aa830ce9cdf143b4d0c5720010a9d896a0e6ef960424d68d27", + "size": 81900 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages", "status": "success", "path": "en/api/cli/messages.md", - "sha256": "08f41c92ef633bfc7f14c14bc50e2715e208dd31eb31e4f74b057ed81505818e", - "size": 81725 + "sha256": "0bdeb0f9658fc6ac18c45c301924b682f1bcc7972f656fbe1683f48660ab2dd9", + "size": 81866 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages/create", "status": "success", "path": "en/api/cli/messages/create.md", - "sha256": "a43c5b4a508948aec7bf54c7b3dde698d126cfcf120301822a2de4ba0d7541a5", - "size": 81750 + "sha256": "637c755be1f1dfc19ea84877f4eb05d8b9e02f49bf39d3e395be2c12fe6e22a5", + "size": 81891 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages/count_tokens", "status": "success", "path": "en/api/cli/messages/count_tokens.md", - "sha256": "205403266f757e20eddb2b36229d68e916b5c72a785b29d76ab20404bf093e98", - "size": 81768 + "sha256": "24ea7a5906a2f378418e3776cf12f79daf802cba2012982a9a567b3c0d7eed17", + "size": 81909 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages/batches", "status": "success", "path": "en/api/cli/messages/batches.md", - "sha256": "c068f483654628e45c5159762b1be11b7f66c0b9116c5fb64e587cb24ac20cd6", - "size": 81753 + "sha256": "cc7511204741e0812b7eed8ba2b5bb57d5c8b8bd1ca1e625113cd1ffe25fd2e7", + "size": 81894 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages/batches/create", "status": "success", "path": "en/api/cli/messages/batches/create.md", - "sha256": "06b0c6a7a46e9b7d8b0495768c1a82c0dcc04259568148464f681a44011554af", - "size": 81778 + "sha256": "17a9b251305a15a2b90255a787aab761f7808ae737283a5e789dc38c7704d623", + "size": 81919 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages/batches/retrieve", "status": "success", "path": "en/api/cli/messages/batches/retrieve.md", - "sha256": "817156d3152791b7703d04c516f6d19e5cc63397859af4f93db861859f001c6a", - "size": 81784 + "sha256": "c4fa3d283d47f502af55b56eae84e3401e2e12e9bd5bb8940c8cebb6ad5572fa", + "size": 81925 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages/batches/list", "status": "success", "path": "en/api/cli/messages/batches/list.md", - "sha256": "100f6b36178662d7672415a9409998c97efcf70a1db172af4a21f1b71cf3e73c", - "size": 81772 + "sha256": "b270165898636b2a3771711ceec9dfc8ac297f316133dde92cb36b651b8c4679", + "size": 81913 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages/batches/cancel", "status": "success", "path": "en/api/cli/messages/batches/cancel.md", - "sha256": "fcc546bad718791fbd29a28af52448b738c31799c10d9d86de2eba2fe9c4561d", - "size": 81778 + "sha256": "dd033cd66027f721b7ea9c52d90a7a6918eef712eec2601a70db68955ca6c89e", + "size": 81919 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages/batches/delete", "status": "success", "path": "en/api/cli/messages/batches/delete.md", - "sha256": "9efe0ad3289882d3da819f7374445e1023a838f58f26c4f8f1438b30b70278b1", - "size": 81778 + "sha256": "d09846b92455c9b1b0abc2b68d5a570bc43a3b48df079e434556748625037d63", + "size": 81919 }, { "url": "https://platform.claude.com/docs/en/api/cli/messages/batches/results", "status": "success", "path": "en/api/cli/messages/batches/results.md", - "sha256": "0bfbc194c64f6cea91a290f945e39de8396746f9a5602347e66d7c4f6a9fb496", - "size": 81781 + "sha256": "2f78a5a1af1c4a5e0315364c12ea30ebdf08771b8ac0e7d5ec4b50f494cfe3ad", + "size": 81922 }, { "url": "https://platform.claude.com/docs/en/api/cli/models", "status": "success", "path": "en/api/cli/models.md", - "sha256": "68cb51e1cc9e2de9b86130c44c0dbd90d584554edd92a555b9cd2cec7375d53a", - "size": 81719 + "sha256": "4dbedafe46548c3d1a68073b799900d82ac806261fe79ae589e979d1ae30e8df", + "size": 81860 }, { "url": "https://platform.claude.com/docs/en/api/cli/models/list", "status": "success", "path": "en/api/cli/models/list.md", - "sha256": "afb961b6f4eb6eeefbe13daba18e077b42396c24fff951c59599ec88d6e5d977", - "size": 81738 + "sha256": "080e6c461b0cc373213e95918386827466b46a90fe74e42d87957669d7b13ce4", + "size": 81879 }, { "url": "https://platform.claude.com/docs/en/api/cli/models/retrieve", "status": "success", "path": "en/api/cli/models/retrieve.md", - "sha256": "b17b35521fc80fb81ec28ac46f9d9589a3c33b160e1656e3d3813abd95498463", - "size": 81750 + "sha256": "e295528d70c1e966e4ad2dfb8576fb3f19471ecc17c3e337e4ccb29fa23e364a", + "size": 81891 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta", "status": "success", "path": "en/api/cli/beta.md", - "sha256": "6772b32297a6e88a2371fc9f7def82e587472b64a134cde8c9228a1ee3011484", - "size": 81713 + "sha256": "1eb81a5ddbb24de913385aeec67dfba71cd4df95bcd4ad4f293573f833a769e0", + "size": 81854 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/models", "status": "success", "path": "en/api/cli/beta/models.md", - "sha256": "957ef850adc0328df1b62dc9e5876ecb276985b7424a92899659d183779aff39", - "size": 81738 + "sha256": "eff9548f4fb77e5766a3747ab5d5a8db385c4cf105ef38cde4e4e057d8542c3e", + "size": 81879 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/models/list", "status": "success", "path": "en/api/cli/beta/models/list.md", - "sha256": "87f2ee0d3e4f47718e9eda2054cc63cec7ea5307cf1fe4816df253ed6657c381", - "size": 81757 + "sha256": "2879e297b87be0e6b11de3ffb57824c13146694c25905c5fead02693f7b19a95", + "size": 81898 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/models/retrieve", "status": "success", "path": "en/api/cli/beta/models/retrieve.md", - "sha256": "f48c62a15b3fa1a795269ab49ebcf09547b463a1e7687381dd53c8cb3032ce6e", - "size": 81769 + "sha256": "dc70320d8d3aab676474edfa836cf56d8ee8dbc2ac140015ba73cee95ff8dd13", + "size": 81910 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages", "status": "success", "path": "en/api/cli/beta/messages.md", - "sha256": "98e87d70d9ac3d8d2d6a9b0b9181245026a5f32b8146952edacd8525112999bc", - "size": 81744 + "sha256": "020d5a12b253f30fcb55d80e747ada7853814f00bfa28d844687214d9a46b826", + "size": 81885 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages/create", "status": "success", "path": "en/api/cli/beta/messages/create.md", - "sha256": "b4de78a9401da41cd36fe35249964287c315287fe1924446ec8fd8b13649a36b", - "size": 81769 + "sha256": "73c38dc44f3a3e50294946da1e903a24d4d847e8f89aab39920ba0311f230c83", + "size": 81910 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages/count_tokens", "status": "success", "path": "en/api/cli/beta/messages/count_tokens.md", - "sha256": "692a15d602cb017ee7a0598efa1020e19409db69e203a725813d042ae71ef51a", - "size": 81787 + "sha256": "5893a99f29b2c3d47ae676b4820ea87bc23bec82b9572d04b4a82e3ab93305a7", + "size": 81928 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages/batches", "status": "success", "path": "en/api/cli/beta/messages/batches.md", - "sha256": "db17bef787c3ca218aea8de095cc1a0c56ba54d16f67a6ebe6402521c4cca839", - "size": 81772 + "sha256": "1f88b91dac21a27ff0271c5858ba23225f126eaab2c9351e278bbec464b2fcdf", + "size": 81913 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages/batches/create", "status": "success", "path": "en/api/cli/beta/messages/batches/create.md", - "sha256": "6f1b1b6030e3e2a8385f1ca424f75d5868a0ec84f7399d8c6b5096db71536c9e", - "size": 81797 + "sha256": "e87a5674274daa469c5abe49862ec2e6342a50edb83703fb24aea5e26b5bc9a1", + "size": 81938 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages/batches/retrieve", "status": "success", "path": "en/api/cli/beta/messages/batches/retrieve.md", - "sha256": "7dd75ae801b40d665cc41647c0a6b57aac5de4db3e467c5f20a1ec80982d94c9", - "size": 81803 + "sha256": "9f3912d65beba3982f0e267f5898cec48f0e55581c1209c55584f69b97f10bc7", + "size": 81944 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages/batches/list", "status": "success", "path": "en/api/cli/beta/messages/batches/list.md", - "sha256": "784b0b64bb6c9f639bda6194ebfeca62fe6939754163b2291094dc36c0e1099a", - "size": 81791 + "sha256": "f7ff2bd9326daae0b18a8dfe5b13f61453590628935ff071ae7415a57cb3669f", + "size": 81932 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages/batches/cancel", "status": "success", "path": "en/api/cli/beta/messages/batches/cancel.md", - "sha256": "b216e365874419eb4729f9bc948b4261be58149c362b010e7d188ad845a4683e", - "size": 81797 + "sha256": "9d3fa162a09d483e2ba38178a36d003de4359ef667587372005c580ca3fff89b", + "size": 81938 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages/batches/delete", "status": "success", "path": "en/api/cli/beta/messages/batches/delete.md", - "sha256": "0a576ed78aa7e656055b2da9611e2257ee6e6265a5a607ffd30c208a7cf630d5", - "size": 81797 + "sha256": "5ef529c56f56398384b04d8cfa6691a298084ff8f5702bc5dd1024b12862ad40", + "size": 81938 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/messages/batches/results", "status": "success", "path": "en/api/cli/beta/messages/batches/results.md", - "sha256": "241237e7f62299607704d735eac7ca773e725f73a6a6fd3af6bc45f216bc320a", - "size": 81800 + "sha256": "eafb7538cbeac67e17db18ba34836fef688fa751a2b1fb8ab3d5a5c769965271", + "size": 81941 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/files", "status": "success", "path": "en/api/cli/beta/files.md", - "sha256": "ea06d716600e45934bc339cb7d23af478167242c80a6b8ca8a4835420be20b41", - "size": 81735 + "sha256": "b275d2e7cec3ab90dc2cc67f5a9a69f61c0774c12368120d41216e87837bd173", + "size": 81876 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/files/upload", "status": "success", "path": "en/api/cli/beta/files/upload.md", - "sha256": "86c19108b126602fafeb0dff49b7149fff11acfc840c461676c5d73dd40d5fce", - "size": 81760 + "sha256": "437611c9c5eb7afa74d3e0daf46bbe0e010ee80856cf8c9ea9b19f6fc8bc08ea", + "size": 81901 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/files/list", "status": "success", "path": "en/api/cli/beta/files/list.md", - "sha256": "b23da371fc40b9f26eb59962f7080096f97914a4f45e8b1c728ee9bd0b06089e", - "size": 81754 + "sha256": "43a86e159a32a6e4eb2c5753d71a22f5447670a4716400169a9f1befa43e59df", + "size": 81895 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/files/download", "status": "success", "path": "en/api/cli/beta/files/download.md", - "sha256": "eb718c2e4042fa893994b01d9de8e7668d96a865a876c02ec4f60a421abc66b9", - "size": 81766 + "sha256": "08e7e07bb3ac0bdd6c5b6fecc18853400c318f121e49ef39bb1e34b7806b4405", + "size": 81907 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/files/retrieve_metadata", "status": "success", "path": "en/api/cli/beta/files/retrieve_metadata.md", - "sha256": "87f46f8c120efed03b748b38eac87b83cd5e4d2f550d15bd1c5ef985f93bf085", - "size": 81793 + "sha256": "655008da0ac0cf4804f615035cdb8a1523540368f8ae791989884e33268e0d1f", + "size": 81934 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/files/delete", "status": "success", "path": "en/api/cli/beta/files/delete.md", - "sha256": "1e81d3e67e08c574ee5e72f16e175a59fec6ff6fc28140516f569de7444f7d78", - "size": 81760 + "sha256": "4874bab6ee99a078def94411e35eadb2e68a99bddce4b61320e04a1987c96bde", + "size": 81901 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills", "status": "success", "path": "en/api/cli/beta/skills.md", - "sha256": "909d875d16f138ebb821e37c14dca56e7c49c4fcf9b8353d86f44519816865ae", - "size": 81738 + "sha256": "6b9b98b1bdfd6de6346b63ec5d9625b32517f379f1e2812671f8a2a723bfeb41", + "size": 81879 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills/create", "status": "success", "path": "en/api/cli/beta/skills/create.md", - "sha256": "9354740154315ce6ca9ef16b41e6c13173c9c9ed5029769e680e4aef05d16f52", - "size": 81763 + "sha256": "1d943a57e395cf7d94c20fc1edd8c4af68eea51a49021e610651cadf78e4993c", + "size": 81904 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills/list", "status": "success", "path": "en/api/cli/beta/skills/list.md", - "sha256": "968ad22fdbae4c13419cce3c89dc7e533349afc62ec8d1cdaabce98f88102f98", - "size": 81757 + "sha256": "820103bc2c176b71370caf510ead2b51024f48a94b00f8b476b2159d456bc7cb", + "size": 81898 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills/retrieve", "status": "success", "path": "en/api/cli/beta/skills/retrieve.md", - "sha256": "b63bc72c4b215467ff8156f634b52312b56d66d6ebf8e09cb75884ac1917ca98", - "size": 81769 + "sha256": "709e11735d326ce1f5e96500921989eb18e74b1603a426da88ec7d44c022c46b", + "size": 81910 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills/delete", "status": "success", "path": "en/api/cli/beta/skills/delete.md", - "sha256": "716a97803af18d10f686a5825cbd03a73f5f8c3dc0108eaa5c2372f6c6c23621", - "size": 81763 + "sha256": "8bba10ae6f3858c4a448dfeb55040d13b981f36fef1e36b05127c56ecd904ff9", + "size": 81904 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills/versions", "status": "success", "path": "en/api/cli/beta/skills/versions.md", - "sha256": "a173ff91e918aef7876739a1e6cf2ed7020e0e7981826a54254b2031bacfa314", - "size": 81769 + "sha256": "f4484b9b17b069319b96b3ac2456b648262244f6533ce4bc1c8a720fe3872959", + "size": 81910 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills/versions/create", "status": "success", "path": "en/api/cli/beta/skills/versions/create.md", - "sha256": "62fff132e2f9274a296232aa13a05097f5d693ccb02786d60c2cc39e8c1c5ae5", - "size": 81794 + "sha256": "c834ee62a0381bd55d1a9ae9020e9c78e0ac9c5666bfed22f7ece999ffefb3fa", + "size": 81935 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills/versions/list", "status": "success", "path": "en/api/cli/beta/skills/versions/list.md", - "sha256": "fc0eb6d88d55d9a9f6f9e9e26239f8b11adc183012e8064f27ba35a5309c57d9", - "size": 81788 + "sha256": "482c290cc2ef9fc7f9d457b1f54f24528cd881750f40f5d57ac5a90c15c5afe4", + "size": 81929 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills/versions/retrieve", "status": "success", "path": "en/api/cli/beta/skills/versions/retrieve.md", - "sha256": "96963e2a8c530440791a1a121b3abe001d14e6ba40c2487f714983bd0fb5ab7c", - "size": 81800 + "sha256": "9c5d23c3501799a7b09d28684f20b80eab2134c180894ca47523d43cc5cecf27", + "size": 81941 }, { "url": "https://platform.claude.com/docs/en/api/cli/beta/skills/versions/delete", "status": "success", "path": "en/api/cli/beta/skills/versions/delete.md", - "sha256": "ceed3d5c66a4b78440a018da1184e6f12c1ed4c31db379e5995c3c69bcea24a5", - "size": 81794 + "sha256": "309251a28ad12527c836e1c0d9c6ea825a5b4064da8bfab00d5e524b5c237648", + "size": 81935 }, { "url": "https://platform.claude.com/docs/en/api/php/completions", "status": "success", "path": "en/api/php/completions.md", - "sha256": "021095cdfb6ac63ab1843f11d8020f1c217ee78328e9f6ad57f57a81c0b16a77", - "size": 81734 + "sha256": "6b3589176b83bb1cbeb26deb1dbde4b6d91fa2e0456290af1d6c9840bdb39927", + "size": 81875 }, { "url": "https://platform.claude.com/docs/en/api/php/completions/create", "status": "success", "path": "en/api/php/completions/create.md", - "sha256": "615d505e5ab3f3978a40bed17fd76a1dd5e8150415b2d8d60b71495558148880", - "size": 81759 + "sha256": "4eb635af8acf0bc8c9f2fa396e271cc20a3767f9b632bd8743d80af2474bfff4", + "size": 81900 }, { "url": "https://platform.claude.com/docs/en/api/php/messages", "status": "success", "path": "en/api/php/messages.md", - "sha256": "dbf3d5382cdd54d4dd88df6262804f70a42fea270c4118cc7abe19f6d1ab11af", - "size": 81725 + "sha256": "9454d14bcc5cfef0ebcf083fca55bf1c78cc062d13200393e05457b802a01516", + "size": 81866 }, { "url": "https://platform.claude.com/docs/en/api/php/messages/create", "status": "success", "path": "en/api/php/messages/create.md", - "sha256": "4c8c972a2295d698026f967805cc4921f5925d0b9430db69ad9a31511642a7b6", - "size": 81750 + "sha256": "ae56c525ad9dacf0a1929160e0740afaee668feb36223653ca414e07e58f833b", + "size": 81891 }, { "url": "https://platform.claude.com/docs/en/api/php/messages/count_tokens", "status": "success", "path": "en/api/php/messages/count_tokens.md", - "sha256": "a119cdf31afec59f3d32f791c78901b4cdd7fef5cf8dd5bc1a37548e03b93449", - "size": 81768 + "sha256": "1b37a7b38bc90d2df4af09de8aa4dba033eb4d8f5595278e7c6098e67847ca6f", + "size": 81909 }, { "url": "https://platform.claude.com/docs/en/api/php/messages/batches", "status": "success", "path": "en/api/php/messages/batches.md", - "sha256": "5393a3b3f037893b8bc0dfa907de20825b58d1d5ec2d1e34d27b30310de164c3", - "size": 81753 + "sha256": "84694b904342d07ec23adc8772de7cbd4c052566cf4f2d831b59a2791c1a0c99", + "size": 81894 }, { "url": "https://platform.claude.com/docs/en/api/php/messages/batches/create", "status": "success", "path": "en/api/php/messages/batches/create.md", - "sha256": "d37df84278d3985a82bd71fc76e39db59e25581f0c5aabcd92f9b65a29b786e2", - "size": 81778 + "sha256": "34fffca51cf165158f52e1be887a0b16902e85f81cae6814b521afab49d2c431", + "size": 81919 }, { "url": "https://platform.claude.com/docs/en/api/php/messages/batches/retrieve", "status": "success", "path": "en/api/php/messages/batches/retrieve.md", - "sha256": "f3fdb32c78c5aa5e6643495e658079a49d5ae54db88eb85817e2b5bc1d387137", - "size": 81784 + "sha256": "7e24ef6eec8f8e1546a9f192c64d20f8ddfcb97f6e454f98f025e8feee1dc41a", + "size": 81925 }, { "url": "https://platform.claude.com/docs/en/api/php/messages/batches/list", "status": "success", "path": "en/api/php/messages/batches/list.md", - "sha256": "7c8556cdf2e9a178952da2badfd842e50f768fe2cd807e2a5061dcf4ff25a632", - "size": 81772 + "sha256": "d0271087e43b885752391cbfd3e3afed5d87d0da047f4231041eb442cc672113", + "size": 81913 }, { "url": "https://platform.claude.com/docs/en/api/php/messages/batches/cancel", "status": "success", "path": "en/api/php/messages/batches/cancel.md", - "sha256": "a19c1c15f03692b3ba34830e156827e1314d622f23fcd459b482f94148202e10", - "size": 81778 + "sha256": "8a5a05ba097cfcee73af29e5cdddc5d09bdb88d6ade82e9385a3482fd30c5d60", + "size": 81919 }, { "url": "https://platform.claude.com/docs/en/api/php/messages/batches/delete", "status": "success", "path": "en/api/php/messages/batches/delete.md", - "sha256": "dbea4fa872b896ab80ead6d5e509f8d57e8b2bfc9f9b440e7fb3152eba784e09", - "size": 81778 + "sha256": "2a4244147bfa9b310a392560440d7e2f971da48b6692d9df9d8a5a282d02cf9b", + "size": 81919 }, { "url": "https://platform.claude.com/docs/en/api/php/messages/batches/results", "status": "success", "path": "en/api/php/messages/batches/results.md", - "sha256": "2e035a77fb5d79d011c03d9a417dc1269a5b44f80019b6065a0f9d7da56d1149", - "size": 81781 + "sha256": "8cb203f242ad2f30dac638021222e5f607cf70adb34418ec65833b8a94045ce9", + "size": 81922 }, { "url": "https://platform.claude.com/docs/en/api/php/models", "status": "success", "path": "en/api/php/models.md", - "sha256": "261109b0c963eded93e56771611387bdc5d713c67ed30e84b5d6bd1a091a4c66", - "size": 81719 + "sha256": "da82bb442591a3e8fb9960160be911a7e9ec508654294dfe15d1c6439c9abd4b", + "size": 81860 }, { "url": "https://platform.claude.com/docs/en/api/php/models/list", "status": "success", "path": "en/api/php/models/list.md", - "sha256": "0bf0cb6b6252badcd00acc20372ce483948c008f606fd380d3cc17fb6df5e458", - "size": 81738 + "sha256": "d67f6a03578bfa31edde293ecfbc2f81683d933734dd601bfe7894b2270b47fe", + "size": 81879 }, { "url": "https://platform.claude.com/docs/en/api/php/models/retrieve", "status": "success", "path": "en/api/php/models/retrieve.md", - "sha256": "a4ac640fb000c838dd6dfa91fb20855b295e4fb085f16860bc8f4d416d29e79a", - "size": 81750 + "sha256": "d1ef1e59882a829d42548593628908c8f8de875f08905e33010a2bf8e0c1beba", + "size": 81891 }, { "url": "https://platform.claude.com/docs/en/api/php/beta", "status": "success", "path": "en/api/php/beta.md", - "sha256": "a16cdd72706232b6eb2dd10f63073c8c3f9922071e11609e2f9b432809097549", - "size": 81713 + "sha256": "5883d1680520b1f0b616b5dde669c14cb03ce0e5526a46a444b0405e12166bfb", + "size": 81854 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/models", "status": "success", "path": "en/api/php/beta/models.md", - "sha256": "479fde331665c95b6ea3cad6f366e0b70b7bbd394ab8cfd925ab90463ed6b9a9", - "size": 81738 + "sha256": "545233adfcd8affc2c97d241208c0c715d7e2e00e73d8d5385a7a0edb223343b", + "size": 81879 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/models/list", "status": "success", "path": "en/api/php/beta/models/list.md", - "sha256": "3910654fd5784151caf5bfe7305b2e5788758821922143c0acb9254c9d54cfcf", - "size": 81757 + "sha256": "e0784164110456d5efa67a55cafcd4e78a18804fabcb59d187f96918bc594e07", + "size": 81898 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/models/retrieve", "status": "success", "path": "en/api/php/beta/models/retrieve.md", - "sha256": "201b8da85818cb552cd0e503c35901599b322003acb798a92616c6fb97de4155", - "size": 81769 + "sha256": "1ea4f0e1dab6cf329093378b8e1227b059997486ada50973678bdea49fcfb666", + "size": 81910 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages", "status": "success", "path": "en/api/php/beta/messages.md", - "sha256": "0e4765dc87cb9cf6e5aab341f5f670d69e5f93b076ef03163178fa53655dd3b4", - "size": 81744 + "sha256": "9dddf539e8c34b4cb94169fb1b4bb892d43f7657f7a1968a97b874232ac66304", + "size": 81885 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages/create", "status": "success", "path": "en/api/php/beta/messages/create.md", - "sha256": "28b4e632a0007a9025a7da1579dd121c74183692db8961073c1fc7636c792d9b", - "size": 81769 + "sha256": "093811f0ac6497482c7d76d76b0e47385728e440afe6d433168ff4e39bce8920", + "size": 81910 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages/count_tokens", "status": "success", "path": "en/api/php/beta/messages/count_tokens.md", - "sha256": "08062c3e483151540412b6a4bf2da6d18dd03143df724f13c6af3316e13a1c3c", - "size": 81787 + "sha256": "f0ad72230d071bf24496147106d51d5405e77cb63b6c0cbecca3c1064e759a29", + "size": 81928 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages/batches", "status": "success", "path": "en/api/php/beta/messages/batches.md", - "sha256": "030c4557dd92fad5c820792d601fd11fef376e3758199c83602989cc808b353f", - "size": 81772 + "sha256": "0362e703f094193ebf8353997c7edbaebec81d6e40cf80a616136e29bc299d19", + "size": 81913 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages/batches/create", "status": "success", "path": "en/api/php/beta/messages/batches/create.md", - "sha256": "eacc7a44a65596032bd16a6babacb45a7fe52910ebf807e74edd60b43fff6820", - "size": 81797 + "sha256": "98ebd26d3b3f1843cd0f792e044778e6d3581296680400d8dc36f1aa55bcf55c", + "size": 81938 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages/batches/retrieve", "status": "success", "path": "en/api/php/beta/messages/batches/retrieve.md", - "sha256": "c34d156a04e8e2633177854b849210bee6ffd34460d18602bd9b5aeee68d765b", - "size": 81803 + "sha256": "67b2cdbd06d7798799d4b286ccf91145a2bf54e39ebd98487c9070dcf02fc05c", + "size": 81944 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages/batches/list", "status": "success", "path": "en/api/php/beta/messages/batches/list.md", - "sha256": "aedbe8048b3f4c492973000d7415c4b2f90e965c9c4e220111f30e40bf859177", - "size": 81791 + "sha256": "afb21394642a637afa1fa4c23c77ec4f163d8e65d24e46361609b0505297bd86", + "size": 81932 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages/batches/cancel", "status": "success", "path": "en/api/php/beta/messages/batches/cancel.md", - "sha256": "37c7c9dcf90db1fd84a6cedcfcd3850b0f809e481f339f215500767146db1a46", - "size": 81797 + "sha256": "765377fbf13d0ad67047a66e866e5c73c2850290a988b30a35a6ce1fa98545c5", + "size": 81938 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages/batches/delete", "status": "success", "path": "en/api/php/beta/messages/batches/delete.md", - "sha256": "e073dabf24ed90be96db22a6eb4355352891a3109430e59303fe86a6fe274a4c", - "size": 81797 + "sha256": "fba04707f5be97cdb000f23bb4b60dfa0112870418056244df81e2ad65d3011e", + "size": 81938 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/messages/batches/results", "status": "success", "path": "en/api/php/beta/messages/batches/results.md", - "sha256": "89520a3877e2d5e2022a2e20bc8bd0af256a2c3b898c2258de3299bf90d15dd7", - "size": 81800 + "sha256": "e3f726c7db7ee95fb4d2dbccf7003b866e012ac8208c5c5839221b70f5f395b5", + "size": 81941 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/files", "status": "success", "path": "en/api/php/beta/files.md", - "sha256": "9dd490854cdab7e9192c639538bb5aebbce13c7a2763123154c51035bebc2761", - "size": 81735 + "sha256": "01ca307aa35587f09556489c4a2441674a0adf4eb8f6921fa19f4b684f52622c", + "size": 81876 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/files/upload", "status": "success", "path": "en/api/php/beta/files/upload.md", - "sha256": "31481e5d4ca850e24ccfce1c702b6272ce695e9a912e2170b85a6b2873f6ecec", - "size": 81760 + "sha256": "6613081082113685f0d1605e450992bd28adfe4965dedb7e371621a3b7a7aa64", + "size": 81901 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/files/list", "status": "success", "path": "en/api/php/beta/files/list.md", - "sha256": "082989b5afa7f6053b136daf48b60a990d4fef94cdf62a80b060e900351f37a4", - "size": 81754 + "sha256": "1d1164ac1b99bc00bfd982642efa2924920c5a05ddf6bd3f20658779d9a5b204", + "size": 81895 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/files/download", "status": "success", "path": "en/api/php/beta/files/download.md", - "sha256": "e3b64d97e61f4953e0cd648826a63714555bebdbb7911b1e9a76f5d07777abaa", - "size": 81766 + "sha256": "f7419b079a400cd53295639c598ffd919310c0793e6e782224982880d874064c", + "size": 81907 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/files/retrieve_metadata", "status": "success", "path": "en/api/php/beta/files/retrieve_metadata.md", - "sha256": "3ceb2727c9c79c95e9034e6564e5eb1a21403fea9d5ddf884151d8f0d7556dba", - "size": 81793 + "sha256": "d1bc8527cccba62dbc1e04574468fa192d2ee0d94855c1be12db456b0b7ba06c", + "size": 81934 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/files/delete", "status": "success", "path": "en/api/php/beta/files/delete.md", - "sha256": "8bdd0012120d1421044ab7961415b9eb4d1838942cae2395dc1ceb4bb06a0e40", - "size": 81760 + "sha256": "e2ff2e174041854306393182e0c09a8a5bcd2b80b0e5754bea39cdc755aa86b7", + "size": 81901 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills", "status": "success", "path": "en/api/php/beta/skills.md", - "sha256": "bf9fd562bb671631a691047519697f6c2f4a10e6a477df6684cf042e527f67fe", - "size": 81738 + "sha256": "374f394075ab2f7178f26bac33d91fdb11e331d1ed214230857b560c9689e3ee", + "size": 81879 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills/create", "status": "success", "path": "en/api/php/beta/skills/create.md", - "sha256": "f93f7824d19da6c5ab4d80e78a79bce46e6e537a7e4766b754317a07efa74882", - "size": 81763 + "sha256": "5e4726d0b6f10fe78e8c2623f44daf93b43ee978a219b85ec22d3ccd642c9435", + "size": 81904 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills/list", "status": "success", "path": "en/api/php/beta/skills/list.md", - "sha256": "67d41805fa3a8f19f87ad1f9c77a6a1d5936d82e65e9085402cb4cc57b0f95a3", - "size": 81757 + "sha256": "24b549920e6f8e441c08e162fe247553f022f67a1435c216679417e9eac30fc4", + "size": 81898 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills/retrieve", "status": "success", "path": "en/api/php/beta/skills/retrieve.md", - "sha256": "706cff170f23b7f85436cedce950cedf8cba287bcc0dc64bd129b572d17f543a", - "size": 81769 + "sha256": "c3572c3b674e594e7fb08c059d055de12f6170a76641521c90369e17bffccc6e", + "size": 81910 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills/delete", "status": "success", "path": "en/api/php/beta/skills/delete.md", - "sha256": "7fc6449e5219fd0068b1ede2b753be33cf6bd5c3cd9f3f65cb2df7b5688cf253", - "size": 81763 + "sha256": "29012fb8ad1cf5d498da9454b77c5b5493906b5c3dd3f8ea0c8b291910131eae", + "size": 81904 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills/versions", "status": "success", "path": "en/api/php/beta/skills/versions.md", - "sha256": "17d42e2ff42bc9d61b36a38de548fdfb7027625f2c5ebd4f564ba5243fe07fab", - "size": 81769 + "sha256": "c2e42a875464b05ae85b36c859f96c9c3d136d30e8fd4564be7277a0dd1d0709", + "size": 81910 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills/versions/create", "status": "success", "path": "en/api/php/beta/skills/versions/create.md", - "sha256": "9e8cbb09c660a56e81b7796abc19028c809d5a7fe30d56e125785501c1db303f", - "size": 81794 + "sha256": "ebd3f9b0b4a9108050be6c5fb50991380be81874b3a165a7c61e4fdaa46ae7c0", + "size": 81935 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills/versions/list", "status": "success", "path": "en/api/php/beta/skills/versions/list.md", - "sha256": "7cb0fd3f78916cc242ffa6bcb546962844b40ccd4a17ca6430805519ecbcb733", - "size": 81788 + "sha256": "2a3e346eed5994ec8aecc7a2c9f9f42dfaa08ee52abcbb0e767b8c03a23a89c4", + "size": 81929 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills/versions/retrieve", "status": "success", "path": "en/api/php/beta/skills/versions/retrieve.md", - "sha256": "f77d7c73a72221aac9308e7ed42a9707e02474e58c2d1d9566a3987e7d48b4c2", - "size": 81800 + "sha256": "a998690e88d2fc686d9ff36fe91eb9a4f69607ad5095a05df7e8c397ec9c2745", + "size": 81941 }, { "url": "https://platform.claude.com/docs/en/api/php/beta/skills/versions/delete", "status": "success", "path": "en/api/php/beta/skills/versions/delete.md", - "sha256": "752be1cbf02989854084cf42a58c292da1cc4e792f841298018bd49cccf96791", - "size": 81794 + "sha256": "e4bf0893f2f122b2cbd21d2176a357c2e9f476d8a9b30228003a1307be866425", + "size": 81935 }, { "url": "https://platform.claude.com/docs/en/api/csharp/completions", @@ -4320,8 +4327,8 @@ "url": "https://code.claude.com/docs/en/claude-code-on-the-web", "status": "success", "path": "en/docs/claude-code/claude-code-on-the-web.md", - "sha256": "08f75b97436998208463683f91c30374ce3197f05e83a88c5c985edfd18d1521", - "size": 27406 + "sha256": "1e21c1e67ef542e98828c725a464373bc07c127647dd2f04a4f3287be878d43b", + "size": 27632 }, { "url": "https://code.claude.com/docs/en/cli-reference", @@ -4341,15 +4348,15 @@ "url": "https://code.claude.com/docs/en/commands", "status": "success", "path": "en/docs/claude-code/commands.md", - "sha256": "ee98ecd30e6ec658dd2f5705625ddfabed1f5487dff532dfad26201c05dfaa9c", - "size": 26890 + "sha256": "cad31f72977983c4ddfb8eef9b75cc458bdc8efcfbb065d18d2e0b0a4fb4b62f", + "size": 27281 }, { "url": "https://code.claude.com/docs/en/common-workflows", "status": "success", "path": "en/docs/claude-code/common-workflows.md", - "sha256": "9e2fa06b05af186f66e14cc7b97042027e1ced6586f112e9d777a08fb121ca90", - "size": 34396 + "sha256": "2e4564ec66f7e38102827cec6d2f6fd712928c4db4c840427dc76347705571e1", + "size": 36323 }, { "url": "https://code.claude.com/docs/en/costs", @@ -4369,8 +4376,8 @@ "url": "https://code.claude.com/docs/en/desktop", "status": "success", "path": "en/docs/claude-code/desktop.md", - "sha256": "ccc0cb823b26c16f38eeed898241e997213f1fc885cf08d29407a240e4a9a245", - "size": 49176 + "sha256": "41c6dd8a3f1dd0869d496478bd8e8f9945a6a96af8a02729b1a26351214cdbcb", + "size": 58300 }, { "url": "https://code.claude.com/docs/en/desktop-quickstart", @@ -4551,8 +4558,8 @@ "url": "https://code.claude.com/docs/en/overview", "status": "success", "path": "en/docs/claude-code/overview.md", - "sha256": "ab88fc29e021f76360cc27d60a3ae223cd9470751ac2360009ae2838b60ab1b9", - "size": 13393 + "sha256": "3464bb2b4d1aff01f1da5b5e8f68d06a7ba93d807c98f79a9bf2f1a030194ffb", + "size": 13979 }, { "url": "https://code.claude.com/docs/en/permissions", @@ -4561,12 +4568,19 @@ "sha256": "d6ef58dd7349d9c7ae7d1bb3c8525925366da1e598c7a93667d6ee83c02dfcf5", "size": 19044 }, + { + "url": "https://code.claude.com/docs/en/platforms", + "status": "success", + "path": "en/docs/claude-code/platforms.md", + "sha256": "a8b77f772f4b45b774243db76fce4bc8054e74ad4547bddedfc0b7c9d3bea4ad", + "size": 9509 + }, { "url": "https://code.claude.com/docs/en/plugin-marketplaces", "status": "success", "path": "en/docs/claude-code/plugin-marketplaces.md", - "sha256": "48ed00a91032e4e37e31be6d67be1967749d84d69a7714571693241f3089d7ea", - "size": 42785 + "sha256": "6168e4f8ef56b93633b75c283eb3f9d481572d671110a6a99f6dff1e495f4361", + "size": 42793 }, { "url": "https://code.claude.com/docs/en/plugins", @@ -4593,22 +4607,22 @@ "url": "https://code.claude.com/docs/en/remote-control", "status": "success", "path": "en/docs/claude-code/remote-control.md", - "sha256": "8199a5cfab321d91f4721ce03d82bbb661b8ddddd22a134d7ad51f5596b0eabe", - "size": 14451 + "sha256": "62078a31fea3bbbbd35e6104ca5f5ac057ecc84e02bf06ec462deef48c56da2d", + "size": 18011 }, { "url": "https://code.claude.com/docs/en/sandboxing", "status": "success", "path": "en/docs/claude-code/sandboxing.md", - "sha256": "21779615a4ad6bbef9200580ea0fa2bcad087ceefe3fb07b40d5931f00756c3f", - "size": 18948 + "sha256": "fcd727507020cb5089b9de53cdd8304e0c84222a39c3938cfdfe4a749a5072a4", + "size": 19506 }, { "url": "https://code.claude.com/docs/en/scheduled-tasks", "status": "success", "path": "en/docs/claude-code/scheduled-tasks.md", - "sha256": "e526dfdd7b03826ad2a32cd3509b48878dc1e45020815db303315860631d336e", - "size": 7733 + "sha256": "be595a61b2465086e565160580ef29f8867eac6f9bb08d9505dd75692467dead", + "size": 9798 }, { "url": "https://code.claude.com/docs/en/security", @@ -4708,6 +4722,13 @@ "sha256": "431042c04776da6da146b36850a0952ddf5fe2db3478592bdb2025a7ba686d7c", "size": 31865 }, + { + "url": "https://code.claude.com/docs/en/web-scheduled-tasks", + "status": "success", + "path": "en/docs/claude-code/web-scheduled-tasks.md", + "sha256": "3e4ab105e0e87d06f3d17d19c6ef5c99bb909a98f75e9afc7714b9053cc09661", + "size": 10533 + }, { "url": "https://code.claude.com/docs/en/zero-data-retention", "status": "success", @@ -4719,14 +4740,14 @@ "url": "https://www.anthropic.com/engineering/claude-code-best-practices", "status": "success", "path": "blog/engineering/claude-code-best-practices.md", - "sha256": "9760d576b552b9f882780c08af2788945b85530d10bdab6a5bc28842920b37a5", - "size": 17368 + "sha256": "8ab5cd86fb94190583ff09d18fb7048619c88e7c360092e3e7cfb94429e287ee", + "size": 18478 }, { "url": "https://www.anthropic.com/engineering/claude-code-sandboxing", "status": "success", "path": "blog/engineering/claude-code-sandboxing.md", - "sha256": "2f6f9df5925dee4efcfc6d3ea98bf3c9c8e91392270aa7f0cbb52e05b9b69311", + "sha256": "98cdc01a5ff0a2b22ad57c96a2f577a3a0e44b4176e6e6b914a013dff5abb1b5", "size": 8687 }, { @@ -4759,8 +4780,8 @@ } ], "summary": { - "total": 679, - "downloaded": 679, + "total": 682, + "downloaded": 682, "skipped": 0, "failed": 0, "success_rate": 100.0 diff --git a/content/blog/engineering/claude-code-best-practices.md b/content/blog/engineering/claude-code-best-practices.md index 85ce0a5a..b89af8db 100644 --- a/content/blog/engineering/claude-code-best-practices.md +++ b/content/blog/engineering/claude-code-best-practices.md @@ -47,8 +47,9 @@ Claude Code overview ##### Platforms and integrations +* [Overview](https://www.anthropic.com/docs/en/platforms) * [Remote Control](https://www.anthropic.com/docs/en/remote-control) -* [Claude Code on the web](https://www.anthropic.com/docs/en/claude-code-on-the-web) +* Claude Code on the web * Claude Code on desktop * [Chrome extension (beta)](https://www.anthropic.com/docs/en/chrome) * [Visual Studio Code](https://www.anthropic.com/docs/en/vs-code) @@ -265,10 +266,18 @@ git diff main --name-only | claude -p "review these changed files for security i See the [CLI reference](https://www.anthropic.com/docs/en/cli-reference) for the full set of commands and flags. +Schedule recurring tasks + +Run Claude on a schedule to automate work that repeats: morning PR reviews, overnight CI failure analysis, weekly dependency audits, or syncing docs after PRs merge. +* [Cloud scheduled tasks](https://www.anthropic.com/docs/en/web-scheduled-tasks) run on Anthropic-managed infrastructure, so they keep running even when your computer is off. Create them from the web, the Desktop app, or by running `/schedule` in the CLI. +* [Desktop scheduled tasks](https://www.anthropic.com/docs/en/desktop#schedule-recurring-tasks) run on your machine, with direct access to your local files and tools +* [`/loop`](https://www.anthropic.com/docs/en/scheduled-tasks) repeats a prompt within a CLI session for quick polling + Work from anywhere Sessions aren’t tied to a single surface. Move work between environments as your context changes: * Step away from your desk and keep working from your phone or any browser with [Remote Control](https://www.anthropic.com/docs/en/remote-control) +* Message [Dispatch](https://www.anthropic.com/docs/en/desktop#sessions-from-dispatch) a task from your phone and open the Desktop session it creates * Kick off a long-running task on the [web](https://www.anthropic.com/docs/en/claude-code-on-the-web) or [iOS app](https://apps.apple.com/app/claude-by-anthropic/id6473753684), then pull it into your terminal with `/teleport` * Hand off a terminal session to the [Desktop app](https://www.anthropic.com/docs/en/desktop) with `/desktop` for visual diff review * Route tasks from team chat: mention `@Claude` in [Slack](https://www.anthropic.com/docs/en/slack) with a bug report and get a pull request back @@ -284,6 +293,7 @@ Each surface connects to the same underlying Claude Code engine, so your CLAUDE. | Continue a local session from my phone or another device | [Remote Control](https://www.anthropic.com/docs/en/remote-control) | | Push events from Telegram, Discord, or my own webhooks into a session | [Channels](https://www.anthropic.com/docs/en/channels) | | Start a task locally, continue on mobile | [Web](https://www.anthropic.com/docs/en/claude-code-on-the-web) or [Claude iOS app](https://apps.apple.com/app/claude-by-anthropic/id6473753684) | +| Run Claude on a recurring schedule | [Cloud scheduled tasks](https://www.anthropic.com/docs/en/web-scheduled-tasks) or [Desktop scheduled tasks](https://www.anthropic.com/docs/en/desktop#schedule-recurring-tasks) | | Automate PR reviews and issue triage | [GitHub Actions](https://www.anthropic.com/docs/en/github-actions) or [GitLab CI/CD](https://www.anthropic.com/docs/en/gitlab-ci-cd) | | Get automatic code review on every PR | [GitHub Code Review](https://www.anthropic.com/docs/en/code-review) | | Route bug reports from Slack to pull requests | [Slack](https://www.anthropic.com/docs/en/slack) | diff --git a/content/blog/engineering/claude-code-sandboxing.md b/content/blog/engineering/claude-code-sandboxing.md index 42515ed9..4bc97377 100644 --- a/content/blog/engineering/claude-code-sandboxing.md +++ b/content/blog/engineering/claude-code-sandboxing.md @@ -68,7 +68,7 @@ Our new sandboxed bash tool and Claude Code on the web offer substantial improve To get started with these tools: 1. Run `/sandbox` in Claude and check out [our docs](https://docs.claude.com/en/docs/claude-code/sandboxing) on how to configure this sandbox. -2. Go to [claude.com/code](http://claude.ai/redirect/website.v1.06b686e8-9fbc-4d2f-ab23-409b29b3d2b4/code) to try out Claude Code on the web. +2. Go to [claude.com/code](http://claude.ai/redirect/website.v1.e92c1dc2-e8cf-4086-a0a2-26dda848f0a8/code) to try out Claude Code on the web. Or, if you're building your own agents, check out our [open-sourced sandboxing code](https://github.com/anthropic-experimental/sandbox-runtime), and consider integrating it into your work. We look forward to seeing what you build. diff --git a/content/en/agent-sdk/custom-tools.md b/content/en/agent-sdk/custom-tools.md index 820726c6..fc04cc90 100644 --- a/content/en/agent-sdk/custom-tools.md +++ b/content/en/agent-sdk/custom-tools.md @@ -1,78 +1,71 @@ -# Custom Tools +# Give Claude custom tools -Build and integrate custom tools to extend Claude Agent SDK functionality +Define custom tools with the Claude Agent SDK's in-process MCP server so Claude can call your functions, hit your APIs, and perform domain-specific operations. --- -Custom tools allow you to extend Claude Code's capabilities with your own functionality through in-process MCP servers, enabling Claude to interact with external services, APIs, or perform specialized operations. +Custom tools extend the Agent SDK by letting you define your own functions that Claude can call during a conversation. Using the SDK's in-process MCP server, you can give Claude access to databases, external APIs, domain-specific logic, or any other capability your application needs. -## Creating Custom Tools +This guide covers how to define tools with input schemas and handlers, bundle them into an MCP server, pass them to `query`, and control which tools Claude can access. It also covers error handling, tool annotations, and returning non-text content like images. -Use the `createSdkMcpServer` and `tool` helper functions to define type-safe custom tools: +## Quick reference - +| If you want to... | Do this | +|:-------------------|:--------| +| Define a tool | Use [`@tool`](/docs/en/agent-sdk/python#tool) (Python) or [`tool()`](/docs/en/agent-sdk/typescript#tool) (TypeScript) with a name, description, schema, and handler. See [Create a custom tool](#create-a-custom-tool). | +| Register a tool with Claude | Wrap in `create_sdk_mcp_server` / `createSdkMcpServer` and pass to `mcpServers` in `query()`. See [Call a custom tool](#call-a-custom-tool). | +| Pre-approve a tool | Add to your allowed tools. See [Configure allowed tools](#configure-allowed-tools). | +| Remove a built-in tool from Claude's context | Pass a `tools` array listing only the built-ins you want. See [Configure allowed tools](#configure-allowed-tools). | +| Let Claude call tools in parallel | Set `readOnlyHint: true` on tools with no side effects. See [Add tool annotations](#add-tool-annotations). | +| Handle errors without stopping the loop | Return `isError: true` instead of throwing. See [Handle errors](#handle-errors). | +| Return images or files | Use `image` or `resource` blocks in the content array. See [Return images and resources](#return-images-and-resources). | +| Scale to many tools | Use [tool search](/docs/en/agent-sdk/tool-search) to load tools on demand. | -```typescript TypeScript -import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk"; -import { z } from "zod"; +## Create a custom tool -// Create an SDK MCP server with custom tools -const customServer = createSdkMcpServer({ - name: "my-custom-tools", - version: "1.0.0", - tools: [ - tool( - "get_weather", - "Get current temperature for a location using coordinates", - { - latitude: z.number().describe("Latitude coordinate"), - longitude: z.number().describe("Longitude coordinate") - }, - async (args) => { - const response = await fetch( - `https://api.open-meteo.com/v1/forecast?latitude=${args.latitude}&longitude=${args.longitude}¤t=temperature_2m&temperature_unit=fahrenheit` - ); - const data = await response.json(); +A tool is defined by four parts, passed as arguments to the [`tool()`](/docs/en/agent-sdk/typescript#tool) helper in TypeScript or the [`@tool`](/docs/en/agent-sdk/python#tool) decorator in Python: - return { - content: [ - { - type: "text", - text: `Temperature: ${data.current.temperature_2m}°F` - } - ] - }; - } - ) - ] -}); -``` +- **Name:** a unique identifier Claude uses to call the tool. +- **Description:** what the tool does. Claude reads this to decide when to call it. +- **Input schema:** the arguments Claude must provide. In TypeScript this is always a [Zod schema](https://zod.dev/), and the handler's `args` are typed from it automatically. In Python this is a dict mapping names to types, like `{"latitude": float}`, which the SDK converts to JSON Schema for you. The Python decorator also accepts a full [JSON Schema](https://json-schema.org/understanding-json-schema/about) dict directly when you need enums, ranges, optional fields, or nested objects. +- **Handler:** the async function that runs when Claude calls the tool. It receives the validated arguments and must return an object with: + - `content` (required): an array of result blocks, each with a `type` of `"text"`, `"image"`, or `"resource"`. See [Return images and resources](#return-images-and-resources) for non-text blocks. + - `isError` (optional): set to `true` to signal a tool failure so Claude can react to it. See [Handle errors](#handle-errors). + +After defining a tool, wrap it in a server with [`createSdkMcpServer`](/docs/en/agent-sdk/typescript#create-sdk-mcp-server) (TypeScript) or [`create_sdk_mcp_server`](/docs/en/agent-sdk/python#create-sdk-mcp-server) (Python). The server runs in-process inside your application, not as a separate process. + +### Weather tool example + +This example defines a `get_temperature` tool and wraps it in an MCP server. It only sets up the tool; to pass it to `query` and run it, see [Call a custom tool](#call-a-custom-tool) below. + + ```python Python -from claude_agent_sdk import ( - tool, - create_sdk_mcp_server, - ClaudeSDKClient, - ClaudeAgentOptions, -) from typing import Any -import aiohttp +import httpx +from claude_agent_sdk import tool, create_sdk_mcp_server -# Define a custom tool using the @tool decorator +# Define a tool: name, description, input schema, handler @tool( - "get_weather", - "Get current temperature for a location using coordinates", + "get_temperature", + "Get the current temperature at a location", {"latitude": float, "longitude": float}, ) -async def get_weather(args: dict[str, Any]) -> dict[str, Any]: - # Call weather API - async with aiohttp.ClientSession() as session: - async with session.get( - f"https://api.open-meteo.com/v1/forecast?latitude={args['latitude']}&longitude={args['longitude']}¤t=temperature_2m&temperature_unit=fahrenheit" - ) as response: - data = await response.json() +async def get_temperature(args: dict[str, Any]) -> dict[str, Any]: + async with httpx.AsyncClient() as client: + response = await client.get( + "https://api.open-meteo.com/v1/forecast", + params={ + "latitude": args["latitude"], + "longitude": args["longitude"], + "current": "temperature_2m", + "temperature_unit": "fahrenheit", + }, + ) + data = response.json() + # Return a content array - Claude sees this as the tool result return { "content": [ { @@ -83,338 +76,319 @@ async def get_weather(args: dict[str, Any]) -> dict[str, Any]: } -# Create an SDK MCP server with the custom tool -custom_server = create_sdk_mcp_server( - name="my-custom-tools", +# Wrap the tool in an in-process MCP server +weather_server = create_sdk_mcp_server( + name="weather", version="1.0.0", - tools=[get_weather], # Pass the decorated function + tools=[get_temperature], ) ``` - - -## Using Custom Tools +```typescript TypeScript +import { tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk"; +import { z } from "zod"; -Pass the custom server to the `query` function via the `mcpServers` option as a dictionary/object. +// Define a tool: name, description, input schema, handler +const getTemperature = tool( + "get_temperature", + "Get the current temperature at a location", + { + latitude: z.number().describe("Latitude coordinate"), // .describe() adds a field description Claude sees + longitude: z.number().describe("Longitude coordinate") + }, + async (args) => { + // args is typed from the schema: { latitude: number; longitude: number } + const response = await fetch( + `https://api.open-meteo.com/v1/forecast?latitude=${args.latitude}&longitude=${args.longitude}¤t=temperature_2m&temperature_unit=fahrenheit` + ); + const data: any = await response.json(); - -**Important:** Custom MCP tools require streaming input mode. You must use an async generator/iterable for the `prompt` parameter - a simple string will not work with MCP servers. - + // Return a content array - Claude sees this as the tool result + return { + content: [{ type: "text", text: `Temperature: ${data.current.temperature_2m}°F` }] + }; + } +); -### Tool Name Format +// Wrap the tool in an in-process MCP server +const weatherServer = createSdkMcpServer({ + name: "weather", + version: "1.0.0", + tools: [getTemperature] +}); +``` -When MCP tools are exposed to Claude, their names follow a specific format: -- Pattern: `mcp__{server_name}__{tool_name}` -- Example: A tool named `get_weather` in server `my-custom-tools` becomes `mcp__my-custom-tools__get_weather` + -### Configuring Allowed Tools +See the [`tool()`](/docs/en/agent-sdk/typescript#tool) TypeScript reference or the [`@tool`](/docs/en/agent-sdk/python#tool) Python reference for full parameter details, including JSON Schema input formats and return value structure. -You can control which tools Claude can use via the `allowedTools` option: + +To make a parameter optional: in TypeScript, add `.default()` to the Zod field. In Python, the dict schema treats every key as required, so leave the parameter out of the schema, mention it in the description string, and read it with `args.get()` in the handler. The [`get_precipitation_chance` tool below](#add-more-tools) shows both patterns. + - +### Call a custom tool -```typescript TypeScript -import { query } from "@anthropic-ai/claude-agent-sdk"; +Pass the MCP server you created to `query` via the `mcpServers` option. The key in `mcpServers` becomes the `{server_name}` segment in each tool's fully qualified name: `mcp__{server_name}__{tool_name}`. List that name in `allowedTools` so the tool runs without a permission prompt. -// Use the custom tools in your query with streaming input -async function* generateMessages() { - yield { - type: "user" as const, - message: { - role: "user" as const, - content: "What's the weather in San Francisco?" - } - }; -} +These snippets reuse the `weatherServer` from the [example above](#weather-tool-example) to ask Claude what the weather is in a specific location. -for await (const message of query({ - prompt: generateMessages(), // Use async generator for streaming input - options: { - mcpServers: { - "my-custom-tools": customServer // Pass as object/dictionary, not array - }, - // Optionally specify which tools Claude can use - allowedTools: [ - "mcp__my-custom-tools__get_weather" // Allow the weather tool - // Add other tools as needed - ], - maxTurns: 3 - } -})) { - if (message.type === "result" && message.subtype === "success") { - console.log(message.result); - } -} -``` + ```python Python -from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions import asyncio - -# Use the custom tools with Claude -options = ClaudeAgentOptions( - mcp_servers={"my-custom-tools": custom_server}, - allowed_tools=[ - "mcp__my-custom-tools__get_weather", # Allow the weather tool - # Add other tools as needed - ], -) +from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage async def main(): - async with ClaudeSDKClient(options=options) as client: - await client.query("What's the weather in San Francisco?") + options = ClaudeAgentOptions( + mcp_servers={"weather": weather_server}, + allowed_tools=["mcp__weather__get_temperature"], + ) - # Extract and print response - async for msg in client.receive_response(): - print(msg) + async for message in query( + prompt="What's the temperature in San Francisco?", + options=options, + ): + # ResultMessage is the final message after all tool calls complete + if isinstance(message, ResultMessage) and message.subtype == "success": + print(message.result) asyncio.run(main()) ``` - - -### Multiple Tools Example - -When your MCP server has multiple tools, you can selectively allow them: - - - ```typescript TypeScript -const multiToolServer = createSdkMcpServer({ - name: "utilities", - version: "1.0.0", - tools: [ - tool( - "calculate", - "Perform calculations", - { - /* ... */ - }, - async (args) => { - // ... - } - ), - tool( - "translate", - "Translate text", - { - /* ... */ - }, - async (args) => { - // ... - } - ), - tool( - "search_web", - "Search the web", - { - /* ... */ - }, - async (args) => { - // ... - } - ) - ] -}); - -// Allow only specific tools with streaming input -async function* generateMessages() { - yield { - type: "user" as const, - message: { - role: "user" as const, - content: "Calculate 5 + 3 and translate 'hello' to Spanish" - } - }; -} +import { query } from "@anthropic-ai/claude-agent-sdk"; for await (const message of query({ - prompt: generateMessages(), // Use async generator for streaming input + prompt: "What's the temperature in San Francisco?", options: { - mcpServers: { - utilities: multiToolServer - }, - allowedTools: [ - "mcp__utilities__calculate", // Allow calculator - "mcp__utilities__translate" // Allow translator - // "mcp__utilities__search_web" is NOT allowed - ] + mcpServers: { weather: weatherServer }, + allowedTools: ["mcp__weather__get_temperature"] } })) { - // Process messages + // "result" is the final message after all tool calls complete + if (message.type === "result" && message.subtype === "success") { + console.log(message.result); + } } ``` -```python Python -from claude_agent_sdk import ( - ClaudeSDKClient, - ClaudeAgentOptions, - tool, - create_sdk_mcp_server, -) -from typing import Any -import asyncio + +### Add more tools -# Define multiple tools using the @tool decorator -@tool("calculate", "Perform calculations", {"expression": str}) -async def calculate(args: dict[str, Any]) -> dict[str, Any]: - result = eval(args["expression"]) # Use safe eval in production - return {"content": [{"type": "text", "text": f"Result: {result}"}]} +A server holds as many tools as you list in its `tools` array. With more than one tool on a server, you can list each one in `allowedTools` individually or use the wildcard `mcp__weather__*` to cover every tool the server exposes. +The example below adds a second tool, `get_precipitation_chance`, to the `weatherServer` from the [weather tool example](#weather-tool-example) and rebuilds it with both tools in the array. -@tool("translate", "Translate text", {"text": str, "target_lang": str}) -async def translate(args: dict[str, Any]) -> dict[str, Any]: - # Translation logic here - return {"content": [{"type": "text", "text": f"Translated: {args['text']}"}]} + +```python Python +# Define a second tool for the same server +@tool( + "get_precipitation_chance", + "Get the hourly precipitation probability for a location. " + "Optionally pass 'hours' (1-24) to control how many hours to return.", + {"latitude": float, "longitude": float}, +) +async def get_precipitation_chance(args: dict[str, Any]) -> dict[str, Any]: + # 'hours' isn't in the schema - read it with .get() to make it optional + hours = args.get("hours", 12) + async with httpx.AsyncClient() as client: + response = await client.get( + "https://api.open-meteo.com/v1/forecast", + params={ + "latitude": args["latitude"], + "longitude": args["longitude"], + "hourly": "precipitation_probability", + "forecast_days": 1, + }, + ) + data = response.json() + chances = data["hourly"]["precipitation_probability"][:hours] -@tool("search_web", "Search the web", {"query": str}) -async def search_web(args: dict[str, Any]) -> dict[str, Any]: - # Search logic here return { - "content": [{"type": "text", "text": f"Search results for: {args['query']}"}] + "content": [ + { + "type": "text", + "text": f"Next {hours} hours: {'%, '.join(map(str, chances))}%", + } + ] } -multi_tool_server = create_sdk_mcp_server( - name="utilities", +# Rebuild the server with both tools in the array +weather_server = create_sdk_mcp_server( + name="weather", version="1.0.0", - tools=[calculate, translate, search_web], # Pass decorated functions + tools=[get_temperature, get_precipitation_chance], ) - - -# Allow only specific tools with streaming input -async def message_generator(): - yield { - "type": "user", - "message": { - "role": "user", - "content": "Calculate 5 + 3 and translate 'hello' to Spanish", - }, - } - - -async for message in query( - prompt=message_generator(), # Use async generator for streaming input - options=ClaudeAgentOptions( - mcp_servers={"utilities": multi_tool_server}, - allowed_tools=[ - "mcp__utilities__calculate", # Allow calculator - "mcp__utilities__translate", # Allow translator - # "mcp__utilities__search_web" is NOT allowed - ], - ), -): - if hasattr(message, "result"): - print(message.result) ``` - - -## Type Safety with Python - -The `@tool` decorator supports various schema definition approaches for type safety: - - - ```typescript TypeScript -import { z } from "zod"; - -tool( - "process_data", - "Process structured data with type safety", +// Define a second tool for the same server +const getPrecipitationChance = tool( + "get_precipitation_chance", + "Get the hourly precipitation probability for a location", { - // Zod schema defines both runtime validation and TypeScript types - data: z.object({ - name: z.string(), - age: z.number().min(0).max(150), - email: z.string().email(), - preferences: z.array(z.string()).optional() - }), - format: z.enum(["json", "csv", "xml"]).default("json") + latitude: z.number(), + longitude: z.number(), + hours: z + .number() + .int() + .min(1) + .max(24) + .default(12) // .default() makes the parameter optional + .describe("How many hours of forecast to return") }, async (args) => { - // args is fully typed based on the schema - // TypeScript knows: args.data.name is string, args.data.age is number, etc. - console.log(`Processing ${args.data.name}'s data as ${args.format}`); + const response = await fetch( + `https://api.open-meteo.com/v1/forecast?latitude=${args.latitude}&longitude=${args.longitude}&hourly=precipitation_probability&forecast_days=1` + ); + const data: any = await response.json(); + const chances = data.hourly.precipitation_probability.slice(0, args.hours); - // Your processing logic here return { - content: [ - { - type: "text", - text: `Processed data for ${args.data.name}` - } - ] + content: [{ type: "text", text: `Next ${args.hours} hours: ${chances.join("%, ")}%` }] }; } ); + +// Rebuild the server with both tools in the array +const weatherServer = createSdkMcpServer({ + name: "weather", + version: "1.0.0", + tools: [getTemperature, getPrecipitationChance] +}); ``` -```python Python -from typing import Any + +Every tool in this array consumes context window space on every turn. If you're defining dozens of tools, see [tool search](/docs/en/agent-sdk/tool-search) to load them on demand instead. -# Simple type mapping - recommended for most cases -@tool( - "process_data", - "Process structured data with type safety", - { - "name": str, - "age": int, - "email": str, - "preferences": list, # Optional parameters can be handled in the function - }, -) -async def process_data(args: dict[str, Any]) -> dict[str, Any]: - # Access arguments with type hints for IDE support - name = args["name"] - age = args["age"] - email = args["email"] - preferences = args.get("preferences", []) +### Add tool annotations + +[Tool annotations](https://modelcontextprotocol.io/docs/concepts/tools#tool-annotations) are optional metadata describing how a tool behaves. Pass them as the fifth argument to `tool()` helper in TypeScript or via the `annotations` keyword argument for the `@tool` decorator in Python. All hint fields are Booleans. + +| Field | Default | Meaning | +| :--- | :--- | :--- | +| `readOnlyHint` | `false` | Tool does not modify its environment. Controls whether the tool can be called in parallel with other read-only tools. | +| `destructiveHint` | `true` | Tool may perform destructive updates. Informational only. | +| `idempotentHint` | `false` | Repeated calls with the same arguments have no additional effect. Informational only. | +| `openWorldHint` | `true` | Tool reaches systems outside your process. Informational only. | - print(f"Processing {name}'s data (age: {age})") +Annotations are metadata, not enforcement. A tool marked `readOnlyHint: true` can still write to disk if that's what the handler does. Keep the annotation accurate to the handler. + +This example adds `readOnlyHint` to the `get_temperature` tool from the [weather tool example](#weather-tool-example). + + - return {"content": [{"type": "text", "text": f"Processed data for {name}"}]} +```python Python +from claude_agent_sdk import tool, ToolAnnotations -# For more complex schemas, you can use JSON Schema format @tool( - "advanced_process", - "Process data with advanced validation", - { - "type": "object", - "properties": { - "name": {"type": "string"}, - "age": {"type": "integer", "minimum": 0, "maximum": 150}, - "email": {"type": "string", "format": "email"}, - "format": { - "type": "string", - "enum": ["json", "csv", "xml"], - "default": "json", - }, - }, - "required": ["name", "age", "email"], - }, + "get_temperature", + "Get the current temperature at a location", + {"latitude": float, "longitude": float}, + annotations=ToolAnnotations( + readOnlyHint=True + ), # Lets Claude batch this with other read-only calls ) -async def advanced_process(args: dict[str, Any]) -> dict[str, Any]: - # Process with advanced schema validation - return { - "content": [{"type": "text", "text": f"Advanced processing for {args['name']}"}] - } +async def get_temperature(args): + return {"content": [{"type": "text", "text": "..."}]} +``` + +```typescript TypeScript +tool( + "get_temperature", + "Get the current temperature at a location", + { latitude: z.number(), longitude: z.number() }, + async (args) => ({ content: [{ type: "text", text: `...` }] }), + { annotations: { readOnlyHint: true } } // Lets Claude batch this with other read-only calls +); ``` -## Error Handling +See `ToolAnnotations` in the [TypeScript](/docs/en/agent-sdk/typescript#tool-annotations) or [Python](/docs/en/agent-sdk/python#tool-annotations) reference. + +## Control tool access + +The [weather tool example](#weather-tool-example) registered a server and listed tools in `allowedTools`. This section covers how tool names are constructed and how to scope access when you have multiple tools or want to restrict built-ins. -Handle errors gracefully to provide meaningful feedback: +### Tool name format + +When MCP tools are exposed to Claude, their names follow a specific format: +- Pattern: `mcp__{server_name}__{tool_name}` +- Example: A tool named `get_temperature` in server `weather` becomes `mcp__weather__get_temperature` + +### Configure allowed tools + +The `tools` option and the allowed/disallowed lists operate on separate layers. `tools` controls which built-in tools appear in Claude's context. Allowed and disallowed tool lists control whether calls are approved or denied once Claude attempts them. + +| Option | Layer | Effect | +|:-------|:------|:-------| +| `tools: ["Read", "Grep"]` | Availability | Only the listed built-ins are in Claude's context. Unlisted built-ins are removed. MCP tools are unaffected. | +| `tools: []` | Availability | All built-ins are removed. Claude can only use your MCP tools. | +| allowed tools | Permission | Listed tools run without a permission prompt. Unlisted tools remain available; calls go through the [permission flow](/docs/en/agent-sdk/permissions). | +| disallowed tools | Permission | Every call to a listed tool is denied. The tool stays in Claude's context, so Claude may still attempt it before the call is rejected. | + +To limit which built-ins Claude can use, prefer `tools` over disallowed tools. Omitting a tool from `tools` removes it from context so Claude never attempts it; listing it in `disallowedTools` (Python: `disallowed_tools`) blocks the call but leaves the tool visible, so Claude may waste a turn trying it. See [Configure permissions](/docs/en/agent-sdk/permissions) for the full evaluation order. + +## Handle errors + +How your handler reports errors determines whether the agent loop continues or stops: + +| What happens | Result | +|:-------------|:-------| +| Handler throws an uncaught exception | Agent loop stops. Claude never sees the error, and the `query` call fails. | +| Handler catches the error and returns `isError: true` (TS) / `"is_error": True` (Python) | Agent loop continues. Claude sees the error as data and can retry, try a different tool, or explain the failure. | + +The example below catches two kinds of failures inside the handler instead of letting them throw. A non-200 HTTP status is caught from the response and returned as an error result. A network error or invalid JSON is caught by the surrounding `try/except` (Python) or `try/catch` (TypeScript) and also returned as an error result. In both cases the handler returns normally and the agent loop continues. +```python Python +import json +import httpx +from typing import Any + + +@tool( + "fetch_data", + "Fetch data from an API", + {"endpoint": str}, # Simple schema +) +async def fetch_data(args: dict[str, Any]) -> dict[str, Any]: + try: + async with httpx.AsyncClient() as client: + response = await client.get(args["endpoint"]) + if response.status_code != 200: + # Return the failure as a tool result so Claude can react to it. + # is_error marks this as a failed call rather than odd-looking data. + return { + "content": [ + { + "type": "text", + "text": f"API error: {response.status_code} {response.reason_phrase}", + } + ], + "is_error": True, + } + + data = response.json() + return {"content": [{"type": "text", "text": json.dumps(data, indent=2)}]} + except Exception as e: + # Catching here keeps the agent loop alive. An uncaught exception + # would end the whole query() call. + return { + "content": [{"type": "text", "text": f"Failed to fetch data: {str(e)}"}], + "is_error": True, + } +``` + ```typescript TypeScript tool( "fetch_data", @@ -427,13 +401,16 @@ tool( const response = await fetch(args.endpoint); if (!response.ok) { + // Return the failure as a tool result so Claude can react to it. + // isError marks this as a failed call rather than odd-looking data. return { content: [ { type: "text", text: `API error: ${response.status} ${response.statusText}` } - ] + ], + isError: true }; } @@ -447,398 +424,394 @@ tool( ] }; } catch (error) { + // Catching here keeps the agent loop alive. An uncaught throw + // would end the whole query() call. return { content: [ { type: "text", - text: `Failed to fetch data: ${error.message}` + text: `Failed to fetch data: ${error instanceof Error ? error.message : String(error)}` } - ] + ], + isError: true }; } } ); ``` -```python Python -import json -import aiohttp -from typing import Any + +## Return images and resources -@tool( - "fetch_data", - "Fetch data from an API", - {"endpoint": str}, # Simple schema -) -async def fetch_data(args: dict[str, Any]) -> dict[str, Any]: - try: - async with aiohttp.ClientSession() as session: - async with session.get(args["endpoint"]) as response: - if response.status != 200: - return { - "content": [ - { - "type": "text", - "text": f"API error: {response.status} {response.reason}", - } - ] - } - - data = await response.json() - return { - "content": [{"type": "text", "text": json.dumps(data, indent=2)}] - } - except Exception as e: - return { - "content": [{"type": "text", "text": f"Failed to fetch data: {str(e)}"}] - } -``` +The `content` array in a tool result accepts `text`, `image`, and `resource` blocks. You can mix them in the same response. - +### Images -## Example Tools +An image block carries the image bytes inline, encoded as base64. There is no URL field. To return an image that lives at a URL, fetch it in the handler, read the response bytes, and base64-encode them before returning. The result is processed as visual input. -### Database Query Tool +| Field | Type | Notes | +| :--- | :--- | :--- | +| `type` | `"image"` | | +| `data` | `string` | Base64-encoded bytes. Raw base64 only, no `data:image/...;base64,` prefix | +| `mimeType` | `string` | Required. For example `image/png`, `image/jpeg`, `image/webp`, `image/gif` | -```typescript TypeScript -const databaseServer = createSdkMcpServer({ - name: "database-tools", - version: "1.0.0", - tools: [ - tool( - "query_database", - "Execute a database query", - { - query: z.string().describe("SQL query to execute"), - params: z.array(z.any()).optional().describe("Query parameters") - }, - async (args) => { - const results = await db.query(args.query, args.params || []); - return { - content: [ - { - type: "text", - text: `Found ${results.length} rows:\n${JSON.stringify(results, null, 2)}` - } - ] - }; - } - ) - ] -}); -``` - ```python Python -from typing import Any -import json +import base64 +import httpx -@tool( - "query_database", - "Execute a database query", - {"query": str, "params": list}, # Simple schema with list type -) -async def query_database(args: dict[str, Any]) -> dict[str, Any]: - results = await db.query(args["query"], args.get("params", [])) +# Define a tool that fetches an image from a URL and returns it to Claude +@tool("fetch_image", "Fetch an image from a URL and return it to Claude", {"url": str}) +async def fetch_image(args): + async with httpx.AsyncClient() as client: # Fetch the image bytes + response = await client.get(args["url"]) + return { "content": [ { - "type": "text", - "text": f"Found {len(results)} rows:\n{json.dumps(results, indent=2)}", + "type": "image", + "data": base64.b64encode(response.content).decode( + "ascii" + ), # Base64-encode the raw bytes + "mimeType": response.headers.get( + "content-type", "image/png" + ), # Read MIME type from the response } ] } +``` +```typescript TypeScript +tool( + "fetch_image", + "Fetch an image from a URL and return it to Claude", + { + url: z.string().url() + }, + async (args) => { + const response = await fetch(args.url); // Fetch the image bytes + const buffer = Buffer.from(await response.arrayBuffer()); // Read into a Buffer for base64 encoding + const mimeType = response.headers.get("content-type") ?? "image/png"; -database_server = create_sdk_mcp_server( - name="database-tools", - version="1.0.0", - tools=[query_database], # Pass the decorated function -) + return { + content: [ + { + type: "image", + data: buffer.toString("base64"), // Base64-encode the raw bytes + mimeType + } + ] + }; + } +); ``` -### API Gateway Tool - - +### Resources -```typescript TypeScript -const apiGatewayServer = createSdkMcpServer({ - name: "api-gateway", - version: "1.0.0", - tools: [ - tool( - "api_request", - "Make authenticated API requests to external services", - { - service: z.enum(["stripe", "github", "openai", "slack"]).describe("Service to call"), - endpoint: z.string().describe("API endpoint path"), - method: z.enum(["GET", "POST", "PUT", "DELETE"]).describe("HTTP method"), - body: z.record(z.any()).optional().describe("Request body"), - query: z.record(z.string()).optional().describe("Query parameters") - }, - async (args) => { - const config = { - stripe: { baseUrl: "https://api.stripe.com/v1", key: process.env.STRIPE_KEY }, - github: { baseUrl: "https://api.github.com", key: process.env.GITHUB_TOKEN }, - openai: { baseUrl: "https://api.openai.com/v1", key: process.env.OPENAI_KEY }, - slack: { baseUrl: "https://slack.com/api", key: process.env.SLACK_TOKEN } - }; +A resource block embeds a piece of content identified by a URI. The URI is a label for Claude to reference; the actual content rides in the block's `text` or `blob` field. Use this when your tool produces something that makes sense to address by name later, such as a generated file or a record from an external system. - const { baseUrl, key } = config[args.service]; - const url = new URL(`${baseUrl}${args.endpoint}`); +| Field | Type | Notes | +| :--- | :--- | :--- | +| `type` | `"resource"` | | +| `resource.uri` | `string` | Identifier for the content. Any URI scheme | +| `resource.text` | `string` | The content, if it's text. Provide this or `blob`, not both | +| `resource.blob` | `string` | The content base64-encoded, if it's binary | +| `resource.mimeType` | `string` | Optional | - if (args.query) { - Object.entries(args.query).forEach(([k, v]) => url.searchParams.set(k, v)); - } +This example shows a resource block returned from inside a tool handler. The URI `file:///tmp/report.md` is a label that Claude can reference later; the SDK does not read from that path. - const response = await fetch(url, { - method: args.method, - headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json" }, - body: args.body ? JSON.stringify(args.body) : undefined - }); + - const data = await response.json(); - return { - content: [ - { - type: "text", - text: JSON.stringify(data, null, 2) - } - ] - }; +```typescript TypeScript +return { + content: [ + { + type: "resource", + resource: { + uri: "file:///tmp/report.md", // Label for Claude to reference, not a path the SDK reads + mimeType: "text/markdown", + text: "# Report\n..." // The actual content, inline } - ) + } ] -}); +}; ``` ```python Python -import os -import json -import aiohttp +return { + "content": [ + { + "type": "resource", + "resource": { + "uri": "file:///tmp/report.md", # Label for Claude to reference, not a path the SDK reads + "mimeType": "text/markdown", + "text": "# Report\n...", # The actual content, inline + }, + } + ] +} +``` + + + +These block shapes come from the MCP `CallToolResult` type. See the [MCP specification](https://modelcontextprotocol.io/specification/2025-06-18/server/tools#tool-result) for the full definition. + +## Example: unit converter + +This tool converts values between units of length, temperature, and weight. A user can ask "convert 100 kilometers to miles" or "what is 72°F in Celsius," and Claude picks the right unit type and units from the request. + +It demonstrates two patterns: + +- **Enum schemas:** `unit_type` is constrained to a fixed set of values. In TypeScript, use `z.enum()`. In Python, the dict schema doesn't support enums, so the full JSON Schema dict is required. +- **Unsupported input handling:** when a conversion pair isn't found, the handler returns `isError: true` so Claude can tell the user what went wrong rather than treating a failure as a normal result. + + + +```python Python from typing import Any +from claude_agent_sdk import tool, create_sdk_mcp_server -# For complex schemas with enums, use JSON Schema format +# z.enum() in TypeScript becomes an "enum" constraint in JSON Schema. +# The dict schema has no equivalent, so full JSON Schema is required. @tool( - "api_request", - "Make authenticated API requests to external services", + "convert_units", + "Convert a value from one unit to another", { "type": "object", "properties": { - "service": { + "unit_type": { + "type": "string", + "enum": ["length", "temperature", "weight"], + "description": "Category of unit", + }, + "from_unit": { "type": "string", - "enum": ["stripe", "github", "openai", "slack"], + "description": "Unit to convert from, e.g. kilometers, fahrenheit, pounds", }, - "endpoint": {"type": "string"}, - "method": {"type": "string", "enum": ["GET", "POST", "PUT", "DELETE"]}, - "body": {"type": "object"}, - "query": {"type": "object"}, + "to_unit": {"type": "string", "description": "Unit to convert to"}, + "value": {"type": "number", "description": "Value to convert"}, }, - "required": ["service", "endpoint", "method"], + "required": ["unit_type", "from_unit", "to_unit", "value"], }, ) -async def api_request(args: dict[str, Any]) -> dict[str, Any]: - config = { - "stripe": { - "base_url": "https://api.stripe.com/v1", - "key": os.environ["STRIPE_KEY"], - }, - "github": { - "base_url": "https://api.github.com", - "key": os.environ["GITHUB_TOKEN"], +async def convert_units(args: dict[str, Any]) -> dict[str, Any]: + conversions = { + "length": { + "kilometers_to_miles": lambda v: v * 0.621371, + "miles_to_kilometers": lambda v: v * 1.60934, + "meters_to_feet": lambda v: v * 3.28084, + "feet_to_meters": lambda v: v * 0.3048, }, - "openai": { - "base_url": "https://api.openai.com/v1", - "key": os.environ["OPENAI_KEY"], + "temperature": { + "celsius_to_fahrenheit": lambda v: (v * 9) / 5 + 32, + "fahrenheit_to_celsius": lambda v: (v - 32) * 5 / 9, + "celsius_to_kelvin": lambda v: v + 273.15, + "kelvin_to_celsius": lambda v: v - 273.15, }, - "slack": { - "base_url": "https://slack.com/api", - "key": os.environ["SLACK_TOKEN"], + "weight": { + "kilograms_to_pounds": lambda v: v * 2.20462, + "pounds_to_kilograms": lambda v: v * 0.453592, + "grams_to_ounces": lambda v: v * 0.035274, + "ounces_to_grams": lambda v: v * 28.3495, }, } - service_config = config[args["service"]] - url = f"{service_config['base_url']}{args['endpoint']}" + key = f"{args['from_unit']}_to_{args['to_unit']}" + fn = conversions.get(args["unit_type"], {}).get(key) - if args.get("query"): - params = "&".join([f"{k}={v}" for k, v in args["query"].items()]) - url += f"?{params}" + if not fn: + return { + "content": [ + { + "type": "text", + "text": f"Unsupported conversion: {args['from_unit']} to {args['to_unit']}", + } + ], + "is_error": True, + } - headers = { - "Authorization": f"Bearer {service_config['key']}", - "Content-Type": "application/json", + result = fn(args["value"]) + return { + "content": [ + { + "type": "text", + "text": f"{args['value']} {args['from_unit']} = {result:.4f} {args['to_unit']}", + } + ] } - async with aiohttp.ClientSession() as session: - async with session.request( - args["method"], url, headers=headers, json=args.get("body") - ) as response: - data = await response.json() - return {"content": [{"type": "text", "text": json.dumps(data, indent=2)}]} - -api_gateway_server = create_sdk_mcp_server( - name="api-gateway", +converter_server = create_sdk_mcp_server( + name="converter", version="1.0.0", - tools=[api_request], # Pass the decorated function + tools=[convert_units], ) ``` - +```typescript TypeScript +import { tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk"; +import { z } from "zod"; -### Calculator Tool +const convert = tool( + "convert_units", + "Convert a value from one unit to another", + { + unit_type: z.enum(["length", "temperature", "weight"]).describe("Category of unit"), + from_unit: z + .string() + .describe("Unit to convert from, e.g. kilometers, fahrenheit, pounds"), + to_unit: z.string().describe("Unit to convert to"), + value: z.number().describe("Value to convert") + }, + async (args) => { + type Conversions = Record number>>; + + const conversions: Conversions = { + length: { + kilometers_to_miles: (v) => v * 0.621371, + miles_to_kilometers: (v) => v * 1.60934, + meters_to_feet: (v) => v * 3.28084, + feet_to_meters: (v) => v * 0.3048 + }, + temperature: { + celsius_to_fahrenheit: (v) => (v * 9) / 5 + 32, + fahrenheit_to_celsius: (v) => ((v - 32) * 5) / 9, + celsius_to_kelvin: (v) => v + 273.15, + kelvin_to_celsius: (v) => v - 273.15 + }, + weight: { + kilograms_to_pounds: (v) => v * 2.20462, + pounds_to_kilograms: (v) => v * 0.453592, + grams_to_ounces: (v) => v * 0.035274, + ounces_to_grams: (v) => v * 28.3495 + } + }; - + const key = `${args.from_unit}_to_${args.to_unit}`; + const fn = conversions[args.unit_type]?.[key]; -```typescript TypeScript -const calculatorServer = createSdkMcpServer({ - name: "calculator", - version: "1.0.0", - tools: [ - tool( - "calculate", - "Perform mathematical calculations", - { - expression: z.string().describe("Mathematical expression to evaluate"), - precision: z.number().optional().default(2).describe("Decimal precision") - }, - async (args) => { - try { - // Use a safe math evaluation library in production - const result = eval(args.expression); // Example only! - const formatted = Number(result).toFixed(args.precision); - - return { - content: [ - { - type: "text", - text: `${args.expression} = ${formatted}` - } - ] - }; - } catch (error) { - return { - content: [ - { - type: "text", - text: `Error: Invalid expression - ${error.message}` - } - ] - }; + if (!fn) { + return { + content: [ + { + type: "text", + text: `Unsupported conversion: ${args.from_unit} to ${args.to_unit}` + } + ], + isError: true + }; + } + + const result = fn(args.value); + return { + content: [ + { + type: "text", + text: `${args.value} ${args.from_unit} = ${result.toFixed(4)} ${args.to_unit}` } - } - ), - tool( - "compound_interest", - "Calculate compound interest for an investment", - { - principal: z.number().positive().describe("Initial investment amount"), - rate: z.number().describe("Annual interest rate (as decimal, e.g., 0.05 for 5%)"), - time: z.number().positive().describe("Investment period in years"), - n: z.number().positive().default(12).describe("Compounding frequency per year") - }, - async (args) => { - const amount = args.principal * Math.pow(1 + args.rate / args.n, args.n * args.time); - const interest = amount - args.principal; + ] + }; + } +); - return { - content: [ - { - type: "text", - text: - "Investment Analysis:\n" + - `Principal: $${args.principal.toFixed(2)}\n` + - `Rate: ${(args.rate * 100).toFixed(2)}%\n` + - `Time: ${args.time} years\n` + - `Compounding: ${args.n} times per year\n\n` + - `Final Amount: $${amount.toFixed(2)}\n` + - `Interest Earned: $${interest.toFixed(2)}\n` + - `Return: ${((interest / args.principal) * 100).toFixed(2)}%` - } - ] - }; - } - ) - ] +const converterServer = createSdkMcpServer({ + name: "converter", + version: "1.0.0", + tools: [convert] }); ``` -```python Python -import math -from typing import Any + +Once the server is defined, pass it to `query` the same way as the weather example. This example sends three different prompts in a loop to show the same tool handling different unit types. For each response, it inspects `AssistantMessage` objects (which contain the tool calls Claude made during that turn) and prints each `ToolUseBlock` before printing the final `ResultMessage` text. This lets you see when Claude is using the tool versus answering from its own knowledge. -@tool( - "calculate", - "Perform mathematical calculations", - {"expression": str, "precision": int}, # Simple schema + + +```python Python +import asyncio +from claude_agent_sdk import ( + query, + ClaudeAgentOptions, + ResultMessage, + AssistantMessage, + ToolUseBlock, ) -async def calculate(args: dict[str, Any]) -> dict[str, Any]: - try: - # Use a safe math evaluation library in production - result = eval(args["expression"], {"__builtins__": {}}) - precision = args.get("precision", 2) - formatted = round(result, precision) - return { - "content": [{"type": "text", "text": f"{args['expression']} = {formatted}"}] - } - except Exception as e: - return { - "content": [ - {"type": "text", "text": f"Error: Invalid expression - {str(e)}"} - ] - } +async def main(): + options = ClaudeAgentOptions( + mcp_servers={"converter": converter_server}, + allowed_tools=["mcp__converter__convert_units"], + ) -@tool( - "compound_interest", - "Calculate compound interest for an investment", - {"principal": float, "rate": float, "time": float, "n": int}, -) -async def compound_interest(args: dict[str, Any]) -> dict[str, Any]: - principal = args["principal"] - rate = args["rate"] - time = args["time"] - n = args.get("n", 12) + prompts = [ + "Convert 100 kilometers to miles.", + "What is 72°F in Celsius?", + "How many pounds is 5 kilograms?", + ] - amount = principal * (1 + rate / n) ** (n * time) - interest = amount - principal + for prompt in prompts: + async for message in query(prompt=prompt, options=options): + if isinstance(message, AssistantMessage): + for block in message.content: + if isinstance(block, ToolUseBlock): + print(f"[tool call] {block.name}({block.input})") + elif isinstance(message, ResultMessage) and message.subtype == "success": + print(f"Q: {prompt}\nA: {message.result}\n") - return { - "content": [ - { - "type": "text", - "text": f"""Investment Analysis: -Principal: ${principal:.2f} -Rate: {rate * 100:.2f}% -Time: {time} years -Compounding: {n} times per year - -Final Amount: ${amount:.2f} -Interest Earned: ${interest:.2f} -Return: {(interest / principal) * 100:.2f}%""", - } - ] - } +asyncio.run(main()) +``` -calculator_server = create_sdk_mcp_server( - name="calculator", - version="1.0.0", - tools=[calculate, compound_interest], # Pass decorated functions -) +```typescript TypeScript +import { query } from "@anthropic-ai/claude-agent-sdk"; + +const prompts = [ + "Convert 100 kilometers to miles.", + "What is 72°F in Celsius?", + "How many pounds is 5 kilograms?" +]; + +for (const prompt of prompts) { + for await (const message of query({ + prompt, + options: { + mcpServers: { converter: converterServer }, + allowedTools: ["mcp__converter__convert_units"] + } + })) { + if (message.type === "assistant") { + for (const block of message.message.content) { + if (block.type === "tool_use") { + console.log(`[tool call] ${block.name}`, block.input); + } + } + } else if (message.type === "result" && message.subtype === "success") { + console.log(`Q: ${prompt}\nA: ${message.result}\n`); + } + } +} ``` -## Related Documentation +## Next steps + +Custom tools wrap async functions in a standard interface. You can mix the patterns on this page in the same server: a single server can hold a database tool, an API gateway tool, and an image renderer alongside each other. + +From here: + +- If your server grows to dozens of tools, see [tool search](/docs/en/agent-sdk/tool-search) to defer loading them until Claude needs them. +- To connect to external MCP servers (filesystem, GitHub, Slack) instead of building your own, see [Connect MCP servers](/docs/en/agent-sdk/mcp). +- To control which tools run automatically versus requiring approval, see [Configure permissions](/docs/en/agent-sdk/permissions). + +## Related documentation - [TypeScript SDK Reference](/docs/en/agent-sdk/typescript) - [Python SDK Reference](/docs/en/agent-sdk/python) diff --git a/content/en/agent-sdk/mcp.md b/content/en/agent-sdk/mcp.md index 6d85b388..b8e3dbd2 100644 --- a/content/en/agent-sdk/mcp.md +++ b/content/en/agent-sdk/mcp.md @@ -171,25 +171,9 @@ const _ = { Wildcards (`*`) let you allow all tools from a server without listing each one individually. -### Alternative: Change the permission mode - -Instead of listing allowed tools, you can change the permission mode to grant broader access: - -- `permissionMode: "acceptEdits"`: Automatically approves tool usage (still prompts for destructive operations) -- `permissionMode: "bypassPermissions"`: Skips all safety prompts, including for destructive operations like file deletion or running shell commands. Use with caution, especially in production. This mode propagates to subagents spawned by the Agent tool. - -```typescript hidelines={1,-1} -const _ = { - options: { - mcpServers: { - // your servers - }, - permissionMode: "acceptEdits" // No need for allowedTools - } -}; -``` - -See [Permissions](/docs/en/agent-sdk/permissions) for more details on permission modes. + +**Prefer `allowedTools` over permission modes for MCP access.** `permissionMode: "acceptEdits"` does not auto-approve MCP tools (only file edits and filesystem Bash commands). `permissionMode: "bypassPermissions"` does auto-approve MCP tools but also disables all other safety prompts, which is broader than necessary. A wildcard in `allowedTools` grants exactly the MCP server you want and nothing more. See [Permission modes](/docs/en/agent-sdk/permissions#permission-modes) for a full comparison. + ### Discover available tools @@ -333,54 +317,11 @@ Define custom tools directly in your application code instead of running a separ ## MCP tool search -When you have many MCP tools configured, tool definitions can consume a significant portion of your context window. MCP tool search solves this by dynamically loading tools on-demand instead of preloading all of them. - -### How it works - -Tool search runs in auto mode by default. It activates when your MCP tool descriptions would consume more than 10% of the context window. When triggered: - -1. MCP tools are marked with `defer_loading: true` rather than loaded into context upfront -2. Claude uses a search tool to discover relevant MCP tools when needed -3. Only the tools Claude actually needs are loaded into context - -Tool search requires models that support `tool_reference` blocks: Sonnet 4 and later, or Opus 4 and later. Haiku models do not support tool search. - -### Configure tool search - -Control tool search behavior with the `ENABLE_TOOL_SEARCH` environment variable: +When you have many MCP tools configured, tool definitions can consume a significant portion of your context window. Tool search solves this by withholding tool definitions from context and loading only the ones Claude needs for each turn. -| Value | Behavior | -|:------|:---------| -| `auto` | Activates when MCP tools exceed 10% of context (default) | -| `auto:5` | Activates at 5% threshold (customize the percentage) | -| `true` | Always enabled | -| `false` | Disabled, all MCP tools loaded upfront | +Tool search is enabled by default. See [Tool search](/docs/en/agent-sdk/tool-search) for configuration options and details. -Set the value in the `env` option: - - - -```typescript TypeScript -const options = { - mcpServers: { - // your MCP servers - }, - env: { - ENABLE_TOOL_SEARCH: "auto:5" // Enable at 5% threshold - } -}; -``` - -```python Python -options = ClaudeAgentOptions( - mcp_servers={...}, # your MCP servers - env={ - "ENABLE_TOOL_SEARCH": "auto:5" # Enable at 5% threshold - }, -) -``` - - +For more detail, including best practices and using tool search with custom SDK tools, see the [tool search guide](/docs/en/agent-sdk/tool-search). ## Authentication @@ -587,7 +528,7 @@ for await (const message of query({ // Log when Claude calls an MCP tool if (message.type === "assistant") { - for (const block of message.content) { + for (const block of message.message.content) { if (block.type === "tool_use" && block.name.startsWith("mcp__")) { console.log("MCP tool called:", block.name); } @@ -811,7 +752,7 @@ Common causes: ### Tools not being called -If Claude sees tools but doesn't use them, check that you've granted permission with `allowedTools` or by [changing the permission mode](#alternative-change-the-permission-mode): +If Claude sees tools but doesn't use them, check that you've granted permission with `allowedTools`: ```typescript hidelines={1,-1} const _ = { diff --git a/content/en/agent-sdk/python.md b/content/en/agent-sdk/python.md index 30c1b886..0a2532db 100644 --- a/content/en/agent-sdk/python.md +++ b/content/en/agent-sdk/python.md @@ -115,7 +115,7 @@ def tool( | `name` | `str` | Unique identifier for the tool | | `description` | `str` | Human-readable description of what the tool does | | `input_schema` | `type \| dict[str, Any]` | Schema defining the tool's input parameters (see below) | -| `annotations` | `ToolAnnotations \| None` | Optional MCP tool annotations (e.g., `readOnlyHint`, `destructiveHint`, `openWorldHint`). Imported from `mcp.types` | +| `annotations` | [`ToolAnnotations`](#tool-annotations)` \| None` | Optional MCP tool annotations providing behavioral hints to clients | #### Input schema options @@ -153,6 +153,33 @@ async def greet(args: dict[str, Any]) -> dict[str, Any]: return {"content": [{"type": "text", "text": f"Hello, {args['name']}!"}]} ``` +#### `ToolAnnotations` + +Re-exported from `mcp.types` (also available as `from claude_agent_sdk import ToolAnnotations`). All fields are optional hints; clients should not rely on them for security decisions. + +| Field | Type | Default | Description | +| :---- | :--- | :------ | :---------- | +| `title` | `str \| None` | `None` | Human-readable title for the tool | +| `readOnlyHint` | `bool \| None` | `False` | If `True`, the tool does not modify its environment | +| `destructiveHint` | `bool \| None` | `True` | If `True`, the tool may perform destructive updates (only meaningful when `readOnlyHint` is `False`) | +| `idempotentHint` | `bool \| None` | `False` | If `True`, repeated calls with the same arguments have no additional effect (only meaningful when `readOnlyHint` is `False`) | +| `openWorldHint` | `bool \| None` | `True` | If `True`, the tool interacts with external entities (for example, web search). If `False`, the tool's domain is closed (for example, a memory tool) | + +```python +from claude_agent_sdk import tool, ToolAnnotations +from typing import Any + + +@tool( + "search", + "Search the web", + {"query": str}, + annotations=ToolAnnotations(readOnlyHint=True, openWorldHint=True), +) +async def search(args: dict[str, Any]) -> dict[str, Any]: + return {"content": [{"type": "text", "text": f"Results for: {args['query']}"}]} +``` + ### `create_sdk_mcp_server()` Create an in-process MCP server that runs within your Python application. @@ -448,7 +475,7 @@ asyncio.run(main()) ```python import asyncio -from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions +from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, ResultMessage async def interruptible_task(): @@ -456,7 +483,7 @@ async def interruptible_task(): async with ClaudeSDKClient(options=options) as client: # Start a long-running task - await client.query("Count from 1 to 100 slowly") + await client.query("Count from 1 to 100 slowly, using the bash sleep command") # Let it run for a bit await asyncio.sleep(2) @@ -465,17 +492,28 @@ async def interruptible_task(): await client.interrupt() print("Task interrupted!") + # Drain the interrupted task's messages (including its ResultMessage) + async for message in client.receive_response(): + if isinstance(message, ResultMessage): + print(f"Interrupted task finished with subtype={message.subtype!r}") + # subtype is "error_during_execution" for interrupted tasks + # Send a new command await client.query("Just say hello instead") + # Now receive the new response async for message in client.receive_response(): - # Process the new response - pass + if isinstance(message, ResultMessage) and message.subtype == "success": + print(f"New result: {message.result}") asyncio.run(interruptible_task()) ``` + +**Buffer behavior after interrupt:** `interrupt()` sends a stop signal but does not clear the message buffer. Messages already produced by the interrupted task, including its `ResultMessage` (with `subtype="error_during_execution"`), remain in the stream. You must drain them with `receive_response()` before reading the response to a new query. If you send a new query immediately after `interrupt()` and call `receive_response()` only once, you'll receive the interrupted task's messages, not the new query's response. + + #### Example - Advanced permission control ```python @@ -527,6 +565,10 @@ asyncio.run(main()) ## Types + +**`@dataclass` vs `TypedDict`:** This SDK uses two kinds of types. Classes decorated with `@dataclass` (such as `ResultMessage`, `AgentDefinition`, `TextBlock`) are object instances at runtime and support attribute access: `msg.result`. Classes defined with `TypedDict` (such as `ThinkingConfigEnabled`, `McpStdioServerConfig`, `SyncHookJSONOutput`) are **plain dicts at runtime** and require key access: `config["budget_tokens"]`, not `config.budget_tokens`. The `ClassName(field=value)` call syntax works for both, but only dataclasses produce objects with attributes. + + ### `SdkMcpTool` Definition for an SDK MCP tool created with the `@tool` decorator. @@ -1012,6 +1054,20 @@ ThinkingConfig = ThinkingConfigAdaptive | ThinkingConfigEnabled | ThinkingConfig | `enabled` | `type`, `budget_tokens` | Enable thinking with a specific token budget | | `disabled` | `type` | Disable thinking | +Because these are `TypedDict` classes, they're plain dicts at runtime. Either construct them as dict literals or call the class like a constructor; both produce a `dict`. Access fields with `config["budget_tokens"]`, not `config.budget_tokens`: + +```python +from claude_agent_sdk import ClaudeAgentOptions, ThinkingConfigEnabled + +# Option 1: dict literal (recommended, no import needed) +options = ClaudeAgentOptions(thinking={"type": "enabled", "budget_tokens": 20000}) + +# Option 2: constructor-style (returns a plain dict) +config = ThinkingConfigEnabled(type="enabled", budget_tokens=20000) +print(config["budget_tokens"]) # 20000 +# config.budget_tokens would raise AttributeError +``` + ### `SdkBeta` Literal type for SDK beta features. @@ -1186,6 +1242,7 @@ AssistantMessageError = Literal[ "rate_limit", "invalid_request", "server_error", + "max_output_tokens", "unknown", ] ``` @@ -1482,6 +1539,10 @@ HookEvent = Literal[ ] ``` + +The TypeScript SDK supports additional hook events not yet available in Python: `SessionStart`, `SessionEnd`, `Setup`, `TeammateIdle`, `TaskCompleted`, `ConfigChange`, `WorktreeCreate`, and `WorktreeRemove`. + + ### `HookCallback` Type definition for hook callback functions. diff --git a/content/en/agent-sdk/tool-search.md b/content/en/agent-sdk/tool-search.md new file mode 100644 index 00000000..a3f5f4a6 --- /dev/null +++ b/content/en/agent-sdk/tool-search.md @@ -0,0 +1,129 @@ +# Scale to many tools with tool search + +Scale your agent to thousands of tools by discovering and loading only what's needed, on demand. + +--- + +Tool search enables your agent to work with hundreds or thousands of tools by dynamically discovering and loading them on demand. Instead of loading all tool definitions into the context window upfront, the agent searches your tool catalog and loads only the tools it needs. + +This approach solves two challenges as tool libraries scale: + +- **Context efficiency:** Tool definitions can consume large portions of the context window (50 tools can use 10-20K tokens), leaving less room for actual work. +- **Tool selection accuracy:** Tool selection accuracy degrades with more than 30-50 tools loaded at once. + +Tool search is enabled by default. This page covers [how it works](#how-tool-search-works), how to [configure it](#configure-tool-search), and how to [optimize tool discovery](#optimize-tool-discovery). + +## How tool search works + +When tool search is active, tool definitions are withheld from the context window. The agent receives a summary of available tools and searches for relevant ones when the task requires a capability not already loaded. The 3-5 most relevant tools are loaded into context, where they stay available for subsequent turns. If the conversation is long enough that the SDK compacts earlier messages to free space, previously discovered tools may be removed, and the agent searches again as needed. + +Tool search adds one extra round-trip the first time Claude discovers a tool (the search step), but for large tool sets this is offset by smaller context on every turn. With fewer than ~10 tools, loading everything upfront is typically faster. + +For details on the underlying API mechanism, see [Tool search in the API](/docs/en/agents-and-tools/tool-use/tool-search-tool). + + +Tool search requires Claude Sonnet 4 or later, or Claude Opus 4 or later. Haiku models do not support tool search. + + +## Configure tool search + +By default, tool search is always on. You can change this with the `ENABLE_TOOL_SEARCH` environment variable: + +| Value | Behavior | +|:------|:---------| +| (unset) | Tool search is always on. Tool definitions are never loaded into context. This is the default. | +| `true` | Same as unset. | +| `auto` | Checks the combined token count of all tool definitions against the model's context window. If they exceed 10%, tool search activates. If they're under 10%, all tools are loaded into context normally. | +| `auto:N` | Same as `auto` with a custom percentage. `auto:5` activates when tool definitions exceed 5% of the context window. Lower values activate sooner. | +| `false` | Tool search is off. All tool definitions are loaded into context on every turn. | + +Tool search applies to all registered tools, whether they come from remote MCP servers or [custom SDK MCP servers](/docs/en/agent-sdk/custom-tools). When using `auto`, the threshold is based on the combined size of all tool definitions across all servers. + +Set the value in the `env` option on `query()`. This example connects to a remote MCP server that exposes many tools, pre-approves all of them with a wildcard, and uses `auto:5` so tool search activates when their definitions exceed 5% of the context window: + + + +```typescript TypeScript +import { query } from "@anthropic-ai/claude-agent-sdk"; + +for await (const message of query({ + prompt: "Find and run the appropriate database query", + options: { + mcpServers: { + "enterprise-tools": { + // Connect to a remote MCP server + type: "http", + url: "https://tools.example.com/mcp" + } + }, + allowedTools: ["mcp__enterprise-tools__*"], // Wildcard pre-approves all tools from this server + env: { + ENABLE_TOOL_SEARCH: "auto:5" // Activate tool search when tools exceed 5% of context + } + } +})) { + if (message.type === "result" && message.subtype === "success") { + console.log(message.result); + } +} +``` + +```python Python +import asyncio +from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage + + +async def main(): + options = ClaudeAgentOptions( + mcp_servers={ + "enterprise-tools": { + "type": "http", + "url": "https://tools.example.com/mcp", + } + }, + allowed_tools=[ + "mcp__enterprise-tools__*" + ], # Wildcard pre-approves all tools from this server + env={ + "ENABLE_TOOL_SEARCH": "auto:5" # Activate tool search when tools exceed 5% of context + }, + ) + + async for message in query( + prompt="Find and run the appropriate database query", + options=options, + ): + if isinstance(message, ResultMessage) and message.subtype == "success": + print(message.result) + + +asyncio.run(main()) +``` + + + +Setting `ENABLE_TOOL_SEARCH` to `"false"` disables tool search and loads all tool definitions into context on every turn. This removes the search round-trip, which can be faster when the tool set is small (fewer than ~10 tools) and the definitions fit comfortably in the context window. + +## Optimize tool discovery + +The search mechanism matches queries against tool names and descriptions. Names like `search_slack_messages` surface for a wider range of requests than `query_slack`. Descriptions with specific keywords ("Search Slack messages by keyword, channel, or date range") match more queries than generic ones ("Query Slack"). + +You can also add a system prompt section listing available tool categories. This gives the agent context about what kinds of tools are available to search for: + +```text +You can search for tools to interact with Slack, GitHub, and Jira. +``` + +## Limits + +- **Maximum tools:** 10,000 tools in your catalog +- **Search results:** Returns 3-5 most relevant tools per search +- **Model support:** Claude Sonnet 4 and later, Claude Opus 4 and later (no Haiku) + +## Related documentation + +- [Tool search in the API](/docs/en/agents-and-tools/tool-use/tool-search-tool): Full API documentation for tool search, including custom implementations +- [Connect MCP servers](/docs/en/agent-sdk/mcp): Connect to external tools via MCP servers +- [Custom tools](/docs/en/agent-sdk/custom-tools): Build your own tools with SDK MCP servers +- [TypeScript SDK reference](/docs/en/agent-sdk/typescript): Full API reference +- [Python SDK reference](/docs/en/agent-sdk/python): Full API reference \ No newline at end of file diff --git a/content/en/agent-sdk/typescript.md b/content/en/agent-sdk/typescript.md index 1ccb9707..f68b9f45 100644 --- a/content/en/agent-sdk/typescript.md +++ b/content/en/agent-sdk/typescript.md @@ -65,7 +65,34 @@ function tool( | `description` | `string` | A description of what the tool does | | `inputSchema` | `Schema extends AnyZodRawShape` | Zod schema defining the tool's input parameters (supports both Zod 3 and Zod 4) | | `handler` | `(args, extra) => Promise<`[`CallToolResult`](#call-tool-result)`>` | Async function that executes the tool logic | -| `extras` | `{ annotations?: ToolAnnotations }` | Optional extra configuration including MCP tool annotations (e.g., `readOnly`, `destructive`, `openWorld`) | +| `extras` | `{ annotations?: `[`ToolAnnotations`](#tool-annotations)` }` | Optional MCP tool annotations providing behavioral hints to clients | + +#### `ToolAnnotations` + +Re-exported from `@modelcontextprotocol/sdk/types.js`. All fields are optional hints; clients should not rely on them for security decisions. + +| Field | Type | Default | Description | +| :---- | :--- | :------ | :---------- | +| `title` | `string` | `undefined` | Human-readable title for the tool | +| `readOnlyHint` | `boolean` | `false` | If `true`, the tool does not modify its environment | +| `destructiveHint` | `boolean` | `true` | If `true`, the tool may perform destructive updates (only meaningful when `readOnlyHint` is `false`) | +| `idempotentHint` | `boolean` | `false` | If `true`, repeated calls with the same arguments have no additional effect (only meaningful when `readOnlyHint` is `false`) | +| `openWorldHint` | `boolean` | `true` | If `true`, the tool interacts with external entities (for example, web search). If `false`, the tool's domain is closed (for example, a memory tool) | + +```typescript +import { tool } from "@anthropic-ai/claude-agent-sdk"; +import { z } from "zod"; + +const searchTool = tool( + "search", + "Search the web", + { query: z.string() }, + async ({ query }) => { + return { content: [{ type: "text", text: `Results for: ${query}` }] }; + }, + { annotations: { readOnlyHint: true, openWorldHint: true } } +); +``` ### `createSdkMcpServer()` @@ -276,7 +303,7 @@ interface Query extends AsyncGenerator { | `initializationResult()` | Returns the full initialization result including supported commands, models, account info, and output style configuration | | `supportedCommands()` | Returns available slash commands | | `supportedModels()` | Returns available models with display info | -| `supportedAgents()` | Returns available subagents | +| `supportedAgents()` | Returns available subagents as [`AgentInfo`](#agent-info)`[]` | | `mcpServerStatus()` | Returns status of connected MCP servers | | `accountInfo()` | Returns account information | | `reconnectMcpServer(serverName)` | Reconnect an MCP server by name | @@ -298,6 +325,7 @@ type SDKControlInitializeResponse = { available_output_styles: string[]; models: ModelInfo[]; account: AccountInfo; + fast_mode_state?: "off" | "cooldown" | "on"; }; ``` @@ -619,6 +647,7 @@ type SDKMessage = | SDKPartialAssistantMessage | SDKCompactBoundaryMessage | SDKStatusMessage + | SDKLocalCommandOutputMessage | SDKHookStartedMessage | SDKHookProgressMessage | SDKHookResponseMessage @@ -650,7 +679,7 @@ type SDKAssistantMessage = { The `message` field is a [`BetaMessage`](/docs/en/api/messages) from the Anthropic SDK. It includes fields like `id`, `content`, `model`, `stop_reason`, and `usage`. -`SDKAssistantMessageError` is one of: `'authentication_failed'`, `'billing_error'`, `'rate_limit'`, `'invalid_request'`, `'server_error'`, or `'unknown'`. +`SDKAssistantMessageError` is one of: `'authentication_failed'`, `'billing_error'`, `'rate_limit'`, `'invalid_request'`, `'server_error'`, `'max_output_tokens'`, or `'unknown'`. ### `SDKUserMessage` @@ -2489,6 +2518,20 @@ type SDKRateLimitEvent = { }; ``` +### `SDKLocalCommandOutputMessage` + +Output from a local slash command (for example, `/voice` or `/cost`). Displayed as assistant-style text in the transcript. + +```typescript +type SDKLocalCommandOutputMessage = { + type: "system"; + subtype: "local_command_output"; + content: string; + uuid: UUID; + session_id: string; +}; +``` + ### `SDKPromptSuggestionMessage` Emitted after each turn when `promptSuggestions` is enabled. Contains a predicted next user prompt. diff --git a/content/en/agent-sdk/user-input.md b/content/en/agent-sdk/user-input.md index def4dc99..e36492e2 100644 --- a/content/en/agent-sdk/user-input.md +++ b/content/en/agent-sdk/user-input.md @@ -27,7 +27,8 @@ options = ClaudeAgentOptions(can_use_tool=handle_tool_request) ``` ```typescript TypeScript -async function handleToolRequest(toolName, input) { +async function handleToolRequest(toolName, input, options) { + // options includes { signal: AbortSignal, suggestions?: PermissionUpdate[] } // Prompt user and return allow or deny } @@ -46,12 +47,13 @@ To automatically allow or deny tools without prompting users, use [hooks](/docs/ ## Handle tool approval requests -Once you've passed a `canUseTool` callback in your query options, it fires when Claude wants to use a tool that isn't auto-approved. Your callback receives two arguments: +Once you've passed a `canUseTool` callback in your query options, it fires when Claude wants to use a tool that isn't auto-approved. Your callback receives three arguments: | Argument | Description | |----------|-------------| | `toolName` | The name of the tool Claude wants to use (e.g., `"Bash"`, `"Write"`, `"Edit"`) | | `input` | The parameters Claude is passing to the tool. Contents vary by tool. | +| `options` (TS) / `context` (Python) | Additional context including optional `suggestions` (proposed `PermissionUpdate` entries to avoid re-prompting) and a cancellation signal. In TypeScript, `signal` is an `AbortSignal`; in Python, the signal field is reserved for future use. See [`ToolPermissionContext`](/docs/en/agent-sdk/python#tool-permission-context) for Python. | The `input` object contains tool-specific parameters. Common examples: @@ -73,7 +75,7 @@ The following example asks Claude to create and delete a test file. When Claude ```python Python import asyncio -from claude_agent_sdk import ClaudeAgentOptions, query +from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query from claude_agent_sdk.types import ( HookMatcher, PermissionResultAllow, @@ -129,7 +131,7 @@ async def main(): hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]}, ), ): - if hasattr(message, "result"): + if isinstance(message, ResultMessage) and message.subtype == "success": print(message.result) @@ -627,7 +629,7 @@ This example handles those questions in a terminal application. Here's what happ ```python Python import asyncio -from claude_agent_sdk import ClaudeAgentOptions, query +from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query from claude_agent_sdk.types import HookMatcher, PermissionResultAllow @@ -700,7 +702,7 @@ async def main(): hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]}, ), ): - if hasattr(message, "result"): + if isinstance(message, ResultMessage) and message.subtype == "success": print(message.result) diff --git a/content/en/api/cli/beta.md b/content/en/api/cli/beta.md index 420f091e..b4494cda 100644 --- a/content/en/api/cli/beta.md +++ b/content/en/api/cli/beta.md @@ -1 +1 @@ -Not Found - Claude API Docs
    \ No newline at end of file +Not Found - Claude API Docs
      \ No newline at end of file diff --git a/content/en/api/cli/beta/files.md b/content/en/api/cli/beta/files.md index a9f4b0bd..c1552d65 100644 --- a/content/en/api/cli/beta/files.md +++ b/content/en/api/cli/beta/files.md @@ -1 +1 @@ -Not Found - Claude API Docs
        \ No newline at end of file +Not Found - Claude API Docs
          \ No newline at end of file diff --git a/content/en/api/cli/beta/files/delete.md b/content/en/api/cli/beta/files/delete.md index d15669dd..d7246095 100644 --- a/content/en/api/cli/beta/files/delete.md +++ b/content/en/api/cli/beta/files/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
            \ No newline at end of file +Not Found - Claude API Docs
              \ No newline at end of file diff --git a/content/en/api/cli/beta/files/download.md b/content/en/api/cli/beta/files/download.md index c87ae096..00c3184f 100644 --- a/content/en/api/cli/beta/files/download.md +++ b/content/en/api/cli/beta/files/download.md @@ -1 +1 @@ -Not Found - Claude API Docs
                \ No newline at end of file +Not Found - Claude API Docs
                  \ No newline at end of file diff --git a/content/en/api/cli/beta/files/list.md b/content/en/api/cli/beta/files/list.md index b975e44f..abfae472 100644 --- a/content/en/api/cli/beta/files/list.md +++ b/content/en/api/cli/beta/files/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                    \ No newline at end of file +Not Found - Claude API Docs
                      \ No newline at end of file diff --git a/content/en/api/cli/beta/files/retrieve_metadata.md b/content/en/api/cli/beta/files/retrieve_metadata.md index 363e38a1..259b9b54 100644 --- a/content/en/api/cli/beta/files/retrieve_metadata.md +++ b/content/en/api/cli/beta/files/retrieve_metadata.md @@ -1 +1 @@ -Not Found - Claude API Docs
                        \ No newline at end of file +Not Found - Claude API Docs
                          \ No newline at end of file diff --git a/content/en/api/cli/beta/files/upload.md b/content/en/api/cli/beta/files/upload.md index e496acf7..58a0b33d 100644 --- a/content/en/api/cli/beta/files/upload.md +++ b/content/en/api/cli/beta/files/upload.md @@ -1 +1 @@ -Not Found - Claude API Docs
                            \ No newline at end of file +Not Found - Claude API Docs
                              \ No newline at end of file diff --git a/content/en/api/cli/beta/messages.md b/content/en/api/cli/beta/messages.md index 8639be90..ba8a71b5 100644 --- a/content/en/api/cli/beta/messages.md +++ b/content/en/api/cli/beta/messages.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                \ No newline at end of file +Not Found - Claude API Docs
                                  \ No newline at end of file diff --git a/content/en/api/cli/beta/messages/batches.md b/content/en/api/cli/beta/messages/batches.md index 64782ce9..7068cb13 100644 --- a/content/en/api/cli/beta/messages/batches.md +++ b/content/en/api/cli/beta/messages/batches.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                    \ No newline at end of file +Not Found - Claude API Docs
                                      \ No newline at end of file diff --git a/content/en/api/cli/beta/messages/batches/cancel.md b/content/en/api/cli/beta/messages/batches/cancel.md index 9d34aba0..87d284dc 100644 --- a/content/en/api/cli/beta/messages/batches/cancel.md +++ b/content/en/api/cli/beta/messages/batches/cancel.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                        \ No newline at end of file +Not Found - Claude API Docs
                                          \ No newline at end of file diff --git a/content/en/api/cli/beta/messages/batches/create.md b/content/en/api/cli/beta/messages/batches/create.md index 87d5f87b..56f6ff71 100644 --- a/content/en/api/cli/beta/messages/batches/create.md +++ b/content/en/api/cli/beta/messages/batches/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                            \ No newline at end of file +Not Found - Claude API Docs
                                              \ No newline at end of file diff --git a/content/en/api/cli/beta/messages/batches/delete.md b/content/en/api/cli/beta/messages/batches/delete.md index 31e68afa..8e82ad20 100644 --- a/content/en/api/cli/beta/messages/batches/delete.md +++ b/content/en/api/cli/beta/messages/batches/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                \ No newline at end of file +Not Found - Claude API Docs
                                                  \ No newline at end of file diff --git a/content/en/api/cli/beta/messages/batches/list.md b/content/en/api/cli/beta/messages/batches/list.md index 666e4c96..e45e805d 100644 --- a/content/en/api/cli/beta/messages/batches/list.md +++ b/content/en/api/cli/beta/messages/batches/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                      \ No newline at end of file diff --git a/content/en/api/cli/beta/messages/batches/results.md b/content/en/api/cli/beta/messages/batches/results.md index 1616d361..5b6aa4e1 100644 --- a/content/en/api/cli/beta/messages/batches/results.md +++ b/content/en/api/cli/beta/messages/batches/results.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                          \ No newline at end of file diff --git a/content/en/api/cli/beta/messages/batches/retrieve.md b/content/en/api/cli/beta/messages/batches/retrieve.md index f01fac97..c8ef7fa4 100644 --- a/content/en/api/cli/beta/messages/batches/retrieve.md +++ b/content/en/api/cli/beta/messages/batches/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                              \ No newline at end of file diff --git a/content/en/api/cli/beta/messages/count_tokens.md b/content/en/api/cli/beta/messages/count_tokens.md index 351eebb4..d9f50749 100644 --- a/content/en/api/cli/beta/messages/count_tokens.md +++ b/content/en/api/cli/beta/messages/count_tokens.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                  \ No newline at end of file diff --git a/content/en/api/cli/beta/messages/create.md b/content/en/api/cli/beta/messages/create.md index 2a595abc..559f7482 100644 --- a/content/en/api/cli/beta/messages/create.md +++ b/content/en/api/cli/beta/messages/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                      \ No newline at end of file diff --git a/content/en/api/cli/beta/models.md b/content/en/api/cli/beta/models.md index d25c8ec1..da6a59f7 100644 --- a/content/en/api/cli/beta/models.md +++ b/content/en/api/cli/beta/models.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                          \ No newline at end of file diff --git a/content/en/api/cli/beta/models/list.md b/content/en/api/cli/beta/models/list.md index df4e9e8f..8ea1121e 100644 --- a/content/en/api/cli/beta/models/list.md +++ b/content/en/api/cli/beta/models/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                              \ No newline at end of file diff --git a/content/en/api/cli/beta/models/retrieve.md b/content/en/api/cli/beta/models/retrieve.md index ea098f72..128983e1 100644 --- a/content/en/api/cli/beta/models/retrieve.md +++ b/content/en/api/cli/beta/models/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                  \ No newline at end of file diff --git a/content/en/api/cli/beta/skills.md b/content/en/api/cli/beta/skills.md index 8472d973..a0e7909d 100644 --- a/content/en/api/cli/beta/skills.md +++ b/content/en/api/cli/beta/skills.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                      \ No newline at end of file diff --git a/content/en/api/cli/beta/skills/create.md b/content/en/api/cli/beta/skills/create.md index 03358222..641e9fae 100644 --- a/content/en/api/cli/beta/skills/create.md +++ b/content/en/api/cli/beta/skills/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                          \ No newline at end of file diff --git a/content/en/api/cli/beta/skills/delete.md b/content/en/api/cli/beta/skills/delete.md index 61378086..fe6d2f0f 100644 --- a/content/en/api/cli/beta/skills/delete.md +++ b/content/en/api/cli/beta/skills/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                              \ No newline at end of file diff --git a/content/en/api/cli/beta/skills/list.md b/content/en/api/cli/beta/skills/list.md index b73e8434..cbee2fb7 100644 --- a/content/en/api/cli/beta/skills/list.md +++ b/content/en/api/cli/beta/skills/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                  \ No newline at end of file diff --git a/content/en/api/cli/beta/skills/retrieve.md b/content/en/api/cli/beta/skills/retrieve.md index 275283e8..bb4389fb 100644 --- a/content/en/api/cli/beta/skills/retrieve.md +++ b/content/en/api/cli/beta/skills/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                      \ No newline at end of file diff --git a/content/en/api/cli/beta/skills/versions.md b/content/en/api/cli/beta/skills/versions.md index a70818ec..6284e30a 100644 --- a/content/en/api/cli/beta/skills/versions.md +++ b/content/en/api/cli/beta/skills/versions.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                          \ No newline at end of file diff --git a/content/en/api/cli/beta/skills/versions/create.md b/content/en/api/cli/beta/skills/versions/create.md index bcf77712..3f9f88d5 100644 --- a/content/en/api/cli/beta/skills/versions/create.md +++ b/content/en/api/cli/beta/skills/versions/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                              \ No newline at end of file diff --git a/content/en/api/cli/beta/skills/versions/delete.md b/content/en/api/cli/beta/skills/versions/delete.md index 73784a72..0a828533 100644 --- a/content/en/api/cli/beta/skills/versions/delete.md +++ b/content/en/api/cli/beta/skills/versions/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                  \ No newline at end of file diff --git a/content/en/api/cli/beta/skills/versions/list.md b/content/en/api/cli/beta/skills/versions/list.md index 4afc2b6b..25c9167c 100644 --- a/content/en/api/cli/beta/skills/versions/list.md +++ b/content/en/api/cli/beta/skills/versions/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                      \ No newline at end of file diff --git a/content/en/api/cli/beta/skills/versions/retrieve.md b/content/en/api/cli/beta/skills/versions/retrieve.md index fbd3e2f0..c341b491 100644 --- a/content/en/api/cli/beta/skills/versions/retrieve.md +++ b/content/en/api/cli/beta/skills/versions/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                          \ No newline at end of file diff --git a/content/en/api/cli/completions.md b/content/en/api/cli/completions.md index cf99ff95..d900ad06 100644 --- a/content/en/api/cli/completions.md +++ b/content/en/api/cli/completions.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                              \ No newline at end of file diff --git a/content/en/api/cli/completions/create.md b/content/en/api/cli/completions/create.md index 458e43a0..4d7bbcaf 100644 --- a/content/en/api/cli/completions/create.md +++ b/content/en/api/cli/completions/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/cli/messages.md b/content/en/api/cli/messages.md index 401627d0..f8e2a456 100644 --- a/content/en/api/cli/messages.md +++ b/content/en/api/cli/messages.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/cli/messages/batches.md b/content/en/api/cli/messages/batches.md index dcf53a3e..9796bb97 100644 --- a/content/en/api/cli/messages/batches.md +++ b/content/en/api/cli/messages/batches.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/cli/messages/batches/cancel.md b/content/en/api/cli/messages/batches/cancel.md index 0570a8fa..07c6a922 100644 --- a/content/en/api/cli/messages/batches/cancel.md +++ b/content/en/api/cli/messages/batches/cancel.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/cli/messages/batches/create.md b/content/en/api/cli/messages/batches/create.md index a8aac470..51500c85 100644 --- a/content/en/api/cli/messages/batches/create.md +++ b/content/en/api/cli/messages/batches/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/cli/messages/batches/delete.md b/content/en/api/cli/messages/batches/delete.md index 59cb1d4b..e3894f63 100644 --- a/content/en/api/cli/messages/batches/delete.md +++ b/content/en/api/cli/messages/batches/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/cli/messages/batches/list.md b/content/en/api/cli/messages/batches/list.md index 4a2dbee4..face1dff 100644 --- a/content/en/api/cli/messages/batches/list.md +++ b/content/en/api/cli/messages/batches/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/cli/messages/batches/results.md b/content/en/api/cli/messages/batches/results.md index 21197e72..cc9e8921 100644 --- a/content/en/api/cli/messages/batches/results.md +++ b/content/en/api/cli/messages/batches/results.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/cli/messages/batches/retrieve.md b/content/en/api/cli/messages/batches/retrieve.md index 2e8d4c25..27c3f5f2 100644 --- a/content/en/api/cli/messages/batches/retrieve.md +++ b/content/en/api/cli/messages/batches/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/cli/messages/count_tokens.md b/content/en/api/cli/messages/count_tokens.md index 9c95c09f..6978b907 100644 --- a/content/en/api/cli/messages/count_tokens.md +++ b/content/en/api/cli/messages/count_tokens.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/cli/messages/create.md b/content/en/api/cli/messages/create.md index e2fff9bf..89e5cde6 100644 --- a/content/en/api/cli/messages/create.md +++ b/content/en/api/cli/messages/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/cli/models.md b/content/en/api/cli/models.md index 41d5888a..5392d075 100644 --- a/content/en/api/cli/models.md +++ b/content/en/api/cli/models.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/cli/models/list.md b/content/en/api/cli/models/list.md index 8b42cacb..f18df1cb 100644 --- a/content/en/api/cli/models/list.md +++ b/content/en/api/cli/models/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/cli/models/retrieve.md b/content/en/api/cli/models/retrieve.md index 501db0f4..28ef0e66 100644 --- a/content/en/api/cli/models/retrieve.md +++ b/content/en/api/cli/models/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/beta.md b/content/en/api/php/beta.md index 6edf29df..3c099c5d 100644 --- a/content/en/api/php/beta.md +++ b/content/en/api/php/beta.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/beta/files.md b/content/en/api/php/beta/files.md index f950881f..f65b8362 100644 --- a/content/en/api/php/beta/files.md +++ b/content/en/api/php/beta/files.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/beta/files/delete.md b/content/en/api/php/beta/files/delete.md index 8992e5c6..a86bdbb3 100644 --- a/content/en/api/php/beta/files/delete.md +++ b/content/en/api/php/beta/files/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/beta/files/download.md b/content/en/api/php/beta/files/download.md index 5d515871..0feaa2ce 100644 --- a/content/en/api/php/beta/files/download.md +++ b/content/en/api/php/beta/files/download.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/beta/files/list.md b/content/en/api/php/beta/files/list.md index e6f65898..e951d2f3 100644 --- a/content/en/api/php/beta/files/list.md +++ b/content/en/api/php/beta/files/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/beta/files/retrieve_metadata.md b/content/en/api/php/beta/files/retrieve_metadata.md index 817725d2..90eb1a93 100644 --- a/content/en/api/php/beta/files/retrieve_metadata.md +++ b/content/en/api/php/beta/files/retrieve_metadata.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/beta/files/upload.md b/content/en/api/php/beta/files/upload.md index 2f618b49..3ef2b2df 100644 --- a/content/en/api/php/beta/files/upload.md +++ b/content/en/api/php/beta/files/upload.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/beta/messages.md b/content/en/api/php/beta/messages.md index 64e124d0..68845b42 100644 --- a/content/en/api/php/beta/messages.md +++ b/content/en/api/php/beta/messages.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/beta/messages/batches.md b/content/en/api/php/beta/messages/batches.md index aa79ee3b..a53bde30 100644 --- a/content/en/api/php/beta/messages/batches.md +++ b/content/en/api/php/beta/messages/batches.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/beta/messages/batches/cancel.md b/content/en/api/php/beta/messages/batches/cancel.md index 0f640aa8..c55306aa 100644 --- a/content/en/api/php/beta/messages/batches/cancel.md +++ b/content/en/api/php/beta/messages/batches/cancel.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/beta/messages/batches/create.md b/content/en/api/php/beta/messages/batches/create.md index 08e448d0..3ecfaf2a 100644 --- a/content/en/api/php/beta/messages/batches/create.md +++ b/content/en/api/php/beta/messages/batches/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/beta/messages/batches/delete.md b/content/en/api/php/beta/messages/batches/delete.md index bb94a017..38b0f782 100644 --- a/content/en/api/php/beta/messages/batches/delete.md +++ b/content/en/api/php/beta/messages/batches/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/beta/messages/batches/list.md b/content/en/api/php/beta/messages/batches/list.md index 4f3da69c..9003cb78 100644 --- a/content/en/api/php/beta/messages/batches/list.md +++ b/content/en/api/php/beta/messages/batches/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/beta/messages/batches/results.md b/content/en/api/php/beta/messages/batches/results.md index fe0f9db1..0904f49e 100644 --- a/content/en/api/php/beta/messages/batches/results.md +++ b/content/en/api/php/beta/messages/batches/results.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/beta/messages/batches/retrieve.md b/content/en/api/php/beta/messages/batches/retrieve.md index 0612e72e..a9d88df5 100644 --- a/content/en/api/php/beta/messages/batches/retrieve.md +++ b/content/en/api/php/beta/messages/batches/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/beta/messages/count_tokens.md b/content/en/api/php/beta/messages/count_tokens.md index 6ef03e0e..5f758a53 100644 --- a/content/en/api/php/beta/messages/count_tokens.md +++ b/content/en/api/php/beta/messages/count_tokens.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/beta/messages/create.md b/content/en/api/php/beta/messages/create.md index 3f8e63db..c06e91bc 100644 --- a/content/en/api/php/beta/messages/create.md +++ b/content/en/api/php/beta/messages/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/beta/models.md b/content/en/api/php/beta/models.md index fec8fe97..192112f9 100644 --- a/content/en/api/php/beta/models.md +++ b/content/en/api/php/beta/models.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/beta/models/list.md b/content/en/api/php/beta/models/list.md index 0ce2611f..b2f4d2e2 100644 --- a/content/en/api/php/beta/models/list.md +++ b/content/en/api/php/beta/models/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/beta/models/retrieve.md b/content/en/api/php/beta/models/retrieve.md index 816e762d..3f9b4c2c 100644 --- a/content/en/api/php/beta/models/retrieve.md +++ b/content/en/api/php/beta/models/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/beta/skills.md b/content/en/api/php/beta/skills.md index 370bd010..bc0f9c78 100644 --- a/content/en/api/php/beta/skills.md +++ b/content/en/api/php/beta/skills.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/beta/skills/create.md b/content/en/api/php/beta/skills/create.md index c6084038..dc8f12c5 100644 --- a/content/en/api/php/beta/skills/create.md +++ b/content/en/api/php/beta/skills/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/beta/skills/delete.md b/content/en/api/php/beta/skills/delete.md index 00415b44..bc6f57a2 100644 --- a/content/en/api/php/beta/skills/delete.md +++ b/content/en/api/php/beta/skills/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/beta/skills/list.md b/content/en/api/php/beta/skills/list.md index 24bc168e..190492ce 100644 --- a/content/en/api/php/beta/skills/list.md +++ b/content/en/api/php/beta/skills/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/beta/skills/retrieve.md b/content/en/api/php/beta/skills/retrieve.md index fc5b6c38..3d6c508f 100644 --- a/content/en/api/php/beta/skills/retrieve.md +++ b/content/en/api/php/beta/skills/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/beta/skills/versions.md b/content/en/api/php/beta/skills/versions.md index 68a7d3c7..82d0609a 100644 --- a/content/en/api/php/beta/skills/versions.md +++ b/content/en/api/php/beta/skills/versions.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/beta/skills/versions/create.md b/content/en/api/php/beta/skills/versions/create.md index 75d9043f..cf079c0f 100644 --- a/content/en/api/php/beta/skills/versions/create.md +++ b/content/en/api/php/beta/skills/versions/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/beta/skills/versions/delete.md b/content/en/api/php/beta/skills/versions/delete.md index 325371d9..072b83ad 100644 --- a/content/en/api/php/beta/skills/versions/delete.md +++ b/content/en/api/php/beta/skills/versions/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/beta/skills/versions/list.md b/content/en/api/php/beta/skills/versions/list.md index c2a8475b..09f6f848 100644 --- a/content/en/api/php/beta/skills/versions/list.md +++ b/content/en/api/php/beta/skills/versions/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/beta/skills/versions/retrieve.md b/content/en/api/php/beta/skills/versions/retrieve.md index d1c4bc95..b9541e4d 100644 --- a/content/en/api/php/beta/skills/versions/retrieve.md +++ b/content/en/api/php/beta/skills/versions/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/completions.md b/content/en/api/php/completions.md index aeb9a794..d937b493 100644 --- a/content/en/api/php/completions.md +++ b/content/en/api/php/completions.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/completions/create.md b/content/en/api/php/completions/create.md index 6f6e6473..809989e0 100644 --- a/content/en/api/php/completions/create.md +++ b/content/en/api/php/completions/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/messages.md b/content/en/api/php/messages.md index e7ee99aa..25483935 100644 --- a/content/en/api/php/messages.md +++ b/content/en/api/php/messages.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/messages/batches.md b/content/en/api/php/messages/batches.md index ca2cd141..d72ca04c 100644 --- a/content/en/api/php/messages/batches.md +++ b/content/en/api/php/messages/batches.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/messages/batches/cancel.md b/content/en/api/php/messages/batches/cancel.md index 0780e5d0..eb236bf0 100644 --- a/content/en/api/php/messages/batches/cancel.md +++ b/content/en/api/php/messages/batches/cancel.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/messages/batches/create.md b/content/en/api/php/messages/batches/create.md index a85b97d6..e10888f6 100644 --- a/content/en/api/php/messages/batches/create.md +++ b/content/en/api/php/messages/batches/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/messages/batches/delete.md b/content/en/api/php/messages/batches/delete.md index 3778c48b..b412aefe 100644 --- a/content/en/api/php/messages/batches/delete.md +++ b/content/en/api/php/messages/batches/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/messages/batches/list.md b/content/en/api/php/messages/batches/list.md index 573d4215..1da7021f 100644 --- a/content/en/api/php/messages/batches/list.md +++ b/content/en/api/php/messages/batches/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/messages/batches/results.md b/content/en/api/php/messages/batches/results.md index 09fe92b8..e804e589 100644 --- a/content/en/api/php/messages/batches/results.md +++ b/content/en/api/php/messages/batches/results.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/messages/batches/retrieve.md b/content/en/api/php/messages/batches/retrieve.md index 39fabaa4..f2d28b67 100644 --- a/content/en/api/php/messages/batches/retrieve.md +++ b/content/en/api/php/messages/batches/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/messages/count_tokens.md b/content/en/api/php/messages/count_tokens.md index a729035a..0a007b8e 100644 --- a/content/en/api/php/messages/count_tokens.md +++ b/content/en/api/php/messages/count_tokens.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/php/messages/create.md b/content/en/api/php/messages/create.md index 7d3779a7..91e8a8bd 100644 --- a/content/en/api/php/messages/create.md +++ b/content/en/api/php/messages/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/php/models.md b/content/en/api/php/models.md index 7e0db174..90c2f304 100644 --- a/content/en/api/php/models.md +++ b/content/en/api/php/models.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/php/models/list.md b/content/en/api/php/models/list.md index 5a8fe69e..701ec71d 100644 --- a/content/en/api/php/models/list.md +++ b/content/en/api/php/models/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/php/models/retrieve.md b/content/en/api/php/models/retrieve.md index 57848cf3..1a2c999e 100644 --- a/content/en/api/php/models/retrieve.md +++ b/content/en/api/php/models/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/beta.md b/content/en/api/terraform/beta.md index 0282ac51..5bfd6413 100644 --- a/content/en/api/terraform/beta.md +++ b/content/en/api/terraform/beta.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/beta/files.md b/content/en/api/terraform/beta/files.md index 3c838610..8adb72d2 100644 --- a/content/en/api/terraform/beta/files.md +++ b/content/en/api/terraform/beta/files.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/beta/files/delete.md b/content/en/api/terraform/beta/files/delete.md index 6aa0c75a..05d2b783 100644 --- a/content/en/api/terraform/beta/files/delete.md +++ b/content/en/api/terraform/beta/files/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/beta/files/download.md b/content/en/api/terraform/beta/files/download.md index d8b76a94..a3f22f4f 100644 --- a/content/en/api/terraform/beta/files/download.md +++ b/content/en/api/terraform/beta/files/download.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/beta/files/list.md b/content/en/api/terraform/beta/files/list.md index 0756b964..5b8adaf9 100644 --- a/content/en/api/terraform/beta/files/list.md +++ b/content/en/api/terraform/beta/files/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/beta/files/retrieve_metadata.md b/content/en/api/terraform/beta/files/retrieve_metadata.md index a9497a3c..28bc46ec 100644 --- a/content/en/api/terraform/beta/files/retrieve_metadata.md +++ b/content/en/api/terraform/beta/files/retrieve_metadata.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/beta/files/upload.md b/content/en/api/terraform/beta/files/upload.md index 2cce8739..1caef0eb 100644 --- a/content/en/api/terraform/beta/files/upload.md +++ b/content/en/api/terraform/beta/files/upload.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages.md b/content/en/api/terraform/beta/messages.md index 91970d29..fa80a5ff 100644 --- a/content/en/api/terraform/beta/messages.md +++ b/content/en/api/terraform/beta/messages.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages/batches.md b/content/en/api/terraform/beta/messages/batches.md index 8537f504..57c5d580 100644 --- a/content/en/api/terraform/beta/messages/batches.md +++ b/content/en/api/terraform/beta/messages/batches.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages/batches/cancel.md b/content/en/api/terraform/beta/messages/batches/cancel.md index 69dcc959..ce0bc63a 100644 --- a/content/en/api/terraform/beta/messages/batches/cancel.md +++ b/content/en/api/terraform/beta/messages/batches/cancel.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages/batches/create.md b/content/en/api/terraform/beta/messages/batches/create.md index 30342670..d23d2b13 100644 --- a/content/en/api/terraform/beta/messages/batches/create.md +++ b/content/en/api/terraform/beta/messages/batches/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages/batches/delete.md b/content/en/api/terraform/beta/messages/batches/delete.md index 922389f3..128b8d11 100644 --- a/content/en/api/terraform/beta/messages/batches/delete.md +++ b/content/en/api/terraform/beta/messages/batches/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages/batches/list.md b/content/en/api/terraform/beta/messages/batches/list.md index 247049ed..4868126f 100644 --- a/content/en/api/terraform/beta/messages/batches/list.md +++ b/content/en/api/terraform/beta/messages/batches/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages/batches/results.md b/content/en/api/terraform/beta/messages/batches/results.md index 618c22e7..904bdadf 100644 --- a/content/en/api/terraform/beta/messages/batches/results.md +++ b/content/en/api/terraform/beta/messages/batches/results.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages/batches/retrieve.md b/content/en/api/terraform/beta/messages/batches/retrieve.md index a63efdb9..d1156a4e 100644 --- a/content/en/api/terraform/beta/messages/batches/retrieve.md +++ b/content/en/api/terraform/beta/messages/batches/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages/count_tokens.md b/content/en/api/terraform/beta/messages/count_tokens.md index 32d4d824..f6c36cba 100644 --- a/content/en/api/terraform/beta/messages/count_tokens.md +++ b/content/en/api/terraform/beta/messages/count_tokens.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/beta/messages/create.md b/content/en/api/terraform/beta/messages/create.md index 45505083..82219221 100644 --- a/content/en/api/terraform/beta/messages/create.md +++ b/content/en/api/terraform/beta/messages/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/beta/models.md b/content/en/api/terraform/beta/models.md index 42d8621a..71f78ecd 100644 --- a/content/en/api/terraform/beta/models.md +++ b/content/en/api/terraform/beta/models.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/beta/models/list.md b/content/en/api/terraform/beta/models/list.md index 226d3985..ced1288d 100644 --- a/content/en/api/terraform/beta/models/list.md +++ b/content/en/api/terraform/beta/models/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/beta/models/retrieve.md b/content/en/api/terraform/beta/models/retrieve.md index 9425a6d7..37b9585e 100644 --- a/content/en/api/terraform/beta/models/retrieve.md +++ b/content/en/api/terraform/beta/models/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills.md b/content/en/api/terraform/beta/skills.md index 3025b9df..263a9546 100644 --- a/content/en/api/terraform/beta/skills.md +++ b/content/en/api/terraform/beta/skills.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills/create.md b/content/en/api/terraform/beta/skills/create.md index 187ae728..bf21e410 100644 --- a/content/en/api/terraform/beta/skills/create.md +++ b/content/en/api/terraform/beta/skills/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills/delete.md b/content/en/api/terraform/beta/skills/delete.md index 298fd1f4..73445327 100644 --- a/content/en/api/terraform/beta/skills/delete.md +++ b/content/en/api/terraform/beta/skills/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills/list.md b/content/en/api/terraform/beta/skills/list.md index d7d64895..ea450824 100644 --- a/content/en/api/terraform/beta/skills/list.md +++ b/content/en/api/terraform/beta/skills/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills/retrieve.md b/content/en/api/terraform/beta/skills/retrieve.md index c22a158f..5b570fa9 100644 --- a/content/en/api/terraform/beta/skills/retrieve.md +++ b/content/en/api/terraform/beta/skills/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills/versions.md b/content/en/api/terraform/beta/skills/versions.md index 2d6bb468..7b5c570d 100644 --- a/content/en/api/terraform/beta/skills/versions.md +++ b/content/en/api/terraform/beta/skills/versions.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills/versions/create.md b/content/en/api/terraform/beta/skills/versions/create.md index 036c2648..f1405564 100644 --- a/content/en/api/terraform/beta/skills/versions/create.md +++ b/content/en/api/terraform/beta/skills/versions/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills/versions/delete.md b/content/en/api/terraform/beta/skills/versions/delete.md index 69e12e3e..e98a3ee7 100644 --- a/content/en/api/terraform/beta/skills/versions/delete.md +++ b/content/en/api/terraform/beta/skills/versions/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills/versions/list.md b/content/en/api/terraform/beta/skills/versions/list.md index a44e7828..f65b814e 100644 --- a/content/en/api/terraform/beta/skills/versions/list.md +++ b/content/en/api/terraform/beta/skills/versions/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/beta/skills/versions/retrieve.md b/content/en/api/terraform/beta/skills/versions/retrieve.md index 8744edf1..206457ee 100644 --- a/content/en/api/terraform/beta/skills/versions/retrieve.md +++ b/content/en/api/terraform/beta/skills/versions/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/completions.md b/content/en/api/terraform/completions.md index 9b5685d8..12ed13e1 100644 --- a/content/en/api/terraform/completions.md +++ b/content/en/api/terraform/completions.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/completions/create.md b/content/en/api/terraform/completions/create.md index 238b2661..d78959b3 100644 --- a/content/en/api/terraform/completions/create.md +++ b/content/en/api/terraform/completions/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/messages.md b/content/en/api/terraform/messages.md index 337f2516..1a46690c 100644 --- a/content/en/api/terraform/messages.md +++ b/content/en/api/terraform/messages.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/messages/batches.md b/content/en/api/terraform/messages/batches.md index bea1c539..2ff44814 100644 --- a/content/en/api/terraform/messages/batches.md +++ b/content/en/api/terraform/messages/batches.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/messages/batches/cancel.md b/content/en/api/terraform/messages/batches/cancel.md index 9ed0b723..af542ef5 100644 --- a/content/en/api/terraform/messages/batches/cancel.md +++ b/content/en/api/terraform/messages/batches/cancel.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/messages/batches/create.md b/content/en/api/terraform/messages/batches/create.md index b5bd08e8..ed54251b 100644 --- a/content/en/api/terraform/messages/batches/create.md +++ b/content/en/api/terraform/messages/batches/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/messages/batches/delete.md b/content/en/api/terraform/messages/batches/delete.md index b070359f..1a16a7dc 100644 --- a/content/en/api/terraform/messages/batches/delete.md +++ b/content/en/api/terraform/messages/batches/delete.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/messages/batches/list.md b/content/en/api/terraform/messages/batches/list.md index cb0e9a59..dc4766cb 100644 --- a/content/en/api/terraform/messages/batches/list.md +++ b/content/en/api/terraform/messages/batches/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/messages/batches/results.md b/content/en/api/terraform/messages/batches/results.md index 6a7ebd55..5df3f541 100644 --- a/content/en/api/terraform/messages/batches/results.md +++ b/content/en/api/terraform/messages/batches/results.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/messages/batches/retrieve.md b/content/en/api/terraform/messages/batches/retrieve.md index f7a7379e..3c88b3ea 100644 --- a/content/en/api/terraform/messages/batches/retrieve.md +++ b/content/en/api/terraform/messages/batches/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/messages/count_tokens.md b/content/en/api/terraform/messages/count_tokens.md index 3fb77d0c..2cb9bfe5 100644 --- a/content/en/api/terraform/messages/count_tokens.md +++ b/content/en/api/terraform/messages/count_tokens.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/api/terraform/messages/create.md b/content/en/api/terraform/messages/create.md index 222a4cc3..146e4b9f 100644 --- a/content/en/api/terraform/messages/create.md +++ b/content/en/api/terraform/messages/create.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \ No newline at end of file diff --git a/content/en/api/terraform/models.md b/content/en/api/terraform/models.md index 11923372..2e4f2a05 100644 --- a/content/en/api/terraform/models.md +++ b/content/en/api/terraform/models.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \ No newline at end of file diff --git a/content/en/api/terraform/models/list.md b/content/en/api/terraform/models/list.md index 7e8a124d..ced42dfa 100644 --- a/content/en/api/terraform/models/list.md +++ b/content/en/api/terraform/models/list.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \ No newline at end of file diff --git a/content/en/api/terraform/models/retrieve.md b/content/en/api/terraform/models/retrieve.md index 5e32ac54..456d6bb7 100644 --- a/content/en/api/terraform/models/retrieve.md +++ b/content/en/api/terraform/models/retrieve.md @@ -1 +1 @@ -Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \ No newline at end of file +Not Found - Claude API Docs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \ No newline at end of file diff --git a/content/en/build-with-claude/context-editing.md b/content/en/build-with-claude/context-editing.md index db982989..2fb2ce2a 100644 --- a/content/en/build-with-claude/context-editing.md +++ b/content/en/build-with-claude/context-editing.md @@ -37,7 +37,7 @@ This feature is in beta and is **not** eligible for [Zero Data Retention (ZDR)]( The `clear_tool_uses_20250919` strategy clears tool results when conversation context grows beyond your configured threshold. This is particularly useful for agentic workflows with heavy tool use. Older tool results (like file contents or search results) are no longer needed once Claude has processed them. -When activated, the API automatically clears the oldest tool results in chronological order. Each cleared result is replaced with placeholder text so Claude knows it was removed. By default, only tool results are cleared. You can optionally clear both tool results and tool calls (the tool use parameters) by setting `clear_tool_inputs` to true. +When activated, the API automatically clears the oldest tool results in chronological order. The API replaces each cleared result with placeholder text so Claude knows it was removed. By default, only tool results are cleared. You can optionally clear both tool results and tool calls (the tool use parameters) by setting `clear_tool_inputs` to true. ### Thinking block clearing @@ -1951,7 +1951,7 @@ puts response ## Client-side compaction (SDK) -**Server-side compaction is recommended over SDK compaction.** [Server-side compaction](/docs/en/build-with-claude/compaction) handles context management automatically with less integration complexity, better token usage calculation, and no client-side limitations. Use SDK compaction only if you specifically need client-side control over the summarization process. +**Anthropic recommends server-side compaction over SDK compaction.** [Server-side compaction](/docs/en/build-with-claude/compaction) handles context management automatically with less integration complexity, better token usage calculation, and no client-side limitations. Use SDK compaction only if you specifically need client-side control over the summarization process. @@ -1971,237 +1971,128 @@ When compaction is enabled, the SDK monitors token usage after each model respon ### Using compaction -Add `compaction_control` to your `tool_runner` call: +Add `compaction_control` to your `tool_runner` call to enable automatic summarization when token usage exceeds the threshold. - + + -```python Python nocheck hidelines={1..2} +```python Python hidelines={1..10} import anthropic +from anthropic import beta_tool + + +@beta_tool +def read_file(path: str) -> str: + """Read the contents of a file.""" + return "file contents..." + client = anthropic.Anthropic() runner = client.beta.messages.tool_runner( model="claude-opus-4-6", - max_tokens=4096, - tools=[...], - messages=[ - { - "role": "user", - "content": "Analyze all the files in this directory and write a summary report.", - } - ], + max_tokens=1024, + tools=[read_file], + messages=[{"role": "user", "content": "What's in config.json?"}], compaction_control={"enabled": True, "context_token_threshold": 100000}, ) for message in runner: print(f"Tokens used: {message.usage.input_tokens}") - -final = runner.until_done() ``` -```typescript TypeScript hidelines={1..2} -import Anthropic from "@anthropic-ai/sdk"; - -const client = new Anthropic(); + + -const runner = client.beta.messages.toolRunner({ - model: "claude-opus-4-6", - max_tokens: 4096, - tools: [ - // ... - ], - messages: [ - { - role: "user", - content: "Analyze all the files in this directory and write a summary report." - } - ], - compactionControl: { - enabled: true, - contextTokenThreshold: 100000 - } +```typescript TypeScript hidelines={1..15,-3..} +import Anthropic from "@anthropic-ai/sdk"; +import { betaTool } from "@anthropic-ai/sdk/helpers/beta/json-schema"; + +const readFile = betaTool({ + name: "read_file", + description: "Read the contents of a file", + inputSchema: { + type: "object", + properties: { path: { type: "string" } }, + required: ["path"] + }, + run: async () => "file contents..." }); -for await (const message of runner) { - console.log("Tokens used:", message.usage.input_tokens); -} - -const finalMessage = await runner.runUntilDone(); -``` - -```csharp C# nocheck -using System; -using System.Threading.Tasks; -using Anthropic; -using Anthropic.Models.Beta.Messages; +async function main() { + const client = new Anthropic(); -public class Program -{ - public static async Task Main() - { - AnthropicClient client = new(); - - var parameters = new MessageCreateParams - { - Model = Model.ClaudeOpus4_6, - MaxTokens = 4096, - Tools = [], - Messages = [ - new() { - Role = Role.User, - Content = "Analyze all the files in this directory and write a summary report." - } - ], - ContextManagement = new BetaContextManagementConfig() - { - Edits = [ - new BetaCompact20260112Edit() - { - Trigger = new BetaInputTokensTrigger(100000) - } - ] - } - }; + const runner = client.beta.messages.toolRunner({ + model: "claude-opus-4-6", + max_tokens: 1024, + tools: [readFile], + messages: [{ role: "user", content: "What's in config.json?" }], + compactionControl: { enabled: true, contextTokenThreshold: 100000 } + }); - var message = await client.Beta.Messages.Create(parameters); - Console.WriteLine($"Tokens used: {message.Usage.InputTokens}"); - } + for await (const message of runner) { + console.log(`Tokens used: ${message.usage.input_tokens}`); + } } -``` -```go Go nocheck hidelines={1..11,-1} -package main - -import ( - "context" - "fmt" - "log" - - "github.com/anthropics/anthropic-sdk-go" -) - -func main() { - client := anthropic.NewClient() +main(); +``` - messages := []anthropic.BetaMessageParam{ - anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Analyze all the files in this directory and write a summary report.")), - } + + - response, err := client.Beta.Messages.New(context.TODO(), anthropic.BetaMessageNewParams{ - Model: anthropic.ModelClaudeOpus4_6, - MaxTokens: 4096, - Tools: []anthropic.BetaToolUnionParam{}, - Messages: messages, - ContextManagement: anthropic.BetaContextManagementConfigParam{ - Edits: []anthropic.BetaContextManagementConfigEditUnionParam{ - {OfCompact20260112: &anthropic.BetaCompact20260112EditParam{ - Trigger: anthropic.BetaInputTokensTriggerParam{ - Value: 100000, - }, - }}, - }, - }, - Betas: []anthropic.AnthropicBeta{"compact-2026-01-12"}, - }) - if err != nil { - log.Fatal(err) - } + +The C# SDK does not include a `tool_runner` helper. Use [server-side compaction](/docs/en/build-with-claude/compaction) instead, which handles compaction on Anthropic's servers without SDK-side integration. + - fmt.Printf("Tokens used: %d\n", response.Usage.InputTokens) -} -``` + + -```java Java nocheck hidelines={1..4,8,10..12,-2..} -import com.anthropic.client.AnthropicClient; -import com.anthropic.client.okhttp.AnthropicOkHttpClient; -import com.anthropic.models.beta.messages.MessageCreateParams; -import com.anthropic.models.beta.messages.BetaMessage; -import com.anthropic.models.beta.messages.BetaContextManagementConfig; -import com.anthropic.models.beta.messages.BetaCompact20260112Edit; -import com.anthropic.models.beta.messages.BetaInputTokensTrigger; -import com.anthropic.models.messages.Model; -import com.anthropic.helpers.BetaToolRunner; - -public class CompactionExample { - public static void main(String[] args) { - AnthropicClient client = AnthropicOkHttpClient.fromEnv(); + +The Go SDK's `tool_runner` does not support `compaction_control`. Use [server-side compaction](/docs/en/build-with-claude/compaction) instead, which handles compaction on Anthropic's servers without SDK-side integration. + - BetaToolRunner toolRunner = client.beta().messages().toolRunner( - MessageCreateParams.builder() - .model(Model.CLAUDE_OPUS_4_6) - .maxTokens(4096L) - .addUserMessage("Analyze all the files in this directory and write a summary report.") - .addBeta("compact-2026-01-12") - .contextManagement(BetaContextManagementConfig.builder() - .addEdit(BetaCompact20260112Edit.builder() - .trigger(BetaInputTokensTrigger.builder() - .value(100000L) - .build()) - .build()) - .build()) - .build()); + + - for (BetaMessage message : toolRunner) { - System.out.println("Tokens used: " + message.usage().inputTokens()); - } - } -} -``` + +The Java SDK's `tool_runner` does not support `compaction_control`. Use [server-side compaction](/docs/en/build-with-claude/compaction) instead, which handles compaction on Anthropic's servers without SDK-side integration. + -```php PHP hidelines={1..4} nocheck - + -use Anthropic\Client; + +The PHP SDK's `tool_runner` does not support `compaction_control`. Use [server-side compaction](/docs/en/build-with-claude/compaction) instead, which handles compaction on Anthropic's servers without SDK-side integration. + -$client = new Client(apiKey: getenv("ANTHROPIC_API_KEY")); + + -$messages = [ - [ - 'role' => 'user', - 'content' => 'Analyze all the files in this directory and write a summary report.' - ] -]; +```ruby Ruby hidelines={1..15} +require "anthropic" -$response = $client->beta->messages->create( - maxTokens: 4096, - messages: $messages, - model: 'claude-opus-4-6', - betas: ['compact-2026-01-12'], - tools: [], - contextManagement: [ - 'edits' => [ - [ - 'type' => 'compact_20260112', - 'trigger' => ['type' => 'input_tokens', 'value' => 100000] - ] - ] - ], -); +class ReadFileInput < Anthropic::BaseModel + required :path, String, doc: "Path to the file" +end -echo "Tokens used: " . $response->usage->inputTokens . "\n"; -``` +class ReadFile < Anthropic::BaseTool + doc "Read the contents of a file" + input_schema ReadFileInput -```ruby Ruby nocheck hidelines={1..2} -require "anthropic" + def call(input) + "file contents..." + end +end client = Anthropic::Client.new runner = client.beta.messages.tool_runner( model: "claude-opus-4-6", - max_tokens: 4096, - tools: [ - # ... - ], - messages: [ - { - role: "user", - content: "Analyze all the files in this directory and write a summary report." - } - ], - compaction_control: { - enabled: true, - context_token_threshold: 100000 - } + max_tokens: 1024, + tools: [ReadFile.new], + messages: [{ role: "user", content: "What's in config.json?" }], + compaction_control: { enabled: true, context_token_threshold: 100000 } ) runner.each_message do |message| @@ -2209,7 +2100,8 @@ runner.each_message do |message| end ``` - + + #### What happens during compaction @@ -2433,13 +2325,16 @@ The SDK calculates total usage as 63,000 + 270,000 = 333,000 tokens. However, th #### Tool use edge cases -When compaction is triggered while a tool use response is pending, the SDK removes the tool use block from the message history before generating the summary. Claude will re-issue the tool call after resuming from the summary if still needed. +When the SDK triggers compaction while a tool use response is pending, it removes the tool use block from the message history before generating the summary. Claude will re-issue the tool call after resuming from the summary if still needed. ### Monitoring compaction -Enable logging to track when compaction occurs: +Understanding when compaction triggers helps you tune thresholds and verify expected behavior. - + + + +The Python SDK logs compaction events at the INFO level. Enable the `anthropic.lib.tools` logger: ```python Python import logging @@ -2452,219 +2347,123 @@ logging.getLogger("anthropic.lib.tools").setLevel(logging.INFO) # INFO: Compaction complete. New token usage: 2500 ``` -```typescript TypeScript -// The SDK logs compaction events to the console -// You'll see messages like: -// Token usage 105000 has exceeded the threshold of 100000. Performing compaction. -// Compaction complete. New token usage: 2500 -``` - -```csharp C# nocheck -using Anthropic; -using Anthropic.Models.Beta.Messages; - -class CompactionLogging -{ - static async Task Main() - { - var client = new AnthropicClient(); - var messages = new List(); - - await Chat(client, messages, "Help me build a C# application"); - await Chat(client, messages, "Add error handling"); - await Chat(client, messages, "Now add logging"); - } - - static async Task Chat(AnthropicClient client, List messages, string userMessage) - { - messages.Add(new BetaMessageParam { Role = Role.User, Content = userMessage }); - - var parameters = new MessageCreateParams - { - Betas = ["compact-2026-01-12"], - Model = Model.ClaudeOpus4_6, - MaxTokens = 4096, - Messages = messages, - ContextManagement = new BetaContextManagementConfig - { - Edits = [new BetaCompact20260112Edit()] - } - }; - - var response = await client.Beta.Messages.Create(parameters); + + - messages.Add(new BetaMessageParam { Role = Role.Assistant, Content = response.Content }); +The TypeScript SDK's `toolRunner` supports compaction but does not log events. Detect compaction by watching `runner.params.messages.length` shrink between turns: - Console.WriteLine($"Token usage: {response.Usage.InputTokens}"); +```typescript TypeScript hidelines={1..25,-3..} +import Anthropic from "@anthropic-ai/sdk"; +import { betaTool } from "@anthropic-ai/sdk/helpers/beta/json-schema"; + +const readFile = betaTool({ + name: "read_file", + description: "Read the contents of a file", + inputSchema: { + type: "object", + properties: { path: { type: "string" } }, + required: ["path"] + }, + run: async () => "file contents..." +}); - var textBlock = response.Content.FirstOrDefault(b => b.Type == "text"); - return textBlock?.Text ?? ""; +async function main() { + const client = new Anthropic(); + + const runner = client.beta.messages.toolRunner({ + model: "claude-opus-4-6", + max_tokens: 1024, + tools: [readFile], + messages: [{ role: "user", content: "What's in config.json?" }], + compactionControl: { enabled: true, contextTokenThreshold: 100000 } + }); + + let prevMsgCount = 0; + for await (const message of runner) { + const currMsgCount = runner.params.messages.length; + if (currMsgCount < prevMsgCount) { + console.log(`Compaction occurred: ${prevMsgCount} -> ${currMsgCount} messages`); + console.log(`Input tokens after compaction: ${message.usage.input_tokens}`); } + prevMsgCount = currMsgCount; + } } -``` - -```go Go nocheck hidelines={1..13,19..20} -package main - -import ( - "context" - "fmt" - "log" - - "github.com/anthropics/anthropic-sdk-go" -) - -func main() { - client := anthropic.NewClient() - - messages := []anthropic.BetaMessageParam{} - - chat(client, &messages, "Help me build a Go application") - chat(client, &messages, "Add error handling") - chat(client, &messages, "Now add logging") -} - -func chat(client anthropic.Client, messages *[]anthropic.BetaMessageParam, userMessage string) string { - *messages = append(*messages, anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock(userMessage))) - response, err := client.Beta.Messages.New(context.TODO(), anthropic.BetaMessageNewParams{ - Betas: []anthropic.AnthropicBeta{"compact-2026-01-12"}, - Model: anthropic.ModelClaudeOpus4_6, - MaxTokens: 4096, - Messages: *messages, - ContextManagement: anthropic.BetaContextManagementConfigParam{ - Edits: []anthropic.BetaContextManagementConfigEditUnionParam{ - {OfCompact20260112: &anthropic.BetaCompact20260112EditParam{}}, - }, - }, - }) - if err != nil { - log.Fatal(err) - } - - // Append the response (including any compaction block) to continue the conversation - *messages = append(*messages, response.ToParam()) - - fmt.Printf("Token usage: %d\n", response.Usage.InputTokens) - - for _, block := range response.Content { - switch variant := block.AsAny().(type) { - case anthropic.BetaTextBlock: - fmt.Println(variant.Text) - return variant.Text - } - } - return "" -} +main(); ``` -```java Java nocheck hidelines={1..5,8..13,25..26,-1} -import com.anthropic.client.AnthropicClient; -import com.anthropic.client.okhttp.AnthropicOkHttpClient; -import com.anthropic.models.beta.messages.MessageCreateParams; -import com.anthropic.models.beta.messages.BetaMessage; -import com.anthropic.models.beta.messages.BetaMessageParam; -import com.anthropic.models.beta.messages.BetaContextManagementConfig; -import com.anthropic.models.beta.messages.BetaCompact20260112Edit; -import com.anthropic.models.messages.Model; -import java.util.ArrayList; -import java.util.List; - -public class CompactionLogging { - public static void main(String[] args) { - AnthropicClient client = AnthropicOkHttpClient.fromEnv(); - List messages = new ArrayList<>(); + + - String response = chat(client, messages, "Help me build a Java application"); - System.out.println(response); - - response = chat(client, messages, "Add error handling"); - System.out.println(response); - - response = chat(client, messages, "Now add logging"); - System.out.println(response); - } + +The C# SDK does not include a `tool_runner` helper. Use [server-side compaction](/docs/en/build-with-claude/compaction) instead. + - private static String chat(AnthropicClient client, List messages, String userMessage) { - messages.add(BetaMessageParam.builder() - .role(BetaMessageParam.Role.USER) - .content(userMessage) - .build()); + + - MessageCreateParams params = MessageCreateParams.builder() - .addBeta("compact-2026-01-12") - .model(Model.CLAUDE_OPUS_4_6) - .maxTokens(4096L) - .messages(messages) - .contextManagement(BetaContextManagementConfig.builder() - .addEdit(BetaCompact20260112Edit.builder().build()) - .build()) - .build(); + +The Go SDK's `tool_runner` does not support `compaction_control`. Use [server-side compaction](/docs/en/build-with-claude/compaction) instead. + - BetaMessage response = client.beta().messages().create(params); + + - messages.add(response.toParam()); + +The Java SDK's `tool_runner` does not support `compaction_control`. Use [server-side compaction](/docs/en/build-with-claude/compaction) instead. + - System.out.println("Token usage: " + response.usage().inputTokens()); + + - return response.content().stream() - .filter(block -> block.text().isPresent()) - .map(block -> block.text().get().text()) - .findFirst() - .orElse(""); - } -} -``` + +The PHP SDK's `tool_runner` does not support `compaction_control`. Use [server-side compaction](/docs/en/build-with-claude/compaction) instead. + -```php PHP hidelines={1..5} nocheck - + +The Ruby SDK supports an `on_compact:` callback that fires when compaction occurs. Add it to your `compaction_control` configuration: -use Anthropic\Client; +```ruby Ruby hidelines={1..15} +require "anthropic" -$client = new Client(apiKey: getenv("ANTHROPIC_API_KEY")); -$messages = []; - -function chat($client, &$messages, $userMessage) { - $messages[] = ['role' => 'user', 'content' => $userMessage]; - - $response = $client->beta->messages->create( - maxTokens: 4096, - messages: $messages, - model: 'claude-opus-4-6', - betas: ['compact-2026-01-12'], - contextManagement: [ - 'edits' => [ - ['type' => 'compact_20260112'] - ] - ], - ); +class ReadFileInput < Anthropic::BaseModel + required :path, String, doc: "Path to the file" +end - $messages[] = ['role' => 'assistant', 'content' => $response->content]; +class ReadFile < Anthropic::BaseTool + doc "Read the contents of a file" + input_schema ReadFileInput - echo "Token usage: " . $response->usage->inputTokens . "\n"; + def call(input) + "file contents..." + end +end - foreach ($response->content as $block) { - if ($block->type === 'text') { - return $block->text; - } - } - return ''; -} +client = Anthropic::Client.new -echo chat($client, $messages, "Help me build a PHP application") . "\n"; -echo chat($client, $messages, "Add error handling") . "\n"; -echo chat($client, $messages, "Now add logging") . "\n"; -``` +runner = client.beta.messages.tool_runner( + model: "claude-opus-4-6", + max_tokens: 1024, + tools: [ReadFile.new], + messages: [{ role: "user", content: "What's in config.json?" }], + compaction_control: { + enabled: true, + context_token_threshold: 100000, + on_compact: ->(tokens_before, tokens_after) do + puts "Compaction occurred: #{tokens_before} -> #{tokens_after} tokens" + end + } +) -```ruby Ruby nocheck -# The SDK logs compaction events when verbose logging is enabled. -# You'll see messages like: -# Token usage 105000 has exceeded the threshold of 100000. Performing compaction. -# Compaction complete. New token usage: 2500 +runner.each_message do |message| + puts "Tokens: #{message.usage.input_tokens}" +end ``` - + + ### When to use compaction diff --git a/content/en/docs/claude-code/claude-code-on-the-web.md b/content/en/docs/claude-code/claude-code-on-the-web.md index f16d20c5..adb3bb03 100644 --- a/content/en/docs/claude-code/claude-code-on-the-web.md +++ b/content/en/docs/claude-code/claude-code-on-the-web.md @@ -162,6 +162,10 @@ verification is not enabled by default. Enable repository access verification and/or withhold your name from your shared sessions by going to Settings > Claude Code > Sharing settings. +## Schedule recurring tasks + +Run Claude on a recurring schedule to automate work like daily PR reviews, dependency audits, and CI failure analysis. See [Schedule tasks on the web](/en/web-scheduled-tasks) for the full guide. + ## Managing sessions ### Archiving sessions diff --git a/content/en/docs/claude-code/commands.md b/content/en/docs/claude-code/commands.md index 5f9c1828..aaeea290 100644 --- a/content/en/docs/claude-code/commands.md +++ b/content/en/docs/claude-code/commands.md @@ -64,6 +64,7 @@ In the table below, `` indicates a required argument and `[arg]` indicates | `/review` | Deprecated. Install the [`code-review` plugin](https://github.com/anthropics/claude-code-marketplace/blob/main/code-review/README.md) instead: `claude plugin install code-review@claude-code-marketplace` | | `/rewind` | Rewind the conversation and/or code to a previous point, or summarize from a selected message. See [checkpointing](/en/checkpointing). Alias: `/checkpoint` | | `/sandbox` | Toggle [sandbox mode](/en/sandboxing). Available on supported platforms only | +| `/schedule [description]` | Create, update, list, or run [Cloud scheduled tasks](/en/web-scheduled-tasks). Claude walks you through the setup conversationally | | `/security-review` | Analyze pending changes on the current branch for security vulnerabilities. Reviews the git diff and identifies risks like injection, auth issues, and data exposure | | `/skills` | List available [skills](/en/skills) | | `/stats` | Visualize daily usage, session history, streaks, and model preferences | diff --git a/content/en/docs/claude-code/common-workflows.md b/content/en/docs/claude-code/common-workflows.md index 033a3ed7..6a908156 100644 --- a/content/en/docs/claude-code/common-workflows.md +++ b/content/en/docs/claude-code/common-workflows.md @@ -898,6 +898,25 @@ Suppose you need Claude's output in a specific format, especially when integrati *** +## Run Claude on a schedule + +Suppose you want Claude to handle a task automatically on a recurring basis, like reviewing open PRs every morning, auditing dependencies weekly, or checking for CI failures overnight. + +Pick a scheduling option based on where you want the task to run: + +| Option | Where it runs | Best for | +| :-------------------------------------------------------------- | :-------------------------------- | :------------------------------------------------------------------------------------------------------------ | +| [Cloud scheduled tasks](/en/web-scheduled-tasks) | Anthropic-managed infrastructure | Tasks that should run even when your computer is off. Configure at [claude.ai/code](https://claude.ai/code). | +| [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks) | Your machine, via the desktop app | Tasks that need direct access to local files, tools, or uncommitted changes. | +| [GitHub Actions](/en/github-actions) | Your CI pipeline | Tasks tied to repo events like opened PRs, or cron schedules that should live alongside your workflow config. | +| [`/loop`](/en/scheduled-tasks) | The current CLI session | Quick polling while a session is open. Tasks are cancelled when you exit. | + + + When writing prompts for scheduled tasks, be explicit about what success looks like and what to do with results. The task runs autonomously, so it can't ask clarifying questions. For example: "Review open PRs labeled `needs-review`, leave inline comments on any issues, and post a summary in the `#eng-reviews` Slack channel." + + +*** + ## Ask Claude about its capabilities Claude has built-in access to its documentation and can answer questions about its own features and limitations. diff --git a/content/en/docs/claude-code/desktop.md b/content/en/docs/claude-code/desktop.md index dfe69b7d..ad72f227 100644 --- a/content/en/docs/claude-code/desktop.md +++ b/content/en/docs/claude-code/desktop.md @@ -4,7 +4,7 @@ # Use Claude Code Desktop -> Get more out of Claude Code Desktop: parallel sessions with Git isolation, visual diff review, app previews, PR monitoring, permission modes, connectors, and enterprise configuration. +> Get more out of Claude Code Desktop: computer use, Dispatch sessions from your phone, parallel sessions with Git isolation, visual diff review, app previews, PR monitoring, connectors, and enterprise configuration. The Code tab within the Claude Desktop app lets you use Claude Code through a graphical interface instead of the terminal. @@ -12,8 +12,10 @@ Desktop adds these capabilities on top of the standard Claude Code experience: * [Visual diff review](#review-changes-with-diff-view) with inline comments * [Live app preview](#preview-your-app) with dev servers +* [Computer use](#let-claude-use-your-computer) to open apps and control your screen on macOS * [GitHub PR monitoring](#monitor-pull-request-status) with auto-fix and auto-merge * [Parallel sessions](#work-in-parallel-with-sessions) with automatic Git worktree isolation +* [Dispatch](#sessions-from-dispatch) integration: send a task from your phone, get a session here * [Scheduled tasks](#schedule-recurring-tasks) that run Claude on a recurring schedule * [Connectors](#connect-external-tools) for GitHub, Slack, Linear, and more * Local, [SSH](#ssh-sessions), and [cloud](#run-long-running-tasks-remotely) environments @@ -22,7 +24,7 @@ Desktop adds these capabilities on top of the standard Claude Code experience: New to Desktop? Start with [Get started](/en/desktop-quickstart) to install the app and make your first edit. -This page covers [working with code](#work-with-code), [managing sessions](#manage-sessions), [extending Claude Code](#extend-claude-code), [scheduled tasks](#schedule-recurring-tasks), and [configuration](#environment-configuration). It also includes a [CLI comparison](#coming-from-the-cli) and [troubleshooting](#troubleshooting). +This page covers [working with code](#work-with-code), [computer use](#let-claude-use-your-computer), [managing sessions](#manage-sessions), [extending Claude Code](#extend-claude-code), [scheduled tasks](#schedule-recurring-tasks), and [configuration](#environment-configuration). It also includes a [CLI comparison](#coming-from-the-cli) and [troubleshooting](#troubleshooting). ## Start a session @@ -121,9 +123,62 @@ Use the **Auto-fix** and **Auto-merge** toggles in the CI status bar to enable e PR monitoring requires the [GitHub CLI (`gh`)](https://cli.github.com/) to be installed and authenticated on your machine. If `gh` is not installed, Desktop prompts you to install it the first time you try to create a PR. +## Let Claude use your computer + +Computer use lets Claude open your apps, control your screen, and work directly on your machine the way you would. Ask Claude to test a native app in the iOS simulator, interact with a desktop tool that has no CLI, or automate something that only works through a GUI. + + + Computer use is a research preview on macOS that requires a Pro or Max plan. It is not available on Team or Enterprise plans. The Claude Desktop app must be running. + + +Computer use is off by default. [Enable it in Settings](#enable-computer-use) and grant the required macOS permissions before Claude can control your screen. + + + Unlike the [sandboxed Bash tool](/en/sandboxing), computer use runs on your actual desktop with access to whatever you approve. Claude checks each action and flags potential prompt injection from on-screen content, but the trust boundary is different. See the [computer use safety guide](https://support.claude.com/en/articles/14128542) for best practices. + + +### When computer use applies + +Claude has several ways to interact with an app or service, and computer use is the broadest and slowest. It tries the most precise tool first: + +* If you have a [connector](#connect-external-tools) for a service, Claude uses the connector. +* If the task is a shell command, Claude uses Bash. +* If the task is browser work and you have [Claude in Chrome](/en/chrome) set up, Claude uses that. +* If none of those apply, Claude uses computer use. + +The [per-app access tiers](#app-permissions) reinforce this: browsers are capped at view-only, and terminals and IDEs at click-only, steering Claude toward the dedicated tool even when computer use is active. Screen control is reserved for things nothing else can reach, like native apps, hardware control panels, the iOS simulator, or proprietary tools without an API. + +### Enable computer use + +Computer use is off by default. If you ask Claude to do something that needs it while it's off, Claude tells you it could do the task if you enable computer use in Settings. To enable it, open **Settings > Desktop app > General** and toggle **Computer use** on. Before the toggle takes effect, you need to grant two macOS system permissions: + +* **Accessibility**: lets Claude click, type, and scroll +* **Screen Recording**: lets Claude see what's on your screen + +The Settings page shows the current status of each permission. If either is denied, click the badge to open the relevant System Settings pane. + +### App permissions + +The first time Claude needs to use an app, a prompt appears in your session. Click **Allow for this session** or **Deny**. Approvals last for the current session, or 30 minutes in [Dispatch-spawned sessions](#sessions-from-dispatch). + +The prompt also shows what level of control Claude gets for that app. These tiers are fixed by app category and can't be changed: + +| Tier | What Claude can do | Applies to | +| :----------- | :------------------------------------------------------- | :-------------------------- | +| View only | See the app in screenshots | Browsers, trading platforms | +| Click only | Click and scroll, but not type or use keyboard shortcuts | Terminals, IDEs | +| Full control | Click, type, drag, and use keyboard shortcuts | Everything else | + +Apps with broad reach like Terminal, Finder, and System Settings show an extra warning in the prompt so you know what approving them grants. + +You can configure two settings in **Settings > Desktop app > General**: + +* **Denied apps**: add apps here to reject them without prompting. Claude may still affect a denied app indirectly through actions in an allowed app, but it can't interact with the denied app directly. +* **Unhide apps when Claude finishes**: while Claude is working, your other windows are hidden so it interacts with only the approved app. When Claude finishes, hidden windows are restored unless you turn this setting off. + ## Manage sessions -Each session is an independent conversation with its own context and changes. You can run multiple sessions in parallel or send work to the cloud. +Each session is an independent conversation with its own context and changes. You can run multiple sessions in parallel, send work to the cloud, or let Dispatch start sessions for you from your phone. ### Work in parallel with sessions @@ -152,13 +207,27 @@ The **Continue in** menu, accessible from the VS Code icon in the bottom right o * **Claude Code on the Web**: sends your local session to continue running remotely. Desktop pushes your branch, generates a summary of the conversation, and creates a new remote session with the full context. You can then choose to archive the local session or keep it. This requires a clean working tree, and is not available for SSH sessions. * **Your IDE**: opens your project in a supported IDE at the current working directory. +### Sessions from Dispatch + +[Dispatch](https://support.claude.com/en/articles/13947068) is a persistent conversation with Claude that lives in the [Cowork](https://claude.com/product/cowork#dispatch-and-computer-use) tab. You message Dispatch a task, and it decides how to handle it. + +A task can end up as a Code session in two ways: you ask for one directly, such as "open a Claude Code session and fix the login bug", or Dispatch decides the task is development work and spawns one on its own. Tasks that typically route to Code include fixing bugs, updating dependencies, running tests, or opening pull requests. Research, document editing, and spreadsheet work stay in Cowork. + +Either way, the Code session appears in the Code tab's sidebar with a **Dispatch** badge. You get a push notification on your phone when it finishes or needs your approval. + +If you have [computer use](#let-claude-use-your-computer) enabled, Dispatch-spawned Code sessions can use it too. App approvals in those sessions expire after 30 minutes and re-prompt, rather than lasting the full session like regular Code sessions. + +For setup, pairing, and Dispatch settings, see the [Dispatch help article](https://support.claude.com/en/articles/13947068). Dispatch requires a Pro or Max plan and is not available on Team or Enterprise plans. + +Dispatch is one of several ways to work with Claude when you're away from your terminal. See [Platforms and integrations](/en/platforms#work-when-you-are-away-from-your-terminal) to compare it with Remote Control, Channels, Slack, and scheduled tasks. + ## Extend Claude Code Connect external services, add reusable workflows, customize Claude's behavior, and configure preview servers. ### Connect external tools -For local and [SSH](#ssh-sessions) sessions, click the **+** button next to the prompt box and select **Connectors** to add integrations like Google Calendar, Slack, GitHub, Linear, Notion, and more. You can add connectors before or during a session. Connectors are not available for remote sessions. +For local and [SSH](#ssh-sessions) sessions, click the **+** button next to the prompt box and select **Connectors** to add integrations like Google Calendar, Slack, GitHub, Linear, Notion, and more. You can add connectors before or during a session. The **+** button is not available in remote sessions, but [scheduled tasks](/en/web-scheduled-tasks) configure connectors at task creation time. To manage or disconnect connectors, go to Settings → Connectors in the desktop app, or select **Manage connectors** from the Connectors menu in the prompt box. @@ -321,15 +390,42 @@ These configurations show common setups for different project types: ## Schedule recurring tasks -Scheduled tasks start a new local session automatically at a time and frequency you choose. Use them for recurring work like daily code reviews, dependency update checks, or morning briefings that pull from your calendar and inbox. +By default, scheduled tasks start a new session automatically at a time and frequency you choose. Use them for recurring work like daily code reviews, dependency update checks, or morning briefings that pull from your calendar and inbox. + +### Compare scheduling options + +Claude Code offers three ways to schedule recurring work: + +| | [Cloud](/en/web-scheduled-tasks) | [Desktop](/en/desktop#schedule-recurring-tasks) | [`/loop`](/en/scheduled-tasks) | +| :------------------------- | :------------------------------- | :---------------------------------------------- | :----------------------------- | +| Runs on | Anthropic cloud | Your machine | Your machine | +| Requires machine on | No | Yes | Yes | +| Requires open session | No | No | Yes | +| Persistent across restarts | Yes | Yes | No (session-scoped) | +| Access to local files | No (fresh clone) | Yes | Yes | +| MCP servers | Connectors configured per task | [Config files](/en/mcp) and connectors | Inherits from session | +| Permission prompts | No (runs autonomously) | Configurable per task | Inherits from session | +| Customizable schedule | Via `/schedule` in the CLI | Yes | Yes | +| Minimum interval | 1 hour | 1 minute | 1 minute | + + + Use **cloud tasks** for work that should run reliably without your machine. Use **Desktop tasks** when you need access to local files and tools. Use **`/loop`** for quick polling during a session. + + +The Schedule page supports two kinds of tasks: + +* **Local tasks**: run on your machine. They have direct access to your local files and tools, but the desktop app must be open and your computer awake for them to run. +* **Remote tasks**: run on Anthropic-managed cloud infrastructure. They keep running even when your computer is off, but work against a fresh clone of your repository rather than your local checkout. + +Both kinds appear in the same task grid. Click **New task** to pick which kind to create. The rest of this section covers local tasks; for remote tasks, see [Cloud scheduled tasks](/en/web-scheduled-tasks). -Tasks run on your machine, so the desktop app must be open and your computer awake for them to fire. See [How scheduled tasks run](#how-scheduled-tasks-run) for details on missed runs and catch-up behavior. +See [How scheduled tasks run](#how-scheduled-tasks-run) for details on missed runs and catch-up behavior for local tasks. - By default, scheduled tasks run against whatever state your working directory is in, including uncommitted changes. Enable the worktree toggle in the prompt input to give each run its own isolated Git worktree, the same way [parallel sessions](#work-in-parallel-with-sessions) work. + By default, local scheduled tasks run against whatever state your working directory is in, including uncommitted changes. Enable the worktree toggle in the prompt input to give each run its own isolated Git worktree, the same way [parallel sessions](#work-in-parallel-with-sessions) work. -To create a scheduled task, click **Schedule** in the sidebar, then **+ New task**. Configure these fields: +To create a local scheduled task, click **Schedule** in the sidebar, click **New task**, and choose **New local task**. Configure these fields: | Field | Description | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | @@ -352,11 +448,11 @@ For intervals the picker doesn't offer (every 15 minutes, first of each month, e ### How scheduled tasks run -Scheduled tasks run locally on your machine. Desktop checks the schedule every minute while the app is open and starts a fresh session when a task is due, independent of any manual sessions you have open. Each task gets a fixed delay of up to 10 minutes after the scheduled time to stagger API traffic. The delay is deterministic: the same task always starts at the same offset. +Local scheduled tasks run on your machine. Desktop checks the schedule every minute while the app is open and starts a fresh session when a task is due, independent of any manual sessions you have open. Each task gets a fixed delay of up to 10 minutes after the scheduled time to stagger API traffic. The delay is deterministic: the same task always starts at the same offset. When a task fires, you get a desktop notification and a new session appears under a **Scheduled** section in the sidebar. Open it to see what Claude did, review changes, or respond to permission prompts. The session works like any other: Claude can edit files, run commands, create commits, and open pull requests. -Tasks only run while the desktop app is running and your computer is awake. If your computer sleeps through a scheduled time, the run is skipped. To prevent idle-sleep, enable **Keep computer awake** in Settings under **Desktop app → General**. Closing the laptop lid still puts it to sleep. +Tasks only run while the desktop app is running and your computer is awake. If your computer sleeps through a scheduled time, the run is skipped. To prevent idle-sleep, enable **Keep computer awake** in Settings under **Desktop app → General**. Closing the laptop lid still puts it to sleep. For tasks that need to run even when your computer is off, use a [remote task](/en/web-scheduled-tasks) instead. ### Missed runs @@ -487,16 +583,16 @@ This table shows the desktop app equivalent for common CLI flags. Flags not list | CLI | Desktop equivalent | | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| `--model sonnet` | model dropdown next to the send button, before starting a session | -| `--resume`, `--continue` | click a session in the sidebar | -| `--permission-mode` | mode selector next to the send button | +| `--model sonnet` | Model dropdown next to the send button, before starting a session | +| `--resume`, `--continue` | Click a session in the sidebar | +| `--permission-mode` | Mode selector next to the send button | | `--dangerously-skip-permissions` | Bypass permissions mode. Enable in Settings → Claude Code → "Allow bypass permissions mode". Enterprise admins can disable this setting. | -| `--add-dir` | add multiple repos with the **+** button in remote sessions | -| `--allowedTools`, `--disallowedTools` | not available in Desktop | -| `--verbose` | not available. Check system logs: Console.app on macOS, Event Viewer → Windows Logs → Application on Windows | -| `--print`, `--output-format` | not available. Desktop is interactive only. | -| `ANTHROPIC_MODEL` env var | model dropdown next to the send button | -| `MAX_THINKING_TOKENS` env var | set in shell profile; applies to local sessions. See [environment configuration](#environment-configuration). | +| `--add-dir` | Add multiple repos with the **+** button in remote sessions | +| `--allowedTools`, `--disallowedTools` | Not available in Desktop | +| `--verbose` | Not available. Check system logs: Console.app on macOS, Event Viewer → Windows Logs → Application on Windows | +| `--print`, `--output-format` | Not available. Desktop is interactive only. | +| `ANTHROPIC_MODEL` env var | Model dropdown next to the send button | +| `MAX_THINKING_TOKENS` env var | Set in shell profile; applies to local sessions. See [environment configuration](#environment-configuration). | ### Shared configuration @@ -518,17 +614,19 @@ This table compares core capabilities between the CLI and Desktop. For a full li | Feature | CLI | Desktop | | ----------------------------------------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| Permission modes | all modes including `dontAsk` | Ask permissions, Auto accept edits, Plan mode, and Bypass permissions via Settings | +| Permission modes | All modes including `dontAsk` | Ask permissions, Auto accept edits, Plan mode, and Bypass permissions via Settings | | `--dangerously-skip-permissions` | CLI flag | Bypass permissions mode. Enable in Settings → Claude Code → "Allow bypass permissions mode" | -| [Third-party providers](/en/third-party-integrations) | Bedrock, Vertex, Foundry | not available. Desktop connects to Anthropic's API directly. | -| [MCP servers](/en/mcp) | configure in settings files | Connectors UI for local and SSH sessions, or settings files | -| [Plugins](/en/plugins) | `/plugin` command | plugin manager UI | -| @mention files | text-based | with autocomplete | -| File attachments | not available | images, PDFs | -| Session isolation | [`--worktree`](/en/cli-reference) flag | automatic worktrees | -| Multiple sessions | separate terminals | sidebar tabs | -| Recurring tasks | cron jobs, CI pipelines | [scheduled tasks](#schedule-recurring-tasks) | -| Scripting and automation | [`--print`](/en/cli-reference), [Agent SDK](/en/headless) | not available | +| [Third-party providers](/en/third-party-integrations) | Bedrock, Vertex, Foundry | Not available. Desktop connects to Anthropic's API directly. | +| [MCP servers](/en/mcp) | Configure in settings files | Connectors UI for local and SSH sessions, or settings files | +| [Plugins](/en/plugins) | `/plugin` command | Plugin manager UI | +| @mention files | Text-based | With autocomplete | +| File attachments | Not available | Images, PDFs | +| Session isolation | [`--worktree`](/en/cli-reference) flag | Automatic worktrees | +| Multiple sessions | Separate terminals | Sidebar tabs | +| Recurring tasks | Cron jobs, CI pipelines | [Scheduled tasks](#schedule-recurring-tasks) | +| Computer use | Not available | [App and screen control](#let-claude-use-your-computer) on macOS | +| Dispatch integration | Not available | [Dispatch sessions](#sessions-from-dispatch) in the sidebar | +| Scripting and automation | [`--print`](/en/cli-reference), [Agent SDK](/en/headless) | Not available | ### What's not available in Desktop diff --git a/content/en/docs/claude-code/overview.md b/content/en/docs/claude-code/overview.md index 84b64299..f3eff93e 100644 --- a/content/en/docs/claude-code/overview.md +++ b/content/en/docs/claude-code/overview.md @@ -22,19 +22,19 @@ Choose your environment to get started. Most surfaces require a [Claude subscrip **macOS, Linux, WSL:** - ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} + ```bash theme={null} curl -fsSL https://claude.ai/install.sh | bash ``` **Windows PowerShell:** - ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} + ```powershell theme={null} irm https://claude.ai/install.ps1 | iex ``` **Windows CMD:** - ```batch theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} + ```batch theme={null} curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd ``` @@ -46,7 +46,7 @@ Choose your environment to get started. Most surfaces require a [Claude subscrip - ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} + ```bash theme={null} brew install --cask claude-code ``` @@ -56,7 +56,7 @@ Choose your environment to get started. Most surfaces require a [Claude subscrip - ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} + ```powershell theme={null} winget install Anthropic.ClaudeCode ``` @@ -186,10 +186,19 @@ Here are some of the ways you can use Claude Code: See the [CLI reference](/en/cli-reference) for the full set of commands and flags. + + Run Claude on a schedule to automate work that repeats: morning PR reviews, overnight CI failure analysis, weekly dependency audits, or syncing docs after PRs merge. + + * [Cloud scheduled tasks](/en/web-scheduled-tasks) run on Anthropic-managed infrastructure, so they keep running even when your computer is off. Create them from the web, the Desktop app, or by running `/schedule` in the CLI. + * [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks) run on your machine, with direct access to your local files and tools + * [`/loop`](/en/scheduled-tasks) repeats a prompt within a CLI session for quick polling + + Sessions aren't tied to a single surface. Move work between environments as your context changes: * Step away from your desk and keep working from your phone or any browser with [Remote Control](/en/remote-control) + * Message [Dispatch](/en/desktop#sessions-from-dispatch) a task from your phone and open the Desktop session it creates * Kick off a long-running task on the [web](/en/claude-code-on-the-web) or [iOS app](https://apps.apple.com/app/claude-by-anthropic/id6473753684), then pull it into your terminal with `/teleport` * Hand off a terminal session to the [Desktop app](/en/desktop) with `/desktop` for visual diff review * Route tasks from team chat: mention `@Claude` in [Slack](/en/slack) with a bug report and get a pull request back @@ -202,16 +211,17 @@ Each surface connects to the same underlying Claude Code engine, so your CLAUDE. Beyond the [Terminal](/en/quickstart), [VS Code](/en/vs-code), [JetBrains](/en/jetbrains), [Desktop](/en/desktop), and [Web](/en/claude-code-on-the-web) environments above, Claude Code integrates with CI/CD, chat, and browser workflows: -| I want to... | Best option | -| --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -| Continue a local session from my phone or another device | [Remote Control](/en/remote-control) | -| Push events from Telegram, Discord, or my own webhooks into a session | [Channels](/en/channels) | -| Start a task locally, continue on mobile | [Web](/en/claude-code-on-the-web) or [Claude iOS app](https://apps.apple.com/app/claude-by-anthropic/id6473753684) | -| Automate PR reviews and issue triage | [GitHub Actions](/en/github-actions) or [GitLab CI/CD](/en/gitlab-ci-cd) | -| Get automatic code review on every PR | [GitHub Code Review](/en/code-review) | -| Route bug reports from Slack to pull requests | [Slack](/en/slack) | -| Debug live web applications | [Chrome](/en/chrome) | -| Build custom agents for your own workflows | [Agent SDK](https://platform.claude.com/docs/en/agent-sdk/overview) | +| I want to... | Best option | +| --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| Continue a local session from my phone or another device | [Remote Control](/en/remote-control) | +| Push events from Telegram, Discord, or my own webhooks into a session | [Channels](/en/channels) | +| Start a task locally, continue on mobile | [Web](/en/claude-code-on-the-web) or [Claude iOS app](https://apps.apple.com/app/claude-by-anthropic/id6473753684) | +| Run Claude on a recurring schedule | [Cloud scheduled tasks](/en/web-scheduled-tasks) or [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks) | +| Automate PR reviews and issue triage | [GitHub Actions](/en/github-actions) or [GitLab CI/CD](/en/gitlab-ci-cd) | +| Get automatic code review on every PR | [GitHub Code Review](/en/code-review) | +| Route bug reports from Slack to pull requests | [Slack](/en/slack) | +| Debug live web applications | [Chrome](/en/chrome) | +| Build custom agents for your own workflows | [Agent SDK](https://platform.claude.com/docs/en/agent-sdk/overview) | ## Next steps diff --git a/content/en/docs/claude-code/platforms.md b/content/en/docs/claude-code/platforms.md new file mode 100644 index 00000000..0b267978 --- /dev/null +++ b/content/en/docs/claude-code/platforms.md @@ -0,0 +1,78 @@ +> ## Documentation Index +> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt +> Use this file to discover all available pages before exploring further. + +# Platforms and integrations + +> Choose where to run Claude Code and what to connect it to. Compare the CLI, Desktop, VS Code, JetBrains, web, and integrations like Chrome, Slack, and CI/CD. + +Claude Code runs the same underlying engine everywhere, but each surface is tuned for a different way of working. This page helps you pick the right platform for your workflow and connect the tools you already use. + +## Where to run Claude Code + +Choose a platform based on how you like to work and where your project lives. + +| Platform | Best for | What you get | +| :-------------------------------- | :------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | +| [CLI](/en/quickstart) | Terminal workflows, scripting, remote servers | Full feature set, [Agent SDK](/en/headless), third-party providers | +| [Desktop](/en/desktop) | Visual review, parallel sessions, managed setup | Diff viewer, app preview, [computer use](/en/desktop#let-claude-use-your-computer) and [Dispatch](/en/desktop#sessions-from-dispatch) on Pro and Max | +| [VS Code](/en/vs-code) | Working inside VS Code without switching to a terminal | Inline diffs, integrated terminal, file context | +| [JetBrains](/en/jetbrains) | Working inside IntelliJ, PyCharm, WebStorm, or other JetBrains IDEs | Diff viewer, selection sharing, terminal session | +| [Web](/en/claude-code-on-the-web) | Long-running tasks that don't need much steering, or work that should continue when you're offline | Anthropic-managed cloud, continues after you disconnect | + +The CLI is the most complete surface for terminal-native work: scripting, third-party providers, and the Agent SDK are CLI-only. Desktop and the IDE extensions trade some CLI-only features for visual review and tighter editor integration. The web runs in Anthropic's cloud, so tasks keep going after you disconnect. + +You can mix surfaces on the same project. Configuration, project memory, and MCP servers are shared across the local surfaces. + +## Connect your tools + +Integrations let Claude work with services outside your codebase. + +| Integration | What it does | Use it for | +| :----------------------------------- | :------------------------------------------------- | :--------------------------------------------------------------- | +| [Chrome](/en/chrome) | Controls your browser with your logged-in sessions | Testing web apps, filling forms, automating sites without an API | +| [GitHub Actions](/en/github-actions) | Runs Claude in your CI pipeline | Automated PR reviews, issue triage, scheduled maintenance | +| [GitLab CI/CD](/en/gitlab-ci-cd) | Same as GitHub Actions for GitLab | CI-driven automation on GitLab | +| [Code Review](/en/code-review) | Reviews every PR automatically | Catching bugs before human review | +| [Slack](/en/slack) | Responds to `@Claude` mentions in your channels | Turning bug reports into pull requests from team chat | + +For integrations not listed here, [MCP servers](/en/mcp) and [connectors](/en/desktop#connect-external-tools) let you connect almost anything: Linear, Notion, Google Drive, or your own internal APIs. + +## Work when you are away from your terminal + +Claude Code offers several ways to work when you're not at your terminal. They differ in what triggers the work, where Claude runs, and how much you need to set up. + +| | Trigger | Claude runs on | Setup | Best for | +| :--------------------------------------------- | :--------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------ | +| [Dispatch](/en/desktop#sessions-from-dispatch) | Message a task from the Claude mobile app | Your machine (Desktop) | [Pair the mobile app with Desktop](https://support.claude.com/en/articles/13947068) | Delegating work while you're away, minimal setup | +| [Remote Control](/en/remote-control) | Drive a running session from [claude.ai/code](https://claude.ai/code) or the Claude mobile app | Your machine (CLI or VS Code) | Run `claude remote-control` | Steering in-progress work from another device | +| [Channels](/en/channels) | Push events from a chat app like Telegram or Discord, or your own server | Your machine (CLI) | [Install a channel plugin](/en/channels#quickstart) or [build your own](/en/channels-reference) | Reacting to external events like CI failures or chat messages | +| [Slack](/en/slack) | Mention `@Claude` in a team channel | Anthropic cloud | [Install the Slack app](/en/slack#setting-up-claude-code-in-slack) with [Claude Code on the web](/en/claude-code-on-the-web) enabled | PRs and reviews from team chat | +| [Scheduled tasks](/en/scheduled-tasks) | Set a schedule | [CLI](/en/scheduled-tasks), [Desktop](/en/desktop#schedule-recurring-tasks), or [cloud](/en/web-scheduled-tasks) | Pick a frequency | Recurring automation like daily reviews | + +If you're not sure where to start, [install the CLI](/en/quickstart) and run it in a project directory. If you'd rather not use a terminal, [Desktop](/en/desktop-quickstart) gives you the same engine with a graphical interface. + +## Related resources + +### Platforms + +* [CLI quickstart](/en/quickstart): install and run your first command in the terminal +* [Desktop](/en/desktop): visual diff review, parallel sessions, computer use, and Dispatch +* [VS Code](/en/vs-code): the Claude Code extension inside your editor +* [JetBrains](/en/jetbrains): the extension for IntelliJ, PyCharm, and other JetBrains IDEs +* [Claude Code on the web](/en/claude-code-on-the-web): cloud sessions that keep running when you disconnect + +### Integrations + +* [Chrome](/en/chrome): automate browser tasks with your logged-in sessions +* [GitHub Actions](/en/github-actions): run Claude in your CI pipeline +* [GitLab CI/CD](/en/gitlab-ci-cd): the same for GitLab +* [Code Review](/en/code-review): automatic review on every pull request +* [Slack](/en/slack): send tasks from team chat, get PRs back + +### Remote access + +* [Dispatch](/en/desktop#sessions-from-dispatch): message a task from your phone and it can spawn a Desktop session +* [Remote Control](/en/remote-control): drive a running session from your phone or browser +* [Channels](/en/channels): push events from chat apps or your own servers into a session +* [Scheduled tasks](/en/scheduled-tasks): run prompts on a recurring schedule diff --git a/content/en/docs/claude-code/plugin-marketplaces.md b/content/en/docs/claude-code/plugin-marketplaces.md index b3a67be0..06dcd93b 100644 --- a/content/en/docs/claude-code/plugin-marketplaces.md +++ b/content/en/docs/claude-code/plugin-marketplaces.md @@ -98,7 +98,7 @@ This example creates a marketplace with one plugin: a `/quality-review` skill fo Select some code in your editor and run your new command. ```shell theme={null} - /review + /quality-review ``` diff --git a/content/en/docs/claude-code/remote-control.md b/content/en/docs/claude-code/remote-control.md index 17dcfc92..f0f953bf 100644 --- a/content/en/docs/claude-code/remote-control.md +++ b/content/en/docs/claude-code/remote-control.md @@ -168,10 +168,23 @@ Common causes: * Network or proxy issue: a firewall or proxy may be blocking the outbound HTTPS request. Remote Control requires access to the Anthropic API on port 443. * Session creation failed: if you also see `Session creation failed — see debug log`, the failure happened earlier in setup. Check that your subscription is active. +## Choose the right approach + +Claude Code offers several ways to work when you're not at your terminal. They differ in what triggers the work, where Claude runs, and how much you need to set up. + +| | Trigger | Claude runs on | Setup | Best for | +| :--------------------------------------------- | :--------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------ | +| [Dispatch](/en/desktop#sessions-from-dispatch) | Message a task from the Claude mobile app | Your machine (Desktop) | [Pair the mobile app with Desktop](https://support.claude.com/en/articles/13947068) | Delegating work while you're away, minimal setup | +| [Remote Control](/en/remote-control) | Drive a running session from [claude.ai/code](https://claude.ai/code) or the Claude mobile app | Your machine (CLI or VS Code) | Run `claude remote-control` | Steering in-progress work from another device | +| [Channels](/en/channels) | Push events from a chat app like Telegram or Discord, or your own server | Your machine (CLI) | [Install a channel plugin](/en/channels#quickstart) or [build your own](/en/channels-reference) | Reacting to external events like CI failures or chat messages | +| [Slack](/en/slack) | Mention `@Claude` in a team channel | Anthropic cloud | [Install the Slack app](/en/slack#setting-up-claude-code-in-slack) with [Claude Code on the web](/en/claude-code-on-the-web) enabled | PRs and reviews from team chat | +| [Scheduled tasks](/en/scheduled-tasks) | Set a schedule | [CLI](/en/scheduled-tasks), [Desktop](/en/desktop#schedule-recurring-tasks), or [cloud](/en/web-scheduled-tasks) | Pick a frequency | Recurring automation like daily reviews | + ## Related resources * [Claude Code on the web](/en/claude-code-on-the-web): run sessions in Anthropic-managed cloud environments instead of on your machine * [Channels](/en/channels): forward Telegram or Discord into a session so Claude reacts to messages while you're away +* [Dispatch](/en/desktop#sessions-from-dispatch): message a task from your phone and it can spawn a Desktop session to handle it * [Authentication](/en/authentication): set up `/login` and manage credentials for claude.ai * [CLI reference](/en/cli-reference): full list of flags and commands including `claude remote-control` * [Security](/en/security): how Remote Control sessions fit into the Claude Code security model diff --git a/content/en/docs/claude-code/sandboxing.md b/content/en/docs/claude-code/sandboxing.md index 409776ce..2ebf5428 100644 --- a/content/en/docs/claude-code/sandboxing.md +++ b/content/en/docs/claude-code/sandboxing.md @@ -307,6 +307,13 @@ For implementation details and source code, visit the [GitHub repository](https: * **Compatibility**: Some tools that require specific system access patterns may need configuration adjustments, or may even need to be run outside of the sandbox * **Platform support**: Supports macOS, Linux, and WSL2. WSL1 is not supported. Native Windows support is planned. +## What sandboxing does not cover + +The sandbox isolates Bash subprocesses. Other tools operate under different boundaries: + +* **Built-in file tools**: Read, Edit, and Write use the permission system directly rather than running through the sandbox. See [permissions](/en/permissions). +* **Computer use on Desktop**: when Claude opens apps and controls your screen on macOS, it runs on your actual desktop rather than in an isolated environment. Per-app permission prompts gate each application. See [computer use](/en/desktop#let-claude-use-your-computer). + ## See also * [Security](/en/security) - Comprehensive security features and best practices diff --git a/content/en/docs/claude-code/scheduled-tasks.md b/content/en/docs/claude-code/scheduled-tasks.md index 4722ba89..1b6292a3 100644 --- a/content/en/docs/claude-code/scheduled-tasks.md +++ b/content/en/docs/claude-code/scheduled-tasks.md @@ -12,7 +12,27 @@ Scheduled tasks let Claude re-run a prompt automatically on an interval. Use them to poll a deployment, babysit a PR, check back on a long-running build, or remind yourself to do something later in the session. To react to events as they happen instead of polling, see [Channels](/en/channels): your CI can push the failure into the session directly. -Tasks are session-scoped: they live in the current Claude Code process and are gone when you exit. For durable scheduling that survives restarts and runs without an active terminal session, see [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks) or [GitHub Actions](/en/github-actions). +Tasks are session-scoped: they live in the current Claude Code process and are gone when you exit. For durable scheduling that survives restarts, use [Cloud](/en/web-scheduled-tasks) or [Desktop](/en/desktop#schedule-recurring-tasks) scheduled tasks, or [GitHub Actions](/en/github-actions). + +## Compare scheduling options + +Claude Code offers three ways to schedule recurring work: + +| | [Cloud](/en/web-scheduled-tasks) | [Desktop](/en/desktop#schedule-recurring-tasks) | [`/loop`](/en/scheduled-tasks) | +| :------------------------- | :------------------------------- | :---------------------------------------------- | :----------------------------- | +| Runs on | Anthropic cloud | Your machine | Your machine | +| Requires machine on | No | Yes | Yes | +| Requires open session | No | No | Yes | +| Persistent across restarts | Yes | Yes | No (session-scoped) | +| Access to local files | No (fresh clone) | Yes | Yes | +| MCP servers | Connectors configured per task | [Config files](/en/mcp) and connectors | Inherits from session | +| Permission prompts | No (runs autonomously) | Configurable per task | Inherits from session | +| Customizable schedule | Via `/schedule` in the CLI | Yes | Yes | +| Minimum interval | 1 hour | 1 minute | 1 minute | + + + Use **cloud tasks** for work that should run reliably without your machine. Use **Desktop tasks** when you need access to local files and tools. Use **`/loop`** for quick polling during a session. + ## Schedule a recurring prompt with /loop @@ -99,7 +119,7 @@ The offset is derived from the task ID, so the same task always gets the same of ### Three-day expiry -Recurring tasks automatically expire 3 days after creation. The task fires one final time, then deletes itself. This bounds how long a forgotten loop can run. If you need a recurring task to last longer, cancel and recreate it before it expires, or use [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks) for durable scheduling. +Recurring tasks automatically expire 3 days after creation. The task fires one final time, then deletes itself. This bounds how long a forgotten loop can run. If you need a recurring task to last longer, cancel and recreate it before it expires, or use [Cloud scheduled tasks](/en/web-scheduled-tasks) or [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks) for durable scheduling. ## Cron expression reference @@ -130,4 +150,8 @@ Session-scoped scheduling has inherent constraints: * No catch-up for missed fires. If a task's scheduled time passes while Claude is busy on a long-running request, it fires once when Claude becomes idle, not once per missed interval. * No persistence across restarts. Restarting Claude Code clears all session-scoped tasks. -For cron-driven automation that needs to run unattended, use a [GitHub Actions workflow](/en/github-actions) with a `schedule` trigger, or [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks) if you want a graphical setup flow. +For cron-driven automation that needs to run unattended: + +* [Cloud scheduled tasks](/en/web-scheduled-tasks): run on Anthropic-managed infrastructure +* [GitHub Actions](/en/github-actions): use a `schedule` trigger in CI +* [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks): run locally on your machine diff --git a/content/en/docs/claude-code/web-scheduled-tasks.md b/content/en/docs/claude-code/web-scheduled-tasks.md new file mode 100644 index 00000000..9b2ac947 --- /dev/null +++ b/content/en/docs/claude-code/web-scheduled-tasks.md @@ -0,0 +1,154 @@ +> ## Documentation Index +> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt +> Use this file to discover all available pages before exploring further. + +# Schedule tasks on the web + +> Automate recurring work with cloud scheduled tasks + +A scheduled task runs a prompt on a recurring cadence using Anthropic-managed infrastructure. Tasks keep working even when your computer is off. + +A few examples of recurring work you can automate: + +* Reviewing open pull requests each morning +* Analyzing CI failures overnight and surfacing summaries +* Syncing documentation after PRs merge +* Running dependency audits every week + +Scheduled tasks are available to all Claude Code on the web users, including Pro, Max, Team, and Enterprise. + +## Compare scheduling options + +Claude Code offers three ways to schedule recurring work: + +| | [Cloud](/en/web-scheduled-tasks) | [Desktop](/en/desktop#schedule-recurring-tasks) | [`/loop`](/en/scheduled-tasks) | +| :------------------------- | :------------------------------- | :---------------------------------------------- | :----------------------------- | +| Runs on | Anthropic cloud | Your machine | Your machine | +| Requires machine on | No | Yes | Yes | +| Requires open session | No | No | Yes | +| Persistent across restarts | Yes | Yes | No (session-scoped) | +| Access to local files | No (fresh clone) | Yes | Yes | +| MCP servers | Connectors configured per task | [Config files](/en/mcp) and connectors | Inherits from session | +| Permission prompts | No (runs autonomously) | Configurable per task | Inherits from session | +| Customizable schedule | Via `/schedule` in the CLI | Yes | Yes | +| Minimum interval | 1 hour | 1 minute | 1 minute | + + + Use **cloud tasks** for work that should run reliably without your machine. Use **Desktop tasks** when you need access to local files and tools. Use **`/loop`** for quick polling during a session. + + +## Create a scheduled task + +You can create a scheduled task from three places: + +* **Web**: visit [claude.ai/code/scheduled](https://claude.ai/code/scheduled) and click **New scheduled task** +* **Desktop app**: open the **Schedule** page, click **New task**, and choose **New remote task**. See [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks) for details. +* **CLI**: run `/schedule` in any session. Claude walks you through the setup conversationally. You can also pass a description directly, like `/schedule daily PR review at 9am`. + +The web and Desktop entry points open a form. The CLI collects the same information through a guided conversation. + +The steps below walk through the web interface. + + + + Visit [claude.ai/code/scheduled](https://claude.ai/code/scheduled) and click **New scheduled task**. + + + + Give the task a descriptive name and write the prompt Claude runs each time. The prompt is the most important part: the task runs autonomously, so the prompt must be self-contained and explicit about what to do and what success looks like. + + The prompt input includes a model selector. Claude uses this model for each run of the task. + + + + Add one or more GitHub repositories for Claude to work in. Each repository is cloned at the start of a run, starting from the default branch. Claude creates `claude/`-prefixed branches for its changes. To allow pushes to any branch, enable **Allow unrestricted branch pushes** for that repository. + + + + Select a [cloud environment](/en/claude-code-on-the-web#cloud-environment) for the task. Environments control what the cloud session has access to: + + * **Network access**: set the level of internet access available during each run + * **Environment variables**: provide API keys, tokens, or other secrets Claude can use + * **Setup script**: run install commands before each session starts, like installing dependencies or configuring tools + + A **Default** environment is available out of the box. To use a custom environment, [create one](/en/claude-code-on-the-web#cloud-environment) before creating the task. + + + + Pick how often the task runs from the [frequency options](#frequency-options). The default is daily at 9:00 AM in your local time zone. Tasks may run a few minutes after their scheduled time due to stagger. + + If the preset options don't fit your needs, pick the closest one and update the schedule from the CLI with `/schedule update` to set a specific schedule. + + + + All of your connected [MCP connectors](/en/mcp) are included by default. Remove any that the task doesn't need. Connectors give Claude access to external services like Slack, Linear, or Google Drive during each run. + + + + Click **Create**. The task appears in the scheduled tasks list and runs automatically at the next scheduled time. Each run creates a new session alongside your other sessions, where you can see what Claude did, review changes, and create a pull request. To trigger a run immediately, click **Run now** from the task's detail page. + + + +### Frequency options + +The schedule picker offers preset frequencies that handle time zone conversion for you. Pick a time in your local zone and the task runs at that wall-clock time regardless of where the cloud infrastructure is located. + + + Tasks may run a few minutes after their scheduled time. The offset is consistent for each task. + + +| Frequency | Description | +| :-------- | :------------------------------------------------------------------------- | +| Hourly | Runs every hour. | +| Daily | Runs once per day at the time you specify. Defaults to 9:00 AM local time. | +| Weekdays | Same as Daily but skips Saturday and Sunday. | +| Weekly | Runs once per week on the day and time you specify. | + +For custom intervals like every 2 hours or first of each month, pick the closest preset and update the schedule from the CLI with `/schedule update` to set a specific schedule. + +### Repositories and branch permissions + +Each repository you add is cloned on every run. Claude starts from the repository's default branch unless your prompt specifies otherwise. + +By default, Claude can only push to branches prefixed with `claude/`. This prevents scheduled tasks from accidentally modifying protected or long-lived branches. + +To remove this restriction for a specific repository, enable **Allow unrestricted branch pushes** for that repository when creating or editing the task. + +### Connectors + +Scheduled tasks can use your connected MCP connectors to read from and write to external services during each run. For example, a task that triages support requests might read from a Slack channel and create issues in Linear. + +When you create a task, all of your currently connected connectors are included by default. Remove any that aren't needed to limit which tools Claude has access to during the run. You can also add connectors directly from the task form. + +To manage or add connectors outside of the task form, visit **Settings > Connectors** on claude.ai or use `/schedule update` in the CLI. + +### Environments + +Each task runs in a [cloud environment](/en/claude-code-on-the-web#cloud-environment) that controls network access, environment variables, and setup scripts. Configure environments before creating a task to give Claude access to APIs, install dependencies, or restrict network scope. See [cloud environment](/en/claude-code-on-the-web#cloud-environment) for the full setup guide. + +## Manage scheduled tasks + +Click a task in the **Scheduled** list to open its detail page. The detail page shows the task's repositories, connectors, prompt, schedule, and a list of past runs. + +### View and interact with runs + +Click any run to open it as a full session. From there you can see what Claude did, review changes, create a pull request, or continue the conversation. Each run session works like any other session: use the dropdown menu next to the session title to rename, archive, or delete it. + +### Edit and control tasks + +From the task detail page you can: + +* Click **Run now** to start a run immediately without waiting for the next scheduled time. +* Use the toggle in the **Repeats** section to pause or resume the schedule. Paused tasks keep their configuration but don't run until you re-enable them. +* Click the edit icon to change the name, prompt, schedule, repositories, environment, or connectors. +* Click the delete icon to remove the task. Past sessions created by the task remain in your session list. + +You can also manage tasks from the CLI with `/schedule`. Run `/schedule list` to see all tasks, `/schedule update` to change a task, or `/schedule run` to trigger one immediately. + +## Related resources + +* [Desktop scheduled tasks](/en/desktop#schedule-recurring-tasks): schedule tasks that run on your machine with access to local files. The Desktop app's **Schedule** page shows both local and remote tasks in the same grid. +* [`/loop` and CLI scheduled tasks](/en/scheduled-tasks): lightweight scheduling within a CLI session +* [Cloud environment](/en/claude-code-on-the-web#cloud-environment): configure the runtime environment for cloud tasks +* [MCP connectors](/en/mcp): connect external services like Slack, Linear, and Google Drive +* [GitHub Actions](/en/github-actions): run Claude in your CI pipeline on repo events