@runecraft/grimoire 1.0.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.
Files changed (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -0
  3. package/catalog.json +9 -0
  4. package/dist/grimoire.js +1758 -0
  5. package/package.json +54 -0
  6. package/references/definition-of-done.md +67 -0
  7. package/references/testing-patterns.md +260 -0
  8. package/skills/code-review-and-quality/README.md +13 -0
  9. package/skills/code-review-and-quality/SKILL.md +389 -0
  10. package/skills/code-simplification/README.md +13 -0
  11. package/skills/code-simplification/SKILL.md +338 -0
  12. package/skills/debugging-and-error-recovery/README.md +13 -0
  13. package/skills/debugging-and-error-recovery/SKILL.md +343 -0
  14. package/skills/debugging-and-error-recovery/scripts/__pycache__/triage_state.cpython-314.pyc +0 -0
  15. package/skills/debugging-and-error-recovery/scripts/triage_state.py +206 -0
  16. package/skills/deprecation-and-migration/README.md +13 -0
  17. package/skills/deprecation-and-migration/SKILL.md +248 -0
  18. package/skills/deprecation-and-migration/scripts/__pycache__/migration_tracker.cpython-314.pyc +0 -0
  19. package/skills/deprecation-and-migration/scripts/migration_tracker.py +237 -0
  20. package/skills/doubt-driven-development/README.md +13 -0
  21. package/skills/doubt-driven-development/SKILL.md +251 -0
  22. package/skills/git-commit-learning/.skill-meta.json +14 -0
  23. package/skills/git-commit-learning/README.md +205 -0
  24. package/skills/git-commit-learning/SKILL.md +435 -0
  25. package/skills/git-commit-learning/references/commit-patterns.md +595 -0
  26. package/skills/git-worktree/README.md +13 -0
  27. package/skills/git-worktree/SKILL.md +220 -0
  28. package/skills/idea-refine/README.md +13 -0
  29. package/skills/idea-refine/SKILL.md +186 -0
  30. package/skills/interview-me/README.md +13 -0
  31. package/skills/interview-me/SKILL.md +233 -0
  32. package/skills/linkedin-audit/SKILL.md +98 -0
  33. package/skills/linkedin-audit/references/dashboard-spec.md +43 -0
  34. package/skills/memory-management/README.md +13 -0
  35. package/skills/memory-management/SKILL.md +198 -0
  36. package/skills/security-and-hardening/README.md +13 -0
  37. package/skills/security-and-hardening/SKILL.md +472 -0
  38. package/skills/shipping-and-launch/README.md +13 -0
  39. package/skills/shipping-and-launch/SKILL.md +317 -0
  40. package/skills/skill-forge/README.md +153 -0
  41. package/skills/skill-forge/SKILL.md +291 -0
  42. package/skills/skill-forge/assets/SKILL.template.md +73 -0
  43. package/skills/skill-forge/references/authoring-patterns.md +249 -0
  44. package/skills/skill-forge/references/description-optimization.md +171 -0
  45. package/skills/skill-forge/references/output-evaluation.md +276 -0
  46. package/skills/skill-forge/references/scripts-guide.md +232 -0
  47. package/skills/skill-forge/references/spec.md +175 -0
  48. package/skills/skill-forge/scripts/validate.py +536 -0
  49. package/skills/spec-driven/.skill-meta.json +14 -0
  50. package/skills/spec-driven/README.md +335 -0
  51. package/skills/spec-driven/SKILL.md +174 -0
  52. package/skills/spec-driven/references/code-analysis.md +98 -0
  53. package/skills/spec-driven/references/coding-principles.md +56 -0
  54. package/skills/spec-driven/references/context-limits.md +31 -0
  55. package/skills/spec-driven/references/design.md +199 -0
  56. package/skills/spec-driven/references/discuss.md +136 -0
  57. package/skills/spec-driven/references/implement.md +425 -0
  58. package/skills/spec-driven/references/lessons.md +113 -0
  59. package/skills/spec-driven/references/memory.md +126 -0
  60. package/skills/spec-driven/references/specify.md +210 -0
  61. package/skills/spec-driven/references/sub-agents.md +96 -0
  62. package/skills/spec-driven/references/tasks.md +484 -0
  63. package/skills/spec-driven/references/validate.md +350 -0
  64. package/skills/spec-driven/scripts/__pycache__/lessons.cpython-314.pyc +0 -0
  65. package/skills/spec-driven/scripts/lessons.py +370 -0
  66. package/skills/spec-loop/README.md +36 -0
  67. package/skills/spec-loop/SKILL.md +61 -0
  68. package/skills/test-driven-development/README.md +13 -0
  69. package/skills/test-driven-development/SKILL.md +388 -0
  70. package/skills/typescript-patterns/README.md +13 -0
  71. package/skills/typescript-patterns/SKILL.md +346 -0
  72. package/skills/using-agent-skills/README.md +13 -0
  73. package/skills/using-agent-skills/SKILL.md +187 -0
@@ -0,0 +1,317 @@
1
+ ---
2
+ name: shipping-and-launch
3
+ description: >
4
+ Prepares production launches with a pre-launch checklist, staged rollout, monitoring, and a
5
+ rollback strategy — plus feature flag lifecycle (off → internal → beta → GA). Use when deploying
6
+ a feature to production for the first time, releasing a significant change, or planning a rollout.
7
+ EN triggers: /ship, pre-launch checklist, staged rollout, feature flag, rollback plan, monitoring.
8
+ PT triggers: /shippar, checklist pré-lançamento, rollout gradual, feature flag, plano de rollback.
9
+ Do NOT use for: pre-production development work, or one-off internal tools with no user exposure.
10
+ license: CC-BY-4.0
11
+ ---
12
+
13
+ # Shipping and Launch
14
+
15
+ ## Overview
16
+
17
+ Ship with confidence. The goal is not just to deploy — it's to deploy safely, with monitoring in place, a rollback plan ready, and a clear understanding of what success looks like. Every launch should be reversible, observable, and incremental.
18
+
19
+ ## When to Use
20
+
21
+ - Deploying a feature to production for the first time
22
+ - Releasing a significant change to users
23
+ - Migrating data or infrastructure
24
+ - Opening a beta or early access program
25
+ - Any deployment that carries risk (all of them)
26
+
27
+ ## The Pre-Launch Checklist
28
+
29
+ ### Code Quality
30
+
31
+ - [ ] All tests pass (unit, integration, e2e)
32
+ - [ ] Build succeeds with no warnings
33
+ - [ ] Lint and type checking pass
34
+ - [ ] Code reviewed and approved
35
+ - [ ] No TODO comments that should be resolved before launch
36
+ - [ ] No `console.log` debugging statements in production code
37
+ - [ ] Error handling covers expected failure modes
38
+
39
+ ### Security
40
+
41
+ - [ ] No secrets in code or version control
42
+ - [ ] `npm audit` shows no critical or high vulnerabilities
43
+ - [ ] Input validation on all user-facing endpoints
44
+ - [ ] Authentication and authorization checks in place
45
+ - [ ] Security headers configured (CSP, HSTS, etc.)
46
+ - [ ] Rate limiting on authentication endpoints
47
+ - [ ] CORS configured to specific origins (not wildcard)
48
+
49
+ ### Performance
50
+
51
+ - [ ] Core Web Vitals within "Good" thresholds
52
+ - [ ] No N+1 queries in critical paths
53
+ - [ ] Images optimized (compression, responsive sizes, lazy loading)
54
+ - [ ] Bundle size within budget
55
+ - [ ] Database queries have appropriate indexes
56
+ - [ ] Caching configured for static assets and repeated queries
57
+
58
+ ### Accessibility
59
+
60
+ - [ ] Keyboard navigation works for all interactive elements
61
+ - [ ] Screen reader can convey page content and structure
62
+ - [ ] Color contrast meets WCAG 2.1 AA (4.5:1 for text)
63
+ - [ ] Focus management correct for modals and dynamic content
64
+ - [ ] Error messages are descriptive and associated with form fields
65
+ - [ ] No accessibility warnings in axe-core or Lighthouse
66
+
67
+ ### Infrastructure
68
+
69
+ - [ ] Environment variables set in production
70
+ - [ ] Database migrations applied (or ready to apply)
71
+ - [ ] DNS and SSL configured
72
+ - [ ] CDN configured for static assets
73
+ - [ ] Logging and error reporting configured
74
+ - [ ] Health check endpoint exists and responds
75
+
76
+ ### Documentation
77
+
78
+ - [ ] README updated with any new setup requirements
79
+ - [ ] API documentation current
80
+ - [ ] ADRs written for any architectural decisions
81
+ - [ ] Changelog updated
82
+ - [ ] User-facing documentation updated (if applicable)
83
+
84
+ ## Feature Flag Strategy
85
+
86
+ Ship behind feature flags to decouple deployment from release:
87
+
88
+ ```typescript
89
+ // Feature flag check
90
+ const flags = await getFeatureFlags(userId);
91
+
92
+ if (flags.taskSharing) {
93
+ // New feature: task sharing
94
+ return <TaskSharingPanel task={task} />;
95
+ }
96
+
97
+ // Default: existing behavior
98
+ return null;
99
+ ```
100
+
101
+ **Feature flag lifecycle:**
102
+
103
+ ```
104
+ 1. DEPLOY with flag OFF → Code is in production but inactive
105
+ 2. ENABLE for team/beta → Internal testing in production environment
106
+ 3. GRADUAL ROLLOUT → 5% → 25% → 50% → 100% of users
107
+ 4. MONITOR at each stage → Watch error rates, performance, user feedback
108
+ 5. CLEAN UP → Remove flag and dead code path after full rollout
109
+ ```
110
+
111
+ **Rules:**
112
+ - Every feature flag has an owner and an expiration date
113
+ - Clean up flags within 2 weeks of full rollout
114
+ - Don't nest feature flags (creates exponential combinations)
115
+ - Test both flag states (on and off) in CI
116
+
117
+ ## Staged Rollout
118
+
119
+ ### The Rollout Sequence
120
+
121
+ ```
122
+ 1. DEPLOY to staging
123
+ └── Full test suite in staging environment
124
+ └── Manual smoke test of critical flows
125
+
126
+ 2. DEPLOY to production (feature flag OFF)
127
+ └── Verify deployment succeeded (health check)
128
+ └── Check error monitoring (no new errors)
129
+
130
+ 3. ENABLE for team (flag ON for internal users)
131
+ └── Team uses the feature in production
132
+ └── 24-hour monitoring window
133
+
134
+ 4. CANARY rollout (flag ON for 5% of users)
135
+ └── Monitor error rates, latency, user behavior
136
+ └── Compare metrics: canary vs. baseline
137
+ └── 24-48 hour monitoring window
138
+ └── Advance only if all thresholds pass (see table below)
139
+
140
+ 5. GRADUAL increase (25% -> 50% -> 100%)
141
+ └── Same monitoring at each step
142
+ └── Ability to roll back to previous percentage at any point
143
+
144
+ 6. FULL rollout (flag ON for all users)
145
+ └── Monitor for 1 week
146
+ └── Clean up feature flag
147
+ ```
148
+
149
+ ### Rollout Decision Thresholds
150
+
151
+ Use these thresholds to decide whether to advance, hold, or roll back at each stage:
152
+
153
+ | Metric | Advance (green) | Hold and investigate (yellow) | Roll back (red) |
154
+ |--------|-----------------|-------------------------------|-----------------|
155
+ | Error rate | Within 10% of baseline | 10-100% above baseline | >2x baseline |
156
+ | P95 latency | Within 20% of baseline | 20-50% above baseline | >50% above baseline |
157
+ | Client JS errors | No new error types | New errors at <0.1% of sessions | New errors at >0.1% of sessions |
158
+ | Business metrics | Neutral or positive | Decline <5% (may be noise) | Decline >5% |
159
+
160
+ ### When to Roll Back
161
+
162
+ Roll back immediately if:
163
+ - Error rate increases by more than 2x baseline
164
+ - P95 latency increases by more than 50%
165
+ - User-reported issues spike
166
+ - Data integrity issues detected
167
+ - Security vulnerability discovered
168
+
169
+ ## Monitoring and Observability
170
+
171
+ ### What to Monitor
172
+
173
+ ```
174
+ Application metrics:
175
+ ├── Error rate (total and by endpoint)
176
+ ├── Response time (p50, p95, p99)
177
+ ├── Request volume
178
+ ├── Active users
179
+ └── Key business metrics (conversion, engagement)
180
+
181
+ Infrastructure metrics:
182
+ ├── CPU and memory utilization
183
+ ├── Database connection pool usage
184
+ ├── Disk space
185
+ ├── Network latency
186
+ └── Queue depth (if applicable)
187
+
188
+ Client metrics:
189
+ ├── Core Web Vitals (LCP, INP, CLS)
190
+ ├── JavaScript errors
191
+ ├── API error rates from client perspective
192
+ └── Page load time
193
+ ```
194
+
195
+ ### Error Reporting
196
+
197
+ ```typescript
198
+ // Set up error boundary with reporting
199
+ class ErrorBoundary extends React.Component {
200
+ componentDidCatch(error: Error, info: React.ErrorInfo) {
201
+ // Report to error tracking service
202
+ reportError(error, {
203
+ componentStack: info.componentStack,
204
+ userId: getCurrentUser()?.id,
205
+ page: window.location.pathname,
206
+ });
207
+ }
208
+
209
+ render() {
210
+ if (this.state.hasError) {
211
+ return <ErrorFallback onRetry={() => this.setState({ hasError: false })} />;
212
+ }
213
+ return this.props.children;
214
+ }
215
+ }
216
+
217
+ // Server-side error reporting
218
+ app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
219
+ reportError(err, {
220
+ method: req.method,
221
+ url: req.url,
222
+ userId: req.user?.id,
223
+ });
224
+
225
+ // Don't expose internals to users
226
+ res.status(500).json({
227
+ error: { code: 'INTERNAL_ERROR', message: 'Something went wrong' },
228
+ });
229
+ });
230
+ ```
231
+
232
+ ### Post-Launch Verification
233
+
234
+ In the first hour after launch:
235
+
236
+ ```
237
+ 1. Check health endpoint returns 200
238
+ 2. Check error monitoring dashboard (no new error types)
239
+ 3. Check latency dashboard (no regression)
240
+ 4. Test the critical user flow manually
241
+ 5. Verify logs are flowing and readable
242
+ 6. Confirm rollback mechanism works (dry run if possible)
243
+ ```
244
+
245
+ ## Rollback Strategy
246
+
247
+ Every deployment needs a rollback plan before it happens:
248
+
249
+ ```markdown
250
+ ## Rollback Plan for [Feature/Release]
251
+
252
+ ### Trigger Conditions
253
+ - Error rate > 2x baseline
254
+ - P95 latency > [X]ms
255
+ - User reports of [specific issue]
256
+
257
+ ### Rollback Steps
258
+ 1. Disable feature flag (if applicable)
259
+ OR
260
+ 1. Deploy previous version: `git revert <commit> && git push`
261
+ 2. Verify rollback: health check, error monitoring
262
+ 3. Communicate: notify team of rollback
263
+
264
+ ### Database Considerations
265
+ - Migration [X] has a rollback: `npx prisma migrate rollback`
266
+ - Data inserted by new feature: [preserved / cleaned up]
267
+
268
+ ### Time to Rollback
269
+ - Feature flag: < 1 minute
270
+ - Redeploy previous version: < 5 minutes
271
+ - Database rollback: < 15 minutes
272
+ ```
273
+ ## See Also
274
+
275
+ - For the project-wide Definition of Done that every change must clear before this checklist, see `references/definition-of-done.md`
276
+ - For security pre-launch checks, see the Security section of The Pre-Launch Checklist above
277
+ - For performance pre-launch checks, see the Performance section of The Pre-Launch Checklist above
278
+ - For accessibility verification before launch, see the Accessibility section of The Pre-Launch Checklist above
279
+
280
+ ## Common Rationalizations
281
+
282
+ | Rationalization | Reality |
283
+ |---|---|
284
+ | "It works in staging, it'll work in production" | Production has different data, traffic patterns, and edge cases. Monitor after deploy. |
285
+ | "We don't need feature flags for this" | Every feature benefits from a kill switch. Even "simple" changes can break things. |
286
+ | "Monitoring is overhead" | Not having monitoring means you discover problems from user complaints instead of dashboards. |
287
+ | "We'll add monitoring later" | Add it before launch. You can't debug what you can't see. |
288
+ | "Rolling back is admitting failure" | Rolling back is responsible engineering. Shipping a broken feature is the failure. |
289
+
290
+ ## Red Flags
291
+
292
+ - Deploying without a rollback plan
293
+ - No monitoring or error reporting in production
294
+ - Big-bang releases (everything at once, no staging)
295
+ - Feature flags with no expiration or owner
296
+ - No one monitoring the deploy for the first hour
297
+ - Production environment configuration done by memory, not code
298
+ - "It's Friday afternoon, let's ship it"
299
+
300
+ ## Verification
301
+
302
+ Before deploying:
303
+
304
+ - [ ] Pre-launch checklist completed (all sections green)
305
+ - [ ] Feature flag configured (if applicable)
306
+ - [ ] Rollback plan documented
307
+ - [ ] Monitoring dashboards set up
308
+ - [ ] Team notified of deployment
309
+
310
+ After deploying:
311
+
312
+ - [ ] Health check returns 200
313
+ - [ ] Error rate is normal
314
+ - [ ] Latency is normal
315
+ - [ ] Critical user flow works
316
+ - [ ] Logs are flowing
317
+ - [ ] Rollback tested or verified ready
@@ -0,0 +1,153 @@
1
+ <p align="center">
2
+ <img src="https://img.shields.io/badge/Skill-skill--forge-blue?style=for-the-badge" alt="skill badge" />
3
+ <img src="https://img.shields.io/badge/Stack-Agnostic-green?style=for-the-badge" alt="stack agnostic" />
4
+ <img src="https://img.shields.io/badge/Version-1.0.0-purple?style=for-the-badge" alt="version" />
5
+ </p>
6
+
7
+ <h1 align="center">🛠️ skill-forge</h1>
8
+
9
+ <p align="center">
10
+ <strong>Meta-skill for creating new Agent Skills from scratch — aligned with the open SKILL.md format.<br/>Discover → Design → Author → Validate → Optimize → Deliver.</strong>
11
+ </p>
12
+
13
+ ---
14
+
15
+ ## ✨ What Is This Skill?
16
+
17
+ **skill-forge** turns an idea into a publishable Agent Skill. It walks you through the full lifecycle, end to end, with explicit exit criteria and a bundled validator. Every output conforms to the open SKILL.md format (YAML frontmatter + Markdown body, progressive disclosure, validation loops), so the skills you create trigger reliably across Claude Code, Cursor, GitHub Copilot, OpenCode, and other compatible agents.
18
+
19
+ ```
20
+ DISCOVER → DESIGN → AUTHOR → VALIDATE → OPTIMIZE → DELIVER
21
+ ↑ │
22
+ └──────────── iterate on OPTIMIZE ────────────┘
23
+ ```
24
+
25
+ - **DISCOVER** — capture use cases, category, out-of-scope list.
26
+ - **DESIGN** — pick a pattern, folder layout, progressive-disclosure map, description draft.
27
+ - **AUTHOR** — frontmatter per spec, body, supporting files.
28
+ - **VALIDATE** — bundled `scripts/validate.py` + spec re-check + trigger sanity.
29
+ - **OPTIMIZE** — description triggering eval (train/val split) + output-quality eval (with-skill vs without-skill).
30
+ - **DELIVER** — install into the target agent's skills directory; register in catalog if applicable.
31
+
32
+ ---
33
+
34
+ ## 🚀 Quick Start
35
+
36
+ ### Installation
37
+
38
+ Install manually by copying `skills/skill-forge/` into your agent's skills directory, or use the `grimoire` installer TUI shipped with the package (see the [catalog README](../../README.md)):
39
+
40
+ | Agent | Path |
41
+ |---|---|
42
+ | VS Code + Copilot | `.agents/skills/skill-forge/` |
43
+ | Claude Code | `.claude/skills/skill-forge/` |
44
+ | Cursor | `.cursor/skills/skill-forge/` |
45
+ | OpenCode | `.opencode/skill/skill-forge/` |
46
+
47
+ Optionally add a slash command (`/forge`) to the agent's command file so the trigger works without typing a long phrase.
48
+
49
+ ### How to use it
50
+
51
+ 1. Open your agent in agentic mode.
52
+ 2. Invoke `/forge` (or describe your intent: "create a skill that does X").
53
+ 3. Answer the discovery questions one cluster at a time.
54
+ 4. The skill will draft, validate, and (if you wish) optimize the new skill.
55
+ 5. At the **DELIVER** step, the new skill lands in the right directory and (if publishing) gets a catalog row and a release note.
56
+
57
+ ### Minimal example
58
+
59
+ > "I keep explaining how to onboard new engineers at our company. Make a skill that captures the standard process."
60
+
61
+ The agent will:
62
+
63
+ 1. Ask 4-6 discovery questions (audience, what goes wrong without the skill, success criteria).
64
+ 2. Propose a pattern (likely Sequential Workflow) and folder layout.
65
+ 3. Draft `SKILL.md` + any needed `references/` or `scripts/`.
66
+ 4. Run the bundled validator until it PASSes.
67
+ 5. Hand you a test prompt to verify triggering in your agent.
68
+
69
+ ---
70
+
71
+ ## 📁 Anatomy
72
+
73
+ ```
74
+ skill-forge/
75
+ ├── SKILL.md # The 6-phase workflow (agent instructions)
76
+ ├── README.md # This file (human-facing, outside agent context)
77
+ ├── references/
78
+ │ ├── spec.md # open SKILL.md format specification
79
+ │ ├── authoring-patterns.md # Best practices: gotchas, templates, validation loops
80
+ │ ├── description-optimization.md # Trigger eval with train/val split
81
+ │ ├── output-evaluation.md # With-skill vs without-skill quality eval
82
+ │ └── scripts-guide.md # PEP 723, agentic script design, --help, exit codes
83
+ ├── scripts/
84
+ │ └── validate.py # Stdlib-only spec validator (PEP 723 friendly)
85
+ └── assets/
86
+ └── SKILL.template.md # Blank template for new skills
87
+ ```
88
+
89
+ The validator is intentionally stdlib-only and PEP 723 declared, so it runs with no install step:
90
+
91
+ ```bash
92
+ python3 scripts/validate.py path/to/new-skill
93
+ uv run --no-project scripts/validate.py path/to/new-skill
94
+ ```
95
+
96
+ Exit code 0 = pass (warnings allowed). Exit code 1 = format violation.
97
+
98
+ ---
99
+
100
+ ## 📐 Conformance to the open SKILL.md format
101
+
102
+ | Spec field | skill-forge value |
103
+ |---|---|
104
+ | `name` | `skill-forge` (kebab-case, matches folder) |
105
+ | `description` | 1024-char max, EN+PT triggers, explicit exclusions |
106
+ | `license` | `CC-BY-4.0` |
107
+ | `metadata.version` | `1.0.0` |
108
+ | Frontmatter delimiters | Exactly `---` on their own lines |
109
+ | `SKILL.md` casing | Exact |
110
+ | Body length | Under the 500-line cap |
111
+
112
+ Run the validator against itself to confirm:
113
+
114
+ ```bash
115
+ python3 skills/skill-forge/scripts/validate.py skills/skill-forge
116
+ ```
117
+
118
+ Expected: `PASS — N checks passed`.
119
+
120
+ ---
121
+
122
+ ## 🤖 Compatibility
123
+
124
+ | Agent | Status |
125
+ |---|---|
126
+ | Claude Code | ✅ Tested |
127
+ | OpenCode | ✅ Tested |
128
+ | Cursor | ✅ Tested |
129
+ | GitHub Copilot | ✅ Tested |
130
+ | Antigravity (Gemini) | ✅ Tested |
131
+
132
+ Works with any agent that follows the open SKILL.md format.
133
+
134
+ ---
135
+
136
+ ## 📥 See also
137
+
138
+ - [references/spec.md](references/spec.md) — the open SKILL.md format reference bundled in this skill.
139
+ - [references/authoring-patterns.md](references/authoring-patterns.md) — best practices for skill bodies (calibrating control, gotchas, templates, validation loops).
140
+ - [references/description-optimization.md](references/description-optimization.md) — eval-driven triggering improvement.
141
+ - [references/output-evaluation.md](references/output-evaluation.md) — proving a skill improves output quality.
142
+
143
+ ---
144
+
145
+ ## 📦 Catalog
146
+
147
+ This skill is part of the [Grimoire](https://github.com/runecraftai/skills) catalog, distributed via the [`@runecraft/grimoire`](https://www.npmjs.com/package/@runecraft/grimoire) npm package.
148
+
149
+ ---
150
+
151
+ ## 📄 License
152
+
153
+ CC-BY-4.0