summer-engine 1.2.1 → 1.3.1
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/README.md +7 -2
- package/dist/bin/summer.js +24 -1
- package/dist/commands/doctor.js +44 -20
- package/dist/commands/setup.js +77 -6
- package/dist/commands/skills.js +14 -6
- package/dist/lib/format.d.ts +23 -0
- package/dist/lib/format.js +60 -0
- package/dist/lib/format.test.d.ts +1 -0
- package/dist/lib/format.test.js +36 -0
- package/dist/lib/skills-registry.d.ts +33 -11
- package/dist/lib/skills-registry.js +71 -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/debug.md +94 -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/play.md +88 -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 +5 -5
- package/skills/catalog.yaml +646 -0
- package/skills/{fps-controller → character-controllers/fps-controller}/SKILL.md +7 -5
- package/skills/debugging/debug/SKILL.md +137 -0
- package/skills/{3d-lighting → rendering-and-lighting/3d-lighting}/SKILL.md +6 -5
- package/skills/{make-game → scene-and-project/make-game}/SKILL.md +6 -5
- package/skills/scene-and-project/play/SKILL.md +108 -0
- package/skills/{scene-composition → scene-and-project/scene-composition}/SKILL.md +6 -5
- package/skills/{gdscript-patterns → scripting-patterns/gdscript-patterns}/SKILL.md +6 -5
- package/skills/{ui-basics → ui-and-ux/ui-basics}/SKILL.md +6 -5
- /package/skills/{gdscript-patterns → scripting-patterns/gdscript-patterns}/reference.md +0 -0
|
@@ -5,26 +5,86 @@ 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 = [
|
|
38
|
+
{
|
|
39
|
+
name: "debug",
|
|
40
|
+
category: "debugging",
|
|
41
|
+
public: true,
|
|
42
|
+
clients: ALL_CLIENTS,
|
|
43
|
+
recommended: true,
|
|
44
|
+
requiresMcpTools: [
|
|
45
|
+
"summer_get_console",
|
|
46
|
+
"summer_get_debugger_errors",
|
|
47
|
+
"summer_get_script_errors",
|
|
48
|
+
"summer_get_diagnostics",
|
|
49
|
+
"summer_clear_console",
|
|
50
|
+
"summer_play",
|
|
51
|
+
"summer_stop",
|
|
52
|
+
"summer_inspect_node",
|
|
53
|
+
],
|
|
54
|
+
testScenario: "Triage a runtime crash end-to-end: read errors, locate code, propose fix, apply on approval, verify.",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "play",
|
|
58
|
+
category: "scene-and-project",
|
|
59
|
+
public: true,
|
|
60
|
+
clients: ALL_CLIENTS,
|
|
61
|
+
recommended: true,
|
|
62
|
+
requiresMcpTools: [
|
|
63
|
+
"summer_is_running",
|
|
64
|
+
"summer_play",
|
|
65
|
+
"summer_stop",
|
|
66
|
+
"summer_clear_console",
|
|
67
|
+
"summer_get_diagnostics",
|
|
68
|
+
"summer_get_debugger_errors",
|
|
69
|
+
"summer_get_script_errors",
|
|
70
|
+
],
|
|
71
|
+
testScenario: "Run the game from a clean state, wait for first frame, report whether it runs cleanly or has errors.",
|
|
72
|
+
},
|
|
10
73
|
{
|
|
11
74
|
name: "gdscript-patterns",
|
|
75
|
+
category: "scripting-patterns",
|
|
12
76
|
public: true,
|
|
13
|
-
category: "scripting",
|
|
14
77
|
clients: ALL_CLIENTS,
|
|
15
78
|
recommended: true,
|
|
16
79
|
requiresMcpTools: [
|
|
17
|
-
"summer_set_prop",
|
|
18
|
-
"summer_connect_signal",
|
|
19
|
-
"summer_input_map_bind",
|
|
20
80
|
"summer_get_script_errors",
|
|
21
81
|
],
|
|
22
|
-
testScenario: "
|
|
82
|
+
testScenario: "Write a typed GDScript with a signal, attach it to a node, connect the signal, and verify script errors.",
|
|
23
83
|
},
|
|
24
84
|
{
|
|
25
85
|
name: "scene-composition",
|
|
86
|
+
category: "scene-and-project",
|
|
26
87
|
public: true,
|
|
27
|
-
category: "scene",
|
|
28
88
|
clients: ALL_CLIENTS,
|
|
29
89
|
recommended: true,
|
|
30
90
|
requiresMcpTools: [
|
|
@@ -39,8 +99,8 @@ export const SKILL_REGISTRY = [
|
|
|
39
99
|
},
|
|
40
100
|
{
|
|
41
101
|
name: "fps-controller",
|
|
102
|
+
category: "character-controllers",
|
|
42
103
|
public: true,
|
|
43
|
-
category: "gameplay",
|
|
44
104
|
clients: ALL_CLIENTS,
|
|
45
105
|
recommended: true,
|
|
46
106
|
requiresMcpTools: [
|
|
@@ -53,8 +113,8 @@ export const SKILL_REGISTRY = [
|
|
|
53
113
|
},
|
|
54
114
|
{
|
|
55
115
|
name: "3d-lighting",
|
|
116
|
+
category: "rendering-and-lighting",
|
|
56
117
|
public: true,
|
|
57
|
-
category: "lighting",
|
|
58
118
|
clients: ALL_CLIENTS,
|
|
59
119
|
recommended: true,
|
|
60
120
|
requiresMcpTools: [
|
|
@@ -66,8 +126,8 @@ export const SKILL_REGISTRY = [
|
|
|
66
126
|
},
|
|
67
127
|
{
|
|
68
128
|
name: "ui-basics",
|
|
129
|
+
category: "ui-and-ux",
|
|
69
130
|
public: true,
|
|
70
|
-
category: "ui",
|
|
71
131
|
clients: ALL_CLIENTS,
|
|
72
132
|
recommended: true,
|
|
73
133
|
requiresMcpTools: [
|
|
@@ -79,8 +139,8 @@ export const SKILL_REGISTRY = [
|
|
|
79
139
|
},
|
|
80
140
|
{
|
|
81
141
|
name: "asset-strategy",
|
|
142
|
+
category: "asset-pipeline",
|
|
82
143
|
public: true,
|
|
83
|
-
category: "assets",
|
|
84
144
|
clients: ALL_CLIENTS,
|
|
85
145
|
recommended: true,
|
|
86
146
|
requiresMcpTools: [
|
|
@@ -95,8 +155,8 @@ export const SKILL_REGISTRY = [
|
|
|
95
155
|
},
|
|
96
156
|
{
|
|
97
157
|
name: "make-game",
|
|
158
|
+
category: "scene-and-project",
|
|
98
159
|
public: true,
|
|
99
|
-
category: "workflow",
|
|
100
160
|
clients: ALL_CLIENTS,
|
|
101
161
|
recommended: false,
|
|
102
162
|
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
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Collaborative Protocol — "May I write?"
|
|
2
|
+
|
|
3
|
+
> Every Summer skill must follow this. The agent works *with* the user, not around them.
|
|
4
|
+
|
|
5
|
+
## The rule
|
|
6
|
+
|
|
7
|
+
**Before any user-visible write step, the agent must explicitly state what it is about to do and ask permission to proceed.**
|
|
8
|
+
|
|
9
|
+
This applies to:
|
|
10
|
+
- Creating files (`.gd`, `.tscn`, `.tres`, JSON, configs)
|
|
11
|
+
- Modifying existing files (especially `.gd` and `.tscn`)
|
|
12
|
+
- Running irreversible operations (deletion, reset, force-overwrite)
|
|
13
|
+
- Setting up project-wide settings (`project.godot`)
|
|
14
|
+
- Installing tools, libraries, or templates
|
|
15
|
+
|
|
16
|
+
Reading is unconditional. Inspection, scene-tree walks, diagnostics — never need permission.
|
|
17
|
+
|
|
18
|
+
## Phrasing
|
|
19
|
+
|
|
20
|
+
Plain, short, action-first. Examples:
|
|
21
|
+
|
|
22
|
+
> May I create `scenes/player.tscn` and add a CharacterBody3D + Camera3D?
|
|
23
|
+
|
|
24
|
+
> I'm about to overwrite `levels/level_01.tscn`. The current version has 14 nodes — I'll preserve them and add the new lighting setup. Continue?
|
|
25
|
+
|
|
26
|
+
> May I attach `scripts/player_controller.gd` to `./World/Player`?
|
|
27
|
+
|
|
28
|
+
> I'm going to bind `move_forward`, `move_back`, `move_left`, `move_right`, `jump`. OK?
|
|
29
|
+
|
|
30
|
+
## What this prevents
|
|
31
|
+
|
|
32
|
+
1. **Silent overwrites.** The agent stomps the user's hand-edited script.
|
|
33
|
+
2. **Cascading scope creep.** A "small fix" turns into a 30-file refactor.
|
|
34
|
+
3. **Unclear state.** The user has no idea what changed when something breaks.
|
|
35
|
+
4. **Trust loss.** One unauthorized edit and the user stops trusting the agent.
|
|
36
|
+
|
|
37
|
+
## What this is NOT
|
|
38
|
+
|
|
39
|
+
- Not a confirmation dialog for every property change in a single skill execution. Group related writes into one ask: "I'm about to add the player root, attach the controller script, and bind 5 input actions. OK?"
|
|
40
|
+
- Not a request for design input. The skill should know what to do; the ask is for permission, not direction.
|
|
41
|
+
- Not a stop on simple read-only ops or single-property tweaks the user clearly directed.
|
|
42
|
+
|
|
43
|
+
## Linter check
|
|
44
|
+
|
|
45
|
+
The `_meta/skill-test/SKILL.md` static linter looks for the phrases:
|
|
46
|
+
- "May I" / "May I write" / "May I create" / "May I attach"
|
|
47
|
+
- "I'm about to"
|
|
48
|
+
- "Continue?" / "OK?" / "Proceed?"
|
|
49
|
+
|
|
50
|
+
A skill that mutates files but never says any of these fails the linter.
|