Polycss
layoutit/polycss
Build PolyCSS scenes that render 3D meshes, primitive shapes, or custom polygons as DOM/CSS polygon elements.
Blockbench plugin/extension development for the 3D modeling tool.
$ npx skills add jasonjgardner/blockbench-mcp-plugin --skill blockbench-plugins -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jasonjgardner/blockbench-mcp-plugin blockbench-plugins --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jasonjgardner/blockbench-mcp-plugin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/blockbench-plugins .claude/skills/blockbench-plugins && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "blockbench-plugins" agent skill from https://github.com/jasonjgardner/blockbench-mcp-plugin/tree/main/.agents/skills/blockbench-plugins into .claude/skills/blockbench-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blockbench-plugins", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jasonjgardner/blockbench-mcp-plugin/tree/main/.agents/skills/blockbench-pluginsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jasonjgardner/blockbench-mcp-plugin --skill blockbench-plugins -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jasonjgardner/blockbench-mcp-plugin blockbench-plugins --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jasonjgardner/blockbench-mcp-plugin.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/blockbench-plugins .agents/skills/blockbench-plugins && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "blockbench-plugins" agent skill from https://github.com/jasonjgardner/blockbench-mcp-plugin/tree/main/.agents/skills/blockbench-plugins into .agents/skills/blockbench-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blockbench-plugins", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jasonjgardner/blockbench-mcp-plugin --skill blockbench-plugins -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jasonjgardner/blockbench-mcp-plugin blockbench-plugins --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jasonjgardner/blockbench-mcp-plugin.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/blockbench-plugins .cursor/skills/blockbench-plugins && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "blockbench-plugins" agent skill from https://github.com/jasonjgardner/blockbench-mcp-plugin/tree/main/.agents/skills/blockbench-plugins into .cursor/skills/blockbench-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blockbench-plugins", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jasonjgardner/blockbench-mcp-plugin.git --path .agents/skills/blockbench-plugins--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jasonjgardner/blockbench-mcp-plugin --skill blockbench-plugins -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jasonjgardner/blockbench-mcp-plugin blockbench-plugins --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jasonjgardner/blockbench-mcp-plugin.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/blockbench-plugins .gemini/skills/blockbench-plugins && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "blockbench-plugins" agent skill from https://github.com/jasonjgardner/blockbench-mcp-plugin/tree/main/.agents/skills/blockbench-plugins into .gemini/skills/blockbench-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blockbench-plugins", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jasonjgardner/blockbench-mcp-plugin blockbench-pluginsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jasonjgardner/blockbench-mcp-plugin --skill blockbench-plugins -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jasonjgardner/blockbench-mcp-plugin.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/blockbench-plugins .github/skills/blockbench-plugins && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "blockbench-plugins" agent skill from https://github.com/jasonjgardner/blockbench-mcp-plugin/tree/main/.agents/skills/blockbench-plugins into .github/skills/blockbench-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blockbench-plugins", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jasonjgardner/blockbench-mcp-plugin --skill blockbench-plugins -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jasonjgardner/blockbench-mcp-plugin blockbench-plugins --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jasonjgardner/blockbench-mcp-plugin.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/blockbench-plugins .opencode/skills/blockbench-plugins && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "blockbench-plugins" agent skill from https://github.com/jasonjgardner/blockbench-mcp-plugin/tree/main/.agents/skills/blockbench-plugins into .opencode/skills/blockbench-plugins/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blockbench-plugins", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
blockbench-pluginsBlockbench plugin/extension development for the 3D modeling tool.
Blockbench Plugins is an agent skill from jasonjgardner/blockbench-mcp-plugin. Blockbench plugin/extension development for the 3D modeling tool. Use when creating, modifying, or debugging JavaScript plugins for Blockbench including actions, dialogs, panels, menus, toolbars, model manipulation, animation APIs, and custom formats/codecs. Triggers on Blockbench plugin, Blockbench extension, Blockbench API, BBPlugin, model editor plugin, or 3D modeling tool extension.
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including reference files and assets (for example `assets/format_plugin.js`, `assets/plugin_template.js` and `references/api.md`).
It sits in Game Development, covering 3D graphics and WebGL and Browser extensions. It works with JavaScript, Model Context Protocol and Vue.js. The repository describes itself as: Adds MCP server to Blockbench. The licence is GPL-3.0.
Read from SKILL.md and the folder at commit d027171. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Blockbench Plugins loads about 2.8k tokens when it runs, and up to ~8.9k if it reads all its reference files. Until then it costs about 102 tokens; SKILL.md has 289 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jasonjgardner/blockbench-mcp-plugin at commit d027171, republished under its GPL-3.0 licence (© jasonjgardner). 289 words, ~2,834 tokens.
.claude/skills/blockbench-plugins/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Blockbench runs on Electron (desktop) and as a web PWA, using THREE.js for 3D rendering and Vue 2 for reactive UI. Plugins have full access to global APIs within an isolated execution context.
| Task | Approach |
|---|---|
| Create clickable command | new Action() - add to menus/toolbars |
| Show form/dialog | new Dialog() with form fields |
| Add sidebar panel | new Panel() with Vue component |
| Modify model elements | Use Undo.initEdit() → modify → Undo.finishEdit() |
| Custom import/export | new Codec() + new ModelFormat() |
| React to changes | Blockbench.on('event_name', callback) |
plugins/
└── my_plugin/
├── my_plugin.js # Main file (required, ID must match filename)
├── about.md # Extended docs (optional)
└── icon.png # 48x48 icon (optional)(function() {
// Store references for cleanup
let myAction, myPanel, myDialog, eventCallback;
Plugin.register('my_plugin', {
title: 'My Plugin',
author: 'Author Name',
description: 'Short description',
icon: 'extension', // Material icon name
version: '1.0.0',
variant: 'both', // 'desktop', 'web', or 'both'
min_version: '4.8.0',
tags: ['Utility'],
onload() {
// Initialize all components here
},
onunload() {
// CRITICAL: Delete ALL components here
},
oninstall() {
Blockbench.showQuickMessage('Installed!');
}
});
})();Actions are clickable commands for menus, toolbars, and keybindings.
myAction = new Action('my_action_id', {
name: 'Action Name',
description: 'Tooltip text',
icon: 'star',
category: 'edit', // For keybind settings
condition: () => Cube.selected.length > 0,
keybind: new Keybind({ key: 'k', ctrl: true }),
click(event) {
// Action logic
}
});
MenuBar.addAction(myAction, 'filter'); // Add to Filter menu
// Cleanup
myAction.delete();Menu locations: 'file', 'edit', 'transform', 'filter', 'tools', 'view', 'help'
Action variants:
// Toggle (on/off state)
new Toggle('toggle_id', {
name: 'Feature',
default: false,
onChange(value) { /* handle */ }
});
// Tool (viewport interaction)
new Tool('tool_id', {
name: 'My Tool',
cursor: 'crosshair',
onCanvasClick(data) { /* handle */ },
onCanvasDrag(data) { /* handle */ }
});myDialog = new Dialog({
id: 'my_dialog',
title: 'Dialog Title',
width: 540,
form: {
name: { label: 'Name', type: 'text', value: 'default' },
count: { label: 'Count', type: 'number', value: 10, min: 1, max: 100 },
enabled: { label: 'Enabled', type: 'checkbox', value: true },
mode: {
label: 'Mode',
type: 'select',
options: { a: 'Option A', b: 'Option B' },
value: 'a'
},
color: { label: 'Color', type: 'color', value: '#ff0000' },
// Conditional field
advanced: {
label: 'Advanced',
type: 'text',
condition: (form) => form.enabled
}
},
onConfirm(formData) {
console.log(formData.name, formData.count);
this.hide();
}
});
myDialog.show();
// Quick dialogs
Blockbench.textPrompt('Enter Value', 'default', (text) => { });
Blockbench.showMessageBox({ title: 'Alert', message: 'Text', buttons: ['OK'] });Panels appear in sidebars with Vue components.
myPanel = new Panel('my_panel', {
name: 'My Panel',
icon: 'dashboard',
condition: () => Format.animation_mode,
default_position: {
slot: 'left_bar', // 'left_bar', 'right_bar', 'bottom'
height: 300
},
component: {
template: `
<div>
<h3>{{ title }}</h3>
<ul><li v-for="item in items">{{ item.name }}</li></ul>
<button @click="refresh">Refresh</button>
</div>
`,
data() {
return { title: 'Items', items: [] };
},
methods: {
refresh() {
this.items = Cube.selected.map(c => ({ name: c.name }));
}
}
}
});
// Cleanup
myPanel.delete();CRITICAL: Always wrap modifications in Undo for user reversibility.
// Start tracking
Undo.initEdit({ elements: Cube.selected });
// Modify elements
Cube.selected.forEach(cube => {
cube.from[0] += 5;
cube.to[1] = 20;
cube.rotation[1] = 45;
});
// Update view
Canvas.updateView({
elements: Cube.selected,
element_aspects: { geometry: true, transform: true }
});
// Commit
Undo.finishEdit('Move cubes');// Cube
let cube = new Cube({
name: 'my_cube',
from: [0, 0, 0],
to: [16, 16, 16],
origin: [8, 8, 8],
rotation: [0, 45, 0]
}).init();
cube.addTo(Group.selected[0]); // Add to group
// Group (bone)
let group = new Group({
name: 'bone_arm',
origin: [0, 12, 0]
}).init();
group.addTo(); // Add to root
// Texture
let texture = new Texture({ name: 'my_texture' });
texture.fromPath('/path/to/file.png'); // or .fromDataURL()
texture.add(true); // true = add to undo| Collection | Description |
|---|---|
Cube.all / Cube.selected | All cubes / selected cubes |
Group.all / Group.selected | All groups / selected groups |
Mesh.all / Mesh.selected | All meshes / selected meshes |
Texture.all / Texture.selected | All textures / selected |
Animation.all / Animation.selected | All animations / selected |
Outliner.elements | All outliner elements |
// Subscribe
eventCallback = (data) => { /* handle */ };
Blockbench.on('update_selection', eventCallback);
// Unsubscribe (use SAME function reference)
Blockbench.removeListener('update_selection', eventCallback);Common events: update_selection, select_project, new_project, load_project, save_project, close_project, add_cube, add_group, add_texture, add_animation, select_animation, render_frame, undo, redo, finish_edit
See references/events.md for full list.
let menu = new Menu([
'existing_action_id',
myAction,
'_', // Separator
{
name: 'Custom Item',
icon: 'star',
click() { /* handle */ }
},
{
name: 'Submenu',
children: [ /* more items */ ]
}
]);
menu.open(event); // Open at mouse positionconst myCodec = new Codec('my_codec', {
name: 'My Format',
extension: 'mymodel',
compile(options) {
// Model → file content
let data = { bones: [] };
Group.all.forEach(g => {
data.bones.push({
name: g.name,
pivot: g.origin,
cubes: g.children.filter(c => c instanceof Cube).map(c => ({
from: c.from, to: c.to
}))
});
});
return JSON.stringify(data, null, 2);
},
parse(content, path) {
// File content → model
let data = JSON.parse(content);
newProject(myFormat);
data.bones.forEach(b => {
let group = new Group({ name: b.name, origin: b.pivot }).init();
b.cubes.forEach(c => {
new Cube({ from: c.from, to: c.to }).init().addTo(group);
});
});
Canvas.updateAll();
}
});
const myFormat = new ModelFormat('my_format', {
id: 'my_format',
name: 'My Format',
icon: 'icon_name',
codec: myCodec,
box_uv: true,
bone_rig: true,
animation_mode: true
});
// Cleanup
myFormat.delete();
myCodec.delete();// Function
condition: () => Format.id === 'bedrock' && Cube.selected.length > 0
// Object (combined with AND)
condition: {
formats: ['bedrock', 'java_block'],
modes: ['edit', 'paint'],
project: true,
selected: { cube: 1 },
method: () => customCheck()
}| Type | Convention | Examples |
|---|---|---|
| Classes | PascalCase | OutlinerElement, Animation |
| Methods | camelCase | updateTransform, getSelectedFaces |
| Properties | snake_case | data_points, uv_offset |
| Event/Action IDs | snake_case | select_project, my_action |
MUST delete all components in onunload() to prevent memory leaks.
let action, panel, dialog, toolbar, format, codec, eventCallback, css;
Plugin.register('my_plugin', {
onload() {
action = new Action('id', { /* ... */ });
panel = new Panel('id', { /* ... */ });
format = new ModelFormat('id', { /* ... */ });
codec = new Codec('id', { /* ... */ });
eventCallback = (data) => { };
Blockbench.on('update_selection', eventCallback);
css = Blockbench.addCSS('.my-class { color: blue; }');
},
onunload() {
action.delete();
panel.delete();
format.delete();
codec.delete();
Blockbench.removeListener('update_selection', eventCallback);
css.delete();
}
});// ❌ No stored reference = memory leak
onload() { new Action('leaked', { }); }
// ❌ No Undo = users can't reverse
Cube.selected.forEach(c => c.from[0] += 1);
// ❌ Bundling THREE.js (already global)
import * as THREE from 'three';
// ❌ Global pollution
window.myData = {};icon: 'star' // Material icon
icon: 'fa-bone' // Font Awesome
icon: 'icon-player' // Blockbench custom
icon: 'data:image/...' // Base64 imagenpm i --save-dev blockbench-types/// <reference types="blockbench-types" />assets/plugin_template.js — Complete starter pluginassets/format_plugin.js — Custom format/codec examplereferences/events.md — Full event listreferences/api.md — Detailed API referencereferences/elements.md — Element types and properties© jasonjgardner, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (references, assets) in .agents/skills/blockbench-plugins of jasonjgardner/blockbench-mcp-plugin.
Open the folder on GitHubat commit d027171
Blockbench Plugins next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Blockbench Plugins this skilljasonjgardner/blockbench-mcp-plugin | 488 | — | ~2.8k | Automated safety check: Pass | GPL-3.0 | |
| Polycsslayoutit/polycss | 757 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Tresjs Core Skilldskilld-dev/vue-ecosystem-skills | 181 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Fog Of War JS TSpproenca/dot-skills | 214 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Browser Viz Verifyautomateyournetwork/netclaw | 674 | — | ~1.5k | Automated safety check: Pass | Apache-2.0 | |
| Web CloneJane-xiaoer/claude-skill-web-clone | 1k | 1 repos | ~2.7k | Automated safety check: Pass | MIT |
layoutit/polycss
Build PolyCSS scenes that render 3D meshes, primitive shapes, or custom polygons as DOM/CSS polygon elements.
skilld-dev/vue-ecosystem-skills
Declarative Three.js using Vue components. An agent skill from skilld-dev/vue-ecosystem-skills.
pproenca/dot-skills
Fog of war, field of view, line of sight, and tile visibility in JavaScript or TypeScript games — roguelikes, RTS, top-down, or strategy maps.
automateyournetwork/netclaw
Verifies that a NetClaw-generated visualization HTML file (three.js, canvas, drawio, UML, markmap) actually renders correctly — screenshot, console-error check, and an optional Lighthouse audit.
Jane-xiaoer/claude-skill-web-clone
网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 /…
antibrow/anti-detect-browser-skills
Verify that browser profiles are actually isolated from one another instead of assuming it - confirm each profile's timezone agrees with its own exit IP, that WebRTC exposes only the proxy, that…
jasonjgardner/blockbench-mcp-plugin
Zod schema validation best practices for type safety, parsing, and error handling.
Works with
Categories
Blockbench plugin/extension development for the 3D modeling tool. Blockbench Plugins is an agent skill from jasonjgardner/blockbench-mcp-plugin. Blockbench plugin/extension development for the 3D modeling tool.
Blockbench Plugins fits situations like: debugging JavaScript plugins for Blockbench including actions; model manipulation; custom formats/codecs; blockbench plugin.
Run `npx skills add jasonjgardner/blockbench-mcp-plugin --skill blockbench-plugins -a claude-code`. Or copy the skill folder (.agents/skills/blockbench-plugins in jasonjgardner/blockbench-mcp-plugin) into .claude/skills/blockbench-plugins in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jasonjgardner/blockbench-mcp-plugin --skill blockbench-plugins -a codex`. Or copy the skill folder (.agents/skills/blockbench-plugins in jasonjgardner/blockbench-mcp-plugin) into .agents/skills/blockbench-plugins in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jasonjgardner/blockbench-mcp-plugin --skill blockbench-plugins -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/blockbench-plugins, .gemini/skills/blockbench-plugins, .github/skills/blockbench-plugins and .opencode/skills/blockbench-plugins in your project.
Going by SKILL.md and its folder, Blockbench Plugins needs JavaScript for the scripts in its folder and the command-line tools its instructions call (npm). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Blockbench Plugins is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Blockbench Plugins: Polycss (layoutit/polycss, 757 stars), Tresjs Core Skilld (skilld-dev/vue-ecosystem-skills, 181 stars), Fog Of War JS TS (pproenca/dot-skills, 214 stars) and Browser Viz Verify (automateyournetwork/netclaw, 674 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jasonjgardner (a GitHub user) maintains it in jasonjgardner/blockbench-mcp-plugin, which has 488 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 1, 2026.
Source: jasonjgardner/blockbench-mcp-plugin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.