Connection Import Wasm
feigeCode/navop
A skill your agent uses when implementing, debugging, packaging, or host-enabling onetcli WASM connection importers such as DBeaver, Navicat, Navicat Lite, Termius, connection-import.wit components…
This skill should be used when working on the brepjs kernel abstraction layer or across multiple kernels — adding a kernel method, wiring or writing an adapter, switching or registering kernels, or…
$ npx skills add andymai/brepjs --skill kernel-abstraction -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install andymai/brepjs kernel-abstraction --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/andymai/brepjs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/kernel-abstraction .claude/skills/kernel-abstraction && 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 "kernel-abstraction" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/kernel-abstraction into .claude/skills/kernel-abstraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kernel-abstraction", 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/andymai/brepjs/tree/main/.claude/skills/kernel-abstractionType 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 andymai/brepjs --skill kernel-abstraction -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install andymai/brepjs kernel-abstraction --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/kernel-abstraction .agents/skills/kernel-abstraction && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "kernel-abstraction" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/kernel-abstraction into .agents/skills/kernel-abstraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kernel-abstraction", 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 andymai/brepjs --skill kernel-abstraction -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install andymai/brepjs kernel-abstraction --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/kernel-abstraction .cursor/skills/kernel-abstraction && 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 "kernel-abstraction" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/kernel-abstraction into .cursor/skills/kernel-abstraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kernel-abstraction", 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/andymai/brepjs.git --path .claude/skills/kernel-abstraction--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 andymai/brepjs --skill kernel-abstraction -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install andymai/brepjs kernel-abstraction --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/kernel-abstraction .gemini/skills/kernel-abstraction && 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 "kernel-abstraction" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/kernel-abstraction into .gemini/skills/kernel-abstraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kernel-abstraction", 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 andymai/brepjs kernel-abstractionInstalls 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 andymai/brepjs --skill kernel-abstraction -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/kernel-abstraction .github/skills/kernel-abstraction && 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 "kernel-abstraction" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/kernel-abstraction into .github/skills/kernel-abstraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kernel-abstraction", 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 andymai/brepjs --skill kernel-abstraction -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install andymai/brepjs kernel-abstraction --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/kernel-abstraction .opencode/skills/kernel-abstraction && 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 "kernel-abstraction" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/kernel-abstraction into .opencode/skills/kernel-abstraction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kernel-abstraction", 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.
kernel-abstractionThis skill should be used when working on the brepjs kernel abstraction layer or across multiple kernels — adding a kernel method, wiring or writing an adapter, switching or registering kernels, or…
Kernel Abstraction is an agent skill from andymai/brepjs. This skill should be used when working on the brepjs kernel abstraction layer or across multiple kernels — adding a kernel method, wiring or writing an adapter, switching or registering kernels, or reasoning about kernel capability differences. Trigger phrases include "add a kernel method", "new kernel method", "withKernel", "brepjs kernel not initialized", "kernel 'X' is not registered", "is only available with the brepkit kernel", "occt-wasm: ... is not yet implemented", "run this under manifold/brepkit/occt"…
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/adapter-wiring.md`).
It sits in Development. It works with WebAssembly. The repository describes itself as: Web CAD library with exact B-Rep geometry. The licence is Apache-2.0.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e8fa511. 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.
Shell commands in SKILL.md call:
npmnpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm and npx, 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.
Kernel Abstraction loads about 4.1k tokens when it runs, and up to ~5.6k if it reads all its reference files. Until then it costs about 195 tokens; SKILL.md has 1,326 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 andymai/brepjs at commit e8fa511, republished under its Apache-2.0 licence (© andymai). 1,326 words, ~4,085 tokens.
.claude/skills/kernel-abstraction/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.src/kernel/ is Layer 0 — it imports nothing else in the tree (see the architecture-navigation skill for layer rules and the .wrapped/.oc bans). Everything above it calls geometry through getKernel().method(...) against the KernelAdapter interface.
Four in-tree adapters:
| id | Class | File | Backing package | Nature |
|---|---|---|---|---|
occt-wasm (default) | OcctWasmAdapter | src/kernel/occtWasm/occtWasmAdapter.ts | occt-wasm | exact B-rep, arena/u32 handles |
occt | DefaultAdapter | src/kernel/occt/defaultAdapter.ts | brepjs-opencascade | exact B-rep, Emscripten objects |
brepkit | BrepkitAdapter | src/kernel/brepkit/brepkitAdapter.ts | brepkit-wasm | exact B-rep |
manifold | ManifoldAdapter | src/kernel/manifold/manifoldAdapter.ts | manifold-3d (loaded via packages/brepjs-manifold) | mesh CSG, approximate; caches an OCCT "replay" B-rep per handle for exact export |
Registry (src/kernel/index.ts):
registerKernel(id, adapter) — the first registered kernel becomes the default.getKernel(id?) — throws brepjs kernel not initialized if nothing is registered.getKernel2D(id?) — narrows to Kernel2DCapability via the supportsKernel2D guard; throws otherwise.getActiveKernelId() — stable string for cache keys (used by src/csg/evaluate.ts), null before init.init() — auto-detect chain: occt-wasm (OcctKernel.init() + OcctWasmAdapter.fromKernel) → brepjs-opencascade (initFromOC, id 'occt') → brepkit-wasm. Idempotent; throws with install instructions if none resolve. Returns the winning id.initFromOC(oc) — registers the OpenCascade WASM backend and forces the default to 'occt' (the feature-detection cache-reset mechanics live in the wasm-interop skill).initFromManifold(module) — registers 'manifold'.prewarm() — builds and disposes a trivial box to move OCCT's ~400-900ms first-call JIT cost off the critical path.Optional backends load through importOptionalBackend(specifier) (src/kernel/optionalBackend.ts) using a variable specifier so bundlers cannot statically analyze the import() (mechanics in the wasm-interop skill).
withKernel(id, fn) is synchronous only. It has a runtime guard: if fn returns a Promise it throws (withKernel() callback returned a Promise...), because the default is restored in finally and any getKernel() after the first await would see the wrong kernel. For async code, capture the adapter once with getKernel(id) and use it directly.withQuality(level, fn) (same sync-only guard) sets a process-global quality level — 'draft' | 'standard' | 'fine', deflection table in src/kernel/quality.ts ('standard' matches the historical mesh() defaults 1e-3/0.1) — and calls the kernel's optional setQuality?().registerKernelTier(name, { kernel, quality }) + withTier(name, fn) compose both, so call sites can say withTier('preview', ...) instead of hard-coding a kernel id and a quality knob. Tested in tests/kernelTiers.test.ts.tessellationModel in src/kernel/capabilities.ts): Manifold is build-time — the mesh is fixed when a solid is built, so quality must be applied before building (ManifoldAdapter.setQuality maps level → min circular angle). OCCT-family kernels are extract-time — shapes are exact and the level only sets the default deflection at mesh()/export.Full walkthrough with a real cross-adapter example: references/adapter-wiring.md. The checklist:
src/kernel/interfaces/ (booleanOps, primitiveOps, modifierOps, ioOps, ...; core.ts is the mandatory surface). KernelAdapter is the intersection of these 15 files plus Kernel2DCapability (src/kernel/interfaces/index.ts); src/kernel/types.ts merely re-exports it. Do not add methods to types.ts. Note: the /new-kernel-method command (.claude/commands/new-kernel-method.md) predates this split — where it says "add to src/kernel/types.ts" and names an OcShape type, read "add to src/kernel/interfaces/<domain>Ops.ts>" and KernelShape/KernelType (src/kernel/types.ts).src/kernel/<adapter>/*Ops.ts, receiving the raw instance (oc, bk, ...) as the first parameter — never via getKernel() inside kernel code. All kernel methods are synchronous and return plain JS values or opaque KernelShape handles (docs/kernel-swap.md, "What Must Each Method Return?"). Delete Emscripten intermediates manually (maker.delete()); see the memory-and-disposal and wasm-interop skills for handle lifetime and the enum-extraction gotcha.make*Ops() factory's returned object (and its satisfies Pick<KernelAdapter, ...> union). A compile-time guard at the bottom of each adapter file errors with the exact missing-method list if any factory forgets one. OcctWasmAdapter is the exception: a conventional class — add a real method body.makeBrepkitOnlyStubs() (src/kernel/occt/defaultAdapter.ts, uniform '<name> is only available with the brepkit kernel' throw) and occt-wasm's notImplemented(method) ('occt-wasm: <method> is not yet implemented'). A throwing stub is correct; silently returning a wrong answer is not.*Fns.ts function that calls getKernel().method(...) — see the adding-operations skill for the Fns → api.ts → facade pipeline.npm run conformance:generate.| Need | Use |
|---|---|
| Route by what a kernel is (exact vs mesh, B-rep export, tessellation model) | getKernelCapabilities(id?) → KernelCapabilities (src/kernel/capabilities.ts; EXACT_BREP_CAPABILITIES for the B-rep kernels, all-false + 'build-time' on manifold). Routing is caller-side today — only the quality layer branches on tessellationModel internally |
| Optional method groups on an adapter | Type guards: supportsProjection / supportsConstraintSketch (src/kernel/types.ts), supportsKernel2D (src/kernel/kernel2dTypes.ts, used by getKernel2D) |
| Test matrix + generated conformance doc | kernelConfigs[].capabilities in tests/helpers/kernelRegistry.ts — pure data, no src imports (consumed by vitest.config.ts at config-load time) |
Do not conflate them: the runtime flags describe kernel nature, the guards describe interface presence, the registry booleans describe test expectations.
Inside adapters, detect optional native features rather than version-checking:
hasCppMeasurement ??= typeof oc.MeasurementExtractor?.extract === 'function' in src/kernel/occt/measureOps.ts, paired with a resetMeasureDetectionCache() that initFromOC calls. Any new detection cache must get a reset function registered in initFromOC or it leaks state across WASM instances.typeof bk.chamferAsymmetric === 'function' (src/kernel/brepkit/modifierOps.ts), with the method declared optional in src/kernel/brepkit/brepkitWasmTypes.ts under a @future Not in brepkit-wasm 2.116.1 doc tag. Fall back with a warnOnce(...) so degraded behavior is visible exactly once.tests/helpers/kernelRegistry.ts is the single source of truth: it drives the four vitest projects (each sets TEST_KERNEL), per-kernel coverage excludes (every project excludes the other kernels' adapterDirs), per-kernel excludeTests, and the conformance doc. Adding a kernel = a kernelConfigs entry plus an init branch in tests/helpers/kernelInit.ts initKernel().test:ci, sharded 4-way). The others are on-demand: npm run test:occt, npm run test:brepkit, npx vitest run --project manifold (no npm script). docs/kernel-swap.md's claim that CI runs all kernels is stale.tests/helpers/kernelDivergences.ts (skipIfDiverges, expectKernelsAgree); test-authoring detail is in the writing-tests skill. Cross-kernel numeric parity: tests/kernel-agreement.test.ts (soft-skips when a kernel is unavailable).npm run conformance:generate rewrites docs/kernel-conformance.md. Never hand-edit that file.| Symptom | Cause | Fix |
|---|---|---|
BindingError: Cannot pass deleted object from occt-wasm | Adapter built from new OcctWasmAdapter(kernel.getRawModule(), kernel.getRawKernel()) — the OcctKernel wrapper's FinalizationRegistry freed the raw kernel on GC | Build with OcctWasmAdapter.fromKernel(kernel), which retains the wrapper (retainedKernelOwner) |
brepjs kernel not initialized | getKernel() before any registration | await init() (or registerKernel/initFromOC) first; in tests use initKernel() from tests/setup.ts |
brepjs: kernel 'X' is not registered | withKernel/getKernel(id) with an id that was never registered this session | Register it (e.g. initFromManifold) before switching |
withKernel() callback returned a Promise | Async callback passed to withKernel/withQuality/withTier | Use getKernel(id) directly in async code |
X is only available with the brepkit kernel / occt-wasm: X is not yet implemented | Intentional throwing stub on this adapter | Switch kernels for that call, or implement the method (recipe above) |
| Wrong kernel's divergences applied when running vitest without a project | currentKernelId in kernelDivergences.ts defaults to 'occt', while kernelInit.ts defaults to 'occt-wasm' | Always run via a --project flag or set TEST_KERNEL explicitly |
Build fails resolving occt-wasm/brepkit-wasm in a consumer bundle | importOptionalBackend was replaced with a literal import() | Restore the variable-specifier indirection in src/kernel/optionalBackend.ts |
| 2D ops work on occt-wasm despite the raw kernel having no 2D API | 2D is fulfilled by the shared pure-TS engine src/kernel/geometry2d.ts (also used by brepkit) | Nothing to fix — implement 2D features there, not per-kernel |
Known-stale docs (trust code over these spots): docs/kernel-swap.md "tests run against all three kernels in CI" + its hardcoded 3-project vitest snippet; .claude/commands/new-kernel-method.md (types.ts, two adapters, OcShape); src/kernel/README.md "three adapters" (manifold missing).
references/adapter-wiring.md — per-adapter wiring walkthrough with a real method (makeBox) traced through all four adapters, plus stub and factory-guard patterns.docs/kernel-swap.md — authoring a custom out-of-tree KernelAdapter (minimal skeleton, handle contract, return-value contract).docs/decisions/0002-kernel-abstraction.md, docs/decisions/0007-kernel-interface-segregation.md — why the abstraction exists and why the interface is split 15 ways.src/kernel/README.md — per-adapter ops-module map and OCCT gotchas (enum extraction, Uint32Array conversion).architecture-navigation (layer rules), adding-operations (surfacing kernel methods as public API), writing-tests (multi-kernel runs, divergence skips), wasm-interop (Emscripten interop, raw init/heap mechanics), memory-and-disposal (handle lifetime), debugging-geometry (invalid-shape triage).© andymai, Apache-2.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 1 other file (references) in .claude/skills/kernel-abstraction of andymai/brepjs.
Open the folder on GitHubat commit e8fa511
Kernel Abstraction 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 |
|---|---|---|---|---|---|---|
| Kernel Abstraction this skillandymai/brepjs | 114 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 | |
| Connection Import WasmfeigeCode/navop | 1.8k | — | ~2.7k | Automated safety check: Pass | Custom licence | |
| Changesetwhitphx/stlite | 1.7k | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Code Reviewziggy42/epsilon | 439 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Merjsjustrach/merjs | 356 | — | ~4k | Automated safety check: Notes | MIT | |
| Style Checkernoumena-labs/Sipp | 121 | — | ~1.4k | Automated safety check: Pass | Apache-2.0 |
feigeCode/navop
A skill your agent uses when implementing, debugging, packaging, or host-enabling onetcli WASM connection importers such as DBeaver, Navicat, Navicat Lite, Termius, connection-import.wit components…
whitphx/stlite
Create or update a changeset fragment (.changeset/.md) reflecting the changes made in the current session or branch.
ziggy42/epsilon
A skill your agent uses when the user asks for a code review.
justrach/merjs
Work with the merjs Zig web framework. An agent skill from justrach/merjs.
noumena-labs/Sipp
Enforces this monorepo's coding style rules by inspecting git diffs, reading .agents/skills/style-checker/references/styleguidance.md, fixing style violations, and reporting the result.
xmtp/libxmtp
A skill your agent uses when working with Nix flakes, selecting devShells, debugging environment issues, or understanding Nix infrastructure - covers shell selection, environment detection, common…
andymai/brepjs
A skill your agent uses when authoring or editing a brepjs .brep.ts part — writing the geometry with the functional API (box, cylinder, fuse, cut, fillet, sketch→extrude…), declaring an expected…
andymai/brepjs
This skill should be used when managing WASM handle lifetimes or hunting memory leaks in brepjs — when a task mentions "createHandle() without using keyword risks WASM memory leak"…
andymai/brepjs
A skill your agent uses when a valid brepjs part should look designed rather than glued-from-primitives (products, toys, mechanisms, anything a human eyeballs), and when exporting/handing off the…
andymai/brepjs
This skill should be used when working across the JS/WASM boundary in brepjs — writing or debugging code in src/kernel/occt, src/kernel/occtWasm, or src/kernel/brepkit, or diagnosing symptoms like…
andymai/brepjs
This skill should be used when writing, running, or fixing tests in the brepjs repository — when a task says "add a test", "write a regression test", "tests are failing", "test timed out", "coverage…
andymai/brepjs
This skill should be used when adding or extending a geometric shape operation in brepjs — the end-to-end recipe once the target module is chosen (which is decided by architecture-navigation) — when…
Works with
Categories
This skill should be used when working on the brepjs kernel abstraction layer or across multiple kernels — adding a kernel method, wiring or writing an adapter, switching or registering kernels, or…. Kernel Abstraction is an agent skill from andymai/brepjs. This skill should be used when working on the brepjs kernel abstraction layer or across multiple kernels — adding a kernel method, wiring or writing an adapter, switching or registering kernels, or reasoning about kernel capability differences.
Kernel Abstraction fits situations like: phrases include add a kernel method; new kernel method; brepjs kernel not initialized; kernel X is not registered.
Run `npx skills add andymai/brepjs --skill kernel-abstraction -a claude-code`. Or copy the skill folder (.claude/skills/kernel-abstraction in andymai/brepjs) into .claude/skills/kernel-abstraction in your project. Claude Code loads it when a task matches its description.
Run `npx skills add andymai/brepjs --skill kernel-abstraction -a codex`. Or copy the skill folder (.claude/skills/kernel-abstraction in andymai/brepjs) into .agents/skills/kernel-abstraction 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 andymai/brepjs --skill kernel-abstraction -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/kernel-abstraction, .gemini/skills/kernel-abstraction, .github/skills/kernel-abstraction and .opencode/skills/kernel-abstraction in your project.
Going by SKILL.md and its folder, Kernel Abstraction needs the command-line tools its instructions call (npm and npx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npm and npx, 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.
Kernel Abstraction is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k 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 1.6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Kernel Abstraction: Connection Import Wasm (feigeCode/navop, 1.8k stars), Changeset (whitphx/stlite, 1.7k stars), Code Review (ziggy42/epsilon, 439 stars) and Merjs (justrach/merjs, 356 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
andymai (a GitHub user) maintains it in andymai/brepjs, which has 114 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 6, 2026.
Source: andymai/brepjs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.