skillware 0.5.2__tar.gz → 0.5.4__tar.gz
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.
- {skillware-0.5.2/skillware.egg-info → skillware-0.5.4}/PKG-INFO +41 -77
- {skillware-0.5.2 → skillware-0.5.4}/README.md +37 -76
- {skillware-0.5.2 → skillware-0.5.4}/pyproject.toml +6 -1
- {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/card.json +1 -1
- {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/manifest.yaml +1 -1
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/card.json +3 -2
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/manifest.yaml +1 -1
- skillware-0.5.4/skills/monitoring/kpi_gate/__init__.py +5 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/card.json +33 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/benchmarks_missing_ref.json +11 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/charter_floor_boundary.yaml +10 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/example_charter.yaml +19 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/example_snapshot.json +13 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/expected_findings.json +24 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_benchmarks_schema.json +9 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_charter_dependent_required.yaml +9 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_charter_schema.yaml +8 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_charter_unknown_denominator.yaml +9 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_charter_unknown_rule_metric.yaml +8 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_snapshot_schema.json +5 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/snapshot_empty_metrics.json +5 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/snapshot_floor_at_min.json +5 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/snapshot_floor_below_min.json +5 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/snapshot_unknown_key.json +14 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/instructions.md +97 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/kb/benchmarks_demo.json +15 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/manifest.yaml +67 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/schemas/benchmarks.schema.json +25 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/schemas/metrics.schema.json +26 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/schemas/policy.schema.json +52 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/skill.py +565 -0
- skillware-0.5.4/skills/monitoring/kpi_gate/test_skill.py +491 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/card.json +10 -2
- skillware-0.5.4/skills/security/deceptive_ui_guard/guard.py +1108 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/instructions.md +17 -12
- skillware-0.5.4/skills/security/deceptive_ui_guard/kb/allowlist_cmp.json +48 -0
- skillware-0.5.4/skills/security/deceptive_ui_guard/kb/allowlist_seo.json +24 -0
- skillware-0.5.4/skills/security/deceptive_ui_guard/kb/allowlist_sr_only.json +42 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/kb/deception_lexicon.json +36 -4
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/manifest.yaml +33 -7
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/skill.py +25 -3
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/test_skill.py +164 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/card.json +1 -1
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/manifest.yaml +1 -1
- skillware-0.5.4/skillware/__init__.py +5 -0
- skillware-0.5.4/skillware/chains.py +412 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/cli.py +502 -68
- {skillware-0.5.2 → skillware-0.5.4}/skillware/cli_mail.py +63 -31
- skillware-0.5.4/skillware/cli_theme.py +70 -0
- skillware-0.5.4/skillware/context.py +281 -0
- skillware-0.5.4/skillware/core/chains_config.py +140 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/core/config.py +74 -6
- {skillware-0.5.2 → skillware-0.5.4}/skillware/version_policy.py +4 -4
- {skillware-0.5.2 → skillware-0.5.4/skillware.egg-info}/PKG-INFO +41 -77
- {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/SOURCES.txt +38 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/requires.txt +5 -0
- skillware-0.5.4/tests/test_chains.py +125 -0
- skillware-0.5.4/tests/test_chains_config.py +40 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_cli.py +185 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_config.py +105 -1
- skillware-0.5.4/tests/test_context_and_chains_integration.py +384 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_discovery.py +31 -1
- skillware-0.5.4/tests/test_examples_smoke.py +184 -0
- skillware-0.5.4/tests/test_host_simulation_stress.py +505 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_loader.py +49 -1
- skillware-0.5.4/tests/test_skill_context.py +45 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_version_policy.py +12 -11
- skillware-0.5.2/skills/security/deceptive_ui_guard/guard.py +0 -585
- skillware-0.5.2/skillware/core/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/LICENSE +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/MANIFEST.in +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/setup.cfg +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/mica_corpus.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/creative/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/abis.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/config.yaml.example +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/data/addressbook.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/data/chains.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/data/tokens.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/workflow.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/data/api_index.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/data/terminology_map.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/entities.ftm.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/malicious_scs_2025.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/normalized_fbi_lazarus_20250722_180019.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/normalized_israel_nbctf_20250722_180019.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/normalized_uniswap_trm.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/maintenance/normalization_tool.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/maintenance/normalize_uniswap_trm.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/budget.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/data/model_pricing.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/addressbook.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/attachments.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/data/.gitignore +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/data/addressbook.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/data/config.yaml.example +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/file_ref.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/mail.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/utils.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/firewall.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/kb/confusables.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/kb/injection_patterns.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/constraints.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/crisis_gate.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/kb/corpus.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/kb/crisis_resources.json +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/kb/hard_constraints.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/kb_provider.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/resources.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/__main__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/branding/skillware_logo.png +0 -0
- {skillware-0.5.2/skillware → skillware-0.5.4/skillware/core}/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/core/base_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/core/discovery.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/core/env.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/core/extras.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/core/loader.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/core/mail_config.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware/core/ui_schema.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/dependency_links.txt +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/entry_points.txt +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/top_level.txt +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_card_ui_schema.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_extras_sync.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_github_labels.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_mail_config.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_registry_docs.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_registry_identity.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_requirements_check.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_skill_issuer.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_ui_schema.py +0 -0
- {skillware-0.5.2 → skillware-0.5.4}/tests/test_validate_params.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skillware
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.4
|
|
4
4
|
Summary: A framework for modular, self-contained AI skills.
|
|
5
5
|
Author-email: ARPA Hellenic Logical Systems <skillware-os@arpacorp.net>
|
|
6
6
|
License: MIT License
|
|
@@ -67,6 +67,8 @@ Provides-Extra: agents
|
|
|
67
67
|
Requires-Dist: google-genai; extra == "agents"
|
|
68
68
|
Requires-Dist: anthropic; extra == "agents"
|
|
69
69
|
Requires-Dist: openai; extra == "agents"
|
|
70
|
+
Provides-Extra: security-deceptive-ui-guard-render
|
|
71
|
+
Requires-Dist: playwright; extra == "security-deceptive-ui-guard-render"
|
|
70
72
|
Provides-Extra: compliance
|
|
71
73
|
Requires-Dist: google-genai; extra == "compliance"
|
|
72
74
|
Provides-Extra: creative
|
|
@@ -105,6 +107,7 @@ Requires-Dist: web3>=6.0.0; extra == "defi-evm-tx-handler"
|
|
|
105
107
|
Provides-Extra: dev-tools-issue-resolver
|
|
106
108
|
Provides-Extra: finance-uk-companies-house-handler
|
|
107
109
|
Provides-Extra: finance-wallet-screening
|
|
110
|
+
Provides-Extra: monitoring-kpi-gate
|
|
108
111
|
Provides-Extra: monitoring-token-limiter
|
|
109
112
|
Provides-Extra: office-gmail-handler
|
|
110
113
|
Provides-Extra: office-pdf-form-filler
|
|
@@ -160,20 +163,23 @@ Dynamic: license-file
|
|
|
160
163
|
|
|
161
164
|
---
|
|
162
165
|
|
|
163
|
-
**Skillware** is an open-source framework and registry for modular, actionable Agent capabilities. It
|
|
166
|
+
**Skillware** is an open-source framework and registry for modular, actionable Agent capabilities. It installs know-how for AI agents, or modular **Skills** (code, contract, and host guidance) decoupling capability from intelligence. In short, don't prompt your agents, equip them.
|
|
164
167
|
|
|
165
168
|
> "I know Kung Fu." - Neo
|
|
166
169
|
|
|
167
170
|
## Mission
|
|
168
171
|
|
|
169
|
-
|
|
172
|
+
Every new agent stack tends to reinvent tool schemas, system prompts, and safety rules. **Skillware** packages each capability as a self-contained bundle and adapts it to **Gemini**, **Claude**, **OpenAI**, **Ollama**, and other OpenAI-compatible hosts. For the full story and roadmap, see **[Vision](docs/vision.md)**.
|
|
170
173
|
|
|
171
174
|
A **Skill** in this framework provides everything an Agent needs to master a domain:
|
|
172
175
|
|
|
173
|
-
1. **
|
|
174
|
-
2. **
|
|
175
|
-
3. **
|
|
176
|
-
4. **
|
|
176
|
+
1. **Contract**: Constitution, safety boundaries, and typed I/O baked into the bundle.
|
|
177
|
+
2. **Effect**: Executable Python so agents run real work, not guess it.
|
|
178
|
+
3. **Directive**: System instructions and cognitive maps so any host uses the capability as intended.
|
|
179
|
+
4. **Assurance**: Offline tests that Effect honors Contract before a skill joins the registry.
|
|
180
|
+
5. **Interface**: Standardized tool schemas for any LLM or agent runtime.
|
|
181
|
+
|
|
182
|
+
Optional **Corpus** and **Reference** assets extend bundles when needed. Every bundled registry skill also ships **Presentation** (`card.json`) for catalog and UI metadata. Full reference: [Introduction — Skill anatomy](docs/introduction.md#skill-anatomy).
|
|
177
183
|
|
|
178
184
|
### Skill library
|
|
179
185
|
|
|
@@ -184,12 +190,10 @@ Browse capabilities by category in the [Skill library](docs/skills/README.md) or
|
|
|
184
190
|
```mermaid
|
|
185
191
|
flowchart LR
|
|
186
192
|
Registry[Registry] -->|Load| Loader[Loader]
|
|
187
|
-
Loader -->|Adapt|
|
|
188
|
-
Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
|
|
189
|
-
LogicalSystems -->|Tool Call| Host
|
|
193
|
+
Loader -->|Adapt| AnyHost["Any Host"]
|
|
190
194
|
```
|
|
191
195
|
|
|
192
|
-
Install the registry once. Skillware loads a bundle
|
|
196
|
+
Install the registry once. Skillware loads a bundle, adapts it to your host's tool format, and your app runs the agent loop (Gemini, Claude, Ollama, custom scripts, …). See the [Introduction](docs/introduction.md) for loader details, [Agent loops](docs/usage/agent_loops.md) for the execution pattern, and [Skill chaining](docs/usage/skill_chaining.md) for multi-skill sessions (`SkillContext`, named `chains:`).
|
|
193
197
|
|
|
194
198
|
## Architecture
|
|
195
199
|
|
|
@@ -204,15 +208,18 @@ Skillware/
|
|
|
204
208
|
├── skills/ # Skill Registry
|
|
205
209
|
│ └── category/ # Domain boundaries (e.g., finance)
|
|
206
210
|
│ └── skill_name/ # The Skill bundle
|
|
207
|
-
│ ├── manifest.yaml #
|
|
208
|
-
│ ├── skill.py #
|
|
209
|
-
│ ├── instructions.md #
|
|
210
|
-
│ ├── card.json #
|
|
211
|
-
│ └── test_skill.py #
|
|
211
|
+
│ ├── manifest.yaml # Contract: schema, constitution, issuer
|
|
212
|
+
│ ├── skill.py # Effect: deterministic execution
|
|
213
|
+
│ ├── instructions.md # Directive: host guidance
|
|
214
|
+
│ ├── card.json # Presentation: catalog / UI metadata
|
|
215
|
+
│ └── test_skill.py # Assurance (required for registry skills)
|
|
212
216
|
├── skillware/ # Core Framework Package
|
|
213
217
|
│ ├── cli.py # Command-line interface
|
|
218
|
+
│ ├── context.py # SkillContext — multi-skill registry host context
|
|
219
|
+
│ ├── chains.py # Named skill chain runner (run_chain, validate_chain)
|
|
214
220
|
│ └── core/
|
|
215
221
|
│ ├── base_skill.py # Abstract Base Class for skills
|
|
222
|
+
│ ├── chains_config.py # chains: YAML parsing
|
|
216
223
|
│ ├── env.py # Environment Management
|
|
217
224
|
│ └── loader.py # Universal Skill Loader and Model Adapter
|
|
218
225
|
├── templates/ # Boilerplate templates for new skills
|
|
@@ -253,20 +260,9 @@ skillware list
|
|
|
253
260
|
skillware paths
|
|
254
261
|
```
|
|
255
262
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
the
|
|
259
|
-
`.skillware.yaml` or global config: project → external → bundled by default),
|
|
260
|
-
tier labels, and shadowing. **Bundled registry skills from `pip install skillware`
|
|
261
|
-
are always available** — an empty or missing local `skills/` folder does not
|
|
262
|
-
disable them. Running `skillware` with no arguments opens the interactive menu.
|
|
263
|
-
As optional checks you can also run `skillware test` to execute bundle tests,
|
|
264
|
-
and `skillware examples` to browse the runnable example index (fetched from
|
|
265
|
-
GitHub when no local `examples/README.md` is present).
|
|
266
|
-
|
|
267
|
-
If `skillware` is not recognized, Python's `Scripts` directory may not be on
|
|
268
|
-
your PATH — use `python -m skillware list` as a fallback. See
|
|
269
|
-
[CLI Reference](docs/usage/cli.md#running-the-cli) for details.
|
|
263
|
+
You should see a table of bundled registry skills and a paths summary confirming install and discovery. **Bundled skills from `pip install skillware` are always available** — an empty local `skills/` folder does not disable them.
|
|
264
|
+
|
|
265
|
+
For path tiers, shadowing, config files, and the interactive menu, see [CLI — paths & tiers](docs/usage/cli.md#skillware-paths), [CLI — config](docs/usage/cli.md#skillware-config), and [Finding skills on disk](docs/usage/README.md#finding-skills-on-disk). If `skillware` is not on your PATH, use `python -m skillware list` ([CLI Reference](docs/usage/cli.md#running-the-cli)).
|
|
270
266
|
|
|
271
267
|
### 3. Configuration
|
|
272
268
|
|
|
@@ -292,83 +288,51 @@ Edit `.env` with agent keys (for example Gemini) and any keys your skills need.
|
|
|
292
288
|
|
|
293
289
|
### 4. Usage Example (Gemini)
|
|
294
290
|
|
|
295
|
-
|
|
291
|
+
Requires `pip install "skillware[gemini]"` (dev: `pip install -e ".[gemini]"`) and `GOOGLE_API_KEY`. The skill itself is offline — no skill API keys. For setup details see [Gemini usage guide](docs/usage/gemini.md). Multi-turn loops: [Agent loops](docs/usage/agent_loops.md).
|
|
296
292
|
|
|
297
293
|
```python
|
|
298
|
-
import os
|
|
299
294
|
import google.genai as genai
|
|
300
295
|
from google.genai import types
|
|
301
296
|
from skillware.core.loader import SkillLoader
|
|
302
|
-
from skillware.core.env import load_env_file
|
|
303
297
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
# 1. Load the Skill from the Registry
|
|
308
|
-
# The loader reads the code, manifest, and instructions automatically
|
|
309
|
-
skill_bundle = SkillLoader.load_skill("finance/wallet_screening")
|
|
310
|
-
skill = skill_bundle["class"](
|
|
311
|
-
config={"ETHERSCAN_API_KEY": os.environ.get("ETHERSCAN_API_KEY")}
|
|
312
|
-
)
|
|
313
|
-
# Or: skill = skill_bundle["module"].WalletScreeningSkill(config={...})
|
|
298
|
+
bundle = SkillLoader.load_skill("monitoring/token_limiter")
|
|
299
|
+
skill = bundle["class"]()
|
|
300
|
+
tool = SkillLoader.to_gemini_tool(bundle)
|
|
314
301
|
|
|
315
|
-
# 2. Client & Tool Setup
|
|
316
302
|
client = genai.Client()
|
|
317
|
-
tool = SkillLoader.to_gemini_tool(skill_bundle) # The "Adapter"
|
|
318
|
-
system_instruction = skill_bundle['instructions'] # The "Mind"
|
|
319
|
-
|
|
320
|
-
# 3. Agent Loop
|
|
321
303
|
response = client.models.generate_content(
|
|
322
304
|
model="gemini-2.5-flash",
|
|
323
|
-
contents=
|
|
305
|
+
contents=(
|
|
306
|
+
"Check token budget for task_id demo_run: "
|
|
307
|
+
"current_token_count 95000, max_allowed_tokens 100000."
|
|
308
|
+
),
|
|
324
309
|
config=types.GenerateContentConfig(
|
|
325
310
|
tools=[tool],
|
|
326
|
-
system_instruction=
|
|
311
|
+
system_instruction=bundle["instructions"],
|
|
327
312
|
),
|
|
328
313
|
)
|
|
329
314
|
|
|
330
315
|
for part in response.candidates[0].content.parts:
|
|
331
316
|
if part.function_call:
|
|
332
|
-
|
|
333
|
-
follow_up = client.models.generate_content(
|
|
334
|
-
model="gemini-2.5-flash",
|
|
335
|
-
contents=[
|
|
336
|
-
"Use this tool result to answer the original request.",
|
|
337
|
-
{
|
|
338
|
-
"function_response": {
|
|
339
|
-
"name": part.function_call.name,
|
|
340
|
-
"response": {"result": result},
|
|
341
|
-
}
|
|
342
|
-
},
|
|
343
|
-
],
|
|
344
|
-
config=types.GenerateContentConfig(
|
|
345
|
-
tools=[tool],
|
|
346
|
-
system_instruction=system_instruction,
|
|
347
|
-
),
|
|
348
|
-
)
|
|
349
|
-
print(follow_up.text)
|
|
317
|
+
print(skill.execute(dict(part.function_call.args)))
|
|
350
318
|
else:
|
|
351
319
|
print(part.text)
|
|
352
320
|
```
|
|
353
321
|
|
|
354
|
-
For other providers and
|
|
322
|
+
For other providers and integration patterns, see the [usage guides](docs/usage/README.md).
|
|
355
323
|
|
|
356
324
|
## Documentation
|
|
357
325
|
|
|
358
326
|
| Topic | Links |
|
|
359
327
|
| :--- | :--- |
|
|
360
328
|
| **Introduction** | [Introduction](docs/introduction.md) · [Vision](docs/vision.md) · [Comparison](COMPARISON.md) |
|
|
361
|
-
| **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [OpenAI-compatible hosts](docs/usage/openai_compatible.md) · [Install extras](docs/usage/install_extras.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
|
|
329
|
+
| **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [Skill chaining](docs/usage/skill_chaining.md) · [OpenAI-compatible hosts](docs/usage/openai_compatible.md) · [Install extras](docs/usage/install_extras.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
|
|
362
330
|
| **Security** | [Skill trust model](docs/security/skill-trust-model.md) · [SECURITY.md](SECURITY.md) |
|
|
363
331
|
| **Contributing** | [Contributing](CONTRIBUTING.md) · [Agent Native Workflow](docs/contributing/ai_native_workflow.md) · [Testing](docs/TESTING.md) · [Changelog](CHANGELOG.md) |
|
|
364
332
|
|
|
365
333
|
## Contributing
|
|
366
334
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
Start with [Contributing](CONTRIBUTING.md) (types, skill standard, PR process), [Agent Native Workflow](docs/contributing/ai_native_workflow.md) (for autonomous and semi-autonomous agents), [Testing](docs/TESTING.md) (Black, Flake8, framework and skill pytest, pre-PR checklist), and [Changelog](CHANGELOG.md) (user-facing entries under `[Unreleased]`).
|
|
370
|
-
|
|
371
|
-
Also read the [Agent Code of Conduct](CODE_OF_CONDUCT.md). Open PRs with the [pull request template](.github/PULL_REQUEST_TEMPLATE.md) and complete only the sections that apply.
|
|
335
|
+
Skills, docs, tests, and framework fixes are welcome. Start with [Contributing](CONTRIBUTING.md), [Agent Native Workflow](docs/contributing/ai_native_workflow.md), and [Testing](docs/TESTING.md). See the [Agent Code of Conduct](CODE_OF_CONDUCT.md). Open PRs with the [pull request template](.github/PULL_REQUEST_TEMPLATE.md).
|
|
372
336
|
|
|
373
337
|
## Comparison
|
|
374
338
|
|
|
@@ -386,13 +350,13 @@ Skillware differs from the Model Context Protocol (MCP), and Agent Skills (SKILL
|
|
|
386
350
|
<a href="https://pypistats.org/packages/skillware"><img src="https://img.shields.io/badge/Stats-PyPiStats-ffdac1?style=flat-square" alt="PyPI Stats dashboard"></a>
|
|
387
351
|
<a href="https://pepy.tech/projects/skillware"><img src="https://img.shields.io/pepy/dt/skillware?style=flat-square&label=DLs%20%E2%86%93%20total&color=bbf7d0" alt="Total downloads (PePy)"></a>
|
|
388
352
|
|
|
389
|
-
PyPI download counts
|
|
353
|
+
PyPI download counts measure **install activity** from public aggregators (including CI and mirrors), not unique users. Use the badge links above for charts and version breakdowns.
|
|
390
354
|
|
|
391
355
|
## Citing
|
|
392
356
|
|
|
393
357
|
<a href="https://doi.org/10.5281/zenodo.21552745"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.21552745-c7d2fe?style=flat-square" alt="DOI 10.5281/zenodo.21552745"></a>
|
|
394
358
|
|
|
395
|
-
If you use Skillware in research or products, please cite it using [CITATION.cff](CITATION.cff) (GitHub **Cite this repository**) or the Zenodo **concept DOI** above. That DOI is stable across releases. For reproducibility, also record the **Skillware version** you used (PyPI or Git tag, for example `0.5.
|
|
359
|
+
If you use Skillware in research or products, please cite it using [CITATION.cff](CITATION.cff) (GitHub **Cite this repository**) or the Zenodo **concept DOI** above. That DOI is stable across releases. For reproducibility, also record the **Skillware version** you used (PyPI or Git tag, for example `0.5.4`).
|
|
396
360
|
|
|
397
361
|
## Contact
|
|
398
362
|
|
|
@@ -31,20 +31,23 @@
|
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
**Skillware** is an open-source framework and registry for modular, actionable Agent capabilities. It
|
|
34
|
+
**Skillware** is an open-source framework and registry for modular, actionable Agent capabilities. It installs know-how for AI agents, or modular **Skills** (code, contract, and host guidance) decoupling capability from intelligence. In short, don't prompt your agents, equip them.
|
|
35
35
|
|
|
36
36
|
> "I know Kung Fu." - Neo
|
|
37
37
|
|
|
38
38
|
## Mission
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Every new agent stack tends to reinvent tool schemas, system prompts, and safety rules. **Skillware** packages each capability as a self-contained bundle and adapts it to **Gemini**, **Claude**, **OpenAI**, **Ollama**, and other OpenAI-compatible hosts. For the full story and roadmap, see **[Vision](docs/vision.md)**.
|
|
41
41
|
|
|
42
42
|
A **Skill** in this framework provides everything an Agent needs to master a domain:
|
|
43
43
|
|
|
44
|
-
1. **
|
|
45
|
-
2. **
|
|
46
|
-
3. **
|
|
47
|
-
4. **
|
|
44
|
+
1. **Contract**: Constitution, safety boundaries, and typed I/O baked into the bundle.
|
|
45
|
+
2. **Effect**: Executable Python so agents run real work, not guess it.
|
|
46
|
+
3. **Directive**: System instructions and cognitive maps so any host uses the capability as intended.
|
|
47
|
+
4. **Assurance**: Offline tests that Effect honors Contract before a skill joins the registry.
|
|
48
|
+
5. **Interface**: Standardized tool schemas for any LLM or agent runtime.
|
|
49
|
+
|
|
50
|
+
Optional **Corpus** and **Reference** assets extend bundles when needed. Every bundled registry skill also ships **Presentation** (`card.json`) for catalog and UI metadata. Full reference: [Introduction — Skill anatomy](docs/introduction.md#skill-anatomy).
|
|
48
51
|
|
|
49
52
|
### Skill library
|
|
50
53
|
|
|
@@ -55,12 +58,10 @@ Browse capabilities by category in the [Skill library](docs/skills/README.md) or
|
|
|
55
58
|
```mermaid
|
|
56
59
|
flowchart LR
|
|
57
60
|
Registry[Registry] -->|Load| Loader[Loader]
|
|
58
|
-
Loader -->|Adapt|
|
|
59
|
-
Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
|
|
60
|
-
LogicalSystems -->|Tool Call| Host
|
|
61
|
+
Loader -->|Adapt| AnyHost["Any Host"]
|
|
61
62
|
```
|
|
62
63
|
|
|
63
|
-
Install the registry once. Skillware loads a bundle
|
|
64
|
+
Install the registry once. Skillware loads a bundle, adapts it to your host's tool format, and your app runs the agent loop (Gemini, Claude, Ollama, custom scripts, …). See the [Introduction](docs/introduction.md) for loader details, [Agent loops](docs/usage/agent_loops.md) for the execution pattern, and [Skill chaining](docs/usage/skill_chaining.md) for multi-skill sessions (`SkillContext`, named `chains:`).
|
|
64
65
|
|
|
65
66
|
## Architecture
|
|
66
67
|
|
|
@@ -75,15 +76,18 @@ Skillware/
|
|
|
75
76
|
├── skills/ # Skill Registry
|
|
76
77
|
│ └── category/ # Domain boundaries (e.g., finance)
|
|
77
78
|
│ └── skill_name/ # The Skill bundle
|
|
78
|
-
│ ├── manifest.yaml #
|
|
79
|
-
│ ├── skill.py #
|
|
80
|
-
│ ├── instructions.md #
|
|
81
|
-
│ ├── card.json #
|
|
82
|
-
│ └── test_skill.py #
|
|
79
|
+
│ ├── manifest.yaml # Contract: schema, constitution, issuer
|
|
80
|
+
│ ├── skill.py # Effect: deterministic execution
|
|
81
|
+
│ ├── instructions.md # Directive: host guidance
|
|
82
|
+
│ ├── card.json # Presentation: catalog / UI metadata
|
|
83
|
+
│ └── test_skill.py # Assurance (required for registry skills)
|
|
83
84
|
├── skillware/ # Core Framework Package
|
|
84
85
|
│ ├── cli.py # Command-line interface
|
|
86
|
+
│ ├── context.py # SkillContext — multi-skill registry host context
|
|
87
|
+
│ ├── chains.py # Named skill chain runner (run_chain, validate_chain)
|
|
85
88
|
│ └── core/
|
|
86
89
|
│ ├── base_skill.py # Abstract Base Class for skills
|
|
90
|
+
│ ├── chains_config.py # chains: YAML parsing
|
|
87
91
|
│ ├── env.py # Environment Management
|
|
88
92
|
│ └── loader.py # Universal Skill Loader and Model Adapter
|
|
89
93
|
├── templates/ # Boilerplate templates for new skills
|
|
@@ -124,20 +128,9 @@ skillware list
|
|
|
124
128
|
skillware paths
|
|
125
129
|
```
|
|
126
130
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
the
|
|
130
|
-
`.skillware.yaml` or global config: project → external → bundled by default),
|
|
131
|
-
tier labels, and shadowing. **Bundled registry skills from `pip install skillware`
|
|
132
|
-
are always available** — an empty or missing local `skills/` folder does not
|
|
133
|
-
disable them. Running `skillware` with no arguments opens the interactive menu.
|
|
134
|
-
As optional checks you can also run `skillware test` to execute bundle tests,
|
|
135
|
-
and `skillware examples` to browse the runnable example index (fetched from
|
|
136
|
-
GitHub when no local `examples/README.md` is present).
|
|
137
|
-
|
|
138
|
-
If `skillware` is not recognized, Python's `Scripts` directory may not be on
|
|
139
|
-
your PATH — use `python -m skillware list` as a fallback. See
|
|
140
|
-
[CLI Reference](docs/usage/cli.md#running-the-cli) for details.
|
|
131
|
+
You should see a table of bundled registry skills and a paths summary confirming install and discovery. **Bundled skills from `pip install skillware` are always available** — an empty local `skills/` folder does not disable them.
|
|
132
|
+
|
|
133
|
+
For path tiers, shadowing, config files, and the interactive menu, see [CLI — paths & tiers](docs/usage/cli.md#skillware-paths), [CLI — config](docs/usage/cli.md#skillware-config), and [Finding skills on disk](docs/usage/README.md#finding-skills-on-disk). If `skillware` is not on your PATH, use `python -m skillware list` ([CLI Reference](docs/usage/cli.md#running-the-cli)).
|
|
141
134
|
|
|
142
135
|
### 3. Configuration
|
|
143
136
|
|
|
@@ -163,83 +156,51 @@ Edit `.env` with agent keys (for example Gemini) and any keys your skills need.
|
|
|
163
156
|
|
|
164
157
|
### 4. Usage Example (Gemini)
|
|
165
158
|
|
|
166
|
-
|
|
159
|
+
Requires `pip install "skillware[gemini]"` (dev: `pip install -e ".[gemini]"`) and `GOOGLE_API_KEY`. The skill itself is offline — no skill API keys. For setup details see [Gemini usage guide](docs/usage/gemini.md). Multi-turn loops: [Agent loops](docs/usage/agent_loops.md).
|
|
167
160
|
|
|
168
161
|
```python
|
|
169
|
-
import os
|
|
170
162
|
import google.genai as genai
|
|
171
163
|
from google.genai import types
|
|
172
164
|
from skillware.core.loader import SkillLoader
|
|
173
|
-
from skillware.core.env import load_env_file
|
|
174
165
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
# 1. Load the Skill from the Registry
|
|
179
|
-
# The loader reads the code, manifest, and instructions automatically
|
|
180
|
-
skill_bundle = SkillLoader.load_skill("finance/wallet_screening")
|
|
181
|
-
skill = skill_bundle["class"](
|
|
182
|
-
config={"ETHERSCAN_API_KEY": os.environ.get("ETHERSCAN_API_KEY")}
|
|
183
|
-
)
|
|
184
|
-
# Or: skill = skill_bundle["module"].WalletScreeningSkill(config={...})
|
|
166
|
+
bundle = SkillLoader.load_skill("monitoring/token_limiter")
|
|
167
|
+
skill = bundle["class"]()
|
|
168
|
+
tool = SkillLoader.to_gemini_tool(bundle)
|
|
185
169
|
|
|
186
|
-
# 2. Client & Tool Setup
|
|
187
170
|
client = genai.Client()
|
|
188
|
-
tool = SkillLoader.to_gemini_tool(skill_bundle) # The "Adapter"
|
|
189
|
-
system_instruction = skill_bundle['instructions'] # The "Mind"
|
|
190
|
-
|
|
191
|
-
# 3. Agent Loop
|
|
192
171
|
response = client.models.generate_content(
|
|
193
172
|
model="gemini-2.5-flash",
|
|
194
|
-
contents=
|
|
173
|
+
contents=(
|
|
174
|
+
"Check token budget for task_id demo_run: "
|
|
175
|
+
"current_token_count 95000, max_allowed_tokens 100000."
|
|
176
|
+
),
|
|
195
177
|
config=types.GenerateContentConfig(
|
|
196
178
|
tools=[tool],
|
|
197
|
-
system_instruction=
|
|
179
|
+
system_instruction=bundle["instructions"],
|
|
198
180
|
),
|
|
199
181
|
)
|
|
200
182
|
|
|
201
183
|
for part in response.candidates[0].content.parts:
|
|
202
184
|
if part.function_call:
|
|
203
|
-
|
|
204
|
-
follow_up = client.models.generate_content(
|
|
205
|
-
model="gemini-2.5-flash",
|
|
206
|
-
contents=[
|
|
207
|
-
"Use this tool result to answer the original request.",
|
|
208
|
-
{
|
|
209
|
-
"function_response": {
|
|
210
|
-
"name": part.function_call.name,
|
|
211
|
-
"response": {"result": result},
|
|
212
|
-
}
|
|
213
|
-
},
|
|
214
|
-
],
|
|
215
|
-
config=types.GenerateContentConfig(
|
|
216
|
-
tools=[tool],
|
|
217
|
-
system_instruction=system_instruction,
|
|
218
|
-
),
|
|
219
|
-
)
|
|
220
|
-
print(follow_up.text)
|
|
185
|
+
print(skill.execute(dict(part.function_call.args)))
|
|
221
186
|
else:
|
|
222
187
|
print(part.text)
|
|
223
188
|
```
|
|
224
189
|
|
|
225
|
-
For other providers and
|
|
190
|
+
For other providers and integration patterns, see the [usage guides](docs/usage/README.md).
|
|
226
191
|
|
|
227
192
|
## Documentation
|
|
228
193
|
|
|
229
194
|
| Topic | Links |
|
|
230
195
|
| :--- | :--- |
|
|
231
196
|
| **Introduction** | [Introduction](docs/introduction.md) · [Vision](docs/vision.md) · [Comparison](COMPARISON.md) |
|
|
232
|
-
| **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [OpenAI-compatible hosts](docs/usage/openai_compatible.md) · [Install extras](docs/usage/install_extras.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
|
|
197
|
+
| **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [Skill chaining](docs/usage/skill_chaining.md) · [OpenAI-compatible hosts](docs/usage/openai_compatible.md) · [Install extras](docs/usage/install_extras.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
|
|
233
198
|
| **Security** | [Skill trust model](docs/security/skill-trust-model.md) · [SECURITY.md](SECURITY.md) |
|
|
234
199
|
| **Contributing** | [Contributing](CONTRIBUTING.md) · [Agent Native Workflow](docs/contributing/ai_native_workflow.md) · [Testing](docs/TESTING.md) · [Changelog](CHANGELOG.md) |
|
|
235
200
|
|
|
236
201
|
## Contributing
|
|
237
202
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
Start with [Contributing](CONTRIBUTING.md) (types, skill standard, PR process), [Agent Native Workflow](docs/contributing/ai_native_workflow.md) (for autonomous and semi-autonomous agents), [Testing](docs/TESTING.md) (Black, Flake8, framework and skill pytest, pre-PR checklist), and [Changelog](CHANGELOG.md) (user-facing entries under `[Unreleased]`).
|
|
241
|
-
|
|
242
|
-
Also read the [Agent Code of Conduct](CODE_OF_CONDUCT.md). Open PRs with the [pull request template](.github/PULL_REQUEST_TEMPLATE.md) and complete only the sections that apply.
|
|
203
|
+
Skills, docs, tests, and framework fixes are welcome. Start with [Contributing](CONTRIBUTING.md), [Agent Native Workflow](docs/contributing/ai_native_workflow.md), and [Testing](docs/TESTING.md). See the [Agent Code of Conduct](CODE_OF_CONDUCT.md). Open PRs with the [pull request template](.github/PULL_REQUEST_TEMPLATE.md).
|
|
243
204
|
|
|
244
205
|
## Comparison
|
|
245
206
|
|
|
@@ -257,13 +218,13 @@ Skillware differs from the Model Context Protocol (MCP), and Agent Skills (SKILL
|
|
|
257
218
|
<a href="https://pypistats.org/packages/skillware"><img src="https://img.shields.io/badge/Stats-PyPiStats-ffdac1?style=flat-square" alt="PyPI Stats dashboard"></a>
|
|
258
219
|
<a href="https://pepy.tech/projects/skillware"><img src="https://img.shields.io/pepy/dt/skillware?style=flat-square&label=DLs%20%E2%86%93%20total&color=bbf7d0" alt="Total downloads (PePy)"></a>
|
|
259
220
|
|
|
260
|
-
PyPI download counts
|
|
221
|
+
PyPI download counts measure **install activity** from public aggregators (including CI and mirrors), not unique users. Use the badge links above for charts and version breakdowns.
|
|
261
222
|
|
|
262
223
|
## Citing
|
|
263
224
|
|
|
264
225
|
<a href="https://doi.org/10.5281/zenodo.21552745"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.21552745-c7d2fe?style=flat-square" alt="DOI 10.5281/zenodo.21552745"></a>
|
|
265
226
|
|
|
266
|
-
If you use Skillware in research or products, please cite it using [CITATION.cff](CITATION.cff) (GitHub **Cite this repository**) or the Zenodo **concept DOI** above. That DOI is stable across releases. For reproducibility, also record the **Skillware version** you used (PyPI or Git tag, for example `0.5.
|
|
227
|
+
If you use Skillware in research or products, please cite it using [CITATION.cff](CITATION.cff) (GitHub **Cite this repository**) or the Zenodo **concept DOI** above. That DOI is stable across releases. For reproducibility, also record the **Skillware version** you used (PyPI or Git tag, for example `0.5.4`).
|
|
267
228
|
|
|
268
229
|
## Contact
|
|
269
230
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "skillware"
|
|
7
|
-
version = "0.5.
|
|
7
|
+
version = "0.5.4"
|
|
8
8
|
description = "A framework for modular, self-contained AI skills."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -68,6 +68,9 @@ agents = [
|
|
|
68
68
|
"anthropic",
|
|
69
69
|
"openai",
|
|
70
70
|
]
|
|
71
|
+
security_deceptive_ui_guard_render = [
|
|
72
|
+
"playwright",
|
|
73
|
+
]
|
|
71
74
|
|
|
72
75
|
# --- extras: begin generated by scripts/sync_extras.py ---
|
|
73
76
|
|
|
@@ -140,6 +143,8 @@ finance_uk_companies_house_handler = []
|
|
|
140
143
|
|
|
141
144
|
finance_wallet_screening = []
|
|
142
145
|
|
|
146
|
+
monitoring_kpi_gate = []
|
|
147
|
+
|
|
143
148
|
monitoring_token_limiter = []
|
|
144
149
|
|
|
145
150
|
office_gmail_handler = []
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "KPI Gate",
|
|
3
|
+
"description": "Deterministic business-KPI gate: metrics snapshot vs policy charter with fail-closed findings.",
|
|
4
|
+
"issuer": {
|
|
5
|
+
"name": "Masa",
|
|
6
|
+
"email": "masa88keith@gmail.com",
|
|
7
|
+
"github": "mrmasa88",
|
|
8
|
+
"org": "AO"
|
|
9
|
+
},
|
|
10
|
+
"icon": "gauge",
|
|
11
|
+
"color": "#0f766e",
|
|
12
|
+
"ui_schema": {
|
|
13
|
+
"type": "card",
|
|
14
|
+
"fields": [
|
|
15
|
+
{
|
|
16
|
+
"key": "status",
|
|
17
|
+
"label": "Status"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"key": "policy_id",
|
|
21
|
+
"label": "Policy"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"key": "benchmark_version",
|
|
25
|
+
"label": "Benchmark Version"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"key": "findings",
|
|
29
|
+
"label": "Findings"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
schema_version: 2
|
|
2
|
+
policy_id: floor_boundary_demo
|
|
3
|
+
metrics: [replies, reply_to_booking_rate_pct]
|
|
4
|
+
rules:
|
|
5
|
+
- id: BOOKING_CONVERSION_TRACKED
|
|
6
|
+
metric: reply_to_booking_rate_pct
|
|
7
|
+
check: {op: gte, threshold: 10}
|
|
8
|
+
severity: warning
|
|
9
|
+
requires: {denominator_metric: replies, min_denominator: 25,
|
|
10
|
+
granularity: weekly, reason_code: cohort_attribution_unavailable}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
schema_version: 2
|
|
2
|
+
policy_id: coaching_funnel_demo_v1
|
|
3
|
+
metrics: [outreach_sends, replies, bookings, lp_sessions, downloads,
|
|
4
|
+
download_rate_pct, reply_to_booking_rate_pct]
|
|
5
|
+
rules:
|
|
6
|
+
- id: NO_BOOKING
|
|
7
|
+
metric: bookings
|
|
8
|
+
check: {op: gte, threshold: 1}
|
|
9
|
+
severity: error
|
|
10
|
+
- id: DOWNLOAD_RATE_BELOW_DOCTRINE
|
|
11
|
+
metric: download_rate_pct
|
|
12
|
+
check: {op: gte, benchmark_ref: lead_magnet_download_rate_pct}
|
|
13
|
+
severity: warning
|
|
14
|
+
- id: BOOKING_CONVERSION_TRACKED
|
|
15
|
+
metric: reply_to_booking_rate_pct
|
|
16
|
+
check: {op: gte, threshold: 10}
|
|
17
|
+
severity: warning
|
|
18
|
+
requires: {denominator_metric: replies, min_denominator: 25,
|
|
19
|
+
granularity: weekly, reason_code: cohort_attribution_unavailable}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"period": {"start": "2026-08-17", "end": "2026-08-23", "granularity": "weekly"},
|
|
4
|
+
"metrics": {
|
|
5
|
+
"outreach_sends": 40,
|
|
6
|
+
"replies": 6,
|
|
7
|
+
"bookings": 0,
|
|
8
|
+
"lp_sessions": 180,
|
|
9
|
+
"downloads": 22,
|
|
10
|
+
"download_rate_pct": 12.2,
|
|
11
|
+
"reply_to_booking_rate_pct": 0
|
|
12
|
+
}
|
|
13
|
+
}
|