from line 250
250250 ```
251251
252252 ```php PHP
253 // The PHP SDK supports container skills only through $client->beta->messages with the skills beta.
254253 $client = new Client();
255254
256 $message = $client->beta->messages->create(
255 $message = $client->messages->create(
257256 maxTokens: 4096,
258257 messages: [
259258 ['role' => 'user', 'content' => 'Create a presentation about renewable energy']
260259 ],
261260 model: 'claude-opus-5',
262 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
263261 container: [
264262 'skills' => [
265263 [
266264 'type' => 'anthropic',
267 'skill_id' => 'pptx',
265 'skillID' => 'pptx',
268266 'version' => 'latest'
269267 ]
270268 ]
from line 387
389387 --raw-output)
390388
391389 # Step 4: Download the file using Files API
392 ant files download \
393 --file-id "$FILE_ID" \
394 --output "$FILENAME" > /dev/null
390 ant files download --file-id "$FILE_ID" --output "$FILENAME" > /dev/null
395391
396392 printf 'Downloaded: %s\n' "$FILENAME"
397393 ```
from line 663
667663 ```
668664
669665 ```php PHP
670 // The PHP SDK exposes the Files API under the beta namespace; field names can differ from other SDKs.
671 // The PHP SDK supports container skills only through $client->beta->messages with the skills beta.
672666 $client = new Client();
673667
674668 // Step 1: Use a Skill to create a file
675 $response = $client->beta->messages->create(
669 $response = $client->messages->create(
676670 maxTokens: 4096,
677671 messages: [
678672 ['role' => 'user', 'content' => 'Create an Excel file with a simple budget spreadsheet']
679673 ],
680674 model: 'claude-opus-5',
681 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
682675 container: [
683676 'skills' => [
684 ['type' => 'anthropic', 'skill_id' => 'xlsx', 'version' => 'latest']
677 ['type' => 'anthropic', 'skillID' => 'xlsx', 'version' => 'latest']
685678 ]
686679 ],
687680 tools: [
from line 700
707700
708701 // Step 3: Download the file using Files API
709702 foreach (extractFileIds($response) as $fileId) {
710 $fileMetadata = $client->beta->files->retrieveMetadata($fileId);
711 $fileContent = $client->beta->files->download($fileId);
703 $fileMetadata = $client->files->retrieveMetadata($fileId);
704 $fileContent = $client->files->download($fileId);
712705
713706 // Step 4: Save to disk
714707 file_put_contents($fileMetadata->filename, $fileContent);
from line 785
792785 --format yaml
793786
794787 # List all files
795 ant files list \
796 --transform '{filename,created_at}' \
797 --format yaml
788 ant files list --transform '{filename,created_at}' --format yaml
798789
799790 # Delete a file
800791 ant files delete --file-id "$FILE_ID" >/dev/null
from line 894
903894 ```
904895
905896 ```php PHP
906 // The PHP SDK exposes the Files API under the beta namespace; field names can differ from other SDKs.
907897 $client = new Client();
908898 $fileId = 'file_011CNha8iCJcU1wXNR6q4V8w';
909899
910900 // Get file metadata
911 $fileInfo = $client->beta->files->retrieveMetadata($fileId);
901 $fileInfo = $client->files->retrieveMetadata($fileId);
912902 echo "Filename: {$fileInfo->filename}, Size: {$fileInfo->sizeBytes} bytes\n";
913903
914904 // List files (first page)
915 $files = $client->beta->files->list();
916 foreach ($files->data as $file) {
905 foreach ($client->files->list()->getItems() as $file) {
917906 echo "{$file->filename} - {$file->createdAt->format(DATE_ATOM)}\n";
918907 }
919908
920909 // Delete a file
921 $client->beta->files->delete($fileId);
910 $client->files->delete($fileId);
922911 ```
923912
924913 ```ruby Ruby
from line 1249
12601249 ```
12611250
12621251 ```php PHP
1263 // The PHP SDK supports container skills only through $client->beta->messages with the skills beta.
12641252 $client = new Client();
12651253
1266 $response1 = $client->beta->messages->create(
1254 $response1 = $client->messages->create(
12671255 maxTokens: 4096,
12681256 messages: [
12691257 ['role' => 'user', 'content' => 'Create a sample sales dataset and analyze it']
12701258 ],
12711259 model: 'claude-opus-5',
1272 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
12731260 container: [
12741261 'skills' => [
1275 ['type' => 'anthropic', 'skill_id' => 'xlsx', 'version' => 'latest']
1262 ['type' => 'anthropic', 'skillID' => 'xlsx', 'version' => 'latest']
12761263 ]
12771264 ],
12781265 tools: [
from line 1277
12901277 ['role' => 'user', 'content' => 'What was the total revenue?']
12911278 ];
12921279
1293 $response2 = $client->beta->messages->create(
1280 $response2 = $client->messages->create(
12941281 maxTokens: 4096,
12951282 messages: $messages,
12961283 model: 'claude-opus-5',
1297 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
12981284 container: [
12991285 'id' => $response1->container->id,
13001286 'skills' => [
1301 ['type' => 'anthropic', 'skill_id' => 'xlsx', 'version' => 'latest']
1287 ['type' => 'anthropic', 'skillID' => 'xlsx', 'version' => 'latest']
13021288 ]
13031289 ],
13041290 tools: [
from line 1725
17391725 ```
17401726
17411727 ```php PHP
1742 // The PHP SDK supports container skills only through $client->beta->messages with the skills beta.
17431728 $client = new Client();
17441729
17451730 $messages = [
from line 1732
17471732 ];
17481733 $maxRetries = 10;
17491734
1750 $response = $client->beta->messages->create(
1735 $response = $client->messages->create(
17511736 maxTokens: 4096,
17521737 messages: $messages,
17531738 model: 'claude-opus-5',
1754 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
17551739 container: [
17561740 'skills' => [
17571741 [
17581742 'type' => 'custom',
1759 'skill_id' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
1743 'skillID' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
17601744 'version' => 'latest'
17611745 ]
17621746 ]
from line 1755
17711755
17721756 $messages[] = ['role' => 'assistant', 'content' => $response->content];
17731757
1774 $response = $client->beta->messages->create(
1758 $response = $client->messages->create(
17751759 maxTokens: 4096,
17761760 messages: $messages,
17771761 model: 'claude-opus-5',
1778 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
17791762 container: [
17801763 'id' => $response->container->id,
17811764 'skills' => [
17821765 [
17831766 'type' => 'custom',
1784 'skill_id' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
1767 'skillID' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
17851768 'version' => 'latest'
17861769 ]
17871770 ]
from line 2077
20942077 ```
20952078
20962079 ```php PHP
2097 // The PHP SDK supports container skills only through $client->beta->messages with the skills beta.
20982080 $client = new Client();
20992081
2100 $message = $client->beta->messages->create(
2082 $message = $client->messages->create(
21012083 maxTokens: 4096,
21022084 messages: [
21032085 ['role' => 'user', 'content' => 'Analyze sales data and create a presentation']
21042086 ],
21052087 model: 'claude-opus-5',
2106 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
21072088 container: [
21082089 'skills' => [
21092090 [
21102091 'type' => 'anthropic',
2111 'skill_id' => 'xlsx',
2092 'skillID' => 'xlsx',
21122093 'version' => 'latest'
21132094 ],
21142095 [
21152096 'type' => 'anthropic',
2116 'skill_id' => 'pptx',
2097 'skillID' => 'pptx',
21172098 'version' => 'latest'
21182099 ],
21192100 [
21202101 'type' => 'custom',
2121 'skill_id' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
2102 'skillID' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
21222103 'version' => 'latest'
21232104 ]
21242105 ]
from line 2389
24082389 ```
24092390
24102391 ```php PHP
2411 // The PHP SDK exposes the Skills API under the beta namespace; field names can differ from other SDKs.
24122392 use Anthropic\Core\FileParam;
24132393 // ...
24142394
from line 2395
24152395 $client = new Client();
24162396
24172397 // Option 1: Using a zip file
2418 $skill = $client->beta->skills->create(
2398 $skill = $client->skills->create(
24192399 files: [
2420 FileParam::fromResource(fopen('example_skill.zip', 'r'))
2400 FileParam::fromResource(fopen('example_skill.zip', 'r')),
24212401 ],
24222402 );
24232403
24242404 // Option 2: Using individual files
2425 $skill = $client->beta->skills->create(
2405 $skill = $client->skills->create(
24262406 files: [
2427 FileParam::fromResource(fopen('financial_skill/SKILL.md', 'r'), 'financial_skill/SKILL.md', 'text/markdown'),
2428 FileParam::fromResource(fopen('financial_skill/analyze.py', 'r'), 'financial_skill/analyze.py', 'text/x-python')
2407 FileParam::fromResource(
2408 fopen('financial_skill/SKILL.md', 'r'),
2409 filename: 'financial_skill/SKILL.md',
2410 contentType: 'text/markdown',
2411 ),
2412 FileParam::fromResource(
2413 fopen('financial_skill/analyze.py', 'r'),
2414 filename: 'financial_skill/analyze.py',
2415 contentType: 'text/x-python',
2416 ),
24292417 ],
24302418 );
24312419
24322420 echo "Created skill: {$skill->id}\n";
2433 echo "Latest version: {$skill->latestVersion}\n";
2421 echo "Latest version: {$skill->latestVersionID}\n";
24342422 ```
24352423
24362424 ```ruby Ruby
from line 2583
25952583 ```
25962584
25972585 ```php PHP
2598 // The PHP SDK exposes the Skills API under the beta namespace; field names can differ from other SDKs.
25992586 $client = new Client();
26002587
26012588 // List Skills (first page)
2602 $skills = $client->beta->skills->list();
2603
2604 foreach ($skills->data as $skill) {
2605 echo "{$skill->id}: {$skill->displayTitle} (source: {$skill->source})\n";
2589 foreach ($client->skills->list()->getItems() as $skill) {
2590 echo "{$skill->id}: {$skill->displayName} (source: {$skill->source->type})\n";
26062591 }
26072592
26082593 // List only custom Skills
2609 $customSkills = $client->beta->skills->list(
2594 $customSkills = $client->skills->list(
26102595 source: 'custom',
26112596 );
26122597 ```
from line 2625
26402625 ```
26412626
26422627 ```bash CLI
2643 ant skills retrieve \
2644 --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv
2628 ant skills retrieve --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv
26452629 ```
26462630
26472631 ```python Python
from line 2689
27052689 ```
27062690
27072691 ```php PHP
2708 // The PHP SDK exposes the Skills API under the beta namespace; field names can differ from other SDKs.
27092692 $client = new Client();
27102693
2711 $skill = $client->beta->skills->retrieve(
2712 skillID: 'skill_01AbCdEfGhIjKlMnOpQrStUv',
2713 );
2694 $skill = $client->skills->retrieve('skill_01AbCdEfGhIjKlMnOpQrStUv');
27142695
2715 echo "Skill: " . $skill->displayTitle . "\n";
2716 echo "Latest version: " . $skill->latestVersion . "\n";
2717 echo "Created: " . $skill->createdAt . "\n";
2696 echo "Skill: {$skill->displayName}\n";
2697 echo "Latest version: {$skill->latestVersionID}\n";
2698 echo "Created: {$skill->createdAt->format(DATE_ATOM)}\n";
27182699 ```
27192700
27202701 ```ruby Ruby
from line 2721
27402721 ```
27412722
27422723 ```bash CLI
2743 ant skills delete \
2744 --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/null
2724 ant skills delete --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/null
27452725 ```
27462726
27472727 ```python Python
from line 2763
27832763 ```
27842764
27852765 ```php PHP
2786 // The PHP SDK exposes the Skills API under the beta namespace; field names can differ from other SDKs.
27872766 $client = new Client();
27882767
2789 // In the beta namespace, a Skill's versions must be deleted before the Skill itself.
2790 $skillId = 'skill_01AbCdEfGhIjKlMnOpQrStUv';
2791 foreach ($client->beta->skills->versions->list($skillId)->pagingEachItem() as $version) {
2792 $client->beta->skills->versions->delete($version->version, skillID: $skillId);
2793 }
2794 $client->beta->skills->delete($skillId);
2768 $client->skills->delete('skill_01AbCdEfGhIjKlMnOpQrStUv');
27952769 ```
27962770
27972771 ```ruby Ruby
from line 3203
32293203 ```
32303204
32313205 ```php PHP
3232 // The PHP SDK exposes the Skills API under the beta namespace; field names can differ from other SDKs.
3233 // The PHP SDK supports container skills only through $client->beta->messages with the skills beta.
32343206 use Anthropic\Core\FileParam;
3235
32363207 // ...
3208
32373209 $client = new Client();
32383210
32393211 // Create a new version
3240 $newVersion = $client->beta->skills->versions->create(
3212 $newVersion = $client->skills->versions->create(
32413213 skillID: 'skill_01AbCdEfGhIjKlMnOpQrStUv',
32423214 files: [
3243 FileParam::fromResource(fopen('financial_skill/SKILL.md', 'r'), 'financial_skill/SKILL.md', 'text/markdown'),
3244 FileParam::fromResource(fopen('financial_skill/analyze.py', 'r'), 'financial_skill/analyze.py', 'text/x-python'),
3215 FileParam::fromResource(
3216 fopen('financial_skill/SKILL.md', 'r'),
3217 filename: 'financial_skill/SKILL.md',
3218 contentType: 'text/markdown',
3219 ),
3220 FileParam::fromResource(
3221 fopen('financial_skill/analyze.py', 'r'),
3222 filename: 'financial_skill/analyze.py',
3223 contentType: 'text/x-python',
3224 ),
32453225 ],
32463226 );
32473227
32483228 // Use specific version
3249 $response = $client->beta->messages->create(
3229 $response = $client->messages->create(
32503230 maxTokens: 4096,
32513231 messages: [['role' => 'user', 'content' => 'Use updated Skill']],
32523232 model: 'claude-opus-5',
3253 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
32543233 container: [
32553234 'skills' => [[
32563235 'type' => 'custom',
3257 'skill_id' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
3258 'version' => $newVersion->version
3236 'skillID' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
3237 'version' => $newVersion->id
32593238 ]]
32603239 ],
32613240 tools: [['type' => 'code_execution_20250825', 'name' => 'code_execution']]
from line 3242
32633242 echo $response;
32643243
32653244 // Use latest version
3266 $latestResponse = $client->beta->messages->create(
3245 $latestResponse = $client->messages->create(
32673246 maxTokens: 4096,
32683247 messages: [['role' => 'user', 'content' => 'Use latest Skill version']],
32693248 model: 'claude-opus-5',
3270 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
32713249 container: [
32723250 'skills' => [[
32733251 'type' => 'custom',
3274 'skill_id' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
3252 'skillID' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
32753253 'version' => 'latest'
32763254 ]]
32773255 ],
from line 3599
36213599 ```
36223600
36233601 ```php PHP
3624 // The PHP SDK supports container skills only through $client->beta->messages with the skills beta.
36253602 $client = new Client();
36263603
36273604 // Custom DCF analysis Skill (ID obtained from Skills API create response)
3628 $dcfSkillId = "skill_01AbCdEfGhIjKlMnOpQrStUv";
3605 $dcfSkillId = 'skill_01AbCdEfGhIjKlMnOpQrStUv';
36293606
36303607 // Use with Excel to create financial model
3631 $message = $client->beta->messages->create(
3608 $message = $client->messages->create(
36323609 maxTokens: 4096,
36333610 messages: [
36343611 ['role' => 'user', 'content' => 'Build a DCF valuation model for a SaaS company']
36353612 ],
36363613 model: 'claude-opus-5',
3637 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
36383614 container: [
36393615 'skills' => [
3640 ['type' => 'anthropic', 'skill_id' => 'xlsx', 'version' => 'latest'],
3641 ['type' => 'custom', 'skill_id' => $dcfSkillId, 'version' => 'latest']
3616 ['type' => 'anthropic', 'skillID' => 'xlsx', 'version' => 'latest'],
3617 ['type' => 'custom', 'skillID' => $dcfSkillId, 'version' => 'latest']
36423618 ]
36433619 ],
36443620 tools: [
from line 3827
38513827 $container = [
38523828 'skills' => [[
38533829 'type' => 'custom',
3854 'skill_id' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
3855 'version' => '1759178010641129'
3830 'skillID' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
3831 'version' => 'skver_01AbCdEfGhIjKlMnOpQrStUv'
38563832 ]]
38573833 ];
38583834 ```
from line 3968
39923968 $container = [
39933969 'skills' => [[
39943970 'type' => 'custom',
3995 'skill_id' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
3971 'skillID' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
39963972 'version' => 'latest'
39973973 ]]
39983974 ];
from line 4306
43304306 ```
43314307
43324308 ```php PHP
4333 // The PHP SDK supports container skills only through $client->beta->messages with the skills beta.
43344309 $client = new Client();
43354310
43364311 // Skills render into the system prompt in a fixed, cache-friendly order
4337 $response1 = $client->beta->messages->create(
4312 $response1 = $client->messages->create(
43384313 maxTokens: 4096,
43394314 messages: [
43404315 ['role' => 'user', 'content' => 'Analyze sales data']
43414316 ],
43424317 model: 'claude-opus-5',
4343 betas: [
4344 'code-execution-2025-08-25',
4345 'skills-2025-10-02',
4346 ],
43474318 container: [
43484319 'skills' => [
4349 ['type' => 'anthropic', 'skill_id' => 'xlsx', 'version' => 'latest']
4320 ['type' => 'anthropic', 'skillID' => 'xlsx', 'version' => 'latest']
43504321 ]
43514322 ],
43524323 tools: [
from line 4327
43564327 echo $response1;
43574328
43584329 // Changing the Skills list ([xlsx] vs [xlsx, pptx]) changes the prefix: a cache miss, while an identical list is a cache hit
4359 $response2 = $client->beta->messages->create(
4330 $response2 = $client->messages->create(
43604331 maxTokens: 4096,
43614332 messages: [
43624333 ['role' => 'user', 'content' => 'Create a presentation']
43634334 ],
43644335 model: 'claude-opus-5',
4365 betas: [
4366 'code-execution-2025-08-25',
4367 'skills-2025-10-02',
4368 ],
43694336 container: [
43704337 'skills' => [
4371 ['type' => 'anthropic', 'skill_id' => 'xlsx', 'version' => 'latest'],
4372 ['type' => 'anthropic', 'skill_id' => 'pptx', 'version' => 'latest']
4338 ['type' => 'anthropic', 'skillID' => 'xlsx', 'version' => 'latest'],
4339 ['type' => 'anthropic', 'skillID' => 'pptx', 'version' => 'latest']
43734340 ]
43744341 ],
43754342 tools: [
from line 4588
46214588 ```
46224589
46234590 ```php PHP
4624 // The PHP SDK supports container skills only through $client->beta->messages with the skills beta.
46254591 use Anthropic\Core\Exceptions\BadRequestException;
46264592
46274593 $client = new Client();
46284594
46294595 try {
4630 $message = $client->beta->messages->create(
4596 $message = $client->messages->create(
46314597 maxTokens: 4096,
46324598 messages: [
46334599 ['role' => 'user', 'content' => 'Process data']
46344600 ],
46354601 model: 'claude-opus-5',
4636 betas: ['code-execution-2025-08-25', 'skills-2025-10-02'],
46374602 container: [
46384603 'skills' => [
46394604 [
46404605 'type' => 'custom',
4641 'skill_id' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
4606 'skillID' => 'skill_01AbCdEfGhIjKlMnOpQrStUv',
46424607 'version' => 'latest'
46434608 ]
46444609 ]