Agent skill

Kernel Abstraction

by andymai in 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…

Apache-2.0Auto-check passedDevelopment

Install Kernel Abstraction

skills CLI
$ npx skills add andymai/brepjs --skill kernel-abstraction -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install andymai/brepjs kernel-abstraction --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
kernel-abstraction
GitHub stars
114
Token cost
~4.1k tokens
SKILL.md length
1,326 words
Files
2 (incl. references)
Skills in repo
21
Repo updated
First seen
Licence
Apache-2.0

At a glance

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…

  • Works in 6 steps: Declare the method in the matching… → Implement per adapter as a free function… → Wire into the adapters. occt, brepkit,… → …
  • Phrases include add a kernel method
  • SKILL.md covers Mental model, Switching kernels safely, Adding a kernel method and Capability and feature…, plus 3 more sections
  • Calls npm and npx

What it does

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.

When your agent uses it

  • Phrases include add a kernel method
  • New kernel method
  • Brepjs kernel not initialized
  • Kernel X is not registered

Example prompts

  • “add a kernel method”
  • “new kernel method”
  • “withKernel”
  • “/kernel-abstraction”

Requirements

  • Node.js

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Declare the method in the matching sub-interface under src/kernel/interfaces/ (booleanOps, primitiveOps, modifierOps, ioOps, ...; core.ts…
  2. Implement per adapter as a free function in src/kernel//*Ops.ts, receiving the raw instance (oc, bk, ...) as the first parameter — never…
  3. Wire into the adapters. occt, brepkit, and manifold adapters have no body-level methods — add the method to the relevant make*Ops()…
  4. Stub adapters that cannot support it. Two accepted idioms: the occt adapter's makeBrepkitOnlyStubs() (src/kernel/occt/defaultAdapter.ts…
  5. Surface through a *Fns.ts function that calls getKernel().method(...) — see the adding-operations skill for the Fns → api.ts → facade…
  6. Test through the Layer 2 functional API, not the adapter directly. Register divergence entries for kernels that skip (writing-tests…

What it can do on your machine

Read from SKILL.md and the folder at commit e8fa511. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~195
When it runs · the whole SKILL.md, loaded when a task matches
~4.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~5.6k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from andymai/brepjs at commit e8fa511, republished under its Apache-2.0 licence (© andymai). 1,326 words, ~4,085 tokens.

Download SKILL.mdSave it as .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.
name
kernel-abstraction
description
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", "which kernel supports X", "kernel capabilities", "quality tier", "regenerate the conformance matrix", or working on adapter/interface/registry/capability design under src/kernel/. Raw Emscripten/heap mechanics belong to the wasm-interop skill.

Kernel abstraction layer and multi-kernel work

Mental model

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:

idClassFileBacking packageNature
occt-wasm (default)OcctWasmAdaptersrc/kernel/occtWasm/occtWasmAdapter.tsocct-wasmexact B-rep, arena/u32 handles
occtDefaultAdaptersrc/kernel/occt/defaultAdapter.tsbrepjs-opencascadeexact B-rep, Emscripten objects
brepkitBrepkitAdaptersrc/kernel/brepkit/brepkitAdapter.tsbrepkit-wasmexact B-rep
manifoldManifoldAdaptersrc/kernel/manifold/manifoldAdapter.tsmanifold-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).

Switching kernels safely

  • 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.
  • Quality means different things per kernel (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.

Adding a kernel method

Full walkthrough with a real cross-adapter example: references/adapter-wiring.md. The checklist:

  1. Declare the method in the matching sub-interface under 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).
  2. Implement per adapter as a free function in 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.
  3. Wire into the adapters. occt, brepkit, and manifold adapters have no body-level methods — add the method to the relevant 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.
  4. Stub adapters that cannot support it. Two accepted idioms: the occt adapter's 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.
  5. Surface through a *Fns.ts function that calls getKernel().method(...) — see the adding-operations skill for the Fns → api.ts → facade pipeline.
  6. Test through the Layer 2 functional API, not the adapter directly. Register divergence entries for kernels that skip (writing-tests skill), then run npm run conformance:generate.

Capability and feature detection — three distinct systems

NeedUse
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 adapterType guards: supportsProjection / supportsConstraintSketch (src/kernel/types.ts), supportsKernel2D (src/kernel/kernel2dTypes.ts, used by getKernel2D)
Test matrix + generated conformance dockernelConfigs[].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:

  • WASM-build detection with a resettable cache: 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.
  • Optional-method detection: 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.
Show full SKILL.md (459 more words)Show less

Multi-kernel testing and conformance

  • 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().
  • CI runs only the occt-wasm project (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.
  • Per-kernel skips and tolerances live in 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).
  • After changing a divergence or a registry capability flag: npm run conformance:generate rewrites docs/kernel-conformance.md. Never hand-edit that file.

Symptom → cause → fix

SymptomCauseFix
BindingError: Cannot pass deleted object from occt-wasmAdapter built from new OcctWasmAdapter(kernel.getRawModule(), kernel.getRawKernel()) — the OcctKernel wrapper's FinalizationRegistry freed the raw kernel on GCBuild with OcctWasmAdapter.fromKernel(kernel), which retains the wrapper (retainedKernelOwner)
brepjs kernel not initializedgetKernel() before any registrationawait init() (or registerKernel/initFromOC) first; in tests use initKernel() from tests/setup.ts
brepjs: kernel 'X' is not registeredwithKernel/getKernel(id) with an id that was never registered this sessionRegister it (e.g. initFromManifold) before switching
withKernel() callback returned a PromiseAsync callback passed to withKernel/withQuality/withTierUse getKernel(id) directly in async code
X is only available with the brepkit kernel / occt-wasm: X is not yet implementedIntentional throwing stub on this adapterSwitch kernels for that call, or implement the method (recipe above)
Wrong kernel's divergences applied when running vitest without a projectcurrentKernelId 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 bundleimportOptionalBackend 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 API2D 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).

Additional resources

  • 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).
  • Sibling skills: 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

Files

SKILL.md and 1 other file (references) in .claude/skills/kernel-abstraction of andymai/brepjs.

  • SKILL.md
  • references/adapter-wiring.md

Open the folder on GitHubat commit e8fa511

Compare with similar skills

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.

Kernel Abstraction compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Kernel Abstraction this skillandymai/brepjs114—~4.1kAutomated safety check: PassApache-2.0
Connection Import WasmfeigeCode/navop1.8k—~2.7kAutomated safety check: PassCustom licence
Changesetwhitphx/stlite1.7k—~1.9kAutomated safety check: PassApache-2.0
Code Reviewziggy42/epsilon439—~1.7kAutomated safety check: PassApache-2.0
Merjsjustrach/merjs356—~4kAutomated safety check: NotesMIT
Style Checkernoumena-labs/Sipp121—~1.4kAutomated safety check: PassApache-2.0

Similar skills

  • 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…

    1.8k GitHub stars~2.7k tokensUpdated today
    DevelopmentAuto-check passed
  • Changeset

    whitphx/stlite

    Create or update a changeset fragment (.changeset/.md) reflecting the changes made in the current session or branch.

    1.7k GitHub stars~1.9k tokensUpdated 12 days ago
    DevelopmentAuto-check passed
  • Code Review

    ziggy42/epsilon

    A skill your agent uses when the user asks for a code review.

    439 GitHub stars~1.7k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Merjs

    justrach/merjs

    Work with the merjs Zig web framework. An agent skill from justrach/merjs.

    356 GitHub stars~4k tokensUpdated 1 mo ago
    DevelopmentAuto-check: notes
  • Style Checker

    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.

    121 GitHub stars~1.4k tokensUpdated 17 days ago
    DevelopmentAuto-check passed
  • Working With Nix

    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…

    121 GitHub stars~1.4k tokensUpdated today
    DevelopmentAuto-check passed

More from andymai/brepjs

All 21 skills in this repo
  • Implement

    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…

    114 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Memory And Disposal

    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"…

    114 GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed
  • Polish

    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…

    114 GitHub stars~588 tokensUpdated yesterday
    Auto-check passed
  • Wasm Interop

    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…

    114 GitHub stars~3k tokensUpdated yesterday
    Auto-check passed
  • Writing Tests

    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…

    114 GitHub stars~4.3k tokensUpdated yesterday
    Auto-check passed
  • Adding Operations

    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…

    114 GitHub stars~4.4k tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about Kernel Abstraction

What does Kernel Abstraction do?

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.

When should I use Kernel Abstraction?

Kernel Abstraction fits situations like: phrases include add a kernel method; new kernel method; brepjs kernel not initialized; kernel X is not registered.

How do I install Kernel Abstraction in Claude Code?

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.

How do I install Kernel Abstraction in Codex?

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.

Can I use Kernel Abstraction in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Kernel Abstraction need to run?

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.

Does Kernel Abstraction access the network?

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.

Is Kernel Abstraction safe to install?

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.

What licence does Kernel Abstraction use?

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.

How many tokens does Kernel Abstraction use?

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.

What are the alternatives to Kernel Abstraction?

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.

Who maintains Kernel Abstraction?

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.