spawnpack 0.1.7 → 0.1.9
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/README.md +14 -1
- package/dist/spawnpack.js +4 -27
- package/package.json +1 -1
- package/templates/AGENTS.md +43 -54
- package/templates/CLAUDE.md +43 -54
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ It generates BP/RP structure, optional Script API setup, optional rgl integratio
|
|
|
20
20
|
- Optional AI setup:
|
|
21
21
|
- `CLAUDE.md` for Claude
|
|
22
22
|
- `AGENTS.md` for Other
|
|
23
|
-
- `.mcp.json`
|
|
23
|
+
- `.mcp.json` with keyless MCP servers
|
|
24
24
|
|
|
25
25
|
## Runtime Requirement
|
|
26
26
|
|
|
@@ -97,6 +97,18 @@ Depending on your choices, Spawnpack can generate:
|
|
|
97
97
|
- `CLAUDE.md`
|
|
98
98
|
- `AGENTS.md`
|
|
99
99
|
- `.mcp.json`
|
|
100
|
+
|
|
101
|
+
## AI MCP setup
|
|
102
|
+
|
|
103
|
+
When AI setup is enabled, Spawnpack generates an `.mcp.json` that works out of the box without API keys.
|
|
104
|
+
|
|
105
|
+
Generated MCP servers currently include:
|
|
106
|
+
|
|
107
|
+
- Exa hosted MCP (`https://mcp.exa.ai/mcp`) for free, rate-limited web/documentation search
|
|
108
|
+
- `grep_app` for code search
|
|
109
|
+
- `context7` for library documentation context
|
|
110
|
+
|
|
111
|
+
You can add your own Exa API key later if you need higher Exa limits, but it is not required for the generated scaffold.
|
|
100
112
|
|
|
101
113
|
## Marketplace structure mode
|
|
102
114
|
|
|
@@ -139,6 +151,7 @@ bun run build
|
|
|
139
151
|
The npm package is configured to publish only:
|
|
140
152
|
|
|
141
153
|
- `dist/spawnpack.js`
|
|
154
|
+
- `bin/spawnpack.js`
|
|
142
155
|
- `templates/CLAUDE.md`
|
|
143
156
|
- `templates/AGENTS.md`
|
|
144
157
|
- `README.md`
|
package/dist/spawnpack.js
CHANGED
|
@@ -1897,16 +1897,9 @@ function generateReadme(config) {
|
|
|
1897
1897
|
const aiDocFilename = getAiDocFilename(config.aiSetup);
|
|
1898
1898
|
const aiSection = aiDocFilename !== null ? `## AI Tooling
|
|
1899
1899
|
|
|
1900
|
-
Spawnpack generated \`${aiDocFilename}\` and \`.mcp.json\` for AI-assisted development.
|
|
1900
|
+
Spawnpack generated \`${aiDocFilename}\` and \`.mcp.json\` for AI-assisted development. The configured MCP servers work out of the box — no API keys required.
|
|
1901
1901
|
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
- Exa API keys: https://dashboard.exa.ai/api-keys
|
|
1905
|
-
- Exa API key docs: https://exa.ai/docs/reference/team-management/create-api-key
|
|
1906
|
-
- Browser Use API keys: https://cloud.browser-use.com/settings?tab=api-keys&new=1
|
|
1907
|
-
- Browser Use MCP docs: https://docs.browser-use.com/cloud/guides/mcp-server
|
|
1908
|
-
|
|
1909
|
-
Update the placeholder values in \`.mcp.json\` with your own tokens.
|
|
1902
|
+
Exa's hosted MCP runs on a rate-limited free tier. If you need higher limits, you can add your own Exa API key to \`.mcp.json\` (optional): https://dashboard.exa.ai/api-keys
|
|
1910
1903
|
|
|
1911
1904
|
` : "";
|
|
1912
1905
|
const scriptPackageSection = config.scripting !== "none" ? `## Script Packages
|
|
@@ -2120,21 +2113,7 @@ import { join as join2 } from "node:path";
|
|
|
2120
2113
|
function buildMcpServers() {
|
|
2121
2114
|
return {
|
|
2122
2115
|
exa: {
|
|
2123
|
-
|
|
2124
|
-
args: ["-y", "exa-mcp-server"],
|
|
2125
|
-
env: {
|
|
2126
|
-
EXA_API_KEY: "YOUR_EXA_API_KEY"
|
|
2127
|
-
}
|
|
2128
|
-
},
|
|
2129
|
-
"browser-use": {
|
|
2130
|
-
url: "https://api.browser-use.com/v3/mcp",
|
|
2131
|
-
headers: {
|
|
2132
|
-
"x-browser-use-api-key": "YOUR_BROWSER_USE_API_KEY"
|
|
2133
|
-
}
|
|
2134
|
-
},
|
|
2135
|
-
"sequential-thinking": {
|
|
2136
|
-
command: "npx",
|
|
2137
|
-
args: ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
|
2116
|
+
url: "https://mcp.exa.ai/mcp"
|
|
2138
2117
|
},
|
|
2139
2118
|
grep_app: {
|
|
2140
2119
|
command: "npx",
|
|
@@ -2502,9 +2481,7 @@ function showPostGeneration(config) {
|
|
|
2502
2481
|
}
|
|
2503
2482
|
if (config.aiSetup !== "none") {
|
|
2504
2483
|
usefulCommands.push("");
|
|
2505
|
-
usefulCommands.push(`${teal(import_picocolors.default.bold("Note"))} ${import_picocolors.default.dim("
|
|
2506
|
-
usefulCommands.push(` ${import_picocolors.default.dim("Exa:")} ${import_picocolors.default.cyan("https://dashboard.exa.ai/api-keys")}`);
|
|
2507
|
-
usefulCommands.push(` ${import_picocolors.default.dim("Browser Use:")} ${import_picocolors.default.cyan("https://cloud.browser-use.com/settings?tab=api-keys&new=1")}`);
|
|
2484
|
+
usefulCommands.push(`${teal(import_picocolors.default.bold("Note"))} ${import_picocolors.default.dim(".mcp.json is ready to use — the configured MCP servers need no API keys.")}`);
|
|
2508
2485
|
}
|
|
2509
2486
|
O2.message([...nextSteps, "", ...usefulCommands].join(`
|
|
2510
2487
|
`), {
|
package/package.json
CHANGED
package/templates/AGENTS.md
CHANGED
|
@@ -36,45 +36,6 @@ The governing loop for all work: **gather context → take action → verify wor
|
|
|
36
36
|
VIOLATION CHECK: If you wrote library/framework code from memory without searching Exa first, you violated this rule.
|
|
37
37
|
</rule>
|
|
38
38
|
|
|
39
|
-
<rule name="browser_use_mcp_for_web" priority="high">
|
|
40
|
-
**The Rule:** When you need to interact with live web pages beyond simple doc lookups, use Browser Use MCP. It provides Browser Use Cloud automation via MCP (`https://api.browser-use.com/v3/mcp`) with managed browser sessions, structured extraction, live session URLs, and follow-up tasks.
|
|
41
|
-
|
|
42
|
-
**Browser Use MCP tools:**
|
|
43
|
-
|
|
44
|
-
| Tool | Purpose |
|
|
45
|
-
|---|---|
|
|
46
|
-
| `run_session` | Create a browser session and run a natural-language web automation/extraction task |
|
|
47
|
-
| `get_session` | Poll session status/output, step count, cost breakdown, and live URL |
|
|
48
|
-
| `send_task` | Send a follow-up task to an idle keep-alive session |
|
|
49
|
-
| `stop_session` | Stop the current task or destroy the browser session sandbox |
|
|
50
|
-
| `get_session_messages` | Inspect browser actions, reasoning, and results from a session |
|
|
51
|
-
| `list_sessions` | List recent Browser Use sessions |
|
|
52
|
-
| `list_browser_profiles` | List available authenticated browser profiles |
|
|
53
|
-
|
|
54
|
-
**When to use Browser Use MCP (NOT Exa):**
|
|
55
|
-
- Scraping full page content, not just searching for it
|
|
56
|
-
- Extracting structured data (JSON) from complex/messy HTML (e.g. Minecraft wiki tables, addon schemas)
|
|
57
|
-
- Crawling or traversing multiple linked pages on a site (e.g. crawling all Script API event pages)
|
|
58
|
-
- Interacting with pages: clicking buttons, filling forms, navigating flows
|
|
59
|
-
- Accessing protected/anti-bot sites where managed browser infrastructure helps
|
|
60
|
-
- Taking screenshots or using live browser session evidence
|
|
61
|
-
- Any task that requires a real browser session
|
|
62
|
-
|
|
63
|
-
**When to use Exa instead:**
|
|
64
|
-
- Quick doc lookups for `@minecraft/server`, `@minecraft/math`, etc.
|
|
65
|
-
- Finding the right URL or page for a topic
|
|
66
|
-
- Lightweight search queries
|
|
67
|
-
|
|
68
|
-
**Workflow — Exa finds it, Browser Use MCP reads/interacts with it:**
|
|
69
|
-
1. `web_search_exa` → find the right URL
|
|
70
|
-
2. `run_session` → extract deep content, automate navigation, or collect structured data
|
|
71
|
-
3. `get_session` / `get_session_messages` → inspect completion, output, live URL, and action trace
|
|
72
|
-
4. `send_task` → continue in the same keep-alive browser session if follow-up interaction is needed
|
|
73
|
-
5. `stop_session` → cleanly stop/destroy the Browser Use session when finished
|
|
74
|
-
|
|
75
|
-
VIOLATION CHECK: If you manually scraped or parsed HTML when Browser Use MCP could have done it cleanly, you violated this rule.
|
|
76
|
-
</rule>
|
|
77
|
-
|
|
78
39
|
<rule name="no_comments" priority="high">
|
|
79
40
|
DO NOT WRITE ANY COMMENTS OR JSDOCS unless explicitly requested.
|
|
80
41
|
</rule>
|
|
@@ -199,6 +160,37 @@ For non-trivial changes: pause and ask "is there a more elegant way?" If a fix f
|
|
|
199
160
|
Write code that reads like a human wrote it. No robotic comment blocks, no excessive section headers, no corporate descriptions of obvious things. If three experienced devs would all write it the same way, that's the way.
|
|
200
161
|
</behavior>
|
|
201
162
|
|
|
163
|
+
<code_style name="boring_durable_addon_code" priority="high">
|
|
164
|
+
Prefer code that is easy for an add-on developer to read top-to-bottom. Use boring, linear code as the default; add durability machinery only at persistence, async timing, entity lifecycle, duplication, or data-loss boundaries.
|
|
165
|
+
|
|
166
|
+
Style rules:
|
|
167
|
+
- Write linear, imperative code by default: do A, then B, then C.
|
|
168
|
+
- Prefer guard clauses and early returns over nested branching.
|
|
169
|
+
- Keep behavior close to where it happens.
|
|
170
|
+
- Avoid framework-like abstractions unless they clearly reduce repeated complexity.
|
|
171
|
+
- Prefer explicit state names over clever generic names.
|
|
172
|
+
- Make the happy path obvious.
|
|
173
|
+
- Split code by real gameplay/lifecycle responsibility, not by abstract pattern.
|
|
174
|
+
- Do not hide important game-state transitions behind vague helpers.
|
|
175
|
+
- If durability/data-loss protection requires complexity, isolate it behind a small, boring API.
|
|
176
|
+
- Keep normal gameplay code simple even when the persistence/lifecycle layer underneath is more defensive.
|
|
177
|
+
- Do not copy another contributor's style blindly; use their readability as a reference while preserving correctness.
|
|
178
|
+
- Prefer one obvious source of truth for each piece of state.
|
|
179
|
+
- Before adding a new helper/class/system, ask: "Will this make the next maintainer understand the code faster?"
|
|
180
|
+
</code_style>
|
|
181
|
+
|
|
182
|
+
<implementation_preference name="minimal_safe_patch" priority="high">
|
|
183
|
+
When fixing bugs:
|
|
184
|
+
1. First find the smallest clear fix near the bug.
|
|
185
|
+
2. Add stronger safety only where data loss, duplication, or invalid world state can happen.
|
|
186
|
+
3. Avoid broad lifecycle rewrites unless the current lifecycle is the root cause.
|
|
187
|
+
4. If a durable solution needs more machinery, keep the public flow simple and document the responsibility through naming, not comments.
|
|
188
|
+
</implementation_preference>
|
|
189
|
+
|
|
190
|
+
<behavior name="use_simplify_skill_for_maintainability" priority="high">
|
|
191
|
+
Use the `simplify` skill for maintainability, not only cleanup. When the user asks to simplify, clean up, refactor for readability, reduce complexity, or make code easier to maintain, load `simplify` before planning or editing. For non-trivial implementation work, use `simplify` as a post-implementation review pass before final verification: check whether the new code can be made more obvious, boring, local, and behavior-preserving. In orchestrated workflows, explicitly include this maintainability review after implementation and before reporting completion. For broad codebase cleanup, audit first, propose small phases, and wait for approval before editing.
|
|
192
|
+
</behavior>
|
|
193
|
+
|
|
202
194
|
<behavior name="dead_code_hygiene" priority="medium">
|
|
203
195
|
After refactoring or implementing changes:
|
|
204
196
|
- Identify code that is now unreachable
|
|
@@ -606,12 +598,11 @@ POTENTIAL CONCERNS:
|
|
|
606
598
|
13. Editing files from stale context without re-reading first
|
|
607
599
|
14. Duplicating state instead of fixing the real problem
|
|
608
600
|
15. Writing library/framework code from memory without searching Exa for current docs first
|
|
609
|
-
16.
|
|
610
|
-
17.
|
|
611
|
-
18.
|
|
612
|
-
19.
|
|
613
|
-
20.
|
|
614
|
-
21. Adding attribution or AI-style report trailers to Git commit messages
|
|
601
|
+
16. Using try-catch in Minecraft Script API code
|
|
602
|
+
17. Creating custom math functions when @minecraft/math has them available
|
|
603
|
+
18. Using raw strings instead of @minecraft/vanilla-data typed identifiers
|
|
604
|
+
19. Writing BP/RP JSON files without schema validation
|
|
605
|
+
20. Adding attribution or AI-style report trailers to Git commit messages
|
|
615
606
|
</failure_modes_to_avoid>
|
|
616
607
|
|
|
617
608
|
<meta>
|
|
@@ -621,18 +612,16 @@ You have unlimited stamina. The human does not. Use your persistence wisely —
|
|
|
621
612
|
|
|
622
613
|
**Priority Hierarchy:**
|
|
623
614
|
1. **EXA FOR DOCS** — Always search library/framework docs via Exa before implementing
|
|
624
|
-
2. **
|
|
625
|
-
3. **
|
|
626
|
-
4. **
|
|
627
|
-
5. **
|
|
628
|
-
6. **
|
|
629
|
-
7. **
|
|
630
|
-
8. **
|
|
631
|
-
9. **NATURAL COMMITS** - Write human commit messages; no attribution or AI-style report trailers
|
|
615
|
+
2. **VERIFY BEFORE DONE** — Type-check, lint, test before claiming success
|
|
616
|
+
3. **PLAN BEFORE BUILD** — Spec and approval before implementation
|
|
617
|
+
4. **GUARD CLAUSES** — Never use try-catch in Minecraft code
|
|
618
|
+
5. **VANILLA-DATA** — Use typed identifiers from @minecraft/vanilla-data
|
|
619
|
+
6. **MINECRAFT-MATH** — Use @minecraft/math library for math operations
|
|
620
|
+
7. **JSON SCHEMAS** — Validate BP/RP JSONs with Rockide/schemas
|
|
621
|
+
8. **NATURAL COMMITS** - Write human commit messages; no attribution or AI-style report trailers
|
|
632
622
|
|
|
633
623
|
**Violation Checks:**
|
|
634
624
|
- ❌ Wrote library/framework code without searching Exa first? → Violated Exa-for-docs rule
|
|
635
|
-
- ❌ Manually scraped/parsed HTML when Browser Use MCP could do it? → Violated Browser-Use-MCP-for-web rule
|
|
636
625
|
- ❌ Said "Done!" without running type-check/lint/tests? → Violated forced verification rule
|
|
637
626
|
- ❌ Edited a file from memory after 10+ messages without re-reading? → Violated context decay rule
|
|
638
627
|
- ❌ Started building without plan approval on a non-trivial task? → Violated plan-build separation
|
package/templates/CLAUDE.md
CHANGED
|
@@ -36,45 +36,6 @@ The governing loop for all work: **gather context → take action → verify wor
|
|
|
36
36
|
VIOLATION CHECK: If you wrote library/framework code from memory without searching Exa first, you violated this rule.
|
|
37
37
|
</rule>
|
|
38
38
|
|
|
39
|
-
<rule name="browser_use_mcp_for_web" priority="high">
|
|
40
|
-
**The Rule:** When you need to interact with live web pages beyond simple doc lookups, use Browser Use MCP. It provides Browser Use Cloud automation via MCP (`https://api.browser-use.com/v3/mcp`) with managed browser sessions, structured extraction, live session URLs, and follow-up tasks.
|
|
41
|
-
|
|
42
|
-
**Browser Use MCP tools:**
|
|
43
|
-
|
|
44
|
-
| Tool | Purpose |
|
|
45
|
-
|---|---|
|
|
46
|
-
| `run_session` | Create a browser session and run a natural-language web automation/extraction task |
|
|
47
|
-
| `get_session` | Poll session status/output, step count, cost breakdown, and live URL |
|
|
48
|
-
| `send_task` | Send a follow-up task to an idle keep-alive session |
|
|
49
|
-
| `stop_session` | Stop the current task or destroy the browser session sandbox |
|
|
50
|
-
| `get_session_messages` | Inspect browser actions, reasoning, and results from a session |
|
|
51
|
-
| `list_sessions` | List recent Browser Use sessions |
|
|
52
|
-
| `list_browser_profiles` | List available authenticated browser profiles |
|
|
53
|
-
|
|
54
|
-
**When to use Browser Use MCP (NOT Exa):**
|
|
55
|
-
- Scraping full page content, not just searching for it
|
|
56
|
-
- Extracting structured data (JSON) from complex/messy HTML (e.g. Minecraft wiki tables, addon schemas)
|
|
57
|
-
- Crawling or traversing multiple linked pages on a site (e.g. crawling all Script API event pages)
|
|
58
|
-
- Interacting with pages: clicking buttons, filling forms, navigating flows
|
|
59
|
-
- Accessing protected/anti-bot sites where managed browser infrastructure helps
|
|
60
|
-
- Taking screenshots or using live browser session evidence
|
|
61
|
-
- Any task that requires a real browser session
|
|
62
|
-
|
|
63
|
-
**When to use Exa instead:**
|
|
64
|
-
- Quick doc lookups for `@minecraft/server`, `@minecraft/math`, etc.
|
|
65
|
-
- Finding the right URL or page for a topic
|
|
66
|
-
- Lightweight search queries
|
|
67
|
-
|
|
68
|
-
**Workflow — Exa finds it, Browser Use MCP reads/interacts with it:**
|
|
69
|
-
1. `web_search_exa` → find the right URL
|
|
70
|
-
2. `run_session` → extract deep content, automate navigation, or collect structured data
|
|
71
|
-
3. `get_session` / `get_session_messages` → inspect completion, output, live URL, and action trace
|
|
72
|
-
4. `send_task` → continue in the same keep-alive browser session if follow-up interaction is needed
|
|
73
|
-
5. `stop_session` → cleanly stop/destroy the Browser Use session when finished
|
|
74
|
-
|
|
75
|
-
VIOLATION CHECK: If you manually scraped or parsed HTML when Browser Use MCP could have done it cleanly, you violated this rule.
|
|
76
|
-
</rule>
|
|
77
|
-
|
|
78
39
|
<rule name="no_comments" priority="high">
|
|
79
40
|
DO NOT WRITE ANY COMMENTS OR JSDOCS unless explicitly requested.
|
|
80
41
|
</rule>
|
|
@@ -199,6 +160,37 @@ For non-trivial changes: pause and ask "is there a more elegant way?" If a fix f
|
|
|
199
160
|
Write code that reads like a human wrote it. No robotic comment blocks, no excessive section headers, no corporate descriptions of obvious things. If three experienced devs would all write it the same way, that's the way.
|
|
200
161
|
</behavior>
|
|
201
162
|
|
|
163
|
+
<code_style name="boring_durable_addon_code" priority="high">
|
|
164
|
+
Prefer code that is easy for an add-on developer to read top-to-bottom. Use boring, linear code as the default; add durability machinery only at persistence, async timing, entity lifecycle, duplication, or data-loss boundaries.
|
|
165
|
+
|
|
166
|
+
Style rules:
|
|
167
|
+
- Write linear, imperative code by default: do A, then B, then C.
|
|
168
|
+
- Prefer guard clauses and early returns over nested branching.
|
|
169
|
+
- Keep behavior close to where it happens.
|
|
170
|
+
- Avoid framework-like abstractions unless they clearly reduce repeated complexity.
|
|
171
|
+
- Prefer explicit state names over clever generic names.
|
|
172
|
+
- Make the happy path obvious.
|
|
173
|
+
- Split code by real gameplay/lifecycle responsibility, not by abstract pattern.
|
|
174
|
+
- Do not hide important game-state transitions behind vague helpers.
|
|
175
|
+
- If durability/data-loss protection requires complexity, isolate it behind a small, boring API.
|
|
176
|
+
- Keep normal gameplay code simple even when the persistence/lifecycle layer underneath is more defensive.
|
|
177
|
+
- Do not copy another contributor's style blindly; use their readability as a reference while preserving correctness.
|
|
178
|
+
- Prefer one obvious source of truth for each piece of state.
|
|
179
|
+
- Before adding a new helper/class/system, ask: "Will this make the next maintainer understand the code faster?"
|
|
180
|
+
</code_style>
|
|
181
|
+
|
|
182
|
+
<implementation_preference name="minimal_safe_patch" priority="high">
|
|
183
|
+
When fixing bugs:
|
|
184
|
+
1. First find the smallest clear fix near the bug.
|
|
185
|
+
2. Add stronger safety only where data loss, duplication, or invalid world state can happen.
|
|
186
|
+
3. Avoid broad lifecycle rewrites unless the current lifecycle is the root cause.
|
|
187
|
+
4. If a durable solution needs more machinery, keep the public flow simple and document the responsibility through naming, not comments.
|
|
188
|
+
</implementation_preference>
|
|
189
|
+
|
|
190
|
+
<behavior name="use_simplify_skill_for_maintainability" priority="high">
|
|
191
|
+
Use the `simplify` skill for maintainability, not only cleanup. When the user asks to simplify, clean up, refactor for readability, reduce complexity, or make code easier to maintain, load `simplify` before planning or editing. For non-trivial implementation work, use `simplify` as a post-implementation review pass before final verification: check whether the new code can be made more obvious, boring, local, and behavior-preserving. In orchestrated workflows, explicitly include this maintainability review after implementation and before reporting completion. For broad codebase cleanup, audit first, propose small phases, and wait for approval before editing.
|
|
192
|
+
</behavior>
|
|
193
|
+
|
|
202
194
|
<behavior name="dead_code_hygiene" priority="medium">
|
|
203
195
|
After refactoring or implementing changes:
|
|
204
196
|
- Identify code that is now unreachable
|
|
@@ -606,12 +598,11 @@ POTENTIAL CONCERNS:
|
|
|
606
598
|
13. Editing files from stale context without re-reading first
|
|
607
599
|
14. Duplicating state instead of fixing the real problem
|
|
608
600
|
15. Writing library/framework code from memory without searching Exa for current docs first
|
|
609
|
-
16.
|
|
610
|
-
17.
|
|
611
|
-
18.
|
|
612
|
-
19.
|
|
613
|
-
20.
|
|
614
|
-
21. Adding attribution or AI-style report trailers to Git commit messages
|
|
601
|
+
16. Using try-catch in Minecraft Script API code
|
|
602
|
+
17. Creating custom math functions when @minecraft/math has them available
|
|
603
|
+
18. Using raw strings instead of @minecraft/vanilla-data typed identifiers
|
|
604
|
+
19. Writing BP/RP JSON files without schema validation
|
|
605
|
+
20. Adding attribution or AI-style report trailers to Git commit messages
|
|
615
606
|
</failure_modes_to_avoid>
|
|
616
607
|
|
|
617
608
|
<meta>
|
|
@@ -621,18 +612,16 @@ You have unlimited stamina. The human does not. Use your persistence wisely —
|
|
|
621
612
|
|
|
622
613
|
**Priority Hierarchy:**
|
|
623
614
|
1. **EXA FOR DOCS** — Always search library/framework docs via Exa before implementing
|
|
624
|
-
2. **
|
|
625
|
-
3. **
|
|
626
|
-
4. **
|
|
627
|
-
5. **
|
|
628
|
-
6. **
|
|
629
|
-
7. **
|
|
630
|
-
8. **
|
|
631
|
-
9. **NATURAL COMMITS** - Write human commit messages; no attribution or AI-style report trailers
|
|
615
|
+
2. **VERIFY BEFORE DONE** — Type-check, lint, test before claiming success
|
|
616
|
+
3. **PLAN BEFORE BUILD** — Spec and approval before implementation
|
|
617
|
+
4. **GUARD CLAUSES** — Never use try-catch in Minecraft code
|
|
618
|
+
5. **VANILLA-DATA** — Use typed identifiers from @minecraft/vanilla-data
|
|
619
|
+
6. **MINECRAFT-MATH** — Use @minecraft/math library for math operations
|
|
620
|
+
7. **JSON SCHEMAS** — Validate BP/RP JSONs with Rockide/schemas
|
|
621
|
+
8. **NATURAL COMMITS** - Write human commit messages; no attribution or AI-style report trailers
|
|
632
622
|
|
|
633
623
|
**Violation Checks:**
|
|
634
624
|
- ❌ Wrote library/framework code without searching Exa first? → Violated Exa-for-docs rule
|
|
635
|
-
- ❌ Manually scraped/parsed HTML when Browser Use MCP could do it? → Violated Browser-Use-MCP-for-web rule
|
|
636
625
|
- ❌ Said "Done!" without running type-check/lint/tests? → Violated forced verification rule
|
|
637
626
|
- ❌ Edited a file from memory after 10+ messages without re-reading? → Violated context decay rule
|
|
638
627
|
- ❌ Started building without plan approval on a non-trivial task? → Violated plan-build separation
|