Agent skill

Aholo Viewer Integration

by manycoretech in manycoretech/aholo-viewer

Guides building browser apps with the @manycore/aholo-viewer npm package to render 3D Gaussian Splatting and mesh content from TypeScript.

MITAuto-check passedGame Development

Install Aholo Viewer Integration

skills CLI
$ npx skills add manycoretech/aholo-viewer --skill use-aholo-viewer -a claude-code

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

GitHub CLI
$ gh skill install manycoretech/aholo-viewer use-aholo-viewer --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/manycoretech/aholo-viewer.git skills-src && mkdir -p .claude/skills && cp -r skills-src/docs/ai/skills/use-aholo-viewer .claude/skills/use-aholo-viewer && 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
use-aholo-viewer
GitHub stars
1.1k
Token cost
~2.2k tokens
SKILL.md length
853 words
Files
3
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

Guides building browser apps with the @manycore/aholo-viewer npm package to render 3D Gaussian Splatting and mesh content from TypeScript.

  • Works in 7 steps: Install the package in a browser app → Import only public package exports from… → Create a real DOM container with stable… → …
  • Installing and bootstrapping @manycore/aholo-viewer in a Vite app
  • SKILL.md covers Source Docs, Integration Workflow, Minimal Splat Example and Common Public Exports, plus 4 more sections
  • Reaches aholojs.dev and holo-cos.aholo3d.cn

What it does

This skill guides an agent writing browser applications that use the public @manycore/aholo-viewer npm package, a renderer for 3D Gaussian Splatting and mesh content. It treats the package as a finished library rather than the repository's internal renderer, imports only public exports, and tells the agent to read the Markdown docs written for AI use and advertised at aholojs.dev (getting started, basic concepts, API index and examples) instead of scraping rendered pages.

The integration workflow installs the package with Vite and TypeScript, creates a DOM container with stable dimensions before calling createViewer, attaches event listeners to that container rather than the canvas, builds a camera with lookAt, adds objects to the viewer's scene and sets the camera, configures the pipeline with setViewerConfig, renders explicitly or through a requestRenderHandler tied to requestAnimationFrame, and releases GPU resources on cleanup. A minimal splat example and a list of public exports cover cameras, math types, scene objects, lights, geometry and materials.

When your agent uses it

  • Installing and bootstrapping @manycore/aholo-viewer in a Vite app
  • Rendering a Gaussian splat scene in the browser
  • Setting up cameras, lights and the render loop for the viewer
  • Cleaning up scene objects and GPU resources when content is removed

Example prompts

  • “Set up a Vite and TypeScript app that renders a Gaussian splat with aholo-viewer.”
  • “Add a perspective camera and a directional light to my aholo viewer scene.”
  • “Fix the leak that happens when I swap splat files in the viewer; the cleanup order is probably wrong.”

Requirements

  • A browser app, for example Vite with TypeScript
  • Network access to the aholojs.dev docs

Workflow steps

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

  1. Install the package in a browser app
  2. Import only public package exports from @manycore/aholo-viewer.
  3. Create a real DOM container with stable dimensions before calling createViewer. Attach application DOM event listeners to this container…
  4. Create a camera, position it, call lookAt, add objects to viewer.getScene(), then call viewer.setCamera(camera).
  5. Configure rendering with setViewerConfig(viewer, { pipeline: ... }).
  6. Render explicitly with viewer.render(). If the app relies on viewer-triggered invalidation, set viewer.requestRenderHandler to schedule…
  7. Clean up when removing content: detach scene objects, stop render/update loops that still reference them, then release GPU resources or…

What it can do on your machine

Read from SKILL.md and the folder at commit 068962b. 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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • aholojs.dev
    • holo-cos.aholo3d.cn

    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

Aholo Viewer Integration loads about 2.2k tokens when it runs. Until then it costs about 89 tokens; SKILL.md has 853 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~89
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

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 manycoretech/aholo-viewer at commit 068962b, republished under its MIT licence (© manycoretech). 853 words, ~2,210 tokens.

Download SKILL.mdSave it as .claude/skills/use-aholo-viewer/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
use-aholo-viewer
description
Guide external npm package users and AI coding agents integrating @manycore/aholo-viewer into web applications. Use when asked to install, bootstrap, render 3D Gaussian Splatting or mesh content, configure cameras, scenes, lighting, viewer pipeline options, or write TypeScript examples for the public @manycore/aholo-viewer npm package.

Use Aholo Viewer

Use this skill to build or modify user applications that consume the public @manycore/aholo-viewer npm package. Treat it as a full-featured browser rendering package, not as this repository's internal renderer source.

Source Docs

Before generating non-trivial code, read the AI-oriented docs advertised by https://aholojs.dev/llms.txt:

  • https://aholojs.dev/llm/manual/getting-started.md for installation and the minimal Vite setup.
  • https://aholojs.dev/llm/manual/basic-concepts.md for scenes, objects, cameras, viewports, and the render flow.
  • https://aholojs.dev/llm/api/index.md to confirm public exports.
  • https://aholojs.dev/llm/examples/index.md for runnable TypeScript patterns.

Prefer these Markdown docs over scraping rendered HTML pages.

Integration Workflow

  1. Install the package in a browser app:

    bash
    npm install --save @manycore/aholo-viewer
    npm install --save-dev vite typescript
  2. Import only public package exports from @manycore/aholo-viewer.

  3. Create a real DOM container with stable dimensions before calling createViewer. Attach application DOM event listeners to this container, not to the engine canvas.

  4. Create a camera, position it, call lookAt, add objects to viewer.getScene(), then call viewer.setCamera(camera).

  5. Configure rendering with setViewerConfig(viewer, { pipeline: ... }).

  6. Render explicitly with viewer.render(). If the app relies on viewer-triggered invalidation, set viewer.requestRenderHandler to schedule another render with requestAnimationFrame.

  7. Clean up when removing content: detach scene objects, stop render/update loops that still reference them, then release GPU resources or owned resources according to the cleanup rules below.

Minimal Splat Example

Use this pattern for a Vite/TypeScript browser entry:

ts
import {
    BackgroundMode,
    Color,
    PerspectiveCamera,
    SplatLoader,
    SplatUtils,
    Vector3,
    createViewer,
    setViewerConfig,
} from '@manycore/aholo-viewer';

const SPLAT_URL = 'https://holo-cos.aholo3d.cn/aholo-opensource/gs_file/bear/bear.3d71a266.sog';

const container = document.createElement('div');
container.style.width = '500px';
container.style.height = '500px';
document.body.appendChild(container);

async function main() {
    const viewer = createViewer('example-viewer', container, {});
    const camera = new PerspectiveCamera(60, 1, 0.1, 2000);

    const response = await fetch(SPLAT_URL);
    const buffer = await response.arrayBuffer();
    const data = await SplatLoader.parseSplatData(
        SplatLoader.SplatFileType.SOG,
        new Uint8Array(buffer),
        SplatLoader.SplatPackType.Compressed,
    );
    const splat = await SplatUtils.createSplat(data);

    camera.up.set(0, -1, 0);
    camera.position.set(-1.5, -0.5, 0);
    camera.lookAt(new Vector3(0, 0, 0));

    viewer.getScene().add(splat);
    viewer.setCamera(camera);
    setViewerConfig(viewer, {
        pipeline: {
            Background: {
                background: {
                    active: BackgroundMode.BasicBackground,
                    basic: { color: new Color(0, 0, 0) },
                },
                ground: { enabled: false },
            },
            Splatting: { enabled: true },
            TAA: { enabled: false },
        },
    });

    const render = () => viewer.render();
    viewer.requestRenderHandler = () => requestAnimationFrame(render);
    requestAnimationFrame(render);
}

main();

Common Public Exports

  • Viewer setup: createViewer, setViewerConfig, Viewer, Viewport.
  • Cameras and math: PerspectiveCamera, OrthographicCamera, Vector2, Vector3, Vector4, Color, Matrix4, Quaternion.
  • Scene objects: Object3D, Scene3D, Mesh, Splat, AmbientLight, DirectionalLight, PointLight, SpotLight.
  • Mesh content: BufferGeometry, BufferAttribute, MeshBasicMaterial, MeshPhongMaterial, Side, downloadTexture.
  • Splat content: SplatLoader, SplatUtils, CompressedSplat, SuperCompressedSplat, SogSplat.
  • Optional loaders/utilities: GLTFLoader, DracoLoader, Animation, Events.

Confirm exact symbols in /llm/api/index.md when using less common APIs.

Patterns

For 3DGS content:

  • Use SplatLoader.parseSplatData(...) to parse supported splat formats.
  • Use SplatUtils.createSplat(data) to create a renderable splat.
  • Enable pipeline.Splatting.
  • Set camera up vectors deliberately. OpenCV-style 3DGS data commonly uses camera.up.set(0, -1, 0).

For mesh content:

  • Build geometry with BufferGeometry, BufferAttribute, and optional indices.
  • Use MeshPhongMaterial with lights for shaded meshes, or MeshBasicMaterial for unlit objects.
  • Add lights such as AmbientLight, DirectionalLight, or PointLight before rendering lit materials.

For interactive apps:

  • Tie camera controls or animations to a frame loop that calls viewer.render().
  • Keep viewer container size stable and update rendering after layout changes.
  • Register pointer, wheel, keyboard focus, drag/drop, resize, and custom DOM event listeners on the viewer container or another application-owned element.
  • Cache large splat data when appropriate, but keep the first example simple unless the user asks for caching.

DOM Events and Canvas Access

Treat the container as the stable application boundary:

  • Listen for DOM events on the container passed to createViewer(...), or on another element owned by the application.
  • Do not attach event listeners to the viewer canvas. The canvas is managed internally by the engine and may be replaced.
  • Do not persistently store the engine canvas element in application state, class fields, module globals, framework refs, or closures intended to outlive the current operation.
  • If direct canvas access is unavoidable, read it just-in-time from the current viewer/container state, use it immediately, and discard the reference.
  • Remove container-level event listeners during teardown before releasing viewer or scene resources.
Show full SKILL.md (332 more words)Show less

Resource Cleanup

Use the lightest cleanup method that matches ownership and lifecycle:

  • Use freeGPU() when the goal is to release GPU memory while keeping the object instance logically reusable. The object may upload GPU resources again if it is rendered or updated later.
  • Use freeAllGpuResourceOwned() when the object owns related GPU resources that should also be released. For example, geometry.freeAllGpuResourceOwned() releases the geometry GPU resource plus its attribute and index GPU resources; drawable.freeAllGpuResourceOwned() releases its materials, geometry, and drawable GPU resources.
  • Use destroy() only when the object is permanently retired. Before calling destroy(), ensure the object is removed from the scene, no frame callback, async load, event listener, control, viewport, material, geometry, or app state will use it again, and it is not currently participating in a render/update pass.
  • Prefer freeGPU() or freeAllGpuResourceOwned() for memory-pressure cleanup. Prefer destroy() for final teardown after references are severed.
  • In component frameworks, cancel pending async work and stop animation/requestRender callbacks before releasing resources in unmount cleanup.

Guardrails

  • Do not hand-write code against private renderer internals or repository-only paths.
  • Do not assume a server-side runtime; the viewer needs browser DOM and WebGL/WebGL2-capable canvas support.
  • Do not construct Splat directly. Use loader and utility APIs.
  • Do not register app DOM events on the engine canvas. Register on the container because the engine owns the canvas lifecycle and may replace it.
  • Do not hold persistent references to the engine canvas. Read it only when needed, use it immediately, and release the reference.
  • Do not call destroy() on resources that shared objects, cached data, render callbacks, or pending async work may still reference.
  • Do not use destroy() as the default GPU-memory cleanup method. Use freeGPU() for the object's own GPU state, or freeAllGpuResourceOwned() when owned child resources should also release GPU state.
  • Do not omit cleanup in component frameworks. In React, Vue, Svelte, or similar frameworks, dispose viewer-owned objects and cancel pending async work during unmount.
  • Do not invent package exports. Check the LLM API index or installed package types.

© manycoretech, MIT. 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 2 other files in docs/ai/skills/use-aholo-viewer of manycoretech/aholo-viewer.

  • SKILL.md
  • agents/claude.md
  • agents/openai.yaml

Open the folder on GitHubat commit 068962b

Compare with similar skills

Aholo Viewer Integration 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.

Aholo Viewer Integration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Aholo Viewer Integration this skillmanycoretech/aholo-viewer1.1k—~2.2kAutomated safety check: PassMIT
Deploycyanfish-x/tellux207—~1.1kAutomated safety check: NotesMIT
Threejs Gameplay Systemsvalkor-ai/loom1.2k1 repos~1.4kAutomated safety check: PassApache-2.0
Vuetify Skilldlogue/vite-vuetify-ts-starter1811 repos~1.9kAutomated safety check: PassMIT
Uni-app-x Components and APIsfeige996/unibest2.3k—~788Automated safety check: PassMIT
Threejs Gameplay Systemscorosolto/client257—~1.5kAutomated safety check: PassAGPL-3.0

Similar skills

  • Deploy

    cyanfish-x/tellux

    Deploy tellux examples/docs sites via project scripts — one local command (pnpm run deploy) rclone-syncs to the self-hosted site then Wrangler Direct Uploads to Cloudflare Pages.

    207 GitHub stars~1.1k tokensUpdated 17 days ago
    Game DevelopmentAuto-check: notes
  • Build and iterate playable Three.js game systems: starter scaffold, architecture, design briefs, core loops, level and encounter design, entities, input, camera, collision and physics, scoring…

    1.2k GitHub starsUsed in 1 repo~1.4k tokens
    Game DevelopmentAuto-check passed
  • Vuetify Skilld

    logue/vite-vuetify-ts-starter

    Vue Material Component Framework. An agent skill from logue/vite-vuetify-ts-starter.

    181 GitHub starsUsed in 1 repo~1.9k tokens
    Frontend & DesignAuto-check passed
  • Reference for using uni-app-x's built-in components and APIs, with one example file per item, official doc links and platform compatibility notes.

    2.3k GitHub stars~788 tokensUpdated 23 days ago
    MobileAuto-check passed
  • Threejs Gameplay Systems

    corosolto/client

    Build and iterate playable Three.js game systems. An agent skill from corosolto/client.

    257 GitHub stars~1.5k tokensUpdated yesterday
    Game DevelopmentAuto-check passed
  • Vitexec

    pmndrs/viverse

    A skill your agent uses when an AI agent needs to inspect, verify, debug, or profile a live Vite app by running temporary snippets inside the browser page and reading browser logs or captured…

    132 GitHub stars~2.5k tokensUpdated 6 days ago
    Game DevelopmentAuto-check passed

More from manycoretech/aholo-viewer

  • Aholo Viewer Example Content

    manycoretech/aholo-viewer

    Owns the paired JSON metadata and TypeScript runner files that define the Aholo Viewer's example and Playground content.

    1.1k GitHub stars~580 tokensUpdated today
    Auto-check passed
  • Aholo Site Owner

    manycoretech/aholo-viewer

    Owns the Aholo Viewer Astro website shell and Playground integration, covering routes, layouts, i18n copy and scoped CSS, while leaving the renderer and example content to other skills.

    1.1k GitHub stars~530 tokensUpdated today
    Auto-check passed
  • Aholo Viewer Docs

    manycoretech/aholo-viewer

    Guides writing and maintaining Aholo Viewer documentation: README, AGENTS.md, architecture notes, bilingual manual pages and AI collaboration guides.

    1.1k GitHub stars~341 tokensUpdated today
    Auto-check passed
  • Aholo Viewer Monorepo Routing

    manycoretech/aholo-viewer

    Coordinate Aholo Viewer monorepo work. Use for cross-module tasks, workspace scripts, generated docs/build flow, validation routing, cleanup boundaries, or…

    1.1k GitHub stars~380 tokensUpdated today
    Auto-check passed
  • Aholo Viewer Frontend Design

    manycoretech/aholo-viewer

    Guides visual design and polish for the Aholo Viewer website and Playground, staying inside the existing Astro site and scoped CSS layers with a restrained technical tone.

    1.1k GitHub stars~348 tokensUpdated today
    Auto-check passed
  • Aholo Renderer Package Rules

    manycoretech/aholo-viewer

    Work on the @manycore/aholo-viewer package. Use only when the user explicitly asks for renderer source, package build, public exports, JSDoc/API docs…

    1.1k GitHub stars~191 tokensUpdated today
    Auto-check passed

Questions about Aholo Viewer Integration

What does Aholo Viewer Integration do?

Guides building browser apps with the @manycore/aholo-viewer npm package to render 3D Gaussian Splatting and mesh content from TypeScript. This skill guides an agent writing browser applications that use the public @manycore/aholo-viewer npm package, a renderer for 3D Gaussian Splatting and mesh content.dev (getting started, basic concepts, API index and examples) instead of scraping rendered pages.

When should I use Aholo Viewer Integration?

Aholo Viewer Integration fits situations like: installing and bootstrapping @manycore/aholo-viewer in a Vite app; rendering a Gaussian splat scene in the browser; setting up cameras, lights and the render loop for the viewer; cleaning up scene objects and GPU resources when content is removed.

How do I install Aholo Viewer Integration in Claude Code?

Run `npx skills add manycoretech/aholo-viewer --skill use-aholo-viewer -a claude-code`. Or copy the skill folder (docs/ai/skills/use-aholo-viewer in manycoretech/aholo-viewer) into .claude/skills/use-aholo-viewer in your project. Claude Code loads it when a task matches its description.

How do I install Aholo Viewer Integration in Codex?

Run `npx skills add manycoretech/aholo-viewer --skill use-aholo-viewer -a codex`. Or copy the skill folder (docs/ai/skills/use-aholo-viewer in manycoretech/aholo-viewer) into .agents/skills/use-aholo-viewer in your project. Codex loads it when a task matches its description.

Can I use Aholo Viewer Integration 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 manycoretech/aholo-viewer --skill use-aholo-viewer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/use-aholo-viewer, .gemini/skills/use-aholo-viewer, .github/skills/use-aholo-viewer and .opencode/skills/use-aholo-viewer in your project.

What does Aholo Viewer Integration need to run?

SKILL.md names no scripts, command-line tools or credentials: Aholo Viewer Integration is instructions for the agent only. Our summary lists: A browser app, for example Vite with TypeScript; Network access to the aholojs.dev docs.

Does Aholo Viewer Integration access the network?

SKILL.md names 2 domains. In commands or code: aholojs.dev and holo-cos.aholo3d.cn; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Aholo Viewer Integration 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 Aholo Viewer Integration use?

Aholo Viewer Integration is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Aholo Viewer Integration use?

About 2.2k tokens (SKILL.md is roughly 8.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Aholo Viewer Integration?

Skills that share tags, products or a category with Aholo Viewer Integration: Deploy (cyanfish-x/tellux, 207 stars), Threejs Gameplay Systems (valkor-ai/loom, 1.2k stars), Vuetify Skilld (logue/vite-vuetify-ts-starter, 181 stars) and Uni-app-x Components and APIs (feige996/unibest, 2.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Aholo Viewer Integration?

manycoretech (a GitHub organization) maintains it in manycoretech/aholo-viewer, which has 1,085 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 8, 2026.

Source: manycoretech/aholo-viewer on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.