@diottodev/runic 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 (4) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +219 -0
  3. package/dist/index.js +96 -0
  4. package/package.json +73 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 mcp-skills-server contributors
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/README.md ADDED
@@ -0,0 +1,219 @@
1
+ # Runic
2
+
3
+ > 91 AI & Dev skills for Claude Code, Cursor, Windsurf, VS Code, and JetBrains.
4
+ > Install in seconds via MCP or as a native IDE plugin.
5
+
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
7
+ [![npm](https://img.shields.io/npm/v/@diottodev/runic)](https://www.npmjs.com/package/@diottodev/runic)
8
+ [![Skills](https://img.shields.io/badge/skills-91-0e7490)](.)
9
+ [![Domains](https://img.shields.io/badge/domains-6-155e75)](.)
10
+ [![GitHub](https://img.shields.io/badge/GitHub-Diottodev-161b22?logo=github)](https://github.com/Diottodev/runic)
11
+
12
+ ---
13
+
14
+ ## Installation
15
+
16
+ Runic supports two distribution channels: **MCP protocol** (recommended — works in all 5 IDEs with zero config) and **native IDE plugin** (VS Code Marketplace / JetBrains Marketplace).
17
+
18
+ ---
19
+
20
+ ### via MCP
21
+
22
+ MCP (Model Context Protocol) is a standard supported by all major AI-enabled IDEs. One config, five IDEs.
23
+
24
+ #### Claude Code
25
+
26
+ ```bash
27
+ claude mcp add --npm @diottodev/runic
28
+ ```
29
+
30
+ #### Cursor
31
+
32
+ Add to `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global):
33
+
34
+ ```json
35
+ {
36
+ "mcpServers": {
37
+ "runic": {
38
+ "command": "npx",
39
+ "args": ["-y", "@diottodev/runic"]
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ Restart Cursor after saving.
46
+
47
+ #### Windsurf
48
+
49
+ Add to `~/.codeium/windsurf/mcp_config.json`:
50
+
51
+ ```json
52
+ {
53
+ "mcpServers": {
54
+ "runic": {
55
+ "command": "npx",
56
+ "args": ["-y", "@diottodev/runic"]
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ Or open Windsurf → Settings → Cascade → MCP Servers.
63
+
64
+ #### VS Code
65
+
66
+ Add to `.vscode/mcp.json`:
67
+
68
+ ```json
69
+ {
70
+ "servers": {
71
+ "runic": {
72
+ "type": "stdio",
73
+ "command": "npx",
74
+ "args": ["-y", "@diottodev/runic"]
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ Requires VS Code with Copilot, Continue, or another MCP-compatible extension.
81
+
82
+ #### JetBrains
83
+
84
+ Add to `~/.config/JetBrains/mcp.json`:
85
+
86
+ ```json
87
+ {
88
+ "servers": {
89
+ "runic": {
90
+ "command": "npx",
91
+ "args": ["-y", "@diottodev/runic"]
92
+ }
93
+ }
94
+ }
95
+ ```
96
+
97
+ Or open Settings → Tools → AI Assistant → MCP Servers. Requires JetBrains AI Assistant 2024+.
98
+
99
+ > **Requirement:** Node.js ≥ 18 — run `node --version` to verify.
100
+
101
+ ---
102
+
103
+ ### via Plugin
104
+
105
+ Install Runic as a native IDE extension — no JSON config needed.
106
+
107
+ #### VS Code / Cursor
108
+
109
+ ```bash
110
+ # VS Code
111
+ code --install-extension runic.skills
112
+
113
+ # Cursor
114
+ cursor --install-extension runic.skills
115
+ ```
116
+
117
+ Or search **"Runic Skills"** in the Extensions panel (`Ctrl+Shift+X`).
118
+
119
+ #### JetBrains
120
+
121
+ Open any JetBrains IDE (IntelliJ IDEA, WebStorm, PyCharm, GoLand...) →
122
+ **Settings → Plugins → Marketplace** → search **"Runic"** → Install → Restart.
123
+
124
+ ---
125
+
126
+ ## How it Works
127
+
128
+ ### MCP distribution
129
+
130
+ The `runic` npm package exposes a [Model Context Protocol](https://modelcontextprotocol.io) server. When the IDE starts a session, it spawns `npx @diottodev/runic` as a child process via stdio. The server registers all 91 skills as MCP tools — the IDE's AI can then invoke them by name or the IDE can trigger them proactively based on context.
131
+
132
+ **To publish / update on npm:**
133
+
134
+ ```bash
135
+ npm run build
136
+ npm publish
137
+ ```
138
+
139
+ ### VS Code / Cursor plugin distribution
140
+
141
+ The extension (`packages/vscode-extension/`) wraps the MCP server and registers VS Code commands and context menu entries. Skills are accessible via the Command Palette (`Ctrl+Shift+P → Runic: ...`) and activate automatically via `onLanguage` / `onFileSystem` triggers.
142
+
143
+ **To build and publish:**
144
+
145
+ ```bash
146
+ cd packages/vscode-extension
147
+ npm install
148
+ npx vsce package # builds runic-skills-x.x.x.vsix
149
+ npx vsce publish # requires PAT from marketplace.visualstudio.com
150
+ ```
151
+
152
+ ### JetBrains plugin distribution
153
+
154
+ The plugin (`packages/jetbrains-plugin/`) is a Kotlin/Gradle project using the [IntelliJ Platform Plugin SDK](https://plugins.jetbrains.com/docs/intellij/). It integrates with the JetBrains AI Assistant extension point and registers Runic skills as inline actions and tool window entries.
155
+
156
+ **To build and publish:**
157
+
158
+ ```bash
159
+ cd packages/jetbrains-plugin
160
+ ./gradlew buildPlugin # outputs build/distributions/runic-*.zip
161
+ ./gradlew publishPlugin # requires PUBLISH_TOKEN env var from plugins.jetbrains.com
162
+ ```
163
+
164
+ ---
165
+
166
+ ## Domains & Skills
167
+
168
+ | Domain | Skills | Description |
169
+ |--------|--------|-------------|
170
+ | `engineering/` | 37 | Core AI & dev tools — review, debug, test, LLM ops, agents |
171
+ | `engineering-team/` | 38 | Team skills — security, cloud, fullstack, QA, DevOps |
172
+ | `ai-research/` | 2 | Model evaluation & benchmarks |
173
+ | `ai-security/` | 1 | Prompt injection & hardening |
174
+ | `research/` | 8 | Academic & market research |
175
+ | `research-ops/` | 5 | Clinical, market, product & R&D ops |
176
+
177
+ ### Engineering highlights
178
+
179
+ `code-review` · `debug-error` · `explain-code` · `generate-tests` · `git-commit` · `refactor` · `write-docs` · `llm-cost-optimizer` · `prompt-engineering` · `agent-designer` · `rag-architect` · `mcp-server-builder` · `karpathy-coder` · `chaos-engineering` · `ship-gate` · `slo-architect` · `docker-development` · `kubernetes-operator` · `terraform-patterns`
180
+
181
+ ### Security highlights
182
+
183
+ `ai-security` · `cloud-security` · `red-team` · `security-pen-testing` · `threat-detection` · `prompt-injection` · `senior-secops` · `incident-response`
184
+
185
+ ---
186
+
187
+ ## Project Structure
188
+
189
+ ```
190
+ runic/
191
+ ├── engineering/ # 37 core AI & dev skills
192
+ ├── engineering-team/ # 38 team role skills + security
193
+ ├── ai-research/ # 2 model evaluation skills
194
+ ├── ai-security/ # 1 AI security skill
195
+ ├── research/ # 8 research skills
196
+ ├── research-ops/ # 5 research ops skills
197
+
198
+ ├── packages/
199
+ │ ├── vscode-extension/ # VS Code / Cursor native plugin
200
+ │ └── jetbrains-plugin/ # JetBrains IDE native plugin
201
+
202
+ ├── web/ # Landing page (React + Vite + Tailwind)
203
+
204
+ ├── CLAUDE.md # Navigation & roadmap
205
+ ├── SKILL-AUTHORING-STANDARD.md # 10-Pattern Framework
206
+ ├── CONVENTIONS.md
207
+ ├── CONTRIBUTING.md
208
+ └── CHANGELOG.md
209
+ ```
210
+
211
+ ---
212
+
213
+ ## Contributing
214
+
215
+ See [CONTRIBUTING.md](./CONTRIBUTING.md). AI and Dev skills only. PRs target `dev`.
216
+
217
+ ## License
218
+
219
+ MIT — [Diottodev](https://github.com/Diottodev/runic)
package/dist/index.js ADDED
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { readFileSync, readdirSync, statSync, existsSync } from 'fs';
5
+ import { join, dirname } from 'path';
6
+ import { fileURLToPath } from 'url';
7
+ import { z } from 'zod';
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ const ROOT = join(__dirname, '..');
10
+ const DOMAINS = [
11
+ 'engineering',
12
+ 'engineering-team',
13
+ 'ai-research',
14
+ 'ai-security',
15
+ 'research',
16
+ 'research-ops',
17
+ ];
18
+ function parseFrontmatter(raw) {
19
+ const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/m);
20
+ if (!match)
21
+ return { body: raw };
22
+ const meta = {};
23
+ for (const line of match[1].split('\n')) {
24
+ const colon = line.indexOf(':');
25
+ if (colon === -1)
26
+ continue;
27
+ const key = line.slice(0, colon).trim();
28
+ const val = line.slice(colon + 1).trim().replace(/^["']|["']$/g, '');
29
+ meta[key] = val;
30
+ }
31
+ return { name: meta['name'], description: meta['description'], body: match[2].trim() };
32
+ }
33
+ function findSkillFiles(dir) {
34
+ if (!existsSync(dir))
35
+ return [];
36
+ const results = [];
37
+ for (const entry of readdirSync(dir)) {
38
+ const full = join(dir, entry);
39
+ if (statSync(full).isDirectory()) {
40
+ const skill = join(full, 'SKILL.md');
41
+ if (existsSync(skill))
42
+ results.push(skill);
43
+ else
44
+ results.push(...findSkillFiles(full));
45
+ }
46
+ }
47
+ return results;
48
+ }
49
+ function loadSkills() {
50
+ const skills = [];
51
+ const seen = new Set();
52
+ for (const domain of DOMAINS) {
53
+ const domainDir = join(ROOT, domain);
54
+ for (const file of findSkillFiles(domainDir)) {
55
+ const raw = readFileSync(file, 'utf8');
56
+ const { name, description, body } = parseFrontmatter(raw);
57
+ if (!name || !description || !body || seen.has(name))
58
+ continue;
59
+ seen.add(name);
60
+ skills.push({ name, description, content: body, domain });
61
+ }
62
+ }
63
+ return skills;
64
+ }
65
+ async function main() {
66
+ const skills = loadSkills();
67
+ const server = new McpServer({
68
+ name: 'runic',
69
+ version: '1.0.0',
70
+ });
71
+ for (const skill of skills) {
72
+ server.tool(skill.name, skill.description, { context: z.string().optional().describe('Additional context from the user') }, async ({ context }) => ({
73
+ content: [{
74
+ type: 'text',
75
+ text: context
76
+ ? `${skill.content}\n\n---\nUser context: ${context}`
77
+ : skill.content,
78
+ }],
79
+ }));
80
+ }
81
+ // List all skills tool
82
+ server.tool('runic-list', 'List all available Runic skills with their names, domains, and descriptions.', {}, async () => ({
83
+ content: [{
84
+ type: 'text',
85
+ text: skills
86
+ .map(s => `**${s.name}** (${s.domain})\n${s.description}`)
87
+ .join('\n\n'),
88
+ }],
89
+ }));
90
+ const transport = new StdioServerTransport();
91
+ await server.connect(transport);
92
+ }
93
+ main().catch(err => {
94
+ process.stderr.write(`runic: ${err.message}\n`);
95
+ process.exit(1);
96
+ });
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@diottodev/runic",
3
+ "version": "1.0.0",
4
+ "description": "91 AI & Dev skills for Claude Code, Cursor, Windsurf, VS Code, and JetBrains — install via MCP or as a native IDE plugin.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "runic": "./dist/index.js",
9
+ "@diottodev/runic": "./dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "LICENSE",
14
+ "README.md"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc && shx chmod +x dist/index.js",
18
+ "prepare": "npm run build",
19
+ "dev": "tsx watch src/index.ts",
20
+ "start": "node dist/index.js",
21
+ "lint": "eslint src --ext .ts",
22
+ "test": "vitest run"
23
+ },
24
+ "keywords": [
25
+ "mcp",
26
+ "mcp-server",
27
+ "runic",
28
+ "claude-code",
29
+ "cursor",
30
+ "windsurf",
31
+ "vscode",
32
+ "jetbrains",
33
+ "ide-plugin",
34
+ "vscode-extension",
35
+ "ai",
36
+ "ai-skills",
37
+ "code-review",
38
+ "developer-tools",
39
+ "llm",
40
+ "model-context-protocol",
41
+ "prompt-engineering",
42
+ "debug",
43
+ "test-generation",
44
+ "skills-library"
45
+ ],
46
+ "homepage": "https://github.com/Diottodev/runic",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/Diottodev/runic.git"
50
+ },
51
+ "bugs": {
52
+ "url": "https://github.com/Diottodev/runic/issues"
53
+ },
54
+ "author": "Diottodev",
55
+ "license": "MIT",
56
+ "publishConfig": {
57
+ "access": "public"
58
+ },
59
+ "dependencies": {
60
+ "@modelcontextprotocol/sdk": "^1.12.0",
61
+ "zod": "^3.23.8"
62
+ },
63
+ "devDependencies": {
64
+ "@types/node": "^20.14.0",
65
+ "shx": "^0.3.4",
66
+ "tsx": "^4.15.0",
67
+ "typescript": "^5.5.0",
68
+ "vitest": "^1.6.0"
69
+ },
70
+ "engines": {
71
+ "node": ">=18"
72
+ }
73
+ }