skillware 0.3.1__tar.gz → 0.3.3__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.
Files changed (92) hide show
  1. {skillware-0.3.1/skillware.egg-info → skillware-0.3.3}/PKG-INFO +23 -23
  2. {skillware-0.3.1 → skillware-0.3.3}/README.md +21 -22
  3. {skillware-0.3.1 → skillware-0.3.3}/pyproject.toml +2 -1
  4. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/mica_module/manifest.yaml +1 -0
  5. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/pii_masker/manifest.yaml +1 -0
  6. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/tos_evaluator/manifest.yaml +1 -0
  7. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/novelty_extractor/manifest.yaml +1 -0
  8. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/synthetic_generator/manifest.yaml +1 -0
  9. {skillware-0.3.1 → skillware-0.3.3}/skills/dev_tools/issue_resolver/card.json +1 -1
  10. skillware-0.3.3/skills/dev_tools/issue_resolver/instructions.md +80 -0
  11. skillware-0.3.3/skills/dev_tools/issue_resolver/manifest.yaml +63 -0
  12. {skillware-0.3.1 → skillware-0.3.3}/skills/dev_tools/issue_resolver/skill.py +96 -27
  13. {skillware-0.3.1 → skillware-0.3.3}/skills/dev_tools/issue_resolver/test_skill.py +62 -1
  14. skillware-0.3.3/skills/dev_tools/issue_resolver/workflow.py +293 -0
  15. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/manifest.yaml +1 -0
  16. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/skill.py +162 -57
  17. {skillware-0.3.1 → skillware-0.3.3}/skills/office/pdf_form_filler/manifest.yaml +1 -0
  18. {skillware-0.3.1 → skillware-0.3.3}/skills/optimization/prompt_rewriter/manifest.yaml +1 -0
  19. skillware-0.3.3/skillware/cli.py +302 -0
  20. skillware-0.3.3/skillware/version_policy.py +63 -0
  21. {skillware-0.3.1 → skillware-0.3.3/skillware.egg-info}/PKG-INFO +23 -23
  22. {skillware-0.3.1 → skillware-0.3.3}/skillware.egg-info/SOURCES.txt +4 -1
  23. {skillware-0.3.1 → skillware-0.3.3}/skillware.egg-info/requires.txt +1 -0
  24. {skillware-0.3.1 → skillware-0.3.3}/tests/test_cli.py +82 -1
  25. skillware-0.3.3/tests/test_version_policy.py +96 -0
  26. skillware-0.3.1/skills/dev_tools/issue_resolver/instructions.md +0 -104
  27. skillware-0.3.1/skills/dev_tools/issue_resolver/manifest.yaml +0 -55
  28. skillware-0.3.1/skillware/cli.py +0 -162
  29. {skillware-0.3.1 → skillware-0.3.3}/LICENSE +0 -0
  30. {skillware-0.3.1 → skillware-0.3.3}/MANIFEST.in +0 -0
  31. {skillware-0.3.1 → skillware-0.3.3}/setup.cfg +0 -0
  32. {skillware-0.3.1 → skillware-0.3.3}/skills/__init__.py +0 -0
  33. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/__init__.py +0 -0
  34. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/mica_module/__init__.py +0 -0
  35. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/mica_module/card.json +0 -0
  36. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/mica_module/instructions.md +0 -0
  37. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/mica_module/mica_corpus.json +0 -0
  38. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/mica_module/skill.py +0 -0
  39. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/pii_masker/__init__.py +0 -0
  40. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/pii_masker/card.json +0 -0
  41. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/pii_masker/instructions.md +0 -0
  42. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/pii_masker/skill.py +0 -0
  43. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/tos_evaluator/__init__.py +0 -0
  44. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/tos_evaluator/card.json +0 -0
  45. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/tos_evaluator/instructions.md +0 -0
  46. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/tos_evaluator/skill.py +0 -0
  47. {skillware-0.3.1 → skillware-0.3.3}/skills/compliance/tos_evaluator/test_skill.py +0 -0
  48. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/__init__.py +0 -0
  49. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/novelty_extractor/__init__.py +0 -0
  50. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/novelty_extractor/card.json +0 -0
  51. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/novelty_extractor/instructions.md +0 -0
  52. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/novelty_extractor/skill.py +0 -0
  53. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/novelty_extractor/test_skill.py +0 -0
  54. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/synthetic_generator/__init__.py +0 -0
  55. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/synthetic_generator/card.json +0 -0
  56. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/synthetic_generator/instructions.md +0 -0
  57. {skillware-0.3.1 → skillware-0.3.3}/skills/data_engineering/synthetic_generator/skill.py +0 -0
  58. {skillware-0.3.1 → skillware-0.3.3}/skills/dev_tools/__init__.py +0 -0
  59. {skillware-0.3.1 → skillware-0.3.3}/skills/dev_tools/issue_resolver/__init__.py +0 -0
  60. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/__init__.py +0 -0
  61. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/__init__.py +0 -0
  62. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/card.json +0 -0
  63. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/data/entities.ftm.json +0 -0
  64. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/data/malicious_scs_2025.json +0 -0
  65. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/data/normalized_fbi_lazarus_20250722_180019.json +0 -0
  66. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/data/normalized_israel_nbctf_20250722_180019.json +0 -0
  67. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/data/normalized_uniswap_trm.json +0 -0
  68. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/instructions.md +0 -0
  69. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/maintenance/normalization_tool.py +0 -0
  70. {skillware-0.3.1 → skillware-0.3.3}/skills/finance/wallet_screening/maintenance/normalize_uniswap_trm.py +0 -0
  71. {skillware-0.3.1 → skillware-0.3.3}/skills/office/__init__.py +0 -0
  72. {skillware-0.3.1 → skillware-0.3.3}/skills/office/pdf_form_filler/__init__.py +0 -0
  73. {skillware-0.3.1 → skillware-0.3.3}/skills/office/pdf_form_filler/card.json +0 -0
  74. {skillware-0.3.1 → skillware-0.3.3}/skills/office/pdf_form_filler/instructions.md +0 -0
  75. {skillware-0.3.1 → skillware-0.3.3}/skills/office/pdf_form_filler/skill.py +0 -0
  76. {skillware-0.3.1 → skillware-0.3.3}/skills/office/pdf_form_filler/utils.py +0 -0
  77. {skillware-0.3.1 → skillware-0.3.3}/skills/optimization/__init__.py +0 -0
  78. {skillware-0.3.1 → skillware-0.3.3}/skills/optimization/prompt_rewriter/__init__.py +0 -0
  79. {skillware-0.3.1 → skillware-0.3.3}/skills/optimization/prompt_rewriter/card.json +0 -0
  80. {skillware-0.3.1 → skillware-0.3.3}/skills/optimization/prompt_rewriter/instructions.md +0 -0
  81. {skillware-0.3.1 → skillware-0.3.3}/skills/optimization/prompt_rewriter/skill.py +0 -0
  82. {skillware-0.3.1 → skillware-0.3.3}/skillware/__init__.py +0 -0
  83. {skillware-0.3.1 → skillware-0.3.3}/skillware/core/__init__.py +0 -0
  84. {skillware-0.3.1 → skillware-0.3.3}/skillware/core/base_skill.py +0 -0
  85. {skillware-0.3.1 → skillware-0.3.3}/skillware/core/env.py +0 -0
  86. {skillware-0.3.1 → skillware-0.3.3}/skillware/core/loader.py +0 -0
  87. {skillware-0.3.1 → skillware-0.3.3}/skillware.egg-info/dependency_links.txt +0 -0
  88. {skillware-0.3.1 → skillware-0.3.3}/skillware.egg-info/entry_points.txt +0 -0
  89. {skillware-0.3.1 → skillware-0.3.3}/skillware.egg-info/top_level.txt +0 -0
  90. {skillware-0.3.1 → skillware-0.3.3}/tests/test_loader.py +0 -0
  91. {skillware-0.3.1 → skillware-0.3.3}/tests/test_mica_module.py +0 -0
  92. {skillware-0.3.1 → skillware-0.3.3}/tests/test_skill_issuer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skillware
3
- Version: 0.3.1
3
+ Version: 0.3.3
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
@@ -37,6 +37,7 @@ Requires-Dist: requests
37
37
  Requires-Dist: pyyaml
38
38
  Requires-Dist: python-dotenv
39
39
  Requires-Dist: beautifulsoup4
40
+ Requires-Dist: packaging
40
41
  Provides-Extra: dev
41
42
  Requires-Dist: pytest; extra == "dev"
42
43
  Requires-Dist: pytest-mock; extra == "dev"
@@ -83,6 +84,7 @@ Dynamic: license-file
83
84
  <a href="#documentation">Documentation</a> •
84
85
  <a href="#contributing">Contributing</a> •
85
86
  <a href="#comparison">Comparison</a> •
87
+ <a href="CHANGELOG.md">Changelog</a> •
86
88
  <a href="#contact">Contact</a>
87
89
  </div>
88
90
 
@@ -94,18 +96,18 @@ Dynamic: license-file
94
96
 
95
97
  ## Mission
96
98
 
97
- The AI ecosystem is fragmented. Developers often re-invent tool definitions, system prompts, and safety rules for every project. **Skillware** supplies a standard to package capabilities into self-contained units that work across **Gemini**, **Claude**, **Ollama**, **GPT**, and **Llama**.
99
+ The AI ecosystem is fragmented. Developers often re-invent tool definitions, system prompts, and safety rules for every project. **Skillware** supplies a standard to package capabilities into self-contained, installable units that work across **Gemini**, **Claude**, **Ollama**, **GPT**, and **Llama**. For the full story and roadmap, see our **[Vision](docs/vision.md)**.
98
100
 
99
101
  A **Skill** in this framework provides everything an Agent needs to master a domain:
100
102
 
101
- 1. **Logic**: Executable Python code.
102
- 2. **Cognition**: System instructions and "cognitive maps".
103
- 3. **Governance**: Constitution and safety boundaries.
104
- 4. **Interface**: Standardized schemas for LLM tool calling.
103
+ 1. **Logic**: Executable Python so agents run real work, not guess it.
104
+ 2. **Cognition**: System instructions and cognitive maps so any logical system uses the capability as intended.
105
+ 3. **Governance**: Constitution, safety boundaries, and hard limits baked into the bundle.
106
+ 4. **Interface**: Standardized tool schemas for any LLM or agent runtime.
105
107
 
106
108
  ### Skill library
107
109
 
108
- Browse capabilities by category in the [Skill library](docs/skills/README.md).
110
+ Browse capabilities by category in the [Skill library](docs/skills/README.md) or on our <a href="https://skillware.site/skills" target="_blank" rel="noopener noreferrer">site&nbsp;↗</a>.
109
111
 
110
112
  ## Architecture
111
113
 
@@ -163,7 +165,7 @@ pip install "skillware[cli]"
163
165
  skillware list
164
166
  ```
165
167
 
166
- This prints a table of all locally available skills and confirms the install and path resolution are working.
168
+ This prints a table of all locally available skills and confirms the install and path resolution are working. Running `skillware` with no arguments opens the interactive menu.
167
169
 
168
170
  ### 3. Configuration
169
171
 
@@ -237,29 +239,23 @@ For other providers and shared integration patterns, see the [usage guides index
237
239
 
238
240
  ## Documentation
239
241
 
240
- | Topic | Link |
242
+ | Topic | Links |
241
243
  | :--- | :--- |
242
- | Introduction | [docs/introduction.md](docs/introduction.md) |
243
- | Testing | [docs/TESTING.md](docs/TESTING.md) |
244
- | Skill library | [docs/skills/README.md](docs/skills/README.md) |
245
- | Usage guides | [index](docs/usage/README.md) — [Gemini](docs/usage/gemini.md) · [Claude](docs/usage/claude.md) · [OpenAI](docs/usage/openai.md) · [DeepSeek](docs/usage/deepseek.md) · [Ollama](docs/usage/ollama.md); [agent loops](docs/usage/agent_loops.md); [API keys](docs/usage/api_keys.md) |
246
- | Examples index | [examples/README.md](examples/README.md) |
247
- | CLI | [docs/usage/cli.md](docs/usage/cli.md) |
248
- | Contributing | [CONTRIBUTING.md](CONTRIBUTING.md) · [agent workflow](docs/contributing/ai_native_workflow.md) |
244
+ | **Introduction** | [Introduction](docs/introduction.md) · [Vision](docs/vision.md) · [Comparison](COMPARISON.md) |
245
+ | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
246
+ | **Contributing** | [Contributing](CONTRIBUTING.md) · [Agent Native Workflow](docs/contributing/ai_native_workflow.md) · [Testing](docs/TESTING.md) · [Changelog](CHANGELOG.md) |
249
247
 
250
248
  ## Contributing
251
249
 
252
- We are building the "App Store" for Agents and require professional, robust, and safe skills. We welcome contributions to the skill registry, documentation, tests, and core framework.
250
+ We are building the "App Store" for Agents. Skills are the main contribution, but documentation, tests, and framework fixes are welcome too. Human operators and supervised agents follow the same standards: scoped PRs, deterministic behavior, and verified tests.
253
251
 
254
- * **[CONTRIBUTING.md](CONTRIBUTING.md)** — Contribution types, skill standard, pull request process, and navigation to all contributor docs.
255
- * **[Agent Contribution Workflow](docs/contributing/ai_native_workflow.md)** — Workflow for AI agents contributing to the repository (operators supervise).
256
- * **[Agent Code of Conduct](CODE_OF_CONDUCT.md)** — Deterministic outputs, safety boundaries, and acceptable use of skills.
257
- * **[TESTING.md](docs/TESTING.md)** — Local linting and pytest before you open a PR.
258
- * **[Pull request template](.github/PULL_REQUEST_TEMPLATE.md)** — Checklists for skills, docs, and framework changes (complete only the sections that apply).
252
+ See the **Contributing** row in [Documentation](#documentation) for the full path, [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]`).
253
+
254
+ 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.
259
255
 
260
256
  ## Comparison
261
257
 
262
- Skillware differs from the Model Context Protocol (MCP) or Anthropic's Skills repository in the following ways:
258
+ Skillware differs from the Model Context Protocol (MCP), and Anthropic's Skills repository in several ways:
263
259
 
264
260
  * **Model Agnostic**: Native adapters for Gemini, Claude, Ollama, and OpenAI.
265
261
  * **Code-First**: Skills are executable Python packages, not just server specs.
@@ -272,8 +268,12 @@ Skillware differs from the Model Context Protocol (MCP) or Anthropic's Skills re
272
268
  For questions, suggestions, or contributions, please open an issue or reach out to us:
273
269
 
274
270
  * **Email**: [skillware-os@arpacorp.net](mailto:skillware-os@arpacorp.net)
271
+ * **Enterprise**: [skills@arpacorp.net](mailto:skills@arpacorp.net) — enterprise skills, chaining, and forward deployed engineering
272
+ * **Security**: [security@arpacorp.net](mailto:security@arpacorp.net) — report bugs, vulnerabilities, or other sensitive issues (see [SECURITY.md](SECURITY.md))
275
273
  * **Issues**: [GitHub Issues](https://github.com/arpahls/skillware/issues)
276
274
 
275
+ For skill-specific questions or reaching a skill's maintainer, check issuer and author details on the skill card, in the repo [Skill Library](docs/skills/README.md), or on our website's <a href="https://skillware.site/skills" target="_blank" rel="noopener noreferrer">skills catalog&nbsp;↗</a>.
276
+
277
277
  ---
278
278
 
279
279
  <div align="center">
@@ -21,6 +21,7 @@
21
21
  <a href="#documentation">Documentation</a> •
22
22
  <a href="#contributing">Contributing</a> •
23
23
  <a href="#comparison">Comparison</a> •
24
+ <a href="CHANGELOG.md">Changelog</a> •
24
25
  <a href="#contact">Contact</a>
25
26
  </div>
26
27
 
@@ -32,18 +33,18 @@
32
33
 
33
34
  ## Mission
34
35
 
35
- The AI ecosystem is fragmented. Developers often re-invent tool definitions, system prompts, and safety rules for every project. **Skillware** supplies a standard to package capabilities into self-contained units that work across **Gemini**, **Claude**, **Ollama**, **GPT**, and **Llama**.
36
+ The AI ecosystem is fragmented. Developers often re-invent tool definitions, system prompts, and safety rules for every project. **Skillware** supplies a standard to package capabilities into self-contained, installable units that work across **Gemini**, **Claude**, **Ollama**, **GPT**, and **Llama**. For the full story and roadmap, see our **[Vision](docs/vision.md)**.
36
37
 
37
38
  A **Skill** in this framework provides everything an Agent needs to master a domain:
38
39
 
39
- 1. **Logic**: Executable Python code.
40
- 2. **Cognition**: System instructions and "cognitive maps".
41
- 3. **Governance**: Constitution and safety boundaries.
42
- 4. **Interface**: Standardized schemas for LLM tool calling.
40
+ 1. **Logic**: Executable Python so agents run real work, not guess it.
41
+ 2. **Cognition**: System instructions and cognitive maps so any logical system uses the capability as intended.
42
+ 3. **Governance**: Constitution, safety boundaries, and hard limits baked into the bundle.
43
+ 4. **Interface**: Standardized tool schemas for any LLM or agent runtime.
43
44
 
44
45
  ### Skill library
45
46
 
46
- Browse capabilities by category in the [Skill library](docs/skills/README.md).
47
+ Browse capabilities by category in the [Skill library](docs/skills/README.md) or on our <a href="https://skillware.site/skills" target="_blank" rel="noopener noreferrer">site&nbsp;↗</a>.
47
48
 
48
49
  ## Architecture
49
50
 
@@ -101,7 +102,7 @@ pip install "skillware[cli]"
101
102
  skillware list
102
103
  ```
103
104
 
104
- This prints a table of all locally available skills and confirms the install and path resolution are working.
105
+ This prints a table of all locally available skills and confirms the install and path resolution are working. Running `skillware` with no arguments opens the interactive menu.
105
106
 
106
107
  ### 3. Configuration
107
108
 
@@ -175,29 +176,23 @@ For other providers and shared integration patterns, see the [usage guides index
175
176
 
176
177
  ## Documentation
177
178
 
178
- | Topic | Link |
179
+ | Topic | Links |
179
180
  | :--- | :--- |
180
- | Introduction | [docs/introduction.md](docs/introduction.md) |
181
- | Testing | [docs/TESTING.md](docs/TESTING.md) |
182
- | Skill library | [docs/skills/README.md](docs/skills/README.md) |
183
- | Usage guides | [index](docs/usage/README.md) — [Gemini](docs/usage/gemini.md) · [Claude](docs/usage/claude.md) · [OpenAI](docs/usage/openai.md) · [DeepSeek](docs/usage/deepseek.md) · [Ollama](docs/usage/ollama.md); [agent loops](docs/usage/agent_loops.md); [API keys](docs/usage/api_keys.md) |
184
- | Examples index | [examples/README.md](examples/README.md) |
185
- | CLI | [docs/usage/cli.md](docs/usage/cli.md) |
186
- | Contributing | [CONTRIBUTING.md](CONTRIBUTING.md) · [agent workflow](docs/contributing/ai_native_workflow.md) |
181
+ | **Introduction** | [Introduction](docs/introduction.md) · [Vision](docs/vision.md) · [Comparison](COMPARISON.md) |
182
+ | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
183
+ | **Contributing** | [Contributing](CONTRIBUTING.md) · [Agent Native Workflow](docs/contributing/ai_native_workflow.md) · [Testing](docs/TESTING.md) · [Changelog](CHANGELOG.md) |
187
184
 
188
185
  ## Contributing
189
186
 
190
- We are building the "App Store" for Agents and require professional, robust, and safe skills. We welcome contributions to the skill registry, documentation, tests, and core framework.
187
+ We are building the "App Store" for Agents. Skills are the main contribution, but documentation, tests, and framework fixes are welcome too. Human operators and supervised agents follow the same standards: scoped PRs, deterministic behavior, and verified tests.
191
188
 
192
- * **[CONTRIBUTING.md](CONTRIBUTING.md)** — Contribution types, skill standard, pull request process, and navigation to all contributor docs.
193
- * **[Agent Contribution Workflow](docs/contributing/ai_native_workflow.md)** — Workflow for AI agents contributing to the repository (operators supervise).
194
- * **[Agent Code of Conduct](CODE_OF_CONDUCT.md)** — Deterministic outputs, safety boundaries, and acceptable use of skills.
195
- * **[TESTING.md](docs/TESTING.md)** — Local linting and pytest before you open a PR.
196
- * **[Pull request template](.github/PULL_REQUEST_TEMPLATE.md)** — Checklists for skills, docs, and framework changes (complete only the sections that apply).
189
+ See the **Contributing** row in [Documentation](#documentation) for the full path, [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]`).
190
+
191
+ 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.
197
192
 
198
193
  ## Comparison
199
194
 
200
- Skillware differs from the Model Context Protocol (MCP) or Anthropic's Skills repository in the following ways:
195
+ Skillware differs from the Model Context Protocol (MCP), and Anthropic's Skills repository in several ways:
201
196
 
202
197
  * **Model Agnostic**: Native adapters for Gemini, Claude, Ollama, and OpenAI.
203
198
  * **Code-First**: Skills are executable Python packages, not just server specs.
@@ -210,8 +205,12 @@ Skillware differs from the Model Context Protocol (MCP) or Anthropic's Skills re
210
205
  For questions, suggestions, or contributions, please open an issue or reach out to us:
211
206
 
212
207
  * **Email**: [skillware-os@arpacorp.net](mailto:skillware-os@arpacorp.net)
208
+ * **Enterprise**: [skills@arpacorp.net](mailto:skills@arpacorp.net) — enterprise skills, chaining, and forward deployed engineering
209
+ * **Security**: [security@arpacorp.net](mailto:security@arpacorp.net) — report bugs, vulnerabilities, or other sensitive issues (see [SECURITY.md](SECURITY.md))
213
210
  * **Issues**: [GitHub Issues](https://github.com/arpahls/skillware/issues)
214
211
 
212
+ For skill-specific questions or reaching a skill's maintainer, check issuer and author details on the skill card, in the repo [Skill Library](docs/skills/README.md), or on our website's <a href="https://skillware.site/skills" target="_blank" rel="noopener noreferrer">skills catalog&nbsp;↗</a>.
213
+
215
214
  ---
216
215
 
217
216
  <div align="center">
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "skillware"
7
- version = "0.3.1"
7
+ version = "0.3.3"
8
8
  description = "A framework for modular, self-contained AI skills."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -22,6 +22,7 @@ dependencies = [
22
22
  "pyyaml",
23
23
  "python-dotenv",
24
24
  "beautifulsoup4",
25
+ "packaging",
25
26
  ]
26
27
  requires-python = ">=3.10"
27
28
 
@@ -1,6 +1,7 @@
1
1
  name: compliance/mica_module
2
2
  version: 0.1.0
3
3
  description: A highly specialized, localized RAG and policy enforcement engine for the Markets in Crypto-Assets (MiCA) regulation.
4
+ short_description: "Local RAG and policy enforcement engine for MiCA regulation."
4
5
  issuer:
5
6
  name: Ross Peili
6
7
  email: vpeilivanidis@gmail.com
@@ -1,6 +1,7 @@
1
1
  name: compliance/pii_masker
2
2
  version: 0.1.0
3
3
  description: High-precision, local PII detection and redaction using the micro-f1-mask model via Ollama.
4
+ short_description: "Detects and redacts PII locally using the micro-f1-mask model."
4
5
  issuer:
5
6
  name: Ross Peili
6
7
  email: vpeilivanidis@gmail.com
@@ -1,6 +1,7 @@
1
1
  name: "compliance/tos_evaluator"
2
2
  version: "0.1.0"
3
3
  description: "Evaluates whether an intended automated website action appears permissible by checking robots.txt, discovered legal pages, and optional low-cost LLM review for ambiguous policy language."
4
+ short_description: "Evaluates whether an automated web action is permitted by site policy."
4
5
  issuer:
5
6
  name: Ross Peili
6
7
  email: vpeilivanidis@gmail.com
@@ -1,6 +1,7 @@
1
1
  name: "data_engineering/novelty_extractor"
2
2
  version: "0.1.0"
3
3
  description: "Filters a text dataset by semantic novelty, retaining only chunks that carry new information above a configurable threshold."
4
+ short_description: "Filters text datasets by semantic novelty using local embeddings."
4
5
  issuer:
5
6
  name: Martin Rizzo Lozano
6
7
  email: rizzolozanomartin@gmail.com
@@ -1,6 +1,7 @@
1
1
  name: "data_engineering/synthetic_generator"
2
2
  version: "0.1.0"
3
3
  description: "Generates high-entropy structured synthetic data for model fine-tuning to avoid mode collapse."
4
+ short_description: "Generates high-entropy synthetic JSONL data for model fine-tuning."
4
5
  issuer:
5
6
  name: Ross Peili
6
7
  email: vpeilivanidis@gmail.com
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Issue Resolver",
3
- "description": "Analyzes any GitHub issue against its target repository and produces a structured resolution plan with ranked implementation options, affected files, and caveats.",
3
+ "description": "Guides an agent through resolving a GitHub issue on any repository: validates the issue URL, returns GitHub API endpoints, and provides sequential stage checklists with verify, commit, and pull request gates.",
4
4
  "issuer": {
5
5
  "name": "Ross Peili",
6
6
  "email": "vpeilivanidis@gmail.com",
@@ -0,0 +1,80 @@
1
+ # Issue Resolver
2
+
3
+ You are using the `dev_tools/issue_resolver` skill.
4
+
5
+ Load this skill when the user provides a **GitHub issue URL** and asks you to understand, plan, or resolve it. The skill applies to any public or authenticated GitHub repository. It is model-agnostic and does not assume any particular project's conventions, language, or directory layout.
6
+
7
+ The skill does **not** call GitHub, run git, or write code. It returns URLs, ordered stage checklists with conditional rules, and commit-message gates. **You** fetch issue data, inspect the repository, and execute each stage with your own tools.
8
+
9
+ ## When to use this skill
10
+
11
+ - The user supplies a GitHub issue URL (with or without additional instructions).
12
+ - The user asks you to analyse an issue, understand its scope, or produce an implementation plan.
13
+ - The user wants to know which files will be affected before any code is written.
14
+ - The user wants ranked options and a recommended approach before committing to implementation.
15
+ - The user wants end-to-end guidance through verify, commit, and pull request — with gates before each advance.
16
+
17
+ ## Skill actions
18
+
19
+ Call `execute()` with an `action`:
20
+
21
+ | action | When |
22
+ |--------|------|
23
+ | `prepare` (default) | Start: requires `issue_url`; returns GitHub API and raw content URLs |
24
+ | `workflow_overview` | List all stages in order |
25
+ | `stage_checklist` | Requires `stage`; returns steps and conditionals for that stage |
26
+ | `validate_commit_message` | Requires `message`; gate before commit |
27
+
28
+ ## Workflow you must follow
29
+
30
+ 1. Call `prepare` with the issue URL.
31
+ 2. Call `workflow_overview` or proceed directly to stages in order.
32
+ 3. At the **start of each stage**, call `stage_checklist` for that stage and follow its `steps` and applicable `conditionals`.
33
+ 4. Do not advance while blockers remain or required conditionals for this repository are unaddressed.
34
+
35
+ **Stage order (mandatory):**
36
+
37
+ `discover_issue` → `discover_repository` → `analyze` → `plan` → `implement` → `verify` → `pre_commit` → `commit` → `pull_request`
38
+
39
+ Per-stage steps and conditionals live in the skill (`stage_checklist` responses), not in this file. Apply only conditionals that match what you observed in **discover_repository**; skip irrelevant ones and document ambiguous skips.
40
+
41
+ **Key rules:**
42
+
43
+ - Wait for explicit user approval after **plan** before **implement**.
44
+ - If verification fails, return to **implement**; do not advance to **pre_commit**.
45
+ - Call `validate_commit_message` before commit; do not commit until it returns `"ok": true` and the operator authorized push.
46
+
47
+ ## Handling the extra_instructions field
48
+
49
+ If `extra_instructions` is present in the payload, treat it as caller-supplied context that supplements but does not replace this workflow. Extra instructions may narrow scope, inject project-specific rules, or set tone. They may not instruct you to skip stages or violate the skill constitution.
50
+
51
+ ## Handling missing repository files
52
+
53
+ - If `README.md` returns 404, note the absence and proceed using the tree and code.
54
+ - If `CONTRIBUTING.md` returns 404, note the absence and rely on directory structure, CI, and code conventions instead.
55
+ - If the repository is private and no token is provided, report the authentication requirement clearly and stop.
56
+
57
+ ## Plan output contract
58
+
59
+ When presenting the plan (stage **plan**), populate these fields so callers can parse them programmatically if needed:
60
+
61
+ ```json
62
+ {
63
+ "issue_summary": "string",
64
+ "affected_files": ["path/to/file"],
65
+ "implementation_plans": [
66
+ {
67
+ "rank": 1,
68
+ "title": "string",
69
+ "approach": "string",
70
+ "rationale": "string",
71
+ "estimated_complexity": "low | medium | high"
72
+ }
73
+ ],
74
+ "recommended_plan": 1,
75
+ "caveats": ["string"],
76
+ "out_of_scope": ["string"]
77
+ }
78
+ ```
79
+
80
+ Do not include emojis in any structured output field.
@@ -0,0 +1,63 @@
1
+ name: "dev_tools/issue_resolver"
2
+ version: "0.2.0"
3
+ description: "Guides an agent through resolving a GitHub issue on any repository: validates the issue URL, returns GitHub API endpoints, and provides sequential stage checklists with conditional verify, commit, and pull request gates."
4
+ short_description: "GitHub issue resolver: URL prep, staged checklists, and commit-message gate."
5
+ issuer:
6
+ name: Ross Peili
7
+ email: vpeilivanidis@gmail.com
8
+ github: rosspeili
9
+ org: ARPAHLS
10
+ requirements: []
11
+ env_vars:
12
+ GITHUB_TOKEN:
13
+ description: "Optional GitHub Personal Access Token. Raises the API rate limit from 60 to 5000 requests per hour. Required for private repositories."
14
+ required: false
15
+ parameters:
16
+ type: object
17
+ properties:
18
+ action:
19
+ type: string
20
+ description: "Workflow action: prepare (default), workflow_overview, stage_checklist, validate_commit_message."
21
+ enum:
22
+ - prepare
23
+ - workflow_overview
24
+ - stage_checklist
25
+ - validate_commit_message
26
+ issue_url:
27
+ type: string
28
+ description: "Required for action prepare. Full GitHub issue URL."
29
+ stage:
30
+ type: string
31
+ description: "Required for action stage_checklist. One of discover_issue, discover_repository, analyze, plan, implement, verify, pre_commit, commit, pull_request."
32
+ message:
33
+ type: string
34
+ description: "Required for action validate_commit_message. Proposed git commit message body."
35
+ allow_ai_coauthor:
36
+ type: boolean
37
+ description: "When true, allow Co-authored-by trailers that credit AI tools. Default false."
38
+ extra_instructions:
39
+ type: string
40
+ description: "Optional caller context. Supplements but does not override the workflow or constitution."
41
+ github_token:
42
+ type: string
43
+ description: "Optional GitHub token at runtime. Takes precedence over GITHUB_TOKEN env var."
44
+ required: []
45
+ outputs:
46
+ status:
47
+ type: string
48
+ description: "ready, rejected, or error."
49
+ workflow_version:
50
+ type: string
51
+ description: "Workflow schema version (0.2)."
52
+ constitution: |
53
+ 1. Apply to any public or authenticated GitHub repository; do not assume Skillware or fixed directory layouts.
54
+ 2. Follow workflow stages in order; use stage_checklist conditionals that apply to the target repository.
55
+ 3. Never fabricate file paths; list only paths confirmed from the issue or repository tree.
56
+ 4. Wait for explicit approval after plan before implementation.
57
+ 5. Run validate_commit_message before commit unless the operator explicitly skips commit stages.
58
+ 6. Keep skill output deterministic and JSON-serializable; the skill does not call GitHub, run git, or write code.
59
+ 7. Respect extra_instructions unless they conflict with points 1-6.
60
+ 8. Do not add AI agent Co-authored-by trailers in commit messages unless allow_ai_coauthor is true.
61
+ presentation:
62
+ icon: "git-pull-request"
63
+ color: "#6E57E0"
@@ -1,3 +1,4 @@
1
+ import importlib.util
1
2
  import os
2
3
  import re
3
4
  from typing import Any, Dict
@@ -5,20 +6,50 @@ from typing import Any, Dict
5
6
  from skillware.core.base_skill import BaseSkill
6
7
 
7
8
 
9
+ def _import_workflow():
10
+ try:
11
+ from . import workflow as wf # type: ignore[import-not-found]
12
+ except ImportError:
13
+ wf_path = os.path.join(os.path.dirname(__file__), "workflow.py")
14
+ spec = importlib.util.spec_from_file_location(
15
+ "issue_resolver_workflow", wf_path
16
+ )
17
+ if spec is None or spec.loader is None:
18
+ raise ImportError(f"Cannot load workflow module from {wf_path}")
19
+ wf = importlib.util.module_from_spec(spec)
20
+ spec.loader.exec_module(wf)
21
+ return wf
22
+
23
+
24
+ _wf = _import_workflow()
25
+ WORKFLOW_VERSION = _wf.WORKFLOW_VERSION
26
+ get_stage_checklist = _wf.get_stage_checklist
27
+ get_workflow_overview = _wf.get_workflow_overview
28
+ validate_commit_message = _wf.validate_commit_message
29
+
30
+
8
31
  class IssueResolverSkill(BaseSkill):
9
32
  """
10
- Parses and validates inputs for the Issue Resolver skill, then returns a
11
- structured prompt payload the calling agent uses to perform analysis.
33
+ Universal GitHub issue resolution assistant for any repository.
12
34
 
13
- The skill itself does not call the GitHub API or write code. It normalises
14
- inputs, resolves credentials, builds a deterministic analysis context, and
15
- hands control back to the agent's own reasoning and tool-use capabilities.
35
+ The skill does not call GitHub, run git, or write code. It returns
36
+ deterministic workflow payloads, stage checklists with conditional logic,
37
+ and commit-message gates for the calling agent to execute in order.
16
38
  """
17
39
 
18
40
  _GITHUB_ISSUE_RE = re.compile(
19
41
  r"https?://github\.com/(?P<owner>[^/]+)/(?P<repo>[^/]+)/issues/(?P<number>\d+)"
20
42
  )
21
43
 
44
+ _VALID_ACTIONS = frozenset(
45
+ {
46
+ "prepare",
47
+ "workflow_overview",
48
+ "stage_checklist",
49
+ "validate_commit_message",
50
+ }
51
+ )
52
+
22
53
  @property
23
54
  def manifest(self) -> Dict[str, Any]:
24
55
  manifest_path = os.path.join(os.path.dirname(__file__), "manifest.yaml")
@@ -30,11 +61,6 @@ class IssueResolverSkill(BaseSkill):
30
61
  return {}
31
62
 
32
63
  def _parse_issue_url(self, url: str) -> Dict[str, str]:
33
- """
34
- Extracts owner, repo, and issue number from a GitHub issue URL.
35
- Returns a dict with keys: owner, repo, number, api_url, raw_url.
36
- Raises ValueError if the URL does not match the expected pattern.
37
- """
38
64
  match = self._GITHUB_ISSUE_RE.match(url.strip())
39
65
  if not match:
40
66
  raise ValueError(
@@ -55,10 +81,6 @@ class IssueResolverSkill(BaseSkill):
55
81
  }
56
82
 
57
83
  def _resolve_token(self, params: Dict[str, Any]) -> str:
58
- """
59
- Returns the GitHub token to use, preferring the runtime parameter over
60
- the environment variable. Returns an empty string if neither is set.
61
- """
62
84
  token = (params.get("github_token") or "").strip()
63
85
  if not token:
64
86
  token = (
@@ -66,20 +88,18 @@ class IssueResolverSkill(BaseSkill):
66
88
  )
67
89
  return token
68
90
 
69
- def execute(self, params: Dict[str, Any]) -> Dict[str, Any]:
70
- """
71
- Validates inputs and returns a structured analysis context.
72
-
73
- The returned dict contains everything the calling agent needs to begin
74
- the resolution workflow using its own tools (HTTP fetching, file
75
- inspection, reasoning). The agent should follow the instructions in
76
- instructions.md when interpreting this payload.
77
- """
91
+ def _action(self, params: Dict[str, Any]) -> str:
92
+ action = (params.get("action") or "prepare").strip().lower()
93
+ if action not in self._VALID_ACTIONS:
94
+ return "__invalid__"
95
+ return action
96
+
97
+ def _prepare(self, params: Dict[str, Any]) -> Dict[str, Any]:
78
98
  issue_url = (params.get("issue_url") or "").strip()
79
99
  if not issue_url:
80
100
  return {
81
101
  "status": "error",
82
- "message": "issue_url is required and must not be empty.",
102
+ "message": "issue_url is required for action prepare.",
83
103
  }
84
104
 
85
105
  try:
@@ -102,6 +122,8 @@ class IssueResolverSkill(BaseSkill):
102
122
 
103
123
  return {
104
124
  "status": "ready",
125
+ "action": "prepare",
126
+ "workflow_version": WORKFLOW_VERSION,
105
127
  "issue": {
106
128
  "url": parsed["raw_url"],
107
129
  "api_url": parsed["api_url"],
@@ -131,8 +153,55 @@ class IssueResolverSkill(BaseSkill):
131
153
  },
132
154
  "extra_instructions": extra_instructions or None,
133
155
  "next_step": (
134
- "Follow the workflow in instructions.md. Fetch the issue, "
135
- "read the repository context, then produce the structured "
136
- "resolution plan as described."
156
+ "Call action workflow_overview or stage_checklist for discover_issue. "
157
+ "Follow instructions.md stages in order; do not skip gates."
137
158
  ),
138
159
  }
160
+
161
+ def _stage_checklist(self, params: Dict[str, Any]) -> Dict[str, Any]:
162
+ stage = (params.get("stage") or "").strip().lower()
163
+ if not stage:
164
+ return {
165
+ "status": "error",
166
+ "message": "stage is required for action stage_checklist.",
167
+ }
168
+ payload = get_stage_checklist(stage)
169
+ if payload is None:
170
+ return {
171
+ "status": "error",
172
+ "message": f"Unknown stage {stage!r}. Call workflow_overview for valid names.",
173
+ }
174
+ payload["action"] = "stage_checklist"
175
+ return payload
176
+
177
+ def _validate_commit_message(self, params: Dict[str, Any]) -> Dict[str, Any]:
178
+ message = params.get("message")
179
+ if message is None or not str(message).strip():
180
+ return {
181
+ "status": "error",
182
+ "message": "message is required for action validate_commit_message.",
183
+ }
184
+ allow = bool(params.get("allow_ai_coauthor", False))
185
+ result = validate_commit_message(str(message), allow_ai_coauthor=allow)
186
+ result["action"] = "validate_commit_message"
187
+ return result
188
+
189
+ def execute(self, params: Dict[str, Any]) -> Dict[str, Any]:
190
+ action = self._action(params)
191
+ if action == "__invalid__":
192
+ allowed = ", ".join(sorted(self._VALID_ACTIONS))
193
+ return {
194
+ "status": "error",
195
+ "message": f"Unknown action. Supported actions: {allowed}.",
196
+ }
197
+ if action == "prepare":
198
+ return self._prepare(params)
199
+ if action == "workflow_overview":
200
+ overview = get_workflow_overview()
201
+ overview["action"] = "workflow_overview"
202
+ return overview
203
+ if action == "stage_checklist":
204
+ return self._stage_checklist(params)
205
+ if action == "validate_commit_message":
206
+ return self._validate_commit_message(params)
207
+ return {"status": "error", "message": "Unhandled action."}