Agent skill

GPU Optimization

by spiriMirror in spiriMirror/libuipc

GPU optimization workflow using uipc.profile, uipc.profile.nsight, and Nsight Compute CLI.

Apache-2.0Auto-check passedAI & LLM Engineering

Install GPU Optimization

skills CLI
$ npx skills add spiriMirror/libuipc --skill gpu-optimization -a claude-code

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

GitHub CLI
$ gh skill install spiriMirror/libuipc gpu-optimization --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/spiriMirror/libuipc.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/gpu-optimization .claude/skills/gpu-optimization && 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
gpu-optimization
GitHub stars
335
Token cost
~3.6k tokens
SKILL.md length
1,048 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
Apache-2.0

At a glance

GPU optimization workflow using uipc.profile, uipc.profile.nsight, and Nsight Compute CLI.

  • Works in 4 steps: Run Benchmark + Profile → Read Both Reports → Cross-Reference to Prioritize → …
  • Benchmarking CUDA kernels
  • SKILL.md covers Agent Rules, CLI Commands, Agent Workflow and Simulation Timer Hierarchy, plus 6 more sections
  • Calls python

What it does

GPU Optimization is an agent skill from spiriMirror/libuipc. GPU optimization workflow using uipc.profile, uipc.profile.nsight, and Nsight Compute CLI. Use when profiling, optimizing, or benchmarking CUDA kernels.

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in AI & LLM Engineering, covering GPU and accelerator computing. It works with CUDA and C++. The repository describes itself as: A Modern Python and C++20 Library of Unified Incremental Potential Contact. The licence is Apache-2.0.

When your agent uses it

  • Benchmarking CUDA kernels
  • Tasks that involve GPU and accelerator computing

Example prompts

  • “/gpu-optimization”

Requirements

  • Python 3

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Run Benchmark + Profile
  2. Read Both Reports
  3. Cross-Reference to Prioritize
  4. Optimize

What it can do on your machine

Read from SKILL.md and the folder at commit 9c748a7. 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:

    • python

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

  • Network

    Links to these hosts (documentation or services it may open):

    • huggingface.co

    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

GPU Optimization loads about 3.6k tokens when it runs. Until then it costs about 42 tokens; SKILL.md has 1,048 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~42
When it runs · the whole SKILL.md, loaded when a task matches
~3.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 spiriMirror/libuipc at commit 9c748a7, republished under its Apache-2.0 licence (© spiriMirror). 1,048 words, ~3,647 tokens.

Download SKILL.mdSave it as .claude/skills/gpu-optimization/SKILL.md (or your agent's skills folder).
name
gpu-optimization
description
GPU optimization workflow using uipc.profile, uipc.profile.nsight, and Nsight Compute CLI. Use when profiling, optimizing, or benchmarking CUDA kernels.

GPU Optimization Pipeline

Workflow for profiling and optimizing CUDA kernels in libuipc using uipc.profile + uipc.profile.nsight + Nsight Compute CLI (ncu).

For building and installing, see cmake-workflow.

Build type: Always use Release for benchmarking and profiling. Debug is too slow; RelWithDebInfo adds debug info overhead that skews results.

Agent Rules

  • Do NOT read .ncu-rep files — they are binary, for Nsight Compute GUI only.
  • Do NOT benchmark or profile with Debug builds — results are meaningless.
  • Do NOT optimize kernels in stages that take <5% of total frame time.
  • Always read timer_frames.json for the actual timer hierarchy — it is dynamic and varies per scene/run.

CLI Commands

bash
# List available benchmark scenes
python -m uipc.cli.benchmark list

# Run a benchmark (headless, timer-based); --scene accepts multiple names
python -m uipc.cli.benchmark run --scene <scene> [<scene2> ...] --frames <N> --output <dir>

# Profile with Nsight Compute (kernel-level GPU metrics)
python -m uipc.cli.benchmark profile --scene <scene> --frames <N> --output <dir> --count <K> --skip <S> --ncu-set <set>

# Analyze bottlenecks from a benchmark result directory
python -m uipc.cli.benchmark analyze <result_dir> --ncu-csv <csv_path>

# Compare two benchmark result directories
python -m uipc.cli.benchmark compare <before_dir> <after_dir> --output <out_dir>

profile flags:

  • --ncu-set default — basic metrics (SM%, occupancy, registers). Use full for duration/memory but requires admin/root.
  • --count <K> — profile first K kernel launches.
  • --skip <S> — skip initial warmup/init kernels.
  • --ncu-path <path> — explicit path to ncu executable. Auto-detected via NCU_PATH env var, PATH, or default NVIDIA install locations.

Note: The CLI profile defaults to --ncu-set default. The Python API nsight.run() defaults to ncu_set='full'. Be explicit to avoid confusion.

Agent Workflow

Step 1: Run Benchmark + Profile

Run both run (for SimulationStats timer data) and profile (for Nsight Compute kernel metrics). Both are needed to make good optimization decisions.

Step 2: Read Both Reports

Benchmark report (report/report.md from run):

  • Shows wall-clock time per simulation stage as a hierarchical tree (e.g., Newton Iteration: 45%, Line Search: 30%)
  • Tells you which stages dominate total frame time — this is where optimization has the most impact

Nsight Compute report (<scene>_report.md / <scene>_report.json from profile):

  • Shows per-kernel GPU metrics (duration, SM%, occupancy, registers)
  • Tells you which kernels are inefficient and why (high register usage, low occupancy, memory-bound, etc.)
FileSourceWhat it tells you
report/report.mdrunWall-clock time breakdown by stage — what matters most
timer_frames.jsonrunPer-frame timer tree as JSON — source of truth for hierarchy
<scene>_report.mdprofileKernel GPU metrics — what's inefficient
<scene>_report.jsonprofileStructured kernel data with source_hint and optimization_hints
<scene>.ncu-repprofileBinary — do NOT read, for Nsight Compute GUI only
Step 3: Cross-Reference to Prioritize

A kernel is worth optimizing only if it's both inefficient AND in a hot stage.

  1. Read timer_frames.json or report/report.md to find which stages take the most wall-clock time (e.g., Detect DCD Candidates: 40%).
  2. Read the ncu report to find which kernels in those stages have bad metrics.
  3. Match kernel names to stages using the class/function names (e.g., StacklessBVH::* -> collision detection stage). Use the source_hint field in the JSON report.
  4. Ignore kernels with bad metrics in stages that take <5% of frame time — not worth optimizing.
  5. Prioritize kernels that are both in a hot stage AND have clear inefficiencies (high registers, low occupancy).
Step 4: Optimize
  1. Follow source_hint in the JSON report to find the CUDA source.
  2. Search for the kernel's class/method name in that directory.
  3. Read the .cu file and optimize the kernel.
  4. Rebuild with Release (see cmake-workflow), re-benchmark, and compare.
Adding Finer-Grained Timers in C++

If the benchmark report shows a hot stage but you need more detail to locate the bottleneck within it, add Timer scopes in the C++ source:

cpp
#include <uipc/common/timer.h>

void MySystem::do_something()
{
    {
        Timer timer{"MySystem::phase_A"};
        // ... GPU work ...
    }
    {
        Timer timer{"MySystem::phase_B"};
        // ... GPU work ...
    }
}

The Timer is scoped — it starts on construction and stops on destruction. Nested timers form a tree. The names appear in timer_frames.json and report/report.md, letting you drill down into which sub-phase of a hot stage is the actual bottleneck before running the more expensive ncu profiling.

Simulation Timer Hierarchy

The timer tree is dynamic — it varies per run depending on which simulation features are active (contact, friction, animation, etc.). The actual tree for any run is stored in timer_frames.json (written by run). Always read that file for the real hierarchy.

Below is a representative example with all features enabled, showing the typical nesting from sim_engine_do_advance.cu, global_linear_system.cu, and linear_pcg.cu:

Pipeline                                    engine/
├── Rebuild Scene                           engine/
│   └── Update Diff Parm                    diff_sim/               (conditional)
└── Simulation                              engine/
    ├── Clear External Forces               external_force/         (conditional)
    ├── Step Animation                      animator/               (conditional)
    ├── Compute External Force Accel.       external_force/         (conditional)
    ├── Detect DCD Candidates               collision_detection/    (conditional)
    ├── Newton Iteration                    engine/                 (LOOP)
    │   ├── Detect DCD Candidates           collision_detection/    (iter > 0)
    │   ├── Compute DyTopo Effect           dytopo_effect_system/   (conditional)
    │   │   ├── Assemble Dytopo Effect
    │   │   ├── Convert Dytopo Matrix
    │   │   └── Distribute Dytopo Effect
    │   ├── Solve Global Linear System      linear_system/
    │   │   ├── Build Linear System
    │   │   └── Solve Linear System
    │   │       └── PCG
    │   │           ├── Apply Preconditioner
    │   │           └── SpMV               (per PCG iteration)
    │   └── Line Search                     line_search/
    │       ├── Detect Trajectory Cand.     collision_detection/
    │       ├── Compute Energy              line_search/            (initial E0)
    │       ├── Filter CCD TOI              collision_detection/
    │       ├── Compute CFL Condition       contact_system/
    │       └── Line Search Iteration       line_search/            (LOOP)
    │           ├── Filter Contact Cand.    collision_detection/
    │           └── Compute Energy          line_search/
    └── Update Velocity                     time_integrator/

Parent timer durations include their children. E.g., if Newton Iteration is 80% of frame time, PCG and Line Search durations are already counted inside that 80%.

Show full SKILL.md (402 more words)Show less

Identifying Kernels in ncu Output

All backend kernels are named __global__ functions (defined in anonymous namespaces) launched with raw <<<>>> — kernel symbols are directly readable in ncu reports, e.g.:

InfoStacklessBVHSimplexTrajectoryFilter_detect_k1_kernel
FEMLineSearchReporter_step_forward_kernel
StacklessBVH::... (older helpers may still appear as <Class>::<method>)

Naming convention: <OwningClass>_<original_function>[_kN]_kernel (_kN = Nth launch point in the same function). To find the source of a kernel: search the kernel name (or its suffix) in src/backends/cuda/.

Legacy note: before the named-kernel migration, kernels were launched via muda::ParallelFor().apply(N, lambda) and appeared as parallel_for_kernel<Class::method()::lambda> (with #N for the Nth lambda in a function). The _shorten_kernel_name() function in nsight.py was written for that scheme; with named kernels it passes the readable name through unchanged.

Buffer operations (buffer_fill_kernel<T>, buffer_copy_kernel<T> in cuda_tool) are memory operations, usually not optimization targets.

Python API

Package layout
uipc.profile            — benchmark runner (timer-based, in-process)
uipc.profile.nsight     — Nsight Compute profiler (kernel-level, ncu subprocess)

The primary input for both is a World. A Scene is also accepted as a convenience shortcut (a temporary Engine + World is created internally).

Setup
python
from uipc import Scene, Engine, World
from uipc.assets import load

scene = Scene(Scene.default_config())
load('cube_ground', scene)
engine = Engine('cuda', 'my_workspace')
world = World(engine)
world.init(scene)
uipc.profile — benchmark runner
python
from uipc import profile

# Simple: benchmark 10 frames from the world's current frame
result = profile.run(world, num_frames=10, name='baseline', output_dir='bench')
print(result['summary'])

# Flexible: mix warmup and benchmarking
with profile.session(world, name='baseline', output_dir='bench') as s:
    s.advance(50)    # warmup 50 frames (no stats)
    s.profile(10)    # benchmark 10 frames (collect stats)
print(s.result['summary'])

# Compare two saved benchmark directories
md = profile.compare('bench/baseline', 'bench/optimized', output_dir='comparison')
print(md)

# Load a saved result for later analysis
data = profile.load_result('bench/baseline')
uipc.profile.nsight — Nsight Compute profiler
python
from uipc.profile import nsight

# Simple: profile 2 frames under ncu
result = nsight.run(world, num_frames=2, name='cube_ground',
                    output_dir='ncu_results', ncu_set='default')

# Flexible: mix warmup and profiling
with nsight.session(world, name='cube_ground') as s:
    s.profile(10)    # profiles from world.frame()
print(s.result)

When a World is passed, nsight automatically calls world.dump() and uses world.recover() in the subprocess for instant state restoration (no replay cost). The engine workspace is obtained via WorldVisitor(world).engine().workspace().

SimulationStats visualization tools

Available on the stats object in benchmark results (result['stats']):

  • stats.profiler_heatmap() — sunburst chart of timer breakdown
  • stats.system_dependency_graph(workspace) — directed graph of backend system dependencies
  • stats.plot(keys, metric='duration') — per-frame line/bar chart
  • stats.to_markdown(keys) — Markdown table of per-frame values

Key CUDA Kernel Directories

All relative to src/backends/cuda/:

  • finite_element/ — FEM constitutions, gradient/Hessian assembly
  • affine_body/ — Affine body dynamics
  • linear_system/ — PCG solver, SpMV, preconditioners
  • collision_detection/ — BVH, trajectory filtering, DCD
  • contact_system/ — Contact forces (IPC barrier)
  • global_geometry/ — Vertex management, bounding boxes
  • time_integrator/ — Time integration, velocity update
  • dytopo_effect_system/ — Dynamic topology effects
  • line_search/ — Line search energy evaluation
  • external_force/ — External force computation
  • animator/ — Animation stepping
  • diff_sim/ — Differentiable simulation
  • coupling_system/ — Multi-body coupling
  • implicit_geometry/ — Implicit geometry representations
  • inter_primitive_effect_system/ — Inter-primitive effects
  • newton_tolerance/ — Newton convergence tolerance
  • engine/ — Core pipeline orchestration
  • utils/ — Shared utilities

Optimization Checklist

When the bottleneck report identifies a hot kernel:

  1. Memory-bound (high Mem%, low SM%): Coalesced access, shared memory, reduce data movement.
  2. Compute-bound (high SM%, low Mem%): Algorithmic improvements, intrinsics.
  3. Low occupancy: Reduce register pressure (__launch_bounds__), adjust block size.
  4. Many small launches: Kernel fusion or batching via muda::ParallelFor.
  5. High launch overhead: Reduce host-device sync points.
  6. High register count (>64/thread): Simplify kernel logic, split into multiple passes, use __launch_bounds__(blockSize, minBlocksPerSM).

Scenes

Scenes are loaded from HuggingFace: MuGdxy/uipc-assets. Each asset has a scene.py with build_scene(scene). The asset module is at assets/init.py.

Output Structure

Benchmark (run)
<output_dir>/<scene_name>/
  benchmark.json         # metadata (name, wall_time, num_frames, summary)
  timer_frames.json      # per-frame timer tree (JSON) — read this for hierarchy
  workspace_<name>/      # engine workspace (contains systems.json)
  report/
    report.md            # summary with charts — AGENT: read this
    profiler_heatmap.svg  # sunburst chart
    system_deps.svg       # system dependency graph (if workspace exists)
    *.svg                 # per-timer charts
Nsight Compute (profile)
<output_dir>/
  <scene>_report.md      # AGENT: read this — kernel hotspot table
  <scene>_report.json    # AGENT: read this — structured metrics + source_hints
  <scene>.ncu-rep        # binary — do NOT read
  <scene>.csv            # raw CSV (already parsed into reports)

JSON report per kernel:

json
{
  "name": "StacklessBVH::calcExtNodeSplitMetrics",
  "launches": 3,
  "total_duration_ns": 123456.0,
  "registers_per_thread": 40,
  "avg_sm_pct": 100.0,
  "avg_occupancy_pct": 48.0,
  "source_hint": "src/backends/cuda/collision_detection/",
  "optimization_hints": ["Low occupancy - consider reducing registers"],
  "full_names": ["void muda::parallel_for_kernel<...>"]
}

© spiriMirror, 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

Just SKILL.md in .cursor/skills/gpu-optimization of spiriMirror/libuipc.

Open the folder on GitHubat commit 9c748a7

Compare with similar skills

GPU Optimization 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.

GPU Optimization compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
GPU Optimization this skillspiriMirror/libuipc335—~3.6kAutomated safety check: PassApache-2.0
Cuda Cpp Kernelvipshop/cache-dit1.3k—~2.3kAutomated safety check: PassApache-2.0
Add Jit Kernelguqiong96/Lsglang1431 repos~10kAutomated safety check: PassApache-2.0
At Dispatch V2intel/torch-xpu-ops1153 repos~2.2kAutomated safety check: PassApache-2.0
Add Jit Kernelsgl-project/sglang37k—~13kAutomated safety check: PassApache-2.0
Cudamohitmishra786/low-level-dev-skills253—~1.9kAutomated safety check: PassMIT

Similar skills

  • Cuda Cpp Kernel

    vipshop/cache-dit

    A skill your agent uses when writing, debugging, porting, reviewing, or optimizing CUDA C++ or PTX kernels; investigating CUDA Runtime or Driver API behavior; profiling kernels with Nsight Systems…

    1.3k GitHub stars~2.3k tokensUpdated 9 days ago
    AI & LLM EngineeringAuto-check passed
  • Add Jit Kernel

    guqiong96/Lsglang

    Step-by-step tutorial for adding a new lightweight JIT CUDA kernel to sglang's jitkernel module

    143 GitHub starsUsed in 1 repo~10k tokens
    AI & LLM EngineeringAuto-check passed
  • At Dispatch V2

    intel/torch-xpu-ops

    Official

    Convert PyTorch ATDISPATCH macros to ATDISPATCHV2 format in ATen C++ code.

    115 GitHub starsUsed in 3 repos~2.2k tokens
    AI & LLM EngineeringAuto-check passed
  • Add Jit Kernel

    sgl-project/sglang

    Step-by-step tutorial for adding a new lightweight JIT CUDA kernel to sglang.kernels JIT infrastructure and public operator groups

    37k GitHub stars~13k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Cuda

    mohitmishra786/low-level-dev-skills

    CUDA C/C++ skill for NVIDIA GPU kernel programming. An agent skill from mohitmishra786/low-level-dev-skills.

    253 GitHub stars~1.9k tokensUpdated 3 mo ago
    AI & LLM EngineeringAuto-check passed
  • Paddle Build

    PaddlePaddle/Paddle

    A skill your agent uses when needing to compile, rebuild, or install Paddle from source after code changes.

    24k GitHub stars~1k tokensUpdated 8 days ago
    AI & LLM EngineeringAuto-check passed

More from spiriMirror/libuipc

All 16 skills in this repo
  • Review PR

    spiriMirror/libuipc

    Review a libuipc pull request end-to-end: checkout the PR, summarize changes, list files for the human reviewer, and perform a domain-aware AI review covering physics correctness, backend…

    335 GitHub stars~1.7k tokensUpdated 5 days ago
    Auto-check passed
  • Xmake Workflow

    spiriMirror/libuipc

    Build and test the libuipc project using XMake. An agent skill from spiriMirror/libuipc.

    335 GitHub stars~588 tokensUpdated 5 days ago
    Auto-check passed
  • Cmake Workflow

    spiriMirror/libuipc

    Build and test the libuipc project using CMake. An agent skill from spiriMirror/libuipc.

    335 GitHub stars~321 tokensUpdated 5 days ago
    Auto-check passed
  • Document

    spiriMirror/libuipc

    Documentation style guide and rules for creating documentation

    335 GitHub stars~930 tokensUpdated 5 days ago
    Auto-check passed
  • Fix Issue

    spiriMirror/libuipc

    Fix a GitHub issue with proper branch, testing, and PR workflow

    335 GitHub stars~421 tokensUpdated 5 days ago
    Auto-check passed
  • Fix PR

    spiriMirror/libuipc

    Fix a pull request based on review feedback. An agent skill from spiriMirror/libuipc.

    335 GitHub stars~448 tokensUpdated 5 days ago
    Auto-check passed

Works with

Questions about GPU Optimization

What does GPU Optimization do?

GPU optimization workflow using uipc.profile, uipc.profile.nsight, and Nsight Compute CLI. GPU Optimization is an agent skill from spiriMirror/libuipc.nsight, and Nsight Compute CLI.

When should I use GPU Optimization?

GPU Optimization fits situations like: benchmarking CUDA kernels; tasks that involve GPU and accelerator computing.

How do I install GPU Optimization in Claude Code?

Run `npx skills add spiriMirror/libuipc --skill gpu-optimization -a claude-code`. Or copy the skill folder (.cursor/skills/gpu-optimization in spiriMirror/libuipc) into .claude/skills/gpu-optimization in your project. Claude Code loads it when a task matches its description.

How do I install GPU Optimization in Codex?

Run `npx skills add spiriMirror/libuipc --skill gpu-optimization -a codex`. Or copy the skill folder (.cursor/skills/gpu-optimization in spiriMirror/libuipc) into .agents/skills/gpu-optimization in your project. Codex loads it when a task matches its description.

Can I use GPU Optimization 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 spiriMirror/libuipc --skill gpu-optimization -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/gpu-optimization, .gemini/skills/gpu-optimization, .github/skills/gpu-optimization and .opencode/skills/gpu-optimization in your project.

What does GPU Optimization need to run?

Going by SKILL.md and its folder, GPU Optimization needs the command-line tools its instructions call (python). Our summary lists: Python 3.

Does GPU Optimization access the network?

SKILL.md names 1 domain. As links in the text: huggingface.co. This is read from the text; nothing was executed.

Is GPU Optimization 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 GPU Optimization use?

GPU Optimization 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 GPU Optimization use?

About 3.6k tokens (SKILL.md is roughly 15k 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 GPU Optimization?

Skills that share tags, products or a category with GPU Optimization: Cuda Cpp Kernel (vipshop/cache-dit, 1.3k stars), Add Jit Kernel (guqiong96/Lsglang, 143 stars), At Dispatch V2 (intel/torch-xpu-ops, 115 stars) and Add Jit Kernel (sgl-project/sglang, 37k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains GPU Optimization?

spiriMirror (a GitHub organization) maintains it in spiriMirror/libuipc, which has 335 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 3, 2026.

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