Starter bundle under skills/<category>/<skill_name>/. Copy this template from templates/python_skill/, then replace every placeholder before opening a PR.
Roles: Skill anatomy — Contract (manifest.yaml), Effect (skill.py), Directive (instructions.md), Assurance (test_skill.py), Presentation (card.json).
- Rename the folder to match your skill ID (e.g.
skills/finance/my_skill). - Packaging: Add empty
__init__.pyfiles inskills/<category>/(new categories only) and in your skill folder so PyPI wheels include the full bundle. List runtime packages inmanifest.yamlrequirements(PEP 508; pin with>=when the skill needs a minimum version — see Install extras), then runpython scripts/sync_extras.pyto update optional extras inpyproject.toml. manifest.yaml(Contract): Set realnameto the full registry ID (category/skill_name, matching the folder path),version,description,short_description,parameters,constitution, andissuer(name+emailrequired;github/orgoptional).SkillLoader.load_skill()warns whennamediverges from the path under registry layout; flat private layouts (skills/<skill_name>/) are not validated.skill.py(Effect): Implement deterministic logic with exactly oneBaseSkillsubclass (loaded asbundle["class"]); no LLM-generated code in the skill body. Co-located helpers (effect modules) may live in the same folder if imported only byskill.py.instructions.md(Directive): Tell the host when and how to use the tool (skill context, not host persona).card.json(Presentation): Mirrorissuerfrom the manifest; customize UI fields.test_skill.py(Assurance): Bundle test (required; enforced bytests/test_skill_issuer.py); offline, mock external services, including HTTP clients, LLM APIs, embedding/model loaders, and any first-run model downloads; runpytest skills/<category>/<skill_name>/test_skill.pyorskillware test <category>/<skill_name>. See TESTING.md.docs/skills/<skill_name>.md: Catalog page with ID, Issuer, Version, Recommended install (pip install "skillware[<category>_<skill>]"), optional Bundle layout, Usage Examples (all providers; seedocs/usage/skill_usage_template.md), and Skill history (linked GitHub contributors).docs/skills/README.md: Add a row (Skill, ID, Version, Issuer, Description).
Do not commit template placeholders (Your Name, you@example.com, YOUR ORG, etc.) under skills/—only real issuer details belong in the registry.
See Issuer org for when to set org: ARPAHLS, a contributor org, comma-separated co-affiliations, or omit.
issuer:
name: Your Name
email: you@example.com
github: your_github_username
org: YOUR ORGparam1: Description...
result: Description...