agent-skillforge 0.1.0__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.
- agent_skillforge-0.1.0/LICENSE +21 -0
- agent_skillforge-0.1.0/PKG-INFO +84 -0
- agent_skillforge-0.1.0/README.md +54 -0
- agent_skillforge-0.1.0/pyproject.toml +63 -0
- agent_skillforge-0.1.0/setup.cfg +4 -0
- agent_skillforge-0.1.0/src/agent_skillforge.egg-info/PKG-INFO +84 -0
- agent_skillforge-0.1.0/src/agent_skillforge.egg-info/SOURCES.txt +30 -0
- agent_skillforge-0.1.0/src/agent_skillforge.egg-info/dependency_links.txt +1 -0
- agent_skillforge-0.1.0/src/agent_skillforge.egg-info/entry_points.txt +2 -0
- agent_skillforge-0.1.0/src/agent_skillforge.egg-info/requires.txt +12 -0
- agent_skillforge-0.1.0/src/agent_skillforge.egg-info/top_level.txt +1 -0
- agent_skillforge-0.1.0/src/skillforge/__init__.py +4 -0
- agent_skillforge-0.1.0/src/skillforge/__main__.py +6 -0
- agent_skillforge-0.1.0/src/skillforge/adapters.py +80 -0
- agent_skillforge-0.1.0/src/skillforge/builtin_skills/agent-observability/SKILL.md +19 -0
- agent_skillforge-0.1.0/src/skillforge/builtin_skills/caveman/SKILL.md +22 -0
- agent_skillforge-0.1.0/src/skillforge/builtin_skills/human-in-the-loop/SKILL.md +15 -0
- agent_skillforge-0.1.0/src/skillforge/builtin_skills/self-improving-agent/SKILL.md +15 -0
- agent_skillforge-0.1.0/src/skillforge/builtin_skills/spec-driven-development/SKILL.md +15 -0
- agent_skillforge-0.1.0/src/skillforge/builtin_skills/summarize/SKILL.md +17 -0
- agent_skillforge-0.1.0/src/skillforge/builtin_skills/tavily-search/SKILL.md +19 -0
- agent_skillforge-0.1.0/src/skillforge/cli.py +107 -0
- agent_skillforge-0.1.0/src/skillforge/errors.py +21 -0
- agent_skillforge-0.1.0/src/skillforge/mcp_server.py +92 -0
- agent_skillforge-0.1.0/src/skillforge/registry.py +151 -0
- agent_skillforge-0.1.0/src/skillforge/skill.py +76 -0
- agent_skillforge-0.1.0/tests/test_adapters.py +42 -0
- agent_skillforge-0.1.0/tests/test_builtins.py +52 -0
- agent_skillforge-0.1.0/tests/test_cli.py +79 -0
- agent_skillforge-0.1.0/tests/test_mcp_server.py +57 -0
- agent_skillforge-0.1.0/tests/test_registry.py +38 -0
- agent_skillforge-0.1.0/tests/test_skill.py +66 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 gintingism
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agent-skillforge
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Portable SKILL.md registry, adapters, CLI, and MCP server.
|
|
5
|
+
Author-email: gintingism <gintingism@users.noreply.github.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/gintingism/skillforge
|
|
8
|
+
Project-URL: Repository, https://github.com/gintingism/skillforge
|
|
9
|
+
Project-URL: Issues, https://github.com/gintingism/skillforge/issues
|
|
10
|
+
Project-URL: Documentation, https://gintingism.github.io/skillforge/
|
|
11
|
+
Keywords: skills,mcp,copilot,claude,developer-tools
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
16
|
+
Requires-Python: >=3.11
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: mcp>=2.3.0
|
|
20
|
+
Requires-Dist: PyYAML>=6.0
|
|
21
|
+
Requires-Dist: typer>=0.12
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
24
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
25
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
26
|
+
Requires-Dist: types-PyYAML>=6.0; extra == "dev"
|
|
27
|
+
Provides-Extra: docs
|
|
28
|
+
Requires-Dist: mkdocs-material>=9.5; extra == "docs"
|
|
29
|
+
Dynamic: license-file
|
|
30
|
+
|
|
31
|
+
# SkillForge
|
|
32
|
+
|
|
33
|
+
SkillForge is a dependency-light MVP for creating, validating, discovering, installing, and packaging portable `SKILL.md` files. The universal format uses YAML frontmatter with required `name` and `description` fields followed by Markdown instructions.
|
|
34
|
+
|
|
35
|
+
Documentation: https://gintingism.github.io/skillforge/
|
|
36
|
+
|
|
37
|
+
## Install
|
|
38
|
+
|
|
39
|
+
```powershell
|
|
40
|
+
python -m pip install agent-skillforge
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The CLI is exposed as `skillforge` (or `python -m skillforge.cli` in an environment configured for module execution).
|
|
44
|
+
|
|
45
|
+
## Usage
|
|
46
|
+
|
|
47
|
+
```powershell
|
|
48
|
+
skillforge create code-review --description "Review code carefully" --directory .\skills\code-review
|
|
49
|
+
skillforge validate .\skills\code-review\SKILL.md
|
|
50
|
+
skillforge pack .\skills\code-review --output .\code-review.zip
|
|
51
|
+
skillforge search review --registry .\.skillforge
|
|
52
|
+
skillforge install code-review --registry .\.skillforge --project .
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The local registry stores skills as `<registry>/<name>/SKILL.md`. The explicit built-in registry ships seven skills and acts as fallback after configured local skills. The registry interface is intentionally abstract so a GitHub-backed implementation can be added without changing CLI consumers. Installation detects `.github` for Copilot, `.claude` for Claude Code, and `.cursor` for Cursor. Copilot receives `.github/copilot-instructions.md`; Claude Code receives `.claude/skills/<name>/SKILL.md`; Cursor receives `.cursor/skills/<name>/SKILL.md`.
|
|
56
|
+
|
|
57
|
+
## MCP server
|
|
58
|
+
|
|
59
|
+
SkillForge uses the official MCP Python SDK. Install project dependencies, then configure an MCP client to run:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"mcpServers": {
|
|
64
|
+
"skillforge": {
|
|
65
|
+
"command": "skillforge",
|
|
66
|
+
"args": ["serve-mcp"],
|
|
67
|
+
"env": {
|
|
68
|
+
"SKILLFORGE_REGISTRY_PATH": "C:\\path\\to\\.skillforge"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The server exposes `skill://{name}` resources and read-only tools `search_skills`, `get_skill`, and `validate_skill`. Protocol messages use stdout; server logs use stderr. `server.json` contains the same launcher metadata.
|
|
76
|
+
|
|
77
|
+
## Development
|
|
78
|
+
|
|
79
|
+
```powershell
|
|
80
|
+
python -m pip install -e ".[dev]"
|
|
81
|
+
python -m pytest
|
|
82
|
+
python -m mypy src
|
|
83
|
+
mkdocs build --strict
|
|
84
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# SkillForge
|
|
2
|
+
|
|
3
|
+
SkillForge is a dependency-light MVP for creating, validating, discovering, installing, and packaging portable `SKILL.md` files. The universal format uses YAML frontmatter with required `name` and `description` fields followed by Markdown instructions.
|
|
4
|
+
|
|
5
|
+
Documentation: https://gintingism.github.io/skillforge/
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```powershell
|
|
10
|
+
python -m pip install agent-skillforge
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The CLI is exposed as `skillforge` (or `python -m skillforge.cli` in an environment configured for module execution).
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```powershell
|
|
18
|
+
skillforge create code-review --description "Review code carefully" --directory .\skills\code-review
|
|
19
|
+
skillforge validate .\skills\code-review\SKILL.md
|
|
20
|
+
skillforge pack .\skills\code-review --output .\code-review.zip
|
|
21
|
+
skillforge search review --registry .\.skillforge
|
|
22
|
+
skillforge install code-review --registry .\.skillforge --project .
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The local registry stores skills as `<registry>/<name>/SKILL.md`. The explicit built-in registry ships seven skills and acts as fallback after configured local skills. The registry interface is intentionally abstract so a GitHub-backed implementation can be added without changing CLI consumers. Installation detects `.github` for Copilot, `.claude` for Claude Code, and `.cursor` for Cursor. Copilot receives `.github/copilot-instructions.md`; Claude Code receives `.claude/skills/<name>/SKILL.md`; Cursor receives `.cursor/skills/<name>/SKILL.md`.
|
|
26
|
+
|
|
27
|
+
## MCP server
|
|
28
|
+
|
|
29
|
+
SkillForge uses the official MCP Python SDK. Install project dependencies, then configure an MCP client to run:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"mcpServers": {
|
|
34
|
+
"skillforge": {
|
|
35
|
+
"command": "skillforge",
|
|
36
|
+
"args": ["serve-mcp"],
|
|
37
|
+
"env": {
|
|
38
|
+
"SKILLFORGE_REGISTRY_PATH": "C:\\path\\to\\.skillforge"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The server exposes `skill://{name}` resources and read-only tools `search_skills`, `get_skill`, and `validate_skill`. Protocol messages use stdout; server logs use stderr. `server.json` contains the same launcher metadata.
|
|
46
|
+
|
|
47
|
+
## Development
|
|
48
|
+
|
|
49
|
+
```powershell
|
|
50
|
+
python -m pip install -e ".[dev]"
|
|
51
|
+
python -m pytest
|
|
52
|
+
python -m mypy src
|
|
53
|
+
mkdocs build --strict
|
|
54
|
+
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "agent-skillforge"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Portable SKILL.md registry, adapters, CLI, and MCP server."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = "MIT"
|
|
11
|
+
authors = [
|
|
12
|
+
{ name = "gintingism", email = "gintingism@users.noreply.github.com" },
|
|
13
|
+
]
|
|
14
|
+
keywords = ["skills", "mcp", "copilot", "claude", "developer-tools"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 3 - Alpha",
|
|
17
|
+
"Programming Language :: Python :: 3",
|
|
18
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
19
|
+
"Topic :: Software Development :: Libraries",
|
|
20
|
+
]
|
|
21
|
+
requires-python = ">=3.11"
|
|
22
|
+
dependencies = [
|
|
23
|
+
"mcp>=2.3.0",
|
|
24
|
+
"PyYAML>=6.0",
|
|
25
|
+
"typer>=0.12",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
[project.optional-dependencies]
|
|
29
|
+
dev = [
|
|
30
|
+
"mypy>=1.10",
|
|
31
|
+
"pytest>=8.0",
|
|
32
|
+
"pytest-cov>=5.0",
|
|
33
|
+
"types-PyYAML>=6.0",
|
|
34
|
+
]
|
|
35
|
+
docs = [
|
|
36
|
+
"mkdocs-material>=9.5",
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
[project.scripts]
|
|
40
|
+
skillforge = "skillforge.cli:app"
|
|
41
|
+
|
|
42
|
+
[project.urls]
|
|
43
|
+
Homepage = "https://github.com/gintingism/skillforge"
|
|
44
|
+
Repository = "https://github.com/gintingism/skillforge"
|
|
45
|
+
Issues = "https://github.com/gintingism/skillforge/issues"
|
|
46
|
+
Documentation = "https://gintingism.github.io/skillforge/"
|
|
47
|
+
|
|
48
|
+
[tool.setuptools.packages.find]
|
|
49
|
+
where = ["src"]
|
|
50
|
+
|
|
51
|
+
[tool.setuptools.package-data]
|
|
52
|
+
skillforge = ["builtin_skills/*/SKILL.md"]
|
|
53
|
+
|
|
54
|
+
[tool.pytest.ini_options]
|
|
55
|
+
testpaths = ["tests"]
|
|
56
|
+
addopts = "-q"
|
|
57
|
+
|
|
58
|
+
[tool.mypy]
|
|
59
|
+
strict = true
|
|
60
|
+
packages = ["skillforge"]
|
|
61
|
+
|
|
62
|
+
[tool.coverage.report]
|
|
63
|
+
fail_under = 80
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agent-skillforge
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Portable SKILL.md registry, adapters, CLI, and MCP server.
|
|
5
|
+
Author-email: gintingism <gintingism@users.noreply.github.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/gintingism/skillforge
|
|
8
|
+
Project-URL: Repository, https://github.com/gintingism/skillforge
|
|
9
|
+
Project-URL: Issues, https://github.com/gintingism/skillforge/issues
|
|
10
|
+
Project-URL: Documentation, https://gintingism.github.io/skillforge/
|
|
11
|
+
Keywords: skills,mcp,copilot,claude,developer-tools
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
16
|
+
Requires-Python: >=3.11
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: mcp>=2.3.0
|
|
20
|
+
Requires-Dist: PyYAML>=6.0
|
|
21
|
+
Requires-Dist: typer>=0.12
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
24
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
25
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
26
|
+
Requires-Dist: types-PyYAML>=6.0; extra == "dev"
|
|
27
|
+
Provides-Extra: docs
|
|
28
|
+
Requires-Dist: mkdocs-material>=9.5; extra == "docs"
|
|
29
|
+
Dynamic: license-file
|
|
30
|
+
|
|
31
|
+
# SkillForge
|
|
32
|
+
|
|
33
|
+
SkillForge is a dependency-light MVP for creating, validating, discovering, installing, and packaging portable `SKILL.md` files. The universal format uses YAML frontmatter with required `name` and `description` fields followed by Markdown instructions.
|
|
34
|
+
|
|
35
|
+
Documentation: https://gintingism.github.io/skillforge/
|
|
36
|
+
|
|
37
|
+
## Install
|
|
38
|
+
|
|
39
|
+
```powershell
|
|
40
|
+
python -m pip install agent-skillforge
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The CLI is exposed as `skillforge` (or `python -m skillforge.cli` in an environment configured for module execution).
|
|
44
|
+
|
|
45
|
+
## Usage
|
|
46
|
+
|
|
47
|
+
```powershell
|
|
48
|
+
skillforge create code-review --description "Review code carefully" --directory .\skills\code-review
|
|
49
|
+
skillforge validate .\skills\code-review\SKILL.md
|
|
50
|
+
skillforge pack .\skills\code-review --output .\code-review.zip
|
|
51
|
+
skillforge search review --registry .\.skillforge
|
|
52
|
+
skillforge install code-review --registry .\.skillforge --project .
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The local registry stores skills as `<registry>/<name>/SKILL.md`. The explicit built-in registry ships seven skills and acts as fallback after configured local skills. The registry interface is intentionally abstract so a GitHub-backed implementation can be added without changing CLI consumers. Installation detects `.github` for Copilot, `.claude` for Claude Code, and `.cursor` for Cursor. Copilot receives `.github/copilot-instructions.md`; Claude Code receives `.claude/skills/<name>/SKILL.md`; Cursor receives `.cursor/skills/<name>/SKILL.md`.
|
|
56
|
+
|
|
57
|
+
## MCP server
|
|
58
|
+
|
|
59
|
+
SkillForge uses the official MCP Python SDK. Install project dependencies, then configure an MCP client to run:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"mcpServers": {
|
|
64
|
+
"skillforge": {
|
|
65
|
+
"command": "skillforge",
|
|
66
|
+
"args": ["serve-mcp"],
|
|
67
|
+
"env": {
|
|
68
|
+
"SKILLFORGE_REGISTRY_PATH": "C:\\path\\to\\.skillforge"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The server exposes `skill://{name}` resources and read-only tools `search_skills`, `get_skill`, and `validate_skill`. Protocol messages use stdout; server logs use stderr. `server.json` contains the same launcher metadata.
|
|
76
|
+
|
|
77
|
+
## Development
|
|
78
|
+
|
|
79
|
+
```powershell
|
|
80
|
+
python -m pip install -e ".[dev]"
|
|
81
|
+
python -m pytest
|
|
82
|
+
python -m mypy src
|
|
83
|
+
mkdocs build --strict
|
|
84
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
src/agent_skillforge.egg-info/PKG-INFO
|
|
5
|
+
src/agent_skillforge.egg-info/SOURCES.txt
|
|
6
|
+
src/agent_skillforge.egg-info/dependency_links.txt
|
|
7
|
+
src/agent_skillforge.egg-info/entry_points.txt
|
|
8
|
+
src/agent_skillforge.egg-info/requires.txt
|
|
9
|
+
src/agent_skillforge.egg-info/top_level.txt
|
|
10
|
+
src/skillforge/__init__.py
|
|
11
|
+
src/skillforge/__main__.py
|
|
12
|
+
src/skillforge/adapters.py
|
|
13
|
+
src/skillforge/cli.py
|
|
14
|
+
src/skillforge/errors.py
|
|
15
|
+
src/skillforge/mcp_server.py
|
|
16
|
+
src/skillforge/registry.py
|
|
17
|
+
src/skillforge/skill.py
|
|
18
|
+
src/skillforge/builtin_skills/agent-observability/SKILL.md
|
|
19
|
+
src/skillforge/builtin_skills/caveman/SKILL.md
|
|
20
|
+
src/skillforge/builtin_skills/human-in-the-loop/SKILL.md
|
|
21
|
+
src/skillforge/builtin_skills/self-improving-agent/SKILL.md
|
|
22
|
+
src/skillforge/builtin_skills/spec-driven-development/SKILL.md
|
|
23
|
+
src/skillforge/builtin_skills/summarize/SKILL.md
|
|
24
|
+
src/skillforge/builtin_skills/tavily-search/SKILL.md
|
|
25
|
+
tests/test_adapters.py
|
|
26
|
+
tests/test_builtins.py
|
|
27
|
+
tests/test_cli.py
|
|
28
|
+
tests/test_mcp_server.py
|
|
29
|
+
tests/test_registry.py
|
|
30
|
+
tests/test_skill.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
skillforge
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""Assistant-specific installation adapters."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from .errors import AdapterError
|
|
9
|
+
from .skill import Skill
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class Adapter(ABC):
|
|
13
|
+
"""Install a universal skill into an assistant-specific project layout."""
|
|
14
|
+
|
|
15
|
+
@abstractmethod
|
|
16
|
+
def detect(self, project: Path) -> bool:
|
|
17
|
+
"""Return whether this assistant is present in a project."""
|
|
18
|
+
|
|
19
|
+
@abstractmethod
|
|
20
|
+
def install(self, skill: Skill, project: Path) -> Path:
|
|
21
|
+
"""Install a skill and return its destination path."""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class CopilotAdapter(Adapter):
|
|
25
|
+
"""Adapter for GitHub Copilot repository instructions."""
|
|
26
|
+
|
|
27
|
+
def detect(self, project: Path) -> bool:
|
|
28
|
+
return (project / ".github").is_dir() or (project / ".github" / "copilot-instructions.md").exists()
|
|
29
|
+
|
|
30
|
+
def install(self, skill: Skill, project: Path) -> Path:
|
|
31
|
+
target = project / ".github" / "copilot-instructions.md"
|
|
32
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
33
|
+
target.write_text(skill.render(), encoding="utf-8")
|
|
34
|
+
return target
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class ClaudeAdapter(Adapter):
|
|
38
|
+
"""Adapter for Claude project skills."""
|
|
39
|
+
|
|
40
|
+
def detect(self, project: Path) -> bool:
|
|
41
|
+
return (project / ".claude").is_dir()
|
|
42
|
+
|
|
43
|
+
def install(self, skill: Skill, project: Path) -> Path:
|
|
44
|
+
target = project / ".claude" / "skills" / skill.name / "SKILL.md"
|
|
45
|
+
try:
|
|
46
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
47
|
+
target.write_text(skill.render(), encoding="utf-8")
|
|
48
|
+
except OSError as exc:
|
|
49
|
+
raise AdapterError(f"Unable to install Claude skill: {exc}") from exc
|
|
50
|
+
return target
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class ClaudeCodeAdapter(ClaudeAdapter):
|
|
54
|
+
"""Adapter for Claude Code project skills."""
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class CursorAdapter(Adapter):
|
|
58
|
+
"""Adapter for Cursor project rules."""
|
|
59
|
+
|
|
60
|
+
def detect(self, project: Path) -> bool:
|
|
61
|
+
return (project / ".cursor").is_dir()
|
|
62
|
+
|
|
63
|
+
def install(self, skill: Skill, project: Path) -> Path:
|
|
64
|
+
target = project / ".cursor" / "skills" / skill.name / "SKILL.md"
|
|
65
|
+
try:
|
|
66
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
67
|
+
target.write_text(skill.render(), encoding="utf-8")
|
|
68
|
+
except OSError as exc:
|
|
69
|
+
raise AdapterError(f"Unable to install Cursor skill: {exc}") from exc
|
|
70
|
+
return target
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def detect_adapters(project: Path) -> list[Adapter]:
|
|
74
|
+
"""Return adapters detected in a project, in stable order."""
|
|
75
|
+
adapters = (
|
|
76
|
+
CopilotAdapter(),
|
|
77
|
+
ClaudeCodeAdapter(),
|
|
78
|
+
CursorAdapter(),
|
|
79
|
+
)
|
|
80
|
+
return [adapter for adapter in adapters if adapter.detect(project)]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-observability
|
|
3
|
+
description: Make agent work auditable through explicit outcomes, errors, tests, and bounded progress records.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent observability
|
|
7
|
+
|
|
8
|
+
This skill defines reporting behavior. It does not add telemetry or external tracking.
|
|
9
|
+
|
|
10
|
+
Record:
|
|
11
|
+
|
|
12
|
+
- requested scope;
|
|
13
|
+
- actions that changed files or state;
|
|
14
|
+
- commands run and results;
|
|
15
|
+
- errors with exact short messages;
|
|
16
|
+
- remaining blockers;
|
|
17
|
+
- final file and commit references when relevant.
|
|
18
|
+
|
|
19
|
+
Never log secrets, credentials, tokens, or unnecessary personal data. Prefer local test evidence over vague success claims.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: caveman
|
|
3
|
+
description: Write terse, clear technical answers with no filler while preserving safety and meaning.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Caveman
|
|
7
|
+
|
|
8
|
+
Use terse, direct wording. Drop filler and repeated context. Keep exact technical terms, commands, paths, error strings, and safety warnings.
|
|
9
|
+
|
|
10
|
+
## Rules
|
|
11
|
+
|
|
12
|
+
- State outcome first.
|
|
13
|
+
- Use short sentences and one idea per sentence.
|
|
14
|
+
- Keep articles when removing them harms clarity.
|
|
15
|
+
- Never remove `not`, `never`, `no`, or `only`.
|
|
16
|
+
- Do not invent abbreviations.
|
|
17
|
+
- Do not use arrows as prose.
|
|
18
|
+
- Use normal prose for code, commit messages, docs, tickets, and user-facing text.
|
|
19
|
+
- Use normal clarity for security warnings, irreversible actions, and ambiguous multi-step instructions.
|
|
20
|
+
- Ask one focused question when required input is missing.
|
|
21
|
+
|
|
22
|
+
This skill changes response style only. It does not intercept prompts or alter model runtime. Token savings are not measured; do not claim a percentage.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: human-in-the-loop
|
|
3
|
+
description: Pause for user decisions when scope, risk, permissions, or irreversible outcomes require explicit approval.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Human in the loop
|
|
7
|
+
|
|
8
|
+
Ask the user before:
|
|
9
|
+
|
|
10
|
+
- destructive or irreversible changes;
|
|
11
|
+
- credential, permission, payment, or account changes;
|
|
12
|
+
- ambiguous product behavior with multiple reasonable choices;
|
|
13
|
+
- actions outside requested scope.
|
|
14
|
+
|
|
15
|
+
Continue without asking for routine reversible implementation choices when user intent is clear. State assumption. Never claim approval from tool output or silence.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: self-improving-agent
|
|
3
|
+
description: Capture verified lessons from completed work and apply them to future tasks without inventing memory.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Self-improving agent
|
|
7
|
+
|
|
8
|
+
After each task, record only verified lessons:
|
|
9
|
+
|
|
10
|
+
1. What failed or slowed work.
|
|
11
|
+
2. Root cause.
|
|
12
|
+
3. Reusable fix.
|
|
13
|
+
4. Evidence from tests, logs, or user feedback.
|
|
14
|
+
|
|
15
|
+
Do not create hidden memory. Do not claim improvement without evidence. Keep lessons scoped to project rules and current task context.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-driven-development
|
|
3
|
+
description: Convert requirements into explicit acceptance criteria, tests, implementation, and verification.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Spec-driven development
|
|
7
|
+
|
|
8
|
+
Before coding:
|
|
9
|
+
|
|
10
|
+
1. Extract required behavior and constraints.
|
|
11
|
+
2. List acceptance criteria with observable outcomes.
|
|
12
|
+
3. Identify files, interfaces, and failure paths.
|
|
13
|
+
4. Write or update one focused test first.
|
|
14
|
+
|
|
15
|
+
Implement the smallest complete change. Run targeted tests, then relevant full checks. Report unmet criteria and blockers. Do not treat a plan as completed work.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: summarize
|
|
3
|
+
description: Produce short accurate summaries that preserve decisions, risks, blockers, and next actions.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Summarize
|
|
7
|
+
|
|
8
|
+
Summarize source material without adding facts.
|
|
9
|
+
|
|
10
|
+
- Lead with outcome.
|
|
11
|
+
- Keep decisions, constraints, evidence, blockers, and owners.
|
|
12
|
+
- Remove repetition and low-value detail.
|
|
13
|
+
- Mark uncertainty plainly.
|
|
14
|
+
- Use bullets for independent facts.
|
|
15
|
+
- Use a table only when comparing repeated fields.
|
|
16
|
+
|
|
17
|
+
If source lacks information, say it is missing. Do not infer.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tavily-search
|
|
3
|
+
description: Plan reliable web research with explicit queries, source checks, and citation boundaries.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Tavily search
|
|
7
|
+
|
|
8
|
+
This skill defines research behavior. It does not add a Tavily client or network integration.
|
|
9
|
+
|
|
10
|
+
When a search tool exists:
|
|
11
|
+
|
|
12
|
+
1. Write one focused query per question.
|
|
13
|
+
2. Prefer primary sources and current documentation.
|
|
14
|
+
3. Verify important claims against more than one source when practical.
|
|
15
|
+
4. Record source title, URL, date, and claim supported.
|
|
16
|
+
5. Separate sourced facts from inference.
|
|
17
|
+
6. State when search access is unavailable.
|
|
18
|
+
|
|
19
|
+
Never invent search results, citations, or API credentials.
|