skill-creator: Recommend Python as default language for skill scripts
Context
The built-in skill-creator skill guides users through creating new skills but doesn't recommend a script language for the scripts/ directory. Anthropic's own skill tooling (scripts/run_loop.py, scripts/pre_scan.py, scripts/stuck_detection.py, scripts/package_skill.py) is entirely Python — but users aren't guided toward this.
Problem
Without explicit guidance, Claude defaults to whichever language "feels right" based on project context — often TypeScript for web-oriented projects. This creates friction because the AI/ML ecosystem is overwhelmingly Python-first. Skills that need schema validation, LLM calls, or data processing benefit significantly from Python.
In our experience building 50+ skills, we found that TypeScript-based skill scripts created unnecessary overhead (npx tsx required) and couldn't directly leverage the Python AI toolchain (Pydantic, LiteLLM, etc.). After switching to Python-first for all new skills, development velocity and integration quality improved noticeably.
Suggestion
Add a brief note to the skill-creator's "Anatomy of a Skill" section recommending Python for scripts/:
scripts/ - Executable code (Python recommended: Pydantic for schemas,
pathlib for I/O, direct access to AI/ML ecosystem)
Why Python specifically
- Pydantic is the de-facto standard for LLM output validation (structured outputs, schema enforcement)
python3 script.pyruns directly; TypeScript requiresnpx tsx(extra dependency)- The AI/ML library ecosystem (LangChain, LiteLLM, transformers, sentence-transformers) is Python-first
- Anthropic's own skill tooling already uses Python exclusively
- Skills often need to interact with vector databases, embeddings, or LLM APIs — all Python-native
Not suggesting
This is not suggesting that TypeScript should be prohibited — just that Python should be the recommended default when a skill needs scripts. TypeScript remains appropriate for frontend-specific skills or projects where the entire stack is TypeScript.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗