Welcome to Skillware. We are building an open registry of modular, deterministic agent capabilities—skills that any compatible runtime can load. Most contributors add or improve skills, but documentation, framework fixes, tests, and good first issues are equally welcome.
This document is the single entry point for how to contribute. If you are an AI agent working on this repository, read Agent Contribution Workflow first. Human operators may use the same guide to supervise agent work.
| Section | Description |
|---|---|
| Ways to contribute | Choose your contribution type |
| Getting started | Fork, branch, install, open issues |
| Universal expectations | Standards that apply to every PR |
| Pull request process | From issue to merge |
| Skill Package Standard | Required layout for registry skills |
| Skill categories | Folder taxonomy under skills/ |
| What to avoid | Anti-patterns |
| Safety and security | High-risk skills |
| Related documents | Code of conduct, testing, templates |
Pick the path that matches your issue. Only the skill row requires the full bundle under Skill Package Standard.
| Type | What you change | Typical issue label | Before coding | Verify locally |
|---|---|---|---|---|
| New or updated skill | skills/<category>/<name>/, docs/skills/, templates |
Skill proposal, enhancement | Skill proposal or approved issue | pytest for skill + tests/test_skill_issuer.py |
| Documentation | docs/, README.md, CONTRIBUTING.md |
Documentation, good first issue | Doc issue or typo/fix issue | Links valid; tone consistent |
| Core framework | skillware/core/, tests/ |
Framework feature | Framework feature issue | pytest tests/; update usage docs if API changes |
| Bug fix | Paths named in issue | Bug report | Reproduction or failing test | Targeted test + full pytest tests/ when touching shared code |
| Good first issue | Usually docs, tests, or small fixes | Good first issue | Read acceptance criteria literally | Checklist for underlying type above |
| RFC / large change | Architecture, manifest contract, loader | RFC | Maintainer discussion on issue | Per RFC scope |
Skills remain the primary contribution we expect, but every type above should follow Getting started, Universal expectations, and Pull request process.
Check existing issues before starting work.
| Intent | Issue template |
|---|---|
| New capability in the registry | Skill proposal |
Loader, adapters, base_skill |
Framework feature |
| Incorrect behavior | Bug report |
| Large or breaking design | RFC |
Wait for maintainer feedback on non-trivial work before investing in a large PR.
Fork ARPAHLS/skillware to your GitHub account, then clone your fork:
git clone https://github.com/<your-username>/skillware.git
cd skillware
git remote add upstream https://github.com/ARPAHLS/skillware.gitgit fetch upstream
git checkout main
git pull upstream main
git checkout -b feat/issue-<number>-short-descriptionpip install -e .[dev]See TESTING.md for formatting, linting, and pytest usage.
Follow the table in Ways to contribute, then Pull request process.
These apply to all contributions, regardless of type.
Follow the Agent Code of Conduct: deterministic skill outputs, documented dependencies, no malicious or deceptive code.
- No emojis in source code, documentation, commit messages, or PR titles.
- Use Black for formatting and Flake8 for linting (see TESTING.md).
- Match existing naming, structure, and documentation tone in the files you touch.
- Change only what the issue requires. Avoid unrelated refactors or drive-by edits.
- Do not bump the package version in
pyproject.tomlunless the issue or a maintainer explicitly requests it (skill-only PRs typically do not version the framework).
- Add or update tests when behavior changes.
- Run
python -m flake8 .andpytest tests/before opening a PR. - Wait for GitHub Actions CI to pass before requesting review.
Use the pull request template. Complete the New or updated skill section only when this PR adds or changes files under skills/.
Agents must follow Agent Contribution Workflow. Human operators: approve the agent's plan before implementation, verify tests, and own the fork, commit, and PR. The operator remains responsible for the merged diff.
-
Link an issue — Reference it in the PR description (
Fixes #123orRefs #123). -
Fork and branch — Work on a feature branch, not
mainof the upstream repo. -
Implement — Use the checklist for your contribution type (Ways to contribute).
-
Verify locally:
python -m black . python -m flake8 . pytest tests/
For skill work, also run:
pytest skills/<category>/<skill_name>/test_skill.py pytest tests/test_skill_issuer.py
-
Commit — Clear imperative message, no emojis; include issue reference when appropriate.
-
Push to your fork and open a PR into
ARPAHLS/skillwaremain. -
CI — Ensure checks pass; address review feedback on the same branch.
- Copy or align with
templates/python_skill/. - Create
skills/<category>/<skill_name>/with the full bundle (see Skill Package Standard). - Add
docs/skills/<skill_name>.mdand a row in docs/skills/README.md. - Confirm
SkillLoader.load_skill("<category>/<skill_name>")works or document required packages and environment variables.
Every registry skill lives in skills/<category>/<skill_name>/ and must include the files below. This is the detailed standard for the skill contribution type.
Defines the tool interface, safety constitution, dependencies, and issuer attribution.
Required fields and sections:
name,version,descriptionissuer— see Issuer attributionparameters— valid JSON Schema for LLM tool callingconstitution— safety boundaries enforced at the prompt levelrequirements— when external packages are needed (for examplerequests,pandas)
Optional but common:
env_vars— API keys and configuration (never hardcode secrets inskill.py); document the same names on the skill catalog page and link to API keys for skillscategory,outputs,presentation— when they clarify the skill contract
Example:
name: generic_hello
version: 1.0.0
description: A friendly greeting skill.
issuer:
name: Your Name
email: you@example.com
github: your_github_username
org: YOUR ORG
parameters:
type: object
properties:
name:
type: string
required:
- name
constitution: |
1. Do not greet offensive names.
2. Always maintain a polite tone.
requirements:
- requests- Implement deterministic Python logic (planned: inherit from
BaseSkillwhere applicable). - Accept a dictionary of inputs; return a JSON-serializable dictionary.
- Catch internal errors and return a structured error report; do not crash the host agent.
- Do not print to stdout or stderr for normal operation.
- Do not embed open-ended LLM code generation as the skill implementation.
The primary guide for the host LLM.
- Open with context such as: "You are an agent equipped with [Skill Name]..."
- Explain when to invoke the tool.
- Explain how to interpret outputs and handle edge cases.
- Keep prompts and persona here, not in
skill.py.
- Optional but recommended for user-facing agents and catalog UIs.
- Describes UI presentation (
name,description,icon,ui_schema, and similar). - When present, include an
issuerobject that matchesmanifest.yaml(nameandemailat minimum; copygithubandorgwhen used).
- Unit tests for schema compliance and deterministic execution paths.
- Run:
pytest skills/<category>/<skill_name>/test_skill.py
Registry skills are shipped inside the skillware wheel. You do not edit pyproject.toml per skill. Instead:
- Add an empty
__init__.pyinskills/<category>/when you introduce a new category, and inskills/<category>/<skill_name>/for each new skill directory (enforced bytests/test_skill_issuer.py). - Non-Python files (
manifest.yaml,instructions.md,card.json, data files) are included automatically viaMANIFEST.inand[tool.setuptools.package-data](skills = ["**/*"]). - Confirm
SkillLoader.load_skill("<category>/<skill_name>")works from the repo root and, when changing the loader, from a cleanpip installof the built wheel.
- Human-readable documentation linked from the Skill Library.
- Include ID and Issuer near the top (for example linked GitHub handle and optional org).
- Describe capabilities, prerequisites, arguments, and limitations.
- If the skill calls external services, list its environment variables in a short table and link to API keys for skills. Do not duplicate the full setup guide on the skill page.
- Add a Usage Examples section with runnable snippets for Gemini, Claude, OpenAI, DeepSeek, and Ollama (prompt mode). Follow skill usage example template and link to usage guides and agent loops.
- Add or update the skill table in docs/skills/README.md (Skill, ID, Issuer, Description).
The manifest is the source of truth for issuer data. Use real contact details in everything under skills/—not template placeholders (Your Name, you@example.com, YOUR ORG, and similar).
| Field | Required | Notes |
|---|---|---|
issuer.name |
Yes | Display name of the contributor or maintainer |
issuer.email |
Yes | Contact email for the skill author |
issuer.github |
No | GitHub username without @ |
issuer.org |
No | GitHub organization or affiliation |
Registry-wide issuer rules are enforced in tests/test_skill_issuer.py (skills under skills/ only; templates are excluded).
Place each skill under one top-level directory under skills/. Use an existing category when it fits; propose a new category in the issue if none apply.
| Category | Purpose | Examples in registry |
|---|---|---|
compliance |
Privacy, policy, regulatory guardrails | pii_masker, mica_module, tos_evaluator |
data_engineering |
Datasets, generation, ETL-style tooling | synthetic_generator |
finance |
Blockchain, risk, financial analysis | wallet_screening |
office |
Documents, productivity | pdf_form_filler |
optimization |
Middleware, compression, efficiency | prompt_rewriter |
Skill IDs follow category/skill_name and should match the path under skills/.
- God skills — One skill that does everything; split into focused capabilities.
- Hardcoded models — Do not hide prompts in
skill.py; useinstructions.md. - Vendor lock-in — Prefer standard Python over framework-specific wrappers in skill logic.
- Environment leaks — No API keys in source; document
env_varsin the manifest. - Placeholder issuers — No template names or emails in committed registry skills.
- Unrequested version bumps — Do not change
pyproject.tomlversion in routine skill PRs.
- Skills that touch real-world assets (wallets, email, production APIs) should support a dry run or read-only mode when feasible.
- Sanitize inputs in
skill.pybefore external calls. - Respect the skill
constitutionin both code and documentation. - Malicious or deceptive contributions may be rejected and blocked from the project.
| Document | Purpose |
|---|---|
| API keys for skills | Configuring credentials for skills that call external services |
| Agent Contribution Workflow | Workflow written for contributing agents; operators supervise |
| TESTING.md | Black, Flake8, Pytest, local CI parity |
| Agent Code of Conduct | Behavioral expectations for humans and agents |
| docs/introduction.md | Architecture: Mind, Body, Conscience |
| docs/skills/README.md | Published skill catalog |
| templates/python_skill/ | Boilerplate for new skills |
| Pull request template | PR checklist |
| Security policy | Reporting vulnerabilities |
Thank you for helping make agent capabilities portable, safe, and reusable.