本文へ移動
cccskills
無料GitHub で公開

cheerpx-self-hosting

Run x86 Linux binaries in the browser via WebAssembly. Self-host development environments, interpreters, and even this skill itself.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md8.3 KB
  • cheerpx_config.ncl8.0 KB
  • CONCOMITANT_SKILLS.md1.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

CheerpX Self-Hosting Skill

Run x86 Linux binaries in the browser via WebAssembly. Self-host development environments, interpreters, and even this skill itself.

Overview

CheerpX is Leaning Technologies' x86-to-WebAssembly virtualization engine. Combined with WebVM, it enables running full Linux systems in the browser with no server-side execution.

Key Capabilities

FeatureDescription
x86 → WASM JITDynamic binary translation, handles self-modifying code
Linux SyscallsFull syscall emulation layer (CheerpOS)
Block FilesystemVirtual block-based file system with persistence
NetworkingTailscale/Headscale integration for inbound networking
Performance2x-10x slowdown vs native (varies by workload)

Self-Hosting Use Cases

  1. Run Nickel in browser - Evaluate .ncl configs without local install
  2. Run Guile/Goblins - Distributed capability actors in browser
  3. Run Julia - Gay.jl SPI verification in browser
  4. Run the skill itself - Meta-circular self-hosting

Integration Points

With Goblins/CapTP

The Goblins distributed actor system (from Spritely Institute) compiles to WASM via Hoot:

;; From goblins.scm - Hoot FFI for browser interop
(use-modules (fibers promises)
             (goblins)
             (hoot ffi))

(define (spawn-vat/js name)
  (spawn-vat #:name name))

;; Capabilities can flow between WASM modules
(define (spawn/js constructor . args)
  (spawn
   (lambda (bcom)
     (wrap-external-function
      (apply call-external constructor args)))))

CheerpX enables running the non-Hoot parts of the ecosystem (x86 Guile, native libraries).

With Nickel SPI

Configure CheerpX with deterministic, type-safe Nickel:

let CheerpXConfig = {
  # Memory configuration
  memory | {
    initial_mb | Num | default = 512,
    max_mb | Num | default = 4096,
  },

  # Filesystem
  filesystem | {
    type | [| 'block, 'overlay, 'memory |] | default = 'overlay,
    persist | Bool | default = true,
    cache_size_mb | Num | default = 256,
  },

  # Networking
  network | {
    tailscale | Bool | default = false,
    headscale_server | optional | Str,
  },

  # SPI seed for deterministic state
  spi_seed | Num,
} in

let DevEnvironment = CheerpXConfig & {
  memory.initial_mb = 1024,
  filesystem.persist = true,
  spi_seed = 20251226,
} in

DevEnvironment

With GF(3) Triadic Routing

Three execution tiers for capability-secure computing:

TierTritExecutionUse Case
Browser-1CheerpX/WASMUntrusted, sandboxed
Edge0BrowserPodSemi-trusted, fast
Server+1Native x86Trusted, full speed

GF(3) conservation: Every capability request routes to exactly one tier, sum = 0.

Usage

Quick Start (HTML)

<!DOCTYPE html>
<html>
<head>
  <script src="https://cxrtnc.leaningtech.com/1.0.6/cx.js"></script>
</head>
<body>
  <script type="module">
    const cx = await CheerpX.Linux.create({
      mounts: [
        { type: "ext2", path: "/", url: "https://example.com/rootfs.ext2" },
        { type: "devs", path: "/dev" },
      ],
    });

    // Run Nickel in the browser
    await cx.run("/usr/bin/nickel", ["eval", "/config.ncl"]);

    // Run Guile for Goblins
    await cx.run("/usr/bin/guile", ["-l", "/goblins.scm"]);
  </script>
</body>
</html>

Self-Hosting This Skill

# Build a rootfs with skill dependencies
docker run -it debian:bookworm bash
apt-get update && apt-get install -y nickel guile-3.0 julia
# Export as ext2 image

# Serve via CheerpX
npx serve --cors -l 8080

BrowserPod Integration

For full-stack environments with Node.js:

import { BrowserPod } from '@aspect/browserpod';

const pod = await BrowserPod.create({
  runtime: 'node22',
  env: {
    GAY_SEED: '20251226',
    SPI_ENABLED: 'true',
  },
});

// Run skill in isolated browser pod
await pod.exec('npx', ['nickel', 'eval', 'spi_fast.ncl']);

Architecture

┌─────────────────────────────────────────────────────────────┐
│                      Browser Tab                             │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │   Nickel    │  │   Goblins   │  │   Julia     │         │
│  │   Config    │  │   Actors    │  │   Gay.jl    │         │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘         │
│         │                │                │                 │
│  ┌──────▼────────────────▼────────────────▼──────┐         │
│  │              CheerpX x86→WASM JIT              │         │
│  │         (handles self-modifying code)          │         │
│  └──────────────────────┬────────────────────────┘         │
│                         │                                   │
│  ┌──────────────────────▼────────────────────────┐         │
│  │           CheerpOS (Linux Syscalls)            │         │
│  │    - Process management                        │         │
│  │    - Virtual filesystem (ext2/overlay)         │         │
│  │    - Networking (Tailscale tunnels)            │         │
│  └──────────────────────┬────────────────────────┘         │
│                         │                                   │
│  ┌──────────────────────▼────────────────────────┐         │
│  │              WebAssembly Runtime               │         │
│  │         (V8/SpiderMonkey/JavaScriptCore)       │         │
│  └───────────────────────────────────────────────┘         │
└─────────────────────────────────────────────────────────────┘

SPI Guarantees

CheerpX + SPI ensures:

  1. Deterministic JIT: Same x86 input → Same WASM output
  2. Reproducible Filesystem: Content-addressed blocks
  3. Consistent State: SPI seed propagates through all computations
// Verify SPI in browser
const color1 = await cx.run("/usr/bin/julia", [
  "-e", "using Gay; println(gay_color(20251226, 1))"
]);
const color2 = await cx.run("/usr/bin/julia", [
  "-e", "using Gay; println(gay_color(20251226, 1))"
]);
console.assert(color1 === color2, "SPI violation!");

Limitations

  • Performance: 2-10x slower than native (acceptable for dev/testing)
  • Memory: Browser memory limits apply
  • Networking: Requires CORS proxy for some operations
  • GPU: No GPU acceleration (WebGPU integration planned)

References

License

This skill follows the repository license. CheerpX requires commercial licensing for business use.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Model ElevenLabs voice synthesis as an ACSet schema with Unison ability handlers for typed voice operations. Use when integrating ElevenLabs TTS into category-theoretic pipelines, building typed voice synthesis workflows, or managing multi-voice narration with GF(3) conservation.

日本語の概要は準備中です。原文の説明を表示しています。

plurigrid/asi672026年7月10日 更新

Systematic process for analyzing and modernizing legacy applications to comply with the 12-Factor App methodology. Covers code analysis, configuration externalization, dependency management, and container/Kubernetes best practices.

日本語の概要は準備中です。原文の説明を表示しています。

plurigrid/asi672026年7月10日 更新

13c0e3

無料

Gay MCP skill at invocation 26

日本語の概要は準備中です。原文の説明を表示しています。

plurigrid/asi672026年7月10日 更新

19d57d

無料

Gay MCP skill at invocation 5

日本語の概要は準備中です。原文の説明を表示しています。

plurigrid/asi672026年7月10日 更新

1ea91a

無料

Gay MCP skill at invocation 27

日本語の概要は準備中です。原文の説明を表示しています。

plurigrid/asi672026年7月10日 更新

1eab21

無料

Gay MCP skill at invocation 3

日本語の概要は準備中です。原文の説明を表示しています。

plurigrid/asi672026年7月10日 更新

plurigrid のスキルをすべて見る

このスキルの問題を報告する