devskill 2.0.6 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/meta.ts +9 -1
- package/package.json +1 -1
- package/scripts/cli.ts +55 -10
- package/skills/algorithmic-art/LICENSE.txt +202 -0
- package/skills/algorithmic-art/SKILL.md +405 -0
- package/skills/algorithmic-art/SYNC.md +5 -0
- package/skills/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/algorithmic-art/templates/viewer.html +599 -0
- package/skills/brand-guidelines/LICENSE.txt +202 -0
- package/skills/brand-guidelines/SKILL.md +73 -0
- package/skills/brand-guidelines/SYNC.md +5 -0
- package/skills/canvas-design/LICENSE.txt +202 -0
- package/skills/canvas-design/SKILL.md +130 -0
- package/skills/canvas-design/SYNC.md +5 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/claude-api/LICENSE.txt +202 -0
- package/skills/claude-api/SKILL.md +246 -0
- package/skills/claude-api/SYNC.md +5 -0
- package/skills/claude-api/csharp/claude-api.md +400 -0
- package/skills/claude-api/curl/examples.md +193 -0
- package/skills/claude-api/go/claude-api.md +404 -0
- package/skills/claude-api/java/claude-api.md +430 -0
- package/skills/claude-api/php/claude-api.md +241 -0
- package/skills/claude-api/python/agent-sdk/README.md +345 -0
- package/skills/claude-api/python/agent-sdk/patterns.md +359 -0
- package/skills/claude-api/python/claude-api/README.md +410 -0
- package/skills/claude-api/python/claude-api/batches.md +185 -0
- package/skills/claude-api/python/claude-api/files-api.md +165 -0
- package/skills/claude-api/python/claude-api/streaming.md +162 -0
- package/skills/claude-api/python/claude-api/tool-use.md +590 -0
- package/skills/claude-api/ruby/claude-api.md +92 -0
- package/skills/claude-api/shared/error-codes.md +206 -0
- package/skills/claude-api/shared/live-sources.md +121 -0
- package/skills/claude-api/shared/models.md +119 -0
- package/skills/claude-api/shared/tool-use-concepts.md +305 -0
- package/skills/claude-api/typescript/agent-sdk/README.md +296 -0
- package/skills/claude-api/typescript/agent-sdk/patterns.md +209 -0
- package/skills/claude-api/typescript/claude-api/README.md +321 -0
- package/skills/claude-api/typescript/claude-api/batches.md +106 -0
- package/skills/claude-api/typescript/claude-api/files-api.md +98 -0
- package/skills/claude-api/typescript/claude-api/streaming.md +178 -0
- package/skills/claude-api/typescript/claude-api/tool-use.md +527 -0
- package/skills/doc-coauthoring/SKILL.md +375 -0
- package/skills/doc-coauthoring/SYNC.md +5 -0
- package/skills/docx/LICENSE.txt +30 -0
- package/skills/docx/SKILL.md +590 -0
- package/skills/docx/SYNC.md +5 -0
- package/skills/docx/scripts/__init__.py +1 -0
- package/skills/docx/scripts/accept_changes.py +135 -0
- package/skills/docx/scripts/comment.py +318 -0
- package/skills/docx/scripts/office/helpers/__init__.py +0 -0
- package/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/docx/scripts/office/pack.py +159 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/docx/scripts/office/soffice.py +183 -0
- package/skills/docx/scripts/office/unpack.py +132 -0
- package/skills/docx/scripts/office/validate.py +111 -0
- package/skills/docx/scripts/office/validators/__init__.py +15 -0
- package/skills/docx/scripts/office/validators/base.py +847 -0
- package/skills/docx/scripts/office/validators/docx.py +446 -0
- package/skills/docx/scripts/office/validators/pptx.py +275 -0
- package/skills/docx/scripts/office/validators/redlining.py +247 -0
- package/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/frontend-design/SYNC.md +5 -0
- package/skills/internal-comms/LICENSE.txt +202 -0
- package/skills/internal-comms/SKILL.md +32 -0
- package/skills/internal-comms/SYNC.md +5 -0
- package/skills/internal-comms/examples/3p-updates.md +47 -0
- package/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/internal-comms/examples/faq-answers.md +30 -0
- package/skills/internal-comms/examples/general-comms.md +16 -0
- package/skills/mcp-builder/LICENSE.txt +202 -0
- package/skills/mcp-builder/SKILL.md +236 -0
- package/skills/mcp-builder/SYNC.md +5 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/next-best-practices/SKILL.md +153 -0
- package/skills/next-best-practices/SYNC.md +5 -0
- package/skills/next-best-practices/async-patterns.md +87 -0
- package/skills/next-best-practices/bundling.md +180 -0
- package/skills/next-best-practices/data-patterns.md +297 -0
- package/skills/next-best-practices/debug-tricks.md +105 -0
- package/skills/next-best-practices/directives.md +73 -0
- package/skills/next-best-practices/error-handling.md +227 -0
- package/skills/next-best-practices/file-conventions.md +140 -0
- package/skills/next-best-practices/font.md +245 -0
- package/skills/next-best-practices/functions.md +108 -0
- package/skills/next-best-practices/hydration-error.md +91 -0
- package/skills/next-best-practices/image.md +173 -0
- package/skills/next-best-practices/metadata.md +301 -0
- package/skills/next-best-practices/parallel-routes.md +287 -0
- package/skills/next-best-practices/route-handlers.md +146 -0
- package/skills/next-best-practices/rsc-boundaries.md +159 -0
- package/skills/next-best-practices/runtime-selection.md +39 -0
- package/skills/next-best-practices/scripts.md +141 -0
- package/skills/next-best-practices/self-hosting.md +371 -0
- package/skills/next-best-practices/suspense-boundaries.md +67 -0
- package/skills/next-cache-components/SKILL.md +411 -0
- package/skills/next-cache-components/SYNC.md +5 -0
- package/skills/next-upgrade/SKILL.md +50 -0
- package/skills/next-upgrade/SYNC.md +5 -0
- package/skills/pdf/LICENSE.txt +30 -0
- package/skills/pdf/SKILL.md +314 -0
- package/skills/pdf/SYNC.md +5 -0
- package/skills/pdf/forms.md +294 -0
- package/skills/pdf/reference.md +612 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
- package/skills/pdf/scripts/check_fillable_fields.py +11 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/skills/pdf/scripts/create_validation_image.py +37 -0
- package/skills/pdf/scripts/extract_form_field_info.py +122 -0
- package/skills/pdf/scripts/extract_form_structure.py +115 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/skills/pptx/LICENSE.txt +30 -0
- package/skills/pptx/SKILL.md +232 -0
- package/skills/pptx/SYNC.md +5 -0
- package/skills/pptx/editing.md +205 -0
- package/skills/pptx/pptxgenjs.md +420 -0
- package/skills/pptx/scripts/__init__.py +0 -0
- package/skills/pptx/scripts/add_slide.py +195 -0
- package/skills/pptx/scripts/clean.py +286 -0
- package/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- package/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/pptx/scripts/office/pack.py +159 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/pptx/scripts/office/soffice.py +183 -0
- package/skills/pptx/scripts/office/unpack.py +132 -0
- package/skills/pptx/scripts/office/validate.py +111 -0
- package/skills/pptx/scripts/office/validators/__init__.py +15 -0
- package/skills/pptx/scripts/office/validators/base.py +847 -0
- package/skills/pptx/scripts/office/validators/docx.py +446 -0
- package/skills/pptx/scripts/office/validators/pptx.py +275 -0
- package/skills/pptx/scripts/office/validators/redlining.py +247 -0
- package/skills/pptx/scripts/thumbnail.py +289 -0
- package/skills/shadcn/LICENSE.md +21 -0
- package/skills/shadcn/SKILL.md +242 -0
- package/skills/shadcn/SYNC.md +5 -0
- package/skills/shadcn/agents/openai.yml +5 -0
- package/skills/shadcn/assets/shadcn-small.png +0 -0
- package/skills/shadcn/assets/shadcn.png +0 -0
- package/skills/shadcn/cli.md +257 -0
- package/skills/shadcn/customization.md +202 -0
- package/skills/shadcn/evals/evals.json +47 -0
- package/skills/shadcn/mcp.md +94 -0
- package/skills/shadcn/rules/base-vs-radix.md +306 -0
- package/skills/shadcn/rules/composition.md +195 -0
- package/skills/shadcn/rules/forms.md +192 -0
- package/skills/shadcn/rules/icons.md +101 -0
- package/skills/shadcn/rules/styling.md +162 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +485 -0
- package/skills/skill-creator/SYNC.md +5 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +247 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +328 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
- package/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/skills/slack-gif-creator/SKILL.md +254 -0
- package/skills/slack-gif-creator/SYNC.md +5 -0
- package/skills/slack-gif-creator/core/easing.py +234 -0
- package/skills/slack-gif-creator/core/frame_composer.py +176 -0
- package/skills/slack-gif-creator/core/gif_builder.py +269 -0
- package/skills/slack-gif-creator/core/validators.py +136 -0
- package/skills/slack-gif-creator/requirements.txt +4 -0
- package/skills/theme-factory/LICENSE.txt +202 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/SYNC.md +5 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/vue-best-practices/SYNC.md +1 -1
- package/skills/vue-jsx-best-practices/SYNC.md +1 -1
- package/skills/vue-options-api-best-practices/SYNC.md +1 -1
- package/skills/vue-pinia-best-practices/SYNC.md +1 -1
- package/skills/vue-router-best-practices/SYNC.md +1 -1
- package/skills/vue-testing-best-practices/SYNC.md +1 -1
- package/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/web-artifacts-builder/SKILL.md +74 -0
- package/skills/web-artifacts-builder/SYNC.md +5 -0
- package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/webapp-testing/LICENSE.txt +202 -0
- package/skills/webapp-testing/SKILL.md +96 -0
- package/skills/webapp-testing/SYNC.md +5 -0
- package/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/webapp-testing/scripts/with_server.py +106 -0
- package/skills/xlsx/LICENSE.txt +30 -0
- package/skills/xlsx/SKILL.md +292 -0
- package/skills/xlsx/SYNC.md +5 -0
- package/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/xlsx/scripts/office/pack.py +159 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/xlsx/scripts/office/soffice.py +183 -0
- package/skills/xlsx/scripts/office/unpack.py +132 -0
- package/skills/xlsx/scripts/office/validate.py +111 -0
- package/skills/xlsx/scripts/office/validators/__init__.py +15 -0
- package/skills/xlsx/scripts/office/validators/base.py +847 -0
- package/skills/xlsx/scripts/office/validators/docx.py +446 -0
- package/skills/xlsx/scripts/office/validators/pptx.py +275 -0
- package/skills/xlsx/scripts/office/validators/redlining.py +247 -0
- package/skills/xlsx/scripts/recalc.py +184 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
# Agent SDK — Python
|
|
2
|
+
|
|
3
|
+
The Claude Agent SDK provides a higher-level interface for building AI agents with built-in tools, safety features, and agentic capabilities.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install claude-agent-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
import anyio
|
|
17
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
|
|
18
|
+
|
|
19
|
+
async def main():
|
|
20
|
+
async for message in query(
|
|
21
|
+
prompt="Explain this codebase",
|
|
22
|
+
options=ClaudeAgentOptions(allowed_tools=["Read", "Glob", "Grep"])
|
|
23
|
+
):
|
|
24
|
+
if isinstance(message, ResultMessage):
|
|
25
|
+
print(message.result)
|
|
26
|
+
|
|
27
|
+
anyio.run(main)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Built-in Tools
|
|
33
|
+
|
|
34
|
+
| Tool | Description |
|
|
35
|
+
| --------- | ------------------------------------ |
|
|
36
|
+
| Read | Read files in the workspace |
|
|
37
|
+
| Write | Create new files |
|
|
38
|
+
| Edit | Make precise edits to existing files |
|
|
39
|
+
| Bash | Execute shell commands |
|
|
40
|
+
| Glob | Find files by pattern |
|
|
41
|
+
| Grep | Search files by content |
|
|
42
|
+
| WebSearch | Search the web for information |
|
|
43
|
+
| WebFetch | Fetch and analyze web pages |
|
|
44
|
+
| AskUserQuestion | Ask user clarifying questions |
|
|
45
|
+
| Agent | Spawn subagents |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Primary Interfaces
|
|
50
|
+
|
|
51
|
+
### `query()` — Simple One-Shot Usage
|
|
52
|
+
|
|
53
|
+
The `query()` function is the simplest way to run an agent. It returns an async iterator of messages.
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
|
|
57
|
+
|
|
58
|
+
async for message in query(
|
|
59
|
+
prompt="Explain this codebase",
|
|
60
|
+
options=ClaudeAgentOptions(allowed_tools=["Read", "Glob", "Grep"])
|
|
61
|
+
):
|
|
62
|
+
if isinstance(message, ResultMessage):
|
|
63
|
+
print(message.result)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### `ClaudeSDKClient` — Full Control
|
|
67
|
+
|
|
68
|
+
`ClaudeSDKClient` provides full control over the agent lifecycle. Use it when you need custom tools, hooks, streaming, or the ability to interrupt execution.
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
import anyio
|
|
72
|
+
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, AssistantMessage, TextBlock
|
|
73
|
+
|
|
74
|
+
async def main():
|
|
75
|
+
options = ClaudeAgentOptions(allowed_tools=["Read", "Glob", "Grep"])
|
|
76
|
+
async with ClaudeSDKClient(options=options) as client:
|
|
77
|
+
await client.query("Explain this codebase")
|
|
78
|
+
async for message in client.receive_response():
|
|
79
|
+
if isinstance(message, AssistantMessage):
|
|
80
|
+
for block in message.content:
|
|
81
|
+
if isinstance(block, TextBlock):
|
|
82
|
+
print(block.text)
|
|
83
|
+
|
|
84
|
+
anyio.run(main)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
`ClaudeSDKClient` supports:
|
|
88
|
+
|
|
89
|
+
- **Context manager** (`async with`) for automatic resource cleanup
|
|
90
|
+
- **`client.query(prompt)`** to send a prompt to the agent
|
|
91
|
+
- **`receive_response()`** for streaming messages until completion
|
|
92
|
+
- **`interrupt()`** to stop agent execution mid-task
|
|
93
|
+
- **Required for custom tools** (via SDK MCP servers)
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Permission System
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
|
|
101
|
+
|
|
102
|
+
async for message in query(
|
|
103
|
+
prompt="Refactor the authentication module",
|
|
104
|
+
options=ClaudeAgentOptions(
|
|
105
|
+
allowed_tools=["Read", "Edit", "Write"],
|
|
106
|
+
permission_mode="acceptEdits" # Auto-accept file edits
|
|
107
|
+
)
|
|
108
|
+
):
|
|
109
|
+
if isinstance(message, ResultMessage):
|
|
110
|
+
print(message.result)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Permission modes:
|
|
114
|
+
|
|
115
|
+
- `"default"`: Prompt for dangerous operations
|
|
116
|
+
- `"plan"`: Planning only, no execution
|
|
117
|
+
- `"acceptEdits"`: Auto-accept file edits
|
|
118
|
+
- `"bypassPermissions"`: Skip all prompts (use with caution)
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## MCP (Model Context Protocol) Support
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
|
|
126
|
+
|
|
127
|
+
async for message in query(
|
|
128
|
+
prompt="Open example.com and describe what you see",
|
|
129
|
+
options=ClaudeAgentOptions(
|
|
130
|
+
mcp_servers={
|
|
131
|
+
"playwright": {"command": "npx", "args": ["@playwright/mcp@latest"]}
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
):
|
|
135
|
+
if isinstance(message, ResultMessage):
|
|
136
|
+
print(message.result)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Hooks
|
|
142
|
+
|
|
143
|
+
Customize agent behavior with hooks using callback functions:
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, ResultMessage
|
|
147
|
+
|
|
148
|
+
async def log_file_change(input_data, tool_use_id, context):
|
|
149
|
+
file_path = input_data.get('tool_input', {}).get('file_path', 'unknown')
|
|
150
|
+
print(f"Modified: {file_path}")
|
|
151
|
+
return {}
|
|
152
|
+
|
|
153
|
+
async for message in query(
|
|
154
|
+
prompt="Refactor utils.py",
|
|
155
|
+
options=ClaudeAgentOptions(
|
|
156
|
+
permission_mode="acceptEdits",
|
|
157
|
+
hooks={
|
|
158
|
+
"PostToolUse": [HookMatcher(matcher="Edit|Write", hooks=[log_file_change])]
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
):
|
|
162
|
+
if isinstance(message, ResultMessage):
|
|
163
|
+
print(message.result)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Hook callback inputs for tool-lifecycle events (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`) include `agent_id` and `agent_type` fields, allowing hooks to identify which agent (main or subagent) triggered the tool call.
|
|
167
|
+
|
|
168
|
+
Available hook events: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `PreCompact`, `Notification`, `SubagentStart`, `PermissionRequest`
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Common Options
|
|
173
|
+
|
|
174
|
+
`query()` takes a top-level `prompt` (string) and an `options` object (`ClaudeAgentOptions`):
|
|
175
|
+
|
|
176
|
+
```python
|
|
177
|
+
async for message in query(prompt="...", options=ClaudeAgentOptions(...)):
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
| Option | Type | Description |
|
|
181
|
+
| ----------------------------------- | ------ | -------------------------------------------------------------------------- |
|
|
182
|
+
| `cwd` | string | Working directory for file operations |
|
|
183
|
+
| `allowed_tools` | list | Tools the agent can use (e.g., `["Read", "Edit", "Bash"]`) |
|
|
184
|
+
| `tools` | list | Built-in tools to make available (restricts the default set) |
|
|
185
|
+
| `disallowed_tools` | list | Tools to explicitly disallow |
|
|
186
|
+
| `permission_mode` | string | How to handle permission prompts |
|
|
187
|
+
| `mcp_servers` | dict | MCP servers to connect to |
|
|
188
|
+
| `hooks` | dict | Hooks for customizing behavior |
|
|
189
|
+
| `system_prompt` | string | Custom system prompt |
|
|
190
|
+
| `max_turns` | int | Maximum agent turns before stopping |
|
|
191
|
+
| `max_budget_usd` | float | Maximum budget in USD for the query |
|
|
192
|
+
| `model` | string | Model ID (default: determined by CLI) |
|
|
193
|
+
| `agents` | dict | Subagent definitions (`dict[str, AgentDefinition]`) |
|
|
194
|
+
| `output_format` | dict | Structured output schema |
|
|
195
|
+
| `thinking` | dict | Thinking/reasoning control |
|
|
196
|
+
| `betas` | list | Beta features to enable (e.g., `["context-1m-2025-08-07"]`) |
|
|
197
|
+
| `setting_sources` | list | Settings to load (e.g., `["project"]`). Default: none (no CLAUDE.md files) |
|
|
198
|
+
| `env` | dict | Environment variables to set for the session |
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Message Types
|
|
203
|
+
|
|
204
|
+
```python
|
|
205
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage, SystemMessage
|
|
206
|
+
|
|
207
|
+
async for message in query(
|
|
208
|
+
prompt="Find TODO comments",
|
|
209
|
+
options=ClaudeAgentOptions(allowed_tools=["Read", "Glob", "Grep"])
|
|
210
|
+
):
|
|
211
|
+
if isinstance(message, ResultMessage):
|
|
212
|
+
print(message.result)
|
|
213
|
+
print(f"Stop reason: {message.stop_reason}") # e.g., "end_turn", "max_turns"
|
|
214
|
+
elif isinstance(message, SystemMessage) and message.subtype == "init":
|
|
215
|
+
session_id = message.data.get("session_id") # Capture for resuming later
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Typed task message subclasses are available for better type safety when handling subagent task events:
|
|
219
|
+
- `TaskStartedMessage` — emitted when a subagent task is registered
|
|
220
|
+
- `TaskProgressMessage` — real-time progress updates with cumulative usage metrics
|
|
221
|
+
- `TaskNotificationMessage` — task completion notifications
|
|
222
|
+
|
|
223
|
+
`RateLimitEvent` is emitted when the rate limit status transitions (e.g., from `allowed` to `allowed_warning` or `rejected`). Use it to warn users or back off gracefully:
|
|
224
|
+
|
|
225
|
+
```python
|
|
226
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, RateLimitEvent
|
|
227
|
+
|
|
228
|
+
async for message in query(prompt="...", options=ClaudeAgentOptions()):
|
|
229
|
+
if isinstance(message, RateLimitEvent):
|
|
230
|
+
print(f"Rate limit status: {message.rate_limit_info.status}")
|
|
231
|
+
if message.rate_limit_info.resets_at:
|
|
232
|
+
print(f"Resets at: {message.rate_limit_info.resets_at}")
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Subagents
|
|
238
|
+
|
|
239
|
+
```python
|
|
240
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition, ResultMessage
|
|
241
|
+
|
|
242
|
+
async for message in query(
|
|
243
|
+
prompt="Use the code-reviewer agent to review this codebase",
|
|
244
|
+
options=ClaudeAgentOptions(
|
|
245
|
+
allowed_tools=["Read", "Glob", "Grep", "Agent"],
|
|
246
|
+
agents={
|
|
247
|
+
"code-reviewer": AgentDefinition(
|
|
248
|
+
description="Expert code reviewer for quality and security reviews.",
|
|
249
|
+
prompt="Analyze code quality and suggest improvements.",
|
|
250
|
+
tools=["Read", "Glob", "Grep"]
|
|
251
|
+
)
|
|
252
|
+
}
|
|
253
|
+
)
|
|
254
|
+
):
|
|
255
|
+
if isinstance(message, ResultMessage):
|
|
256
|
+
print(message.result)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Error Handling
|
|
262
|
+
|
|
263
|
+
```python
|
|
264
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, CLINotFoundError, CLIConnectionError, ResultMessage
|
|
265
|
+
|
|
266
|
+
try:
|
|
267
|
+
async for message in query(
|
|
268
|
+
prompt="...",
|
|
269
|
+
options=ClaudeAgentOptions(allowed_tools=["Read"])
|
|
270
|
+
):
|
|
271
|
+
if isinstance(message, ResultMessage):
|
|
272
|
+
print(message.result)
|
|
273
|
+
except CLINotFoundError:
|
|
274
|
+
print("Claude Code CLI not found. Install with: pip install claude-agent-sdk")
|
|
275
|
+
except CLIConnectionError as e:
|
|
276
|
+
print(f"Connection error: {e}")
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Session History
|
|
282
|
+
|
|
283
|
+
Retrieve past session data with top-level functions:
|
|
284
|
+
|
|
285
|
+
```python
|
|
286
|
+
from claude_agent_sdk import list_sessions, get_session_messages
|
|
287
|
+
|
|
288
|
+
# List all past sessions (sync function — no await)
|
|
289
|
+
sessions = list_sessions()
|
|
290
|
+
for session in sessions:
|
|
291
|
+
print(f"{session.session_id}: {session.cwd}")
|
|
292
|
+
|
|
293
|
+
# Get messages from a specific session (sync function — no await)
|
|
294
|
+
messages = get_session_messages(session_id="...")
|
|
295
|
+
for msg in messages:
|
|
296
|
+
print(msg)
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Session Mutations
|
|
300
|
+
|
|
301
|
+
Rename or tag sessions (sync functions — no await):
|
|
302
|
+
|
|
303
|
+
```python
|
|
304
|
+
from claude_agent_sdk import rename_session, tag_session
|
|
305
|
+
|
|
306
|
+
# Rename a session
|
|
307
|
+
rename_session(session_id="...", title="My refactoring session")
|
|
308
|
+
|
|
309
|
+
# Tag a session (tags are Unicode-sanitized automatically)
|
|
310
|
+
tag_session(session_id="...", tag="experiment")
|
|
311
|
+
|
|
312
|
+
# Clear a tag
|
|
313
|
+
tag_session(session_id="...", tag=None)
|
|
314
|
+
|
|
315
|
+
# Optionally scope to a specific project directory
|
|
316
|
+
rename_session(session_id="...", title="New title", directory="/path/to/project")
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## MCP Server Management
|
|
322
|
+
|
|
323
|
+
Manage MCP servers at runtime using `ClaudeSDKClient`:
|
|
324
|
+
|
|
325
|
+
```python
|
|
326
|
+
async with ClaudeSDKClient(options=options) as client:
|
|
327
|
+
# Reconnect a disconnected MCP server
|
|
328
|
+
await client.reconnect_mcp_server("my-server")
|
|
329
|
+
|
|
330
|
+
# Toggle an MCP server on/off
|
|
331
|
+
await client.toggle_mcp_server("my-server", enabled=False)
|
|
332
|
+
|
|
333
|
+
# Get status of all MCP servers
|
|
334
|
+
status = await client.get_mcp_status() # returns McpStatusResponse
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## Best Practices
|
|
340
|
+
|
|
341
|
+
1. **Always specify allowed_tools** — Explicitly list which tools the agent can use
|
|
342
|
+
2. **Set working directory** — Always specify `cwd` for file operations
|
|
343
|
+
3. **Use appropriate permission modes** — Start with `"default"` and only escalate when needed
|
|
344
|
+
4. **Handle all message types** — Check for `ResultMessage` to get agent output
|
|
345
|
+
5. **Limit max_turns** — Prevent runaway agents with reasonable limits
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
# Agent SDK Patterns — Python
|
|
2
|
+
|
|
3
|
+
## Basic Agent
|
|
4
|
+
|
|
5
|
+
```python
|
|
6
|
+
import anyio
|
|
7
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
|
|
8
|
+
|
|
9
|
+
async def main():
|
|
10
|
+
async for message in query(
|
|
11
|
+
prompt="Explain what this repository does",
|
|
12
|
+
options=ClaudeAgentOptions(
|
|
13
|
+
cwd="/path/to/project",
|
|
14
|
+
allowed_tools=["Read", "Glob", "Grep"]
|
|
15
|
+
)
|
|
16
|
+
):
|
|
17
|
+
if isinstance(message, ResultMessage):
|
|
18
|
+
print(message.result)
|
|
19
|
+
|
|
20
|
+
anyio.run(main)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Custom Tools
|
|
26
|
+
|
|
27
|
+
Custom tools require an MCP server. Use `ClaudeSDKClient` for full control (custom SDK MCP tools require `ClaudeSDKClient` — `query()` only supports external stdio/http MCP servers).
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
import anyio
|
|
31
|
+
from claude_agent_sdk import (
|
|
32
|
+
tool,
|
|
33
|
+
create_sdk_mcp_server,
|
|
34
|
+
ClaudeSDKClient,
|
|
35
|
+
ClaudeAgentOptions,
|
|
36
|
+
AssistantMessage,
|
|
37
|
+
TextBlock,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
@tool("get_weather", "Get the current weather for a location", {"location": str})
|
|
41
|
+
async def get_weather(args):
|
|
42
|
+
location = args["location"]
|
|
43
|
+
return {"content": [{"type": "text", "text": f"The weather in {location} is sunny and 72°F."}]}
|
|
44
|
+
|
|
45
|
+
server = create_sdk_mcp_server("weather-tools", tools=[get_weather])
|
|
46
|
+
|
|
47
|
+
async def main():
|
|
48
|
+
options = ClaudeAgentOptions(mcp_servers={"weather": server})
|
|
49
|
+
async with ClaudeSDKClient(options=options) as client:
|
|
50
|
+
await client.query("What's the weather in Paris?")
|
|
51
|
+
async for message in client.receive_response():
|
|
52
|
+
if isinstance(message, AssistantMessage):
|
|
53
|
+
for block in message.content:
|
|
54
|
+
if isinstance(block, TextBlock):
|
|
55
|
+
print(block.text)
|
|
56
|
+
|
|
57
|
+
anyio.run(main)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Hooks
|
|
63
|
+
|
|
64
|
+
### After Tool Use Hook
|
|
65
|
+
|
|
66
|
+
Log file changes after any edit:
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
import anyio
|
|
70
|
+
from datetime import datetime
|
|
71
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, ResultMessage
|
|
72
|
+
|
|
73
|
+
async def log_file_change(input_data, tool_use_id, context):
|
|
74
|
+
file_path = input_data.get('tool_input', {}).get('file_path', 'unknown')
|
|
75
|
+
with open('./audit.log', 'a') as f:
|
|
76
|
+
f.write(f"{datetime.now()}: modified {file_path}\n")
|
|
77
|
+
return {}
|
|
78
|
+
|
|
79
|
+
async def main():
|
|
80
|
+
async for message in query(
|
|
81
|
+
prompt="Refactor utils.py to improve readability",
|
|
82
|
+
options=ClaudeAgentOptions(
|
|
83
|
+
allowed_tools=["Read", "Edit", "Write"],
|
|
84
|
+
permission_mode="acceptEdits",
|
|
85
|
+
hooks={
|
|
86
|
+
"PostToolUse": [HookMatcher(matcher="Edit|Write", hooks=[log_file_change])]
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
):
|
|
90
|
+
if isinstance(message, ResultMessage):
|
|
91
|
+
print(message.result)
|
|
92
|
+
|
|
93
|
+
anyio.run(main)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Subagents
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
import anyio
|
|
102
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition, ResultMessage
|
|
103
|
+
|
|
104
|
+
async def main():
|
|
105
|
+
async for message in query(
|
|
106
|
+
prompt="Use the code-reviewer agent to review this codebase",
|
|
107
|
+
options=ClaudeAgentOptions(
|
|
108
|
+
allowed_tools=["Read", "Glob", "Grep", "Agent"],
|
|
109
|
+
agents={
|
|
110
|
+
"code-reviewer": AgentDefinition(
|
|
111
|
+
description="Expert code reviewer for quality and security reviews.",
|
|
112
|
+
prompt="Analyze code quality and suggest improvements.",
|
|
113
|
+
tools=["Read", "Glob", "Grep"]
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
):
|
|
118
|
+
if isinstance(message, ResultMessage):
|
|
119
|
+
print(message.result)
|
|
120
|
+
|
|
121
|
+
anyio.run(main)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## MCP Server Integration
|
|
127
|
+
|
|
128
|
+
### Browser Automation (Playwright)
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
import anyio
|
|
132
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
|
|
133
|
+
|
|
134
|
+
async def main():
|
|
135
|
+
async for message in query(
|
|
136
|
+
prompt="Open example.com and describe what you see",
|
|
137
|
+
options=ClaudeAgentOptions(
|
|
138
|
+
mcp_servers={
|
|
139
|
+
"playwright": {"command": "npx", "args": ["@playwright/mcp@latest"]}
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
):
|
|
143
|
+
if isinstance(message, ResultMessage):
|
|
144
|
+
print(message.result)
|
|
145
|
+
|
|
146
|
+
anyio.run(main)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Database Access (PostgreSQL)
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
import os
|
|
153
|
+
import anyio
|
|
154
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
|
|
155
|
+
|
|
156
|
+
async def main():
|
|
157
|
+
async for message in query(
|
|
158
|
+
prompt="Show me the top 10 users by order count",
|
|
159
|
+
options=ClaudeAgentOptions(
|
|
160
|
+
mcp_servers={
|
|
161
|
+
"postgres": {
|
|
162
|
+
"command": "npx",
|
|
163
|
+
"args": ["-y", "@modelcontextprotocol/server-postgres"],
|
|
164
|
+
"env": {"DATABASE_URL": os.environ["DATABASE_URL"]}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
)
|
|
168
|
+
):
|
|
169
|
+
if isinstance(message, ResultMessage):
|
|
170
|
+
print(message.result)
|
|
171
|
+
|
|
172
|
+
anyio.run(main)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Permission Modes
|
|
178
|
+
|
|
179
|
+
```python
|
|
180
|
+
import anyio
|
|
181
|
+
from claude_agent_sdk import query, ClaudeAgentOptions
|
|
182
|
+
|
|
183
|
+
async def main():
|
|
184
|
+
# Default: prompt for dangerous operations
|
|
185
|
+
async for message in query(
|
|
186
|
+
prompt="Delete all test files",
|
|
187
|
+
options=ClaudeAgentOptions(
|
|
188
|
+
allowed_tools=["Bash"],
|
|
189
|
+
permission_mode="default" # Will prompt before deleting
|
|
190
|
+
)
|
|
191
|
+
):
|
|
192
|
+
pass
|
|
193
|
+
|
|
194
|
+
# Plan: agent creates a plan before making changes
|
|
195
|
+
async for message in query(
|
|
196
|
+
prompt="Refactor the auth system",
|
|
197
|
+
options=ClaudeAgentOptions(
|
|
198
|
+
allowed_tools=["Read", "Edit"],
|
|
199
|
+
permission_mode="plan"
|
|
200
|
+
)
|
|
201
|
+
):
|
|
202
|
+
pass
|
|
203
|
+
|
|
204
|
+
# Accept edits: auto-accept file edits
|
|
205
|
+
async for message in query(
|
|
206
|
+
prompt="Refactor this module",
|
|
207
|
+
options=ClaudeAgentOptions(
|
|
208
|
+
allowed_tools=["Read", "Edit"],
|
|
209
|
+
permission_mode="acceptEdits"
|
|
210
|
+
)
|
|
211
|
+
):
|
|
212
|
+
pass
|
|
213
|
+
|
|
214
|
+
# Bypass: skip all prompts (use with caution)
|
|
215
|
+
async for message in query(
|
|
216
|
+
prompt="Set up the development environment",
|
|
217
|
+
options=ClaudeAgentOptions(
|
|
218
|
+
allowed_tools=["Bash", "Write"],
|
|
219
|
+
permission_mode="bypassPermissions"
|
|
220
|
+
)
|
|
221
|
+
):
|
|
222
|
+
pass
|
|
223
|
+
|
|
224
|
+
anyio.run(main)
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Error Recovery
|
|
230
|
+
|
|
231
|
+
```python
|
|
232
|
+
import anyio
|
|
233
|
+
from claude_agent_sdk import (
|
|
234
|
+
query,
|
|
235
|
+
ClaudeAgentOptions,
|
|
236
|
+
CLINotFoundError,
|
|
237
|
+
CLIConnectionError,
|
|
238
|
+
ProcessError,
|
|
239
|
+
ResultMessage,
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
async def run_with_recovery():
|
|
243
|
+
try:
|
|
244
|
+
async for message in query(
|
|
245
|
+
prompt="Fix the failing tests",
|
|
246
|
+
options=ClaudeAgentOptions(
|
|
247
|
+
allowed_tools=["Read", "Edit", "Bash"],
|
|
248
|
+
max_turns=10
|
|
249
|
+
)
|
|
250
|
+
):
|
|
251
|
+
if isinstance(message, ResultMessage):
|
|
252
|
+
print(message.result)
|
|
253
|
+
except CLINotFoundError:
|
|
254
|
+
print("Claude Code CLI not found. Install with: pip install claude-agent-sdk")
|
|
255
|
+
except CLIConnectionError as e:
|
|
256
|
+
print(f"Connection error: {e}")
|
|
257
|
+
except ProcessError as e:
|
|
258
|
+
print(f"Process error: {e}")
|
|
259
|
+
|
|
260
|
+
anyio.run(run_with_recovery)
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Session Resumption
|
|
266
|
+
|
|
267
|
+
```python
|
|
268
|
+
import anyio
|
|
269
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage, SystemMessage
|
|
270
|
+
|
|
271
|
+
async def main():
|
|
272
|
+
session_id = None
|
|
273
|
+
|
|
274
|
+
# First query: capture the session ID
|
|
275
|
+
async for message in query(
|
|
276
|
+
prompt="Read the authentication module",
|
|
277
|
+
options=ClaudeAgentOptions(allowed_tools=["Read", "Glob"])
|
|
278
|
+
):
|
|
279
|
+
if isinstance(message, SystemMessage) and message.subtype == "init":
|
|
280
|
+
session_id = message.data.get("session_id")
|
|
281
|
+
|
|
282
|
+
# Resume with full context from the first query
|
|
283
|
+
async for message in query(
|
|
284
|
+
prompt="Now find all places that call it", # "it" = auth module
|
|
285
|
+
options=ClaudeAgentOptions(resume=session_id)
|
|
286
|
+
):
|
|
287
|
+
if isinstance(message, ResultMessage):
|
|
288
|
+
print(message.result)
|
|
289
|
+
|
|
290
|
+
anyio.run(main)
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Session History
|
|
296
|
+
|
|
297
|
+
```python
|
|
298
|
+
from claude_agent_sdk import list_sessions, get_session_messages
|
|
299
|
+
|
|
300
|
+
# List past sessions (sync function — no await)
|
|
301
|
+
sessions = list_sessions()
|
|
302
|
+
for session in sessions:
|
|
303
|
+
print(f"Session {session.session_id} in {session.cwd}")
|
|
304
|
+
|
|
305
|
+
# Retrieve messages from the most recent session (sync function — no await)
|
|
306
|
+
if sessions:
|
|
307
|
+
messages = get_session_messages(session_id=sessions[0].session_id)
|
|
308
|
+
for msg in messages:
|
|
309
|
+
print(msg)
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Session Mutations
|
|
315
|
+
|
|
316
|
+
```python
|
|
317
|
+
from claude_agent_sdk import rename_session, tag_session
|
|
318
|
+
|
|
319
|
+
session_id = "your-session-id"
|
|
320
|
+
|
|
321
|
+
# Rename a session
|
|
322
|
+
rename_session(session_id=session_id, title="Refactoring auth module")
|
|
323
|
+
|
|
324
|
+
# Tag a session for filtering
|
|
325
|
+
tag_session(session_id=session_id, tag="experiment-v2")
|
|
326
|
+
|
|
327
|
+
# Clear a tag
|
|
328
|
+
tag_session(session_id=session_id, tag=None)
|
|
329
|
+
|
|
330
|
+
# Scope to a specific project directory
|
|
331
|
+
rename_session(session_id=session_id, title="New title", directory="/path/to/project")
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## Custom System Prompt
|
|
337
|
+
|
|
338
|
+
```python
|
|
339
|
+
import anyio
|
|
340
|
+
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
|
|
341
|
+
|
|
342
|
+
async def main():
|
|
343
|
+
async for message in query(
|
|
344
|
+
prompt="Review this code",
|
|
345
|
+
options=ClaudeAgentOptions(
|
|
346
|
+
allowed_tools=["Read", "Glob", "Grep"],
|
|
347
|
+
system_prompt="""You are a senior code reviewer focused on:
|
|
348
|
+
1. Security vulnerabilities
|
|
349
|
+
2. Performance issues
|
|
350
|
+
3. Code maintainability
|
|
351
|
+
|
|
352
|
+
Always provide specific line numbers and suggestions for improvement."""
|
|
353
|
+
)
|
|
354
|
+
):
|
|
355
|
+
if isinstance(message, ResultMessage):
|
|
356
|
+
print(message.result)
|
|
357
|
+
|
|
358
|
+
anyio.run(main)
|
|
359
|
+
```
|