skillware 0.4.0__tar.gz → 0.4.2__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.4.0/skillware.egg-info → skillware-0.4.2}/PKG-INFO +16 -2
- {skillware-0.4.0 → skillware-0.4.2}/README.md +15 -1
- {skillware-0.4.0 → skillware-0.4.2}/pyproject.toml +1 -1
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/instructions.md +1 -1
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/manifest.yaml +1 -1
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/test_skill.py +2 -1
- skillware-0.4.2/skills/finance/uk_companies_house_handler/card.json +21 -0
- skillware-0.4.2/skills/finance/uk_companies_house_handler/data/api_index.json +127 -0
- skillware-0.4.2/skills/finance/uk_companies_house_handler/data/terminology_map.yaml +107 -0
- skillware-0.4.2/skills/finance/uk_companies_house_handler/instructions.md +73 -0
- skillware-0.4.2/skills/finance/uk_companies_house_handler/manifest.yaml +67 -0
- skillware-0.4.2/skills/finance/uk_companies_house_handler/skill.py +618 -0
- skillware-0.4.2/skills/finance/uk_companies_house_handler/test_skill.py +528 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/office/pdf_form_filler/manifest.yaml +1 -1
- {skillware-0.4.0 → skillware-0.4.2}/skills/office/pdf_form_filler/test_skill.py +1 -0
- {skillware-0.4.0 → skillware-0.4.2}/skillware/cli.py +68 -18
- skillware-0.4.2/skillware/core/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skillware/core/loader.py +121 -7
- {skillware-0.4.0 → skillware-0.4.2}/skillware/version_policy.py +4 -4
- {skillware-0.4.0 → skillware-0.4.2/skillware.egg-info}/PKG-INFO +16 -2
- {skillware-0.4.0 → skillware-0.4.2}/skillware.egg-info/SOURCES.txt +8 -0
- {skillware-0.4.0 → skillware-0.4.2}/tests/test_cli.py +5 -5
- {skillware-0.4.0 → skillware-0.4.2}/tests/test_loader.py +159 -1
- {skillware-0.4.0 → skillware-0.4.2}/tests/test_version_policy.py +21 -9
- {skillware-0.4.0 → skillware-0.4.2}/LICENSE +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/MANIFEST.in +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/setup.cfg +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/mica_module/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/mica_module/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/mica_module/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/mica_module/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/mica_module/mica_corpus.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/mica_module/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/mica_module/test_skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/pii_masker/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/pii_masker/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/pii_masker/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/pii_masker/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/pii_masker/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/pii_masker/test_skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/tos_evaluator/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/tos_evaluator/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/tos_evaluator/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/tos_evaluator/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/tos_evaluator/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/compliance/tos_evaluator/test_skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/test_skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/test_skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/abis.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/config.yaml.example +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/data/addressbook.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/data/chains.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/data/tokens.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/defi/evm_tx_handler/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/dev_tools/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/dev_tools/issue_resolver/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/dev_tools/issue_resolver/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/dev_tools/issue_resolver/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/dev_tools/issue_resolver/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/dev_tools/issue_resolver/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/dev_tools/issue_resolver/test_skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/dev_tools/issue_resolver/workflow.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/__init__.py +0 -0
- {skillware-0.4.0/skills/office → skillware-0.4.2/skills/finance/uk_companies_house_handler}/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/data/entities.ftm.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/data/malicious_scs_2025.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/data/normalized_fbi_lazarus_20250722_180019.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/data/normalized_israel_nbctf_20250722_180019.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/data/normalized_uniswap_trm.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/maintenance/normalization_tool.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/maintenance/normalize_uniswap_trm.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/finance/wallet_screening/test_skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/monitoring/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/monitoring/token_limiter/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/monitoring/token_limiter/budget.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/monitoring/token_limiter/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/monitoring/token_limiter/data/model_pricing.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/monitoring/token_limiter/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/monitoring/token_limiter/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/monitoring/token_limiter/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/monitoring/token_limiter/test_skill.py +0 -0
- {skillware-0.4.0/skills/office/pdf_form_filler → skillware-0.4.2/skills/office}/__init__.py +0 -0
- {skillware-0.4.0/skills/optimization → skillware-0.4.2/skills/office/pdf_form_filler}/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/office/pdf_form_filler/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/office/pdf_form_filler/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/office/pdf_form_filler/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/office/pdf_form_filler/utils.py +0 -0
- {skillware-0.4.0/skills/wellness → skillware-0.4.2/skills/optimization}/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/optimization/prompt_rewriter/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/optimization/prompt_rewriter/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/optimization/prompt_rewriter/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/optimization/prompt_rewriter/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/optimization/prompt_rewriter/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/optimization/prompt_rewriter/test_skill.py +0 -0
- {skillware-0.4.0/skillware → skillware-0.4.2/skills/wellness}/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/card.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/constraints.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/crisis_gate.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/instructions.md +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/kb/corpus.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/kb/crisis_resources.json +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/kb/hard_constraints.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/kb_provider.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/manifest.yaml +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/resources.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skills/wellness/mental_coach/test_skill.py +0 -0
- {skillware-0.4.0/skillware/core → skillware-0.4.2/skillware}/__init__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skillware/__main__.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skillware/core/base_skill.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skillware/core/env.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skillware.egg-info/dependency_links.txt +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skillware.egg-info/entry_points.txt +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skillware.egg-info/requires.txt +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/skillware.egg-info/top_level.txt +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/tests/test_registry_docs.py +0 -0
- {skillware-0.4.0 → skillware-0.4.2}/tests/test_skill_issuer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skillware
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
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
|
|
@@ -88,6 +88,7 @@ Dynamic: license-file
|
|
|
88
88
|
|
|
89
89
|
<div align="center">
|
|
90
90
|
<a href="#mission">Mission</a> •
|
|
91
|
+
<a href="#how-it-works">How it works</a> •
|
|
91
92
|
<a href="#architecture">Architecture</a> •
|
|
92
93
|
<a href="#quick-start">Quick Start</a> •
|
|
93
94
|
<a href="#documentation">Documentation</a> •
|
|
@@ -119,6 +120,18 @@ A **Skill** in this framework provides everything an Agent needs to master a dom
|
|
|
119
120
|
|
|
120
121
|
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 ↗</a>.
|
|
121
122
|
|
|
123
|
+
## How it works
|
|
124
|
+
|
|
125
|
+
```mermaid
|
|
126
|
+
flowchart LR
|
|
127
|
+
Registry[Registry] -->|Load| Loader[Loader]
|
|
128
|
+
Loader -->|Adapt| Host[Host]
|
|
129
|
+
Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
|
|
130
|
+
LogicalSystems -->|Tool Call| Host
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Install the registry once. Skillware loads a bundle and adapts it to your model's tool format — you run the loop. For details on how the loader turns the manifest into a tool, see the [Introduction](docs/introduction.md).
|
|
134
|
+
|
|
122
135
|
## Architecture
|
|
123
136
|
|
|
124
137
|
This repository is organized into a core framework, a registry of skills, and
|
|
@@ -225,9 +238,10 @@ load_env_file()
|
|
|
225
238
|
# 1. Load the Skill from the Registry
|
|
226
239
|
# The loader reads the code, manifest, and instructions automatically
|
|
227
240
|
skill_bundle = SkillLoader.load_skill("finance/wallet_screening")
|
|
228
|
-
skill = skill_bundle["
|
|
241
|
+
skill = skill_bundle["class"](
|
|
229
242
|
config={"ETHERSCAN_API_KEY": os.environ.get("ETHERSCAN_API_KEY")}
|
|
230
243
|
)
|
|
244
|
+
# Or: skill = skill_bundle["module"].WalletScreeningSkill(config={...})
|
|
231
245
|
|
|
232
246
|
# 2. Client & Tool Setup
|
|
233
247
|
client = genai.Client()
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
<div align="center">
|
|
19
19
|
<a href="#mission">Mission</a> •
|
|
20
|
+
<a href="#how-it-works">How it works</a> •
|
|
20
21
|
<a href="#architecture">Architecture</a> •
|
|
21
22
|
<a href="#quick-start">Quick Start</a> •
|
|
22
23
|
<a href="#documentation">Documentation</a> •
|
|
@@ -48,6 +49,18 @@ A **Skill** in this framework provides everything an Agent needs to master a dom
|
|
|
48
49
|
|
|
49
50
|
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 ↗</a>.
|
|
50
51
|
|
|
52
|
+
## How it works
|
|
53
|
+
|
|
54
|
+
```mermaid
|
|
55
|
+
flowchart LR
|
|
56
|
+
Registry[Registry] -->|Load| Loader[Loader]
|
|
57
|
+
Loader -->|Adapt| Host[Host]
|
|
58
|
+
Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
|
|
59
|
+
LogicalSystems -->|Tool Call| Host
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Install the registry once. Skillware loads a bundle and adapts it to your model's tool format — you run the loop. For details on how the loader turns the manifest into a tool, see the [Introduction](docs/introduction.md).
|
|
63
|
+
|
|
51
64
|
## Architecture
|
|
52
65
|
|
|
53
66
|
This repository is organized into a core framework, a registry of skills, and
|
|
@@ -154,9 +167,10 @@ load_env_file()
|
|
|
154
167
|
# 1. Load the Skill from the Registry
|
|
155
168
|
# The loader reads the code, manifest, and instructions automatically
|
|
156
169
|
skill_bundle = SkillLoader.load_skill("finance/wallet_screening")
|
|
157
|
-
skill = skill_bundle["
|
|
170
|
+
skill = skill_bundle["class"](
|
|
158
171
|
config={"ETHERSCAN_API_KEY": os.environ.get("ETHERSCAN_API_KEY")}
|
|
159
172
|
)
|
|
173
|
+
# Or: skill = skill_bundle["module"].WalletScreeningSkill(config={...})
|
|
160
174
|
|
|
161
175
|
# 2. Client & Tool Setup
|
|
162
176
|
client = genai.Client()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# EVM Transaction Handler
|
|
2
2
|
|
|
3
|
-
You are equipped with **`evm_tx_handler`**: a deterministic EVM tool for a **dedicated agent wallet** on Ethereum and Base.
|
|
3
|
+
You are equipped with **`defi/evm_tx_handler`**: a deterministic EVM tool for a **dedicated agent wallet** on Ethereum and Base.
|
|
4
4
|
|
|
5
5
|
## Your job vs the skill's job
|
|
6
6
|
|
|
@@ -81,12 +81,13 @@ def manifest():
|
|
|
81
81
|
|
|
82
82
|
def test_manifest_consistency(skill, manifest):
|
|
83
83
|
assert skill.manifest["name"] == manifest["name"]
|
|
84
|
+
assert manifest["name"] == "defi/evm_tx_handler"
|
|
84
85
|
|
|
85
86
|
|
|
86
87
|
def test_loader_loads_skill(monkeypatch):
|
|
87
88
|
monkeypatch.setenv("AGENT_WALLET_PRIVATE_KEY", TEST_KEY)
|
|
88
89
|
bundle = SkillLoader.load_skill("defi/evm_tx_handler")
|
|
89
|
-
assert bundle["manifest"]["name"] == "evm_tx_handler"
|
|
90
|
+
assert bundle["manifest"]["name"] == "defi/evm_tx_handler"
|
|
90
91
|
cls = bundle["module"].EvmTxHandlerSkill
|
|
91
92
|
instance = cls()
|
|
92
93
|
assert (
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "UK Companies House Handler",
|
|
3
|
+
"description": "Search, profile, officers, PSC, and filing history for UK-registered companies via Companies House API.",
|
|
4
|
+
"issuer": {
|
|
5
|
+
"name": "Areen Agrawal",
|
|
6
|
+
"email": "agrawalareen09@gmail.com",
|
|
7
|
+
"github": "Areen-09",
|
|
8
|
+
"org": "ARPAHLS"
|
|
9
|
+
},
|
|
10
|
+
"icon": "building-columns",
|
|
11
|
+
"color": "teal",
|
|
12
|
+
"ui_schema": {
|
|
13
|
+
"type": "card",
|
|
14
|
+
"fields": [
|
|
15
|
+
{"key": "status", "label": "Status", "type": "status_badge"},
|
|
16
|
+
{"key": "company_number", "label": "Company No."},
|
|
17
|
+
{"key": "company_name", "label": "Company Name"},
|
|
18
|
+
{"key": "company_status", "label": "Company Status", "type": "status_badge"}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"base_url": "https://api.company-information.service.gov.uk",
|
|
3
|
+
"auth": {
|
|
4
|
+
"method": "http_basic",
|
|
5
|
+
"username": "api_key",
|
|
6
|
+
"password": "empty",
|
|
7
|
+
"docs": "https://developer.company-information.service.gov.uk/"
|
|
8
|
+
},
|
|
9
|
+
"rate_limit": {
|
|
10
|
+
"requests_per_five_minutes": 600,
|
|
11
|
+
"note": "Rate limits apply per API key. 429 responses indicate throttling."
|
|
12
|
+
},
|
|
13
|
+
"endpoints": {
|
|
14
|
+
"search_companies": {
|
|
15
|
+
"method": "GET",
|
|
16
|
+
"path": "/search/companies",
|
|
17
|
+
"description": "Search for companies by name or number.",
|
|
18
|
+
"params": {
|
|
19
|
+
"q": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"required": true,
|
|
22
|
+
"description": "Company name or number search query"
|
|
23
|
+
},
|
|
24
|
+
"items_per_page": {
|
|
25
|
+
"type": "integer",
|
|
26
|
+
"required": false,
|
|
27
|
+
"default": 20,
|
|
28
|
+
"max": 100,
|
|
29
|
+
"description": "Number of results per page"
|
|
30
|
+
},
|
|
31
|
+
"start_index": {
|
|
32
|
+
"type": "integer",
|
|
33
|
+
"required": false,
|
|
34
|
+
"default": 0,
|
|
35
|
+
"description": "Offset for pagination"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"response_key": "items"
|
|
39
|
+
},
|
|
40
|
+
"get_company_profile": {
|
|
41
|
+
"method": "GET",
|
|
42
|
+
"path": "/company/{company_number}",
|
|
43
|
+
"description": "Get the full profile for a specific company.",
|
|
44
|
+
"params": {},
|
|
45
|
+
"response_key": null
|
|
46
|
+
},
|
|
47
|
+
"get_officers": {
|
|
48
|
+
"method": "GET",
|
|
49
|
+
"path": "/company/{company_number}/officers",
|
|
50
|
+
"description": "List officers (directors, secretaries) for a company.",
|
|
51
|
+
"params": {
|
|
52
|
+
"items_per_page": {
|
|
53
|
+
"type": "integer",
|
|
54
|
+
"required": false,
|
|
55
|
+
"description": "Number of results per page"
|
|
56
|
+
},
|
|
57
|
+
"start_index": {
|
|
58
|
+
"type": "integer",
|
|
59
|
+
"required": false,
|
|
60
|
+
"description": "Offset for pagination"
|
|
61
|
+
},
|
|
62
|
+
"order_by": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"required": false,
|
|
65
|
+
"enum": ["appointed_on", "resigned_on", "surname"],
|
|
66
|
+
"description": "Sort order for results"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"response_key": "items"
|
|
70
|
+
},
|
|
71
|
+
"get_pscs": {
|
|
72
|
+
"method": "GET",
|
|
73
|
+
"path": "/company/{company_number}/persons-with-significant-control",
|
|
74
|
+
"description": "List persons with significant control (beneficial owners).",
|
|
75
|
+
"params": {
|
|
76
|
+
"items_per_page": {
|
|
77
|
+
"type": "integer",
|
|
78
|
+
"required": false,
|
|
79
|
+
"description": "Number of results per page"
|
|
80
|
+
},
|
|
81
|
+
"start_index": {
|
|
82
|
+
"type": "integer",
|
|
83
|
+
"required": false,
|
|
84
|
+
"description": "Offset for pagination"
|
|
85
|
+
},
|
|
86
|
+
"register_view": {
|
|
87
|
+
"type": "boolean",
|
|
88
|
+
"required": false,
|
|
89
|
+
"description": "Show only active PSCs when true"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"response_key": "items"
|
|
93
|
+
},
|
|
94
|
+
"get_filing_history": {
|
|
95
|
+
"method": "GET",
|
|
96
|
+
"path": "/company/{company_number}/filing-history",
|
|
97
|
+
"description": "List filing history for a company.",
|
|
98
|
+
"params": {
|
|
99
|
+
"category": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"required": false,
|
|
102
|
+
"description": "Filter by filing category (e.g. accounts, confirmation-statement)"
|
|
103
|
+
},
|
|
104
|
+
"items_per_page": {
|
|
105
|
+
"type": "integer",
|
|
106
|
+
"required": false,
|
|
107
|
+
"description": "Number of results per page"
|
|
108
|
+
},
|
|
109
|
+
"start_index": {
|
|
110
|
+
"type": "integer",
|
|
111
|
+
"required": false,
|
|
112
|
+
"description": "Offset for pagination"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"response_key": "items"
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"v2_planned": [
|
|
119
|
+
"charges",
|
|
120
|
+
"registers",
|
|
121
|
+
"insolvency",
|
|
122
|
+
"document_metadata",
|
|
123
|
+
"document_fetch",
|
|
124
|
+
"search_officers",
|
|
125
|
+
"search_disqualified_officers"
|
|
126
|
+
]
|
|
127
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Maps common (often US-centric) business terms to their UK Companies House
|
|
2
|
+
# equivalents. The skill and instructions.md reference this so agents do not
|
|
3
|
+
# hallucinate wrong roles or entity types.
|
|
4
|
+
|
|
5
|
+
role_mappings:
|
|
6
|
+
ceo: director
|
|
7
|
+
chief_executive_officer: director
|
|
8
|
+
chief_executive: director
|
|
9
|
+
president: director
|
|
10
|
+
chairman: director
|
|
11
|
+
chairwoman: director
|
|
12
|
+
chairperson: director
|
|
13
|
+
board_member: director
|
|
14
|
+
managing_director: director
|
|
15
|
+
executive_director: director
|
|
16
|
+
non_executive_director: director
|
|
17
|
+
cfo: director
|
|
18
|
+
cto: director
|
|
19
|
+
coo: director
|
|
20
|
+
secretary: secretary
|
|
21
|
+
company_secretary: secretary
|
|
22
|
+
corporate_secretary: secretary
|
|
23
|
+
owner: person_with_significant_control
|
|
24
|
+
shareholder: person_with_significant_control
|
|
25
|
+
beneficial_owner: person_with_significant_control
|
|
26
|
+
stakeholder: person_with_significant_control
|
|
27
|
+
majority_owner: person_with_significant_control
|
|
28
|
+
controlling_shareholder: person_with_significant_control
|
|
29
|
+
partner: llp_designated_member
|
|
30
|
+
general_partner: llp_designated_member
|
|
31
|
+
limited_partner: llp_member
|
|
32
|
+
|
|
33
|
+
entity_types:
|
|
34
|
+
corporation: ltd
|
|
35
|
+
inc: ltd
|
|
36
|
+
incorporated: ltd
|
|
37
|
+
limited: ltd
|
|
38
|
+
llc: ltd
|
|
39
|
+
co: ltd
|
|
40
|
+
company: ltd
|
|
41
|
+
public_company: plc
|
|
42
|
+
public_limited_company: plc
|
|
43
|
+
partnership: llp
|
|
44
|
+
limited_liability_partnership: llp
|
|
45
|
+
limited_partnership: lp
|
|
46
|
+
community_interest_company: cic
|
|
47
|
+
charity: charitable-incorporated-organisation
|
|
48
|
+
|
|
49
|
+
status_mappings:
|
|
50
|
+
operating: active
|
|
51
|
+
open: active
|
|
52
|
+
running: active
|
|
53
|
+
trading: active
|
|
54
|
+
closed: dissolved
|
|
55
|
+
shutdown: dissolved
|
|
56
|
+
bankrupt: liquidation
|
|
57
|
+
insolvent: liquidation
|
|
58
|
+
in_administration: administration
|
|
59
|
+
winding_up: liquidation
|
|
60
|
+
struck_off: dissolved
|
|
61
|
+
dormant: dormant
|
|
62
|
+
|
|
63
|
+
document_types:
|
|
64
|
+
annual_report: annual-return
|
|
65
|
+
10k: accounts
|
|
66
|
+
10q: confirmation-statement
|
|
67
|
+
financial_statements: accounts
|
|
68
|
+
balance_sheet: accounts
|
|
69
|
+
income_statement: accounts
|
|
70
|
+
articles: incorporation
|
|
71
|
+
articles_of_incorporation: incorporation
|
|
72
|
+
bylaws: incorporation
|
|
73
|
+
charter: incorporation
|
|
74
|
+
annual_filing: confirmation-statement
|
|
75
|
+
registration: incorporation
|
|
76
|
+
|
|
77
|
+
# Maps user intent keywords to the appropriate skill action
|
|
78
|
+
intent_to_action:
|
|
79
|
+
search: resolve_company
|
|
80
|
+
find: resolve_company
|
|
81
|
+
lookup: resolve_company
|
|
82
|
+
look_up: resolve_company
|
|
83
|
+
who_is: get_officers
|
|
84
|
+
directors: get_officers
|
|
85
|
+
officers: get_officers
|
|
86
|
+
board: get_officers
|
|
87
|
+
management: get_officers
|
|
88
|
+
leadership: get_officers
|
|
89
|
+
ceo: get_officers
|
|
90
|
+
owner: get_pscs
|
|
91
|
+
owners: get_pscs
|
|
92
|
+
ownership: get_pscs
|
|
93
|
+
shareholder: get_pscs
|
|
94
|
+
shareholders: get_pscs
|
|
95
|
+
beneficial_owner: get_pscs
|
|
96
|
+
psc: get_pscs
|
|
97
|
+
filings: get_filing_history
|
|
98
|
+
filing: get_filing_history
|
|
99
|
+
accounts: get_filing_history
|
|
100
|
+
annual_return: get_filing_history
|
|
101
|
+
documents: get_filing_history
|
|
102
|
+
profile: get_company_profile
|
|
103
|
+
details: get_company_profile
|
|
104
|
+
info: get_company_profile
|
|
105
|
+
information: get_company_profile
|
|
106
|
+
status: get_company_profile
|
|
107
|
+
registered: get_company_profile
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# UK Companies House Handler — Instructions
|
|
2
|
+
|
|
3
|
+
You are an agent equipped with the `finance/uk_companies_house_handler` skill. This tool lets you query the UK Companies House registry for company information, officers, ownership, and filing history through structured actions.
|
|
4
|
+
|
|
5
|
+
## When to use
|
|
6
|
+
|
|
7
|
+
Use this skill when the user:
|
|
8
|
+
|
|
9
|
+
- Asks about a UK company (registered in England, Wales, Scotland, or Northern Ireland).
|
|
10
|
+
- Wants to know who runs, owns, or controls a UK company.
|
|
11
|
+
- Asks about directors, officers, or "the CEO" of a UK company.
|
|
12
|
+
- Requests filing history, accounts, or annual returns for a UK company.
|
|
13
|
+
- Mentions "Companies House" or refers to a UK company number (8 characters, e.g. 00102498).
|
|
14
|
+
- Asks about beneficial owners, PSCs, or persons with significant control.
|
|
15
|
+
|
|
16
|
+
## UK Terminology — Critical
|
|
17
|
+
|
|
18
|
+
UK companies do **not** use the term "CEO" in a legal sense. When a user says "CEO", "president", or "chairman", you should look up **directors** via the `get_officers` action. The skill includes a terminology map:
|
|
19
|
+
|
|
20
|
+
| User says | UK equivalent | Skill action |
|
|
21
|
+
| :--- | :--- | :--- |
|
|
22
|
+
| CEO, president, chairman | Director | `get_officers` |
|
|
23
|
+
| Owner, shareholder, beneficial owner | Person with Significant Control (PSC) | `get_pscs` |
|
|
24
|
+
| Secretary, corporate secretary | Secretary | `get_officers` |
|
|
25
|
+
| Annual report, 10-K, financials | Accounts / Confirmation Statement | `get_filing_history` |
|
|
26
|
+
| Company, corporation, LLC | Ltd, PLC, LLP | `resolve_company` |
|
|
27
|
+
|
|
28
|
+
Always inform the user about these terminology differences when presenting results.
|
|
29
|
+
|
|
30
|
+
## Available actions
|
|
31
|
+
|
|
32
|
+
| Action | Purpose | Required params |
|
|
33
|
+
| :--- | :--- | :--- |
|
|
34
|
+
| `resolve_company` | Search by name, get ranked candidates | `query` |
|
|
35
|
+
| `get_company_profile` | Full profile by company number | `company_number` |
|
|
36
|
+
| `get_officers` | List directors and secretaries | `company_number` |
|
|
37
|
+
| `get_pscs` | List persons with significant control | `company_number` |
|
|
38
|
+
| `get_filing_history` | List filings (accounts, returns, etc.) | `company_number` |
|
|
39
|
+
| `map_intent` | Translate intent keywords to action pipeline | `intent_keywords` or `entities` |
|
|
40
|
+
|
|
41
|
+
## Workflow — Always map intent first
|
|
42
|
+
|
|
43
|
+
1. **Always map intent first.** For every new user request, you MUST start by calling the `map_intent` action with the user's `intent_keywords` (as a comma-separated string) and `entities` (if applicable).
|
|
44
|
+
2. Read the `suggested_pipeline` returned by the `map_intent` action.
|
|
45
|
+
3. Follow the actions exactly as ordered in the `suggested_pipeline`.
|
|
46
|
+
4. If a step (like `resolve_company`) returns a status of `needs_input`, present the candidates to the user and wait for their choice before proceeding.
|
|
47
|
+
5. Once you have a confirmed `company_number`, continue with the remaining specific actions (`get_officers`, `get_pscs`, etc.) in your pipeline.
|
|
48
|
+
|
|
49
|
+
## Understanding responses
|
|
50
|
+
|
|
51
|
+
Every response includes a `status` field:
|
|
52
|
+
|
|
53
|
+
- **`ready`**: The data was fetched successfully. Present it to the user.
|
|
54
|
+
- **`needs_input`**: Multiple matches or missing information. Present the `candidates` to the user and ask for clarification. Use the `agent_hint` for guidance.
|
|
55
|
+
- **`error`**: Something went wrong. Check `error_code` and `message`. Common errors:
|
|
56
|
+
- `not_found`: Company number does not exist.
|
|
57
|
+
- `rate_limited`: Too many requests; wait and retry.
|
|
58
|
+
- `missing_company_number`: You need to resolve a company first.
|
|
59
|
+
|
|
60
|
+
Every response includes `fetched_at` (UTC timestamp) and `source` — always cite these when presenting data.
|
|
61
|
+
|
|
62
|
+
## Limitations
|
|
63
|
+
|
|
64
|
+
- **v1 scope only**: Search, profile, officers, PSC, and filing history. Charges, insolvency registers, and document downloads are not yet supported.
|
|
65
|
+
- **No filing submission**: This skill is read-only; it cannot submit documents to Companies House.
|
|
66
|
+
- **Rate limits**: Companies House API allows 600 requests per 5 minutes per key.
|
|
67
|
+
- **Public data only**: Only publicly available data is returned. No confidential or protected information.
|
|
68
|
+
|
|
69
|
+
## Safety
|
|
70
|
+
|
|
71
|
+
- This skill provides company information. **It is not legal or accounting advice.**
|
|
72
|
+
- Always include this disclaimer when presenting company data to users.
|
|
73
|
+
- Always cite the `company_number` and `fetched_at` timestamp so the user knows the data source and currency.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: finance/uk_companies_house_handler
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
description: |
|
|
4
|
+
Deterministic UK Companies House API handler for agents. Provides structured
|
|
5
|
+
operations for company search, profile lookup, officer and PSC listing, filing
|
|
6
|
+
history, and intent-to-operation mapping with UK corporate terminology
|
|
7
|
+
translation. Returns status-based responses (ready, needs_input, error) with
|
|
8
|
+
disambiguation support. The agent owns natural-language dialogue; the skill
|
|
9
|
+
returns structured candidates and next actions.
|
|
10
|
+
short_description: "UK Companies House search, officers, PSC, and filings via structured actions."
|
|
11
|
+
issuer:
|
|
12
|
+
name: Areen Agrawal
|
|
13
|
+
email: agrawalareen09@gmail.com
|
|
14
|
+
github: Areen-09
|
|
15
|
+
org: ARPAHLS
|
|
16
|
+
parameters:
|
|
17
|
+
type: object
|
|
18
|
+
properties:
|
|
19
|
+
action:
|
|
20
|
+
type: string
|
|
21
|
+
description: >
|
|
22
|
+
The operation to perform. One of: resolve_company, get_company_profile,
|
|
23
|
+
get_officers, get_pscs, get_filing_history, map_intent.
|
|
24
|
+
enum:
|
|
25
|
+
- resolve_company
|
|
26
|
+
- get_company_profile
|
|
27
|
+
- get_officers
|
|
28
|
+
- get_pscs
|
|
29
|
+
- get_filing_history
|
|
30
|
+
- map_intent
|
|
31
|
+
query:
|
|
32
|
+
type: string
|
|
33
|
+
description: "Company name or partial name for search (resolve_company)."
|
|
34
|
+
company_number:
|
|
35
|
+
type: string
|
|
36
|
+
description: "8-character UK company number (required for profile/officers/pscs/filing)."
|
|
37
|
+
active_only:
|
|
38
|
+
type: boolean
|
|
39
|
+
description: "Filter to current/active records only. Default false."
|
|
40
|
+
limit:
|
|
41
|
+
type: integer
|
|
42
|
+
description: "Max results to return (resolve_company). Default 5."
|
|
43
|
+
category:
|
|
44
|
+
type: string
|
|
45
|
+
description: "Filing category filter (get_filing_history)."
|
|
46
|
+
intent_keywords:
|
|
47
|
+
type: string
|
|
48
|
+
description: "Comma-separated keywords from user intent for map_intent action."
|
|
49
|
+
entities:
|
|
50
|
+
type: object
|
|
51
|
+
description: "Extracted entities for map_intent (e.g. company_query, role)."
|
|
52
|
+
required:
|
|
53
|
+
- action
|
|
54
|
+
constitution: |
|
|
55
|
+
1. Use only publicly available Companies House data.
|
|
56
|
+
2. Require COMPANIES_HOUSE_API_KEY via environment; never hardcode or log the key.
|
|
57
|
+
3. Do not cache personal data (officer names, addresses) beyond the current request.
|
|
58
|
+
4. Always cite company_number and data timestamp (fetched_at) in responses.
|
|
59
|
+
5. Never guess a company number; return ranked search hits when ambiguous.
|
|
60
|
+
6. This skill provides company information, not legal or accounting advice.
|
|
61
|
+
7. Do not submit filings or modify Companies House records.
|
|
62
|
+
env_vars:
|
|
63
|
+
COMPANIES_HOUSE_API_KEY:
|
|
64
|
+
description: "API key from the Companies House Developer Hub. Used as HTTP Basic username with empty password."
|
|
65
|
+
required: true
|
|
66
|
+
requirements:
|
|
67
|
+
- requests
|