summer-engine 1.2.1 → 1.3.0
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.
- package/LICENSE +21 -0
- package/dist/commands/skills.js +9 -3
- package/dist/lib/skills-registry.d.ts +17 -11
- package/dist/lib/skills-registry.js +36 -11
- package/package.json +1 -1
- package/skills/README.md +96 -0
- package/skills/_meta/skill-create/SKILL.md +143 -0
- package/skills/_meta/skill-improve/SKILL.md +89 -0
- package/skills/_meta/skill-test/SKILL.md +86 -0
- package/skills/_shared/collaborative-protocol.md +50 -0
- package/skills/_shared/gd-style.md +121 -0
- package/skills/_shared/godot-version.md +32 -0
- package/skills/_shared/mcp-tools-reference.md +133 -0
- package/skills/_shared/template-registry.md +40 -0
- package/skills/_tests/runner.md +90 -0
- package/skills/_tests/specs/3d-lighting.md +19 -0
- package/skills/_tests/specs/asset-strategy.md +19 -0
- package/skills/_tests/specs/fps-controller.md +100 -0
- package/skills/_tests/specs/gdscript-patterns.md +19 -0
- package/skills/_tests/specs/make-game.md +19 -0
- package/skills/_tests/specs/scene-composition.md +19 -0
- package/skills/_tests/specs/ui-basics.md +19 -0
- package/skills/{asset-strategy → asset-pipeline/asset-strategy}/SKILL.md +4 -5
- package/skills/catalog.yaml +636 -0
- package/skills/{fps-controller → character-controllers/fps-controller}/SKILL.md +6 -5
- package/skills/{3d-lighting → rendering-and-lighting/3d-lighting}/SKILL.md +5 -5
- package/skills/{make-game → scene-and-project/make-game}/SKILL.md +5 -5
- package/skills/{scene-composition → scene-and-project/scene-composition}/SKILL.md +5 -5
- package/skills/{gdscript-patterns → scripting-patterns/gdscript-patterns}/SKILL.md +5 -5
- package/skills/{ui-basics → ui-and-ux/ui-basics}/SKILL.md +5 -5
- /package/skills/{gdscript-patterns → scripting-patterns/gdscript-patterns}/reference.md +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Summer Engine
|
|
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.
|
package/dist/commands/skills.js
CHANGED
|
@@ -13,7 +13,7 @@ function getBuiltinSkills() {
|
|
|
13
13
|
for (const entry of SKILL_REGISTRY) {
|
|
14
14
|
if (!entry.public)
|
|
15
15
|
continue;
|
|
16
|
-
const skillPath = join(skillsDir, entry.name, "SKILL.md");
|
|
16
|
+
const skillPath = join(skillsDir, entry.category, entry.name, "SKILL.md");
|
|
17
17
|
if (!existsSync(skillPath))
|
|
18
18
|
continue;
|
|
19
19
|
const frontmatter = parseSkillFrontmatter(skillPath);
|
|
@@ -48,13 +48,19 @@ function getSkillMeta(name) {
|
|
|
48
48
|
return getBuiltinSkills().find((skill) => skill.name === name) ?? null;
|
|
49
49
|
}
|
|
50
50
|
function getSkillPath(name) {
|
|
51
|
-
const
|
|
51
|
+
const entry = SKILL_REGISTRY.find((s) => s.name === name);
|
|
52
|
+
if (!entry)
|
|
53
|
+
return null;
|
|
54
|
+
const path = join(skillsDir, entry.category, entry.name);
|
|
52
55
|
if (!existsSync(path) || !existsSync(join(path, "SKILL.md")))
|
|
53
56
|
return null;
|
|
54
57
|
return path;
|
|
55
58
|
}
|
|
56
59
|
function getSkillBody(name) {
|
|
57
|
-
const
|
|
60
|
+
const entry = SKILL_REGISTRY.find((s) => s.name === name);
|
|
61
|
+
if (!entry)
|
|
62
|
+
throw new Error(`Unknown skill: ${name}`);
|
|
63
|
+
const skillPath = join(skillsDir, entry.category, entry.name, "SKILL.md");
|
|
58
64
|
const content = readFileSync(skillPath, "utf-8");
|
|
59
65
|
return content.replace(/^---\s*\n[\s\S]*?\n---\s*\n/, "").trim();
|
|
60
66
|
}
|
|
@@ -1,67 +1,73 @@
|
|
|
1
1
|
export declare const AGENT_CLIENTS: readonly ["summer", "codex", "claude-code", "cursor", "windsurf"];
|
|
2
2
|
export type AgentClient = (typeof AGENT_CLIENTS)[number];
|
|
3
|
-
export
|
|
3
|
+
export declare const SKILL_CATEGORIES: readonly ["_meta", "character-controllers", "gameplay-mechanics", "scripting-patterns", "scene-and-project", "rendering-and-lighting", "shaders", "visual-effects", "post-processing", "animation", "audio", "physics", "multiplayer-and-networking", "ai-and-npcs", "level-design", "performance", "ui-and-ux", "asset-pipeline", "input-and-controls", "debugging", "deployment"];
|
|
4
|
+
export type SkillCategory = (typeof SKILL_CATEGORIES)[number];
|
|
4
5
|
export interface SkillRegistryEntry {
|
|
5
6
|
name: string;
|
|
6
|
-
public: boolean;
|
|
7
7
|
category: SkillCategory;
|
|
8
|
+
public: boolean;
|
|
8
9
|
clients: readonly AgentClient[];
|
|
9
10
|
recommended: boolean;
|
|
10
11
|
requiresMcpTools: readonly string[];
|
|
11
12
|
testScenario: string;
|
|
12
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Skills with `status: HAVE` in catalog.yaml. The catalog is the planning source
|
|
16
|
+
* of truth (~85 skills); this TS registry is the install-time list (only skills
|
|
17
|
+
* with shippable content). When a NEXT skill ships, mirror it here.
|
|
18
|
+
*/
|
|
13
19
|
export declare const SKILL_REGISTRY: readonly [{
|
|
14
20
|
readonly name: "gdscript-patterns";
|
|
21
|
+
readonly category: "scripting-patterns";
|
|
15
22
|
readonly public: true;
|
|
16
|
-
readonly category: "scripting";
|
|
17
23
|
readonly clients: readonly ["summer", "codex", "claude-code", "cursor", "windsurf"];
|
|
18
24
|
readonly recommended: true;
|
|
19
|
-
readonly requiresMcpTools: readonly ["
|
|
20
|
-
readonly testScenario: "
|
|
25
|
+
readonly requiresMcpTools: readonly ["summer_get_script_errors"];
|
|
26
|
+
readonly testScenario: "Write a typed GDScript with a signal, attach it to a node, connect the signal, and verify script errors.";
|
|
21
27
|
}, {
|
|
22
28
|
readonly name: "scene-composition";
|
|
29
|
+
readonly category: "scene-and-project";
|
|
23
30
|
readonly public: true;
|
|
24
|
-
readonly category: "scene";
|
|
25
31
|
readonly clients: readonly ["summer", "codex", "claude-code", "cursor", "windsurf"];
|
|
26
32
|
readonly recommended: true;
|
|
27
33
|
readonly requiresMcpTools: readonly ["summer_create_scene", "summer_open_scene", "summer_get_scene_tree", "summer_add_node", "summer_instantiate_scene", "summer_save_scene"];
|
|
28
34
|
readonly testScenario: "Build a small reusable player scene, instantiate it in a main scene, and save both scenes through Summer tools.";
|
|
29
35
|
}, {
|
|
30
36
|
readonly name: "fps-controller";
|
|
37
|
+
readonly category: "character-controllers";
|
|
31
38
|
readonly public: true;
|
|
32
|
-
readonly category: "gameplay";
|
|
33
39
|
readonly clients: readonly ["summer", "codex", "claude-code", "cursor", "windsurf"];
|
|
34
40
|
readonly recommended: true;
|
|
35
41
|
readonly requiresMcpTools: readonly ["summer_add_node", "summer_set_prop", "summer_set_resource_property", "summer_input_map_bind"];
|
|
36
42
|
readonly testScenario: "Create a CharacterBody3D player with collision, camera, input actions, and a host-edited controller script.";
|
|
37
43
|
}, {
|
|
38
44
|
readonly name: "3d-lighting";
|
|
45
|
+
readonly category: "rendering-and-lighting";
|
|
39
46
|
readonly public: true;
|
|
40
|
-
readonly category: "lighting";
|
|
41
47
|
readonly clients: readonly ["summer", "codex", "claude-code", "cursor", "windsurf"];
|
|
42
48
|
readonly recommended: true;
|
|
43
49
|
readonly requiresMcpTools: readonly ["summer_add_node", "summer_set_prop", "summer_set_resource_property"];
|
|
44
50
|
readonly testScenario: "Add sun, fill lighting, WorldEnvironment, and shadow settings to a simple 3D scene.";
|
|
45
51
|
}, {
|
|
46
52
|
readonly name: "ui-basics";
|
|
53
|
+
readonly category: "ui-and-ux";
|
|
47
54
|
readonly public: true;
|
|
48
|
-
readonly category: "ui";
|
|
49
55
|
readonly clients: readonly ["summer", "codex", "claude-code", "cursor", "windsurf"];
|
|
50
56
|
readonly recommended: true;
|
|
51
57
|
readonly requiresMcpTools: readonly ["summer_add_node", "summer_set_prop", "summer_connect_signal"];
|
|
52
58
|
readonly testScenario: "Create a HUD CanvasLayer with labels, a ProgressBar, and a connected Button signal.";
|
|
53
59
|
}, {
|
|
54
60
|
readonly name: "asset-strategy";
|
|
61
|
+
readonly category: "asset-pipeline";
|
|
55
62
|
readonly public: true;
|
|
56
|
-
readonly category: "assets";
|
|
57
63
|
readonly clients: readonly ["summer", "codex", "claude-code", "cursor", "windsurf"];
|
|
58
64
|
readonly recommended: true;
|
|
59
65
|
readonly requiresMcpTools: readonly ["summer_search_assets", "summer_import_asset", "summer_import_from_url", "summer_generate_image", "summer_generate_3d", "summer_generate_audio"];
|
|
60
66
|
readonly testScenario: "Choose library, generated, or primitive assets for a small level and import one asset into the project.";
|
|
61
67
|
}, {
|
|
62
68
|
readonly name: "make-game";
|
|
69
|
+
readonly category: "scene-and-project";
|
|
63
70
|
readonly public: true;
|
|
64
|
-
readonly category: "workflow";
|
|
65
71
|
readonly clients: readonly ["summer", "codex", "claude-code", "cursor", "windsurf"];
|
|
66
72
|
readonly recommended: false;
|
|
67
73
|
readonly requiresMcpTools: readonly ["summer_get_agent_playbook", "summer_get_project_context", "summer_create_scene", "summer_open_scene", "summer_save_scene", "summer_add_node", "summer_set_prop", "summer_set_resource_property", "summer_instantiate_scene", "summer_play", "summer_stop", "summer_get_diagnostics"];
|
|
@@ -5,26 +5,51 @@ export const AGENT_CLIENTS = [
|
|
|
5
5
|
"cursor",
|
|
6
6
|
"windsurf",
|
|
7
7
|
];
|
|
8
|
+
export const SKILL_CATEGORIES = [
|
|
9
|
+
"_meta",
|
|
10
|
+
"character-controllers",
|
|
11
|
+
"gameplay-mechanics",
|
|
12
|
+
"scripting-patterns",
|
|
13
|
+
"scene-and-project",
|
|
14
|
+
"rendering-and-lighting",
|
|
15
|
+
"shaders",
|
|
16
|
+
"visual-effects",
|
|
17
|
+
"post-processing",
|
|
18
|
+
"animation",
|
|
19
|
+
"audio",
|
|
20
|
+
"physics",
|
|
21
|
+
"multiplayer-and-networking",
|
|
22
|
+
"ai-and-npcs",
|
|
23
|
+
"level-design",
|
|
24
|
+
"performance",
|
|
25
|
+
"ui-and-ux",
|
|
26
|
+
"asset-pipeline",
|
|
27
|
+
"input-and-controls",
|
|
28
|
+
"debugging",
|
|
29
|
+
"deployment",
|
|
30
|
+
];
|
|
8
31
|
const ALL_CLIENTS = AGENT_CLIENTS;
|
|
32
|
+
/**
|
|
33
|
+
* Skills with `status: HAVE` in catalog.yaml. The catalog is the planning source
|
|
34
|
+
* of truth (~85 skills); this TS registry is the install-time list (only skills
|
|
35
|
+
* with shippable content). When a NEXT skill ships, mirror it here.
|
|
36
|
+
*/
|
|
9
37
|
export const SKILL_REGISTRY = [
|
|
10
38
|
{
|
|
11
39
|
name: "gdscript-patterns",
|
|
40
|
+
category: "scripting-patterns",
|
|
12
41
|
public: true,
|
|
13
|
-
category: "scripting",
|
|
14
42
|
clients: ALL_CLIENTS,
|
|
15
43
|
recommended: true,
|
|
16
44
|
requiresMcpTools: [
|
|
17
|
-
"summer_set_prop",
|
|
18
|
-
"summer_connect_signal",
|
|
19
|
-
"summer_input_map_bind",
|
|
20
45
|
"summer_get_script_errors",
|
|
21
46
|
],
|
|
22
|
-
testScenario: "
|
|
47
|
+
testScenario: "Write a typed GDScript with a signal, attach it to a node, connect the signal, and verify script errors.",
|
|
23
48
|
},
|
|
24
49
|
{
|
|
25
50
|
name: "scene-composition",
|
|
51
|
+
category: "scene-and-project",
|
|
26
52
|
public: true,
|
|
27
|
-
category: "scene",
|
|
28
53
|
clients: ALL_CLIENTS,
|
|
29
54
|
recommended: true,
|
|
30
55
|
requiresMcpTools: [
|
|
@@ -39,8 +64,8 @@ export const SKILL_REGISTRY = [
|
|
|
39
64
|
},
|
|
40
65
|
{
|
|
41
66
|
name: "fps-controller",
|
|
67
|
+
category: "character-controllers",
|
|
42
68
|
public: true,
|
|
43
|
-
category: "gameplay",
|
|
44
69
|
clients: ALL_CLIENTS,
|
|
45
70
|
recommended: true,
|
|
46
71
|
requiresMcpTools: [
|
|
@@ -53,8 +78,8 @@ export const SKILL_REGISTRY = [
|
|
|
53
78
|
},
|
|
54
79
|
{
|
|
55
80
|
name: "3d-lighting",
|
|
81
|
+
category: "rendering-and-lighting",
|
|
56
82
|
public: true,
|
|
57
|
-
category: "lighting",
|
|
58
83
|
clients: ALL_CLIENTS,
|
|
59
84
|
recommended: true,
|
|
60
85
|
requiresMcpTools: [
|
|
@@ -66,8 +91,8 @@ export const SKILL_REGISTRY = [
|
|
|
66
91
|
},
|
|
67
92
|
{
|
|
68
93
|
name: "ui-basics",
|
|
94
|
+
category: "ui-and-ux",
|
|
69
95
|
public: true,
|
|
70
|
-
category: "ui",
|
|
71
96
|
clients: ALL_CLIENTS,
|
|
72
97
|
recommended: true,
|
|
73
98
|
requiresMcpTools: [
|
|
@@ -79,8 +104,8 @@ export const SKILL_REGISTRY = [
|
|
|
79
104
|
},
|
|
80
105
|
{
|
|
81
106
|
name: "asset-strategy",
|
|
107
|
+
category: "asset-pipeline",
|
|
82
108
|
public: true,
|
|
83
|
-
category: "assets",
|
|
84
109
|
clients: ALL_CLIENTS,
|
|
85
110
|
recommended: true,
|
|
86
111
|
requiresMcpTools: [
|
|
@@ -95,8 +120,8 @@ export const SKILL_REGISTRY = [
|
|
|
95
120
|
},
|
|
96
121
|
{
|
|
97
122
|
name: "make-game",
|
|
123
|
+
category: "scene-and-project",
|
|
98
124
|
public: true,
|
|
99
|
-
category: "workflow",
|
|
100
125
|
clients: ALL_CLIENTS,
|
|
101
126
|
recommended: false,
|
|
102
127
|
requiresMcpTools: [
|
package/package.json
CHANGED
package/skills/README.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Summer Skill Library
|
|
2
|
+
|
|
3
|
+
The canonical agent-readable game-dev knowledge source for Claude Code, Cursor, Codex, and Windsurf.
|
|
4
|
+
|
|
5
|
+
When an agent is asked to make a game in Godot, this is what it reads to learn how.
|
|
6
|
+
|
|
7
|
+
## Layout
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
skills/
|
|
11
|
+
├── README.md # this file
|
|
12
|
+
├── catalog.yaml # canonical registry (name, category, status, template-id)
|
|
13
|
+
├── _shared/ # cross-skill references every skill can link
|
|
14
|
+
│ ├── godot-version.md
|
|
15
|
+
│ ├── mcp-tools-reference.md
|
|
16
|
+
│ ├── collaborative-protocol.md
|
|
17
|
+
│ ├── template-registry.md
|
|
18
|
+
│ └── gd-style.md
|
|
19
|
+
├── _meta/
|
|
20
|
+
│ ├── skill-test/ # static + behavioral linter
|
|
21
|
+
│ ├── skill-create/ # bootstrap a new skill
|
|
22
|
+
│ └── skill-improve/ # eval-harness iteration
|
|
23
|
+
├── _tests/
|
|
24
|
+
│ ├── runner.md # how /skill-test works
|
|
25
|
+
│ └── specs/ # behavioral specs per skill
|
|
26
|
+
└── <category>/<skill>/
|
|
27
|
+
├── SKILL.md # < 500 lines, frontmatter + body
|
|
28
|
+
├── references/ # loaded on demand
|
|
29
|
+
├── examples/ # working snippets
|
|
30
|
+
└── tests/spec.md # behavioral spec
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Categories (20)
|
|
34
|
+
|
|
35
|
+
`character-controllers`, `gameplay-mechanics`, `scripting-patterns`, `scene-and-project`, `rendering-and-lighting`, `shaders`, `visual-effects`, `post-processing`, `animation`, `audio`, `physics`, `multiplayer-and-networking`, `ai-and-npcs`, `level-design`, `performance`, `ui-and-ux`, `asset-pipeline`, `input-and-controls`, `debugging`, `deployment`.
|
|
36
|
+
|
|
37
|
+
## Standard
|
|
38
|
+
|
|
39
|
+
Adopts the **Anthropic Agent Skills open standard** (`agentskills.io`). Frontmatter:
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
---
|
|
43
|
+
name: <kebab-case>
|
|
44
|
+
description: <when-to-use, key trigger phrases first>
|
|
45
|
+
license: MIT
|
|
46
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
47
|
+
category: <one of the 20>
|
|
48
|
+
template-id: <optional, resolved against _shared/template-registry.md>
|
|
49
|
+
allowed-tools: Read Grep summer_add_node summer_set_prop ...
|
|
50
|
+
paths: ["**/*.gd", "**/*.tscn"]
|
|
51
|
+
---
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Cross-portable. Cursor / Codex / Windsurf understand the same SKILL.md.
|
|
55
|
+
|
|
56
|
+
## Authoring rules
|
|
57
|
+
|
|
58
|
+
1. **SKILL.md ≤ 500 lines.** Push detail into `references/`. Progressive disclosure.
|
|
59
|
+
2. **MCP-preferred + file-edit-fallback.** Every code-touching skill must show both paths so the skill works without Summer MCP installed.
|
|
60
|
+
3. **Collaborative protocol.** "May I write…?" before any user-visible mutation. See `_shared/collaborative-protocol.md`.
|
|
61
|
+
4. **Template cross-link.** When a working starter exists, link via `template-id` and the section "Want a working starter?".
|
|
62
|
+
5. **Test spec.** Every non-`_meta` skill ships `tests/spec.md` with at least one Test Case.
|
|
63
|
+
|
|
64
|
+
## Adding a new skill
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
/skill-create
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
(See `_meta/skill-create/SKILL.md`.)
|
|
71
|
+
|
|
72
|
+
## Testing
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
/skill-test <name> # static lint
|
|
76
|
+
/skill-test <name> spec # behavioral spec runner
|
|
77
|
+
/skill-test audit # whole-library audit
|
|
78
|
+
/skill-improve <name> # parallel-eval harness for iteration
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
(See `_meta/skill-test/SKILL.md` and `_tests/runner.md`.)
|
|
82
|
+
|
|
83
|
+
## Roadmap
|
|
84
|
+
|
|
85
|
+
Status legend in `catalog.yaml`:
|
|
86
|
+
|
|
87
|
+
- **HAVE** — ships today.
|
|
88
|
+
- **NEXT** — next wave, in active development.
|
|
89
|
+
- **LATER** — on roadmap.
|
|
90
|
+
|
|
91
|
+
Currently: **7 HAVE / ~50 NEXT / ~30 LATER ≈ 85 skills across 20 categories**. Subagents fill content category by category.
|
|
92
|
+
|
|
93
|
+
## See also
|
|
94
|
+
|
|
95
|
+
- [Architecture spec](../../../publicsummerengine/Docs/superpowers/specs/2026-05-05-skill-library-architecture.md) (lives in publicsummerengine for spec history)
|
|
96
|
+
- [Research notes](../../../publicsummerengine/Docs/superpowers/research/2026-05-05-skill-library-research.md)
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-create
|
|
3
|
+
description: Bootstrap a new Summer skill with the canonical folder structure, frontmatter, and stub sections. Use when adding a new skill to the library. Trigger on "create skill", "add skill", "new skill".
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: _meta
|
|
7
|
+
allowed-tools: Read Write Glob Grep
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# /skill-create — Bootstrap a New Skill
|
|
11
|
+
|
|
12
|
+
## Steps
|
|
13
|
+
|
|
14
|
+
### 1. Get the basics
|
|
15
|
+
|
|
16
|
+
Ask the user:
|
|
17
|
+
- **Name** (kebab-case, ≤ 64 chars). Example: `state-machine-patterns`.
|
|
18
|
+
- **Category** (one of the 20 in `catalog.yaml`). Example: `scripting-patterns`.
|
|
19
|
+
- **One-sentence description** for the frontmatter.
|
|
20
|
+
- **Template-id** (optional). Lookup against `_shared/template-registry.md`.
|
|
21
|
+
|
|
22
|
+
### 2. Create the folder
|
|
23
|
+
|
|
24
|
+
May I create `skills/<category>/<name>/` with this structure?
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
skills/<category>/<name>/
|
|
28
|
+
├── SKILL.md
|
|
29
|
+
├── references/ (empty, populate as needed)
|
|
30
|
+
├── examples/ (empty, populate as needed)
|
|
31
|
+
└── tests/spec.md
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 3. Write SKILL.md (template)
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
---
|
|
38
|
+
name: <name>
|
|
39
|
+
description: <one-sentence what + when. Lead with key trigger phrases.>
|
|
40
|
+
license: MIT
|
|
41
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
42
|
+
category: <category>
|
|
43
|
+
template-id: <optional template-id from _shared/template-registry.md>
|
|
44
|
+
allowed-tools: Read Grep <summer_* tools this skill uses>
|
|
45
|
+
paths: ["**/*.gd", "**/*.tscn"]
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
# <Title> for Summer Engine
|
|
49
|
+
|
|
50
|
+
<One-paragraph context. Why this exists, who needs it.>
|
|
51
|
+
|
|
52
|
+
## Steps
|
|
53
|
+
|
|
54
|
+
### 1. <First step>
|
|
55
|
+
|
|
56
|
+
**Preferred (Summer MCP):**
|
|
57
|
+
|
|
58
|
+
\`\`\`
|
|
59
|
+
summer_<tool>(...)
|
|
60
|
+
\`\`\`
|
|
61
|
+
|
|
62
|
+
**Fallback (no MCP — edit `<file>` directly):**
|
|
63
|
+
|
|
64
|
+
\`\`\`
|
|
65
|
+
<raw text/code>
|
|
66
|
+
\`\`\`
|
|
67
|
+
|
|
68
|
+
May I <action>?
|
|
69
|
+
|
|
70
|
+
### 2. <Second step>
|
|
71
|
+
|
|
72
|
+
...
|
|
73
|
+
|
|
74
|
+
## Common mistakes
|
|
75
|
+
|
|
76
|
+
- <mistake 1, with one-line fix>
|
|
77
|
+
- <mistake 2, with one-line fix>
|
|
78
|
+
|
|
79
|
+
## Want a working starter?
|
|
80
|
+
|
|
81
|
+
→ **template-id**: `<template-id>`
|
|
82
|
+
→ **Repo**: <github URL from _shared/template-registry.md>
|
|
83
|
+
→ **Bootstrap**: `summer template clone <template-id> my-game`
|
|
84
|
+
|
|
85
|
+
## See also
|
|
86
|
+
|
|
87
|
+
- `_shared/godot-version.md`
|
|
88
|
+
- `_shared/mcp-tools-reference.md`
|
|
89
|
+
- `_shared/gd-style.md`
|
|
90
|
+
- (other relevant skills)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 4. Write tests/spec.md (template)
|
|
94
|
+
|
|
95
|
+
```markdown
|
|
96
|
+
# Skill Spec: /<name>
|
|
97
|
+
|
|
98
|
+
## Fixture
|
|
99
|
+
- <starting state of the project>
|
|
100
|
+
- <which tools are available — Summer MCP yes/no>
|
|
101
|
+
|
|
102
|
+
## Case 1: Happy Path
|
|
103
|
+
**Input:** "<typical user prompt>"
|
|
104
|
+
**Expected MCP tool sequence (in order):**
|
|
105
|
+
1. <first tool call>
|
|
106
|
+
2. <second>
|
|
107
|
+
|
|
108
|
+
**Assertions:**
|
|
109
|
+
- [ ] <observable outcome>
|
|
110
|
+
- [ ] <skill asks "May I" before any write step>
|
|
111
|
+
|
|
112
|
+
## Case 2: Failure / Edge
|
|
113
|
+
**Fixture:** <something different>
|
|
114
|
+
**Input:** "<edge prompt>"
|
|
115
|
+
**Expected:** <how the skill should adapt>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 5. Register in catalog.yaml
|
|
119
|
+
|
|
120
|
+
Append:
|
|
121
|
+
|
|
122
|
+
```yaml
|
|
123
|
+
- name: <name>
|
|
124
|
+
category: <category>
|
|
125
|
+
status: NEXT # or HAVE if shipping immediately
|
|
126
|
+
template-id: <or omit>
|
|
127
|
+
public: true
|
|
128
|
+
recommended: false # flip to true when status: HAVE and tested
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 6. Run /skill-test in static mode
|
|
132
|
+
|
|
133
|
+
Confirm the new skill passes the 7 structural checks before commit.
|
|
134
|
+
|
|
135
|
+
## Collaborative protocol
|
|
136
|
+
|
|
137
|
+
This skill writes files (the new skill folder + catalog update). Always ask before each write step.
|
|
138
|
+
|
|
139
|
+
## See also
|
|
140
|
+
|
|
141
|
+
- `_shared/collaborative-protocol.md`
|
|
142
|
+
- `_meta/skill-test/SKILL.md`
|
|
143
|
+
- `catalog.yaml`
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-improve
|
|
3
|
+
description: Iterate on an existing Summer skill using a parallel-eval harness — run the skill against a behavioral spec with and without proposed changes, compare outputs, ship the version that wins. Use to upgrade a skill that's underperforming. Trigger on "improve skill", "iterate on skill", "make this skill better".
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: _meta
|
|
7
|
+
allowed-tools: Read Write Edit Task
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# /skill-improve — Iterate on a Skill With Eval Harness
|
|
11
|
+
|
|
12
|
+
Inspired by `anthropics/skills` `skill-creator/`. Use when a skill's behavioral spec is failing assertions or producing low-quality output.
|
|
13
|
+
|
|
14
|
+
## When to use this vs. `/skill-test`
|
|
15
|
+
|
|
16
|
+
- `/skill-test spec` reasons over text. Cheap, fast, lossy.
|
|
17
|
+
- `/skill-improve` actually runs the skill in parallel subagents with-vs-without proposed changes. Expensive, accurate.
|
|
18
|
+
|
|
19
|
+
Run this when `/skill-test spec` flags issues you can't fix by reading the skill alone.
|
|
20
|
+
|
|
21
|
+
## Steps
|
|
22
|
+
|
|
23
|
+
### 1. Pick the skill + the spec
|
|
24
|
+
|
|
25
|
+
Ask the user:
|
|
26
|
+
- **Skill name.** Resolves to `skills/<category>/<name>/SKILL.md`.
|
|
27
|
+
- **Test cases to focus on.** Default: all `## Case` blocks in `_tests/specs/<name>.md`.
|
|
28
|
+
|
|
29
|
+
### 2. Establish a baseline
|
|
30
|
+
|
|
31
|
+
For each Case:
|
|
32
|
+
|
|
33
|
+
1. Spawn a subagent (`Task` tool, `general-purpose`) with the **current** skill body in context.
|
|
34
|
+
2. Give it the Case's Input + Fixture.
|
|
35
|
+
3. Capture the tool calls it makes and the diff it produces.
|
|
36
|
+
4. Score against the Case's Assertions.
|
|
37
|
+
|
|
38
|
+
Save outputs to `_tests/runs/<skill-name>/baseline/case-<N>/`.
|
|
39
|
+
|
|
40
|
+
### 3. Propose changes
|
|
41
|
+
|
|
42
|
+
Read the failing Cases. Identify the gap between what the skill says and what the agent did. Common gaps:
|
|
43
|
+
|
|
44
|
+
- Skill names a tool but the agent picked a different one (clarify the trigger).
|
|
45
|
+
- Skill assumes a fixture detail the agent missed (add explicit step to confirm).
|
|
46
|
+
- Skill's "May I" wording is too generic for the agent to infer the right ask.
|
|
47
|
+
|
|
48
|
+
Draft a revised SKILL.md. May I write it to `_tests/runs/<skill-name>/proposed/SKILL.md`?
|
|
49
|
+
|
|
50
|
+
### 4. Run the proposed version
|
|
51
|
+
|
|
52
|
+
Repeat step 2 with the proposed SKILL.md. Save to `_tests/runs/<skill-name>/proposed/case-<N>/`.
|
|
53
|
+
|
|
54
|
+
### 5. Compare and decide
|
|
55
|
+
|
|
56
|
+
For each Case, score:
|
|
57
|
+
|
|
58
|
+
- Assertions passed (proposed vs. baseline).
|
|
59
|
+
- Tool-call efficiency (fewer tools = better, all else equal).
|
|
60
|
+
- Hallucination / unwanted ops (penalize).
|
|
61
|
+
|
|
62
|
+
Output:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Case 1 (Happy): baseline 4/6 proposed 6/6 ✓ ship proposed
|
|
66
|
+
Case 2 (Failure): baseline 3/4 proposed 4/4 ✓ ship proposed
|
|
67
|
+
Case 3 (Edge): baseline 3/3 proposed 3/3 = no change
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
If proposed wins on net, prompt the user:
|
|
71
|
+
|
|
72
|
+
> Proposed version wins 2 cases, ties 1, loses 0. May I overwrite `skills/<category>/<name>/SKILL.md` with the proposed version and update `last-tested:` in `catalog.yaml`?
|
|
73
|
+
|
|
74
|
+
### 6. Ship
|
|
75
|
+
|
|
76
|
+
On user yes:
|
|
77
|
+
- Overwrite `SKILL.md`.
|
|
78
|
+
- Update `last-tested: <today>` in `catalog.yaml`.
|
|
79
|
+
- Commit with message `feat(skill): improve <name> — <one-line summary of change>`.
|
|
80
|
+
|
|
81
|
+
## Collaborative protocol
|
|
82
|
+
|
|
83
|
+
This skill writes files at multiple steps. Always ask before each write.
|
|
84
|
+
|
|
85
|
+
## See also
|
|
86
|
+
|
|
87
|
+
- `_meta/skill-test/SKILL.md`
|
|
88
|
+
- `_tests/runner.md`
|
|
89
|
+
- `_tests/specs/`
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-test
|
|
3
|
+
description: Validate a Summer skill against static structural rules and per-skill behavioral specs. Use to lint a skill before commit, audit the whole library, or check a behavioral spec assertion. Trigger on "skill test", "lint skill", "validate skill".
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: _meta
|
|
7
|
+
allowed-tools: Read Glob Grep
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# /skill-test — Validate a Summer Skill
|
|
11
|
+
|
|
12
|
+
Three modes. Pick by the user's intent.
|
|
13
|
+
|
|
14
|
+
## Mode: `static` — Structural lint (default for "test this skill")
|
|
15
|
+
|
|
16
|
+
For a single skill at `skills/<category>/<name>/`, run these checks:
|
|
17
|
+
|
|
18
|
+
1. **Frontmatter completeness.** `name`, `description`, `license`, `compatibility`, `category` present. `name` matches the directory name.
|
|
19
|
+
2. **SKILL.md length.** ≤ 500 lines. (Progressive disclosure rule from Anthropic spec.)
|
|
20
|
+
3. **MCP-preferred + file-edit-fallback.** If the skill mutates scenes or resources, body must show both:
|
|
21
|
+
- At least one `summer_*` MCP tool example.
|
|
22
|
+
- At least one file-edit fallback block (e.g., raw `.tscn` snippet) OR an explicit "no fallback for this — Summer MCP required" note.
|
|
23
|
+
4. **Collaborative protocol.** If the skill triggers user-visible writes, body must contain at least one of: `May I`, `I'm about to`, `Continue?`, `OK?`, `Proceed?`. Skills that only inspect/read are exempt.
|
|
24
|
+
5. **Template-id resolved.** If the skill's frontmatter declares `template-id: <id>`, that id must exist in `_shared/template-registry.md`.
|
|
25
|
+
6. **Tests/spec.md present.** Every skill in a non-`_meta` category must have `tests/spec.md` with at least one `## Case` heading.
|
|
26
|
+
7. **No broken relative links.** Every `](../...)` and `](./...)` in the body must point at an existing file.
|
|
27
|
+
|
|
28
|
+
Output:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
skill: <category>/<name>
|
|
32
|
+
PASS (1) frontmatter complete
|
|
33
|
+
PASS (2) length 217 / 500 lines
|
|
34
|
+
FAIL (3) no MCP-preferred example found in body
|
|
35
|
+
PASS (4) collaborative protocol present
|
|
36
|
+
PASS (5) template-id resolved
|
|
37
|
+
PASS (6) tests/spec.md exists
|
|
38
|
+
PASS (7) all relative links resolve
|
|
39
|
+
|
|
40
|
+
6 PASS / 1 FAIL — fix item 3 before commit.
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Mode: `spec` — Behavioral spec runner
|
|
44
|
+
|
|
45
|
+
For a single skill, read both `skills/<category>/<name>/SKILL.md` and `_tests/specs/<name>.md`. For each `## Case` in the spec:
|
|
46
|
+
|
|
47
|
+
1. Lay out the **Fixture** (starting state, available tools).
|
|
48
|
+
2. Read the **Input** (user prompt).
|
|
49
|
+
3. Reason: given the skill's instructions and this fixture, would the agent follow the **Expected MCP tool sequence**?
|
|
50
|
+
4. For each assertion under `**Assertions:**`, mark `[x]` if the skill's instructions would satisfy it, `[ ]` if not, with a one-line reason.
|
|
51
|
+
|
|
52
|
+
Output: an annotated copy of the spec with assertions filled in, plus a pass-rate.
|
|
53
|
+
|
|
54
|
+
No code execution. Pure reasoning over text.
|
|
55
|
+
|
|
56
|
+
## Mode: `audit` — Whole library report
|
|
57
|
+
|
|
58
|
+
Read `catalog.yaml`. For each skill with `status: HAVE`:
|
|
59
|
+
|
|
60
|
+
1. Run `static` mode on the skill.
|
|
61
|
+
2. Note the skill's `last-tested:` date.
|
|
62
|
+
3. Flag skills where `last-tested:` is missing or older than 30 days.
|
|
63
|
+
|
|
64
|
+
Output: a table with PASS / FAIL counts, last-tested ages, and a punch list of skills needing attention.
|
|
65
|
+
|
|
66
|
+
## When to use which mode
|
|
67
|
+
|
|
68
|
+
| User said | Mode |
|
|
69
|
+
|---|---|
|
|
70
|
+
| "test the fps-controller skill" | static |
|
|
71
|
+
| "lint this skill" | static |
|
|
72
|
+
| "does this skill actually do what it should?" | spec |
|
|
73
|
+
| "run the behavioral check" | spec |
|
|
74
|
+
| "audit the skill library" | audit |
|
|
75
|
+
| "what skills need work" | audit |
|
|
76
|
+
|
|
77
|
+
## Collaborative protocol
|
|
78
|
+
|
|
79
|
+
This skill is **read-only**. It never writes. No "May I" needed.
|
|
80
|
+
|
|
81
|
+
## See also
|
|
82
|
+
|
|
83
|
+
- `_shared/collaborative-protocol.md`
|
|
84
|
+
- `_shared/template-registry.md`
|
|
85
|
+
- `_tests/runner.md`
|
|
86
|
+
- `_tests/specs/` — per-skill behavioral specs
|