Follow Discord
Sweep 22 Oct 2026 · 21:04Z Build v2.1.309 528 read Stable v2.1.308 Latest v2.1.309 Next v2.1.309 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One change · api

skills-guide changedbuild-with-claude/skills-guide

Nearest release: v2.1.309, published 3 hours before this site recorded the change. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.

Recorded here
Lines+19added
Lines−18removed
From line 257 where the diff opens
First seen 14 Aug 2026 this site's first read of the page
Recorded edits23to this page, all time

The whole hunk

from line 257, old and new numbered
/
lines
from line 257
257257 messages: [
258258 ['role' => 'user', 'content' => 'Create a presentation about renewable energy']
259259 ],
260 model: 'claude-opus-5-5',
260 model: Model::CLAUDE_OPUS_5_5,
261261 container: [
262262 'skills' => [
263263 [
from line 616
616616 );
617617 
618618 // Step 2: Extract file IDs from the response
619 function extractFileIds($response) {
619 function extractFileIds($response)
620 {
620621 $fileIds = [];
621622 foreach ($response->content as $item) {
622623 if ($item->type === 'bash_code_execution_tool_result') {
from line 2071
20702071 
20712072 var skill = await client.Skills.Create(parameters);
20722073 
2073 // Option 2: Using individual files (path-qualified filenames preserve the Skill's directory layout)
2074 // Option 2: Using individual files (path-qualified file names preserve the Skill's directory layout)
20742075 var parameters2 = new SkillCreateParams
20752076 {
20762077 Files =
from line 2161
21602161 
21612162 Skill skill = client.skills().create(params);
21622163 
2163 // Option 2: Using individual files (path-qualified filenames preserve the Skill's directory layout)
2164 // Option 2: Using individual files (path-qualified file names preserve the Skill's directory layout)
21642165 SkillCreateParams params2 = SkillCreateParams.builder()
21652166 .addFile(MultipartField.<InputStream>builder()
21662167 .value(Files.newInputStream(Path.of("financial_skill/SKILL.md")))
from line 2507
25062507 
25072508### Deleting a Skill
25082509 
2509Deleting a Skill also removes all of its versions.
2510Deleting a Skill also deletes all of its versions.
25102511 
25112512<CodeGroup>
25122513 ```bash cURL
from line 3540
35393540 
35403541### Request limits
35413542 
3542* **Maximum Skills per request:** 20
3543* **Maximum Skills for each request:** 20
35433544 
35443545* **Maximum Skill upload size:** 30 MB (all files combined, uncompressed)
35453546 
from line 3886
38853886 "tools": [{"type": "code_execution_20250825", "name": "code_execution"}]
38863887 }'
38873888 
3888 # Changing the Skills list ([xlsx] vs [xlsx, pptx]) changes the prefix: a cache miss, while an identical list is a cache hit
3889 # Changing the Skills list ([xlsx] versus [xlsx, pptx]) changes the prefix: a cache miss, whereas an identical list is a cache hit
38893890 curl https://api.anthropic.com/v1/messages \
38903891 -H "x-api-key: $ANTHROPIC_API_KEY" \
38913892 -H "anthropic-version: 2023-06-01" \
from line 3923
39223923 name: code_execution
39233924 YAML
39243925 
3925 # Changing the Skills list ([xlsx] vs [xlsx, pptx]) changes the prefix: a cache miss, while an identical list is a cache hit
3926 # Changing the Skills list ([xlsx] versus [xlsx, pptx]) changes the prefix: a cache miss, whereas an identical list is a cache hit
39263927 ant messages create <<'YAML'
39273928 model: claude-opus-5-5
39283929 max_tokens: 4096
from line 3958
39573958 tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
39583959 )
39593960 
3960 # Changing the Skills list ([xlsx] vs [xlsx, pptx]) changes the prefix: a cache miss, while an identical list is a cache hit
3961 # Changing the Skills list ([xlsx] versus [xlsx, pptx]) changes the prefix: a cache miss, whereas an identical list is a cache hit
39613962 response2 = client.messages.create(
39623963 model="claude-opus-5-5",
39633964 max_tokens=4096,
from line 3991
39903991 tools: [{ type: "code_execution_20250825", name: "code_execution" }]
39913992 });
39923993 
3993 // Changing the Skills list ([xlsx] vs [xlsx, pptx]) changes the prefix: a cache miss, while an identical list is a cache hit
3994 // Changing the Skills list ([xlsx] versus [xlsx, pptx]) changes the prefix: a cache miss, whereas an identical list is a cache hit
39943995 const response2 = await client.messages.create({
39953996 model: "claude-opus-5-5",
39963997 max_tokens: 4096,
from line 4033
40324033 var response1 = await client.Messages.Create(parameters1);
40334034 Console.WriteLine(response1);
40344035 
4035 // Different Skill set ([xlsx] vs [xlsx, pptx]) = a different prefix: a cache miss (an identical set is a cache hit)
4036 // Changing the Skills list ([xlsx] versus [xlsx, pptx]) changes the prefix: a cache miss, whereas an identical list is a cache hit
40364037 var parameters2 = new MessageCreateParams
40374038 {
40384039 Model = Model.ClaudeOpus5_5,
from line 4094
40934094 }
40944095 fmt.Println(response1)
40954096 
4096 // Changing the Skills list ([xlsx] vs [xlsx, pptx]) changes the prefix: a cache miss, while an identical list is a cache hit
4097 // Changing the Skills list ([xlsx] versus [xlsx, pptx]) changes the prefix: a cache miss, whereas an identical list is a cache hit
40974098 response2, err := client.Messages.New(context.TODO(), anthropic.MessageNewParams{
40984099 Model: anthropic.ModelClaudeOpus5_5,
40994100 MaxTokens: 4096,
from line 4155
41544155 Message response1 = client.messages().create(params1);
41554156 System.out.println(response1);
41564157 
4157 // Changing the Skills list ([xlsx] vs [xlsx, pptx]) changes the prefix: a cache miss, while an identical list is a cache hit
4158 // Changing the Skills list ([xlsx] versus [xlsx, pptx]) changes the prefix: a cache miss, whereas an identical list is a cache hit
41584159 MessageCreateParams params2 = MessageCreateParams.builder()
41594160 .model(Model.CLAUDE_OPUS_5_5)
41604161 .maxTokens(4096L)
from line 4191
41904191 messages: [
41914192 ['role' => 'user', 'content' => 'Analyze sales data']
41924193 ],
4193 model: 'claude-opus-5-5',
4194 model: Model::CLAUDE_OPUS_5_5,
41944195 container: [
41954196 'skills' => [
41964197 ['type' => 'anthropic', 'skillID' => 'xlsx', 'version' => 'latest']
from line 4203
42024203 );
42034204 echo $response1;
42044205 
4205 // Changing the Skills list ([xlsx] vs [xlsx, pptx]) changes the prefix: a cache miss, while an identical list is a cache hit
4206 // Changing the Skills list ([xlsx] versus [xlsx, pptx]) changes the prefix: a cache miss, whereas an identical list is a cache hit
42064207 $response2 = $client->messages->create(
42074208 maxTokens: 4096,
42084209 messages: [
42094210 ['role' => 'user', 'content' => 'Create a presentation']
42104211 ],
4211 model: 'claude-opus-5-5',
4212 model: Model::CLAUDE_OPUS_5_5,
42124213 container: [
42134214 'skills' => [
42144215 ['type' => 'anthropic', 'skillID' => 'xlsx', 'version' => 'latest'],
from line 4238
42374238 )
42384239 puts response1
42394240 
4240 # Changing the Skills list ([xlsx] vs [xlsx, pptx]) changes the prefix: a cache miss, while an identical list is a cache hit
4241 # Changing the Skills list ([xlsx] versus [xlsx, pptx]) changes the prefix: a cache miss, whereas an identical list is a cache hit
42414242 response2 = client.messages.create(
42424243 model: Anthropic::Model::CLAUDE_OPUS_5_5,
42434244 max_tokens: 4096,
from line 4461
44604461 echo $message;
44614462 } catch (BadRequestException $e) {
44624463 if (str_contains($e->getMessage(), 'skill')) {
4463 echo "Skill error: " . $e->getMessage();
4464 echo 'Skill error: ' . $e->getMessage();
44644465 } else {
44654466 throw $e;
44664467 }
Feedback