Paddle Build
PaddlePaddle/Paddle
A skill your agent uses when needing to compile, rebuild, or install Paddle from source after code changes.
A skill your agent uses when extending the C API at YseEngine/capi/ — wrapping a new engine class, method, enum, or callback — or when auditing the C API for drift from the engine's public surface.
$ npx skills add yvanvds/yse-soundengine --skill c-api-extend -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install yvanvds/yse-soundengine c-api-extend --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/yvanvds/yse-soundengine.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/c-api-extend .claude/skills/c-api-extend && 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 "c-api-extend" agent skill from https://github.com/yvanvds/yse-soundengine/tree/dev/.claude/skills/c-api-extend into .claude/skills/c-api-extend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-api-extend", 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/yvanvds/yse-soundengine/tree/dev/.claude/skills/c-api-extendType 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 yvanvds/yse-soundengine --skill c-api-extend -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install yvanvds/yse-soundengine c-api-extend --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yvanvds/yse-soundengine.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/c-api-extend .agents/skills/c-api-extend && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "c-api-extend" agent skill from https://github.com/yvanvds/yse-soundengine/tree/dev/.claude/skills/c-api-extend into .agents/skills/c-api-extend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-api-extend", 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 yvanvds/yse-soundengine --skill c-api-extend -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install yvanvds/yse-soundengine c-api-extend --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yvanvds/yse-soundengine.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/c-api-extend .cursor/skills/c-api-extend && 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 "c-api-extend" agent skill from https://github.com/yvanvds/yse-soundengine/tree/dev/.claude/skills/c-api-extend into .cursor/skills/c-api-extend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-api-extend", 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/yvanvds/yse-soundengine.git --path .claude/skills/c-api-extend--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 yvanvds/yse-soundengine --skill c-api-extend -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install yvanvds/yse-soundengine c-api-extend --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yvanvds/yse-soundengine.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/c-api-extend .gemini/skills/c-api-extend && 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 "c-api-extend" agent skill from https://github.com/yvanvds/yse-soundengine/tree/dev/.claude/skills/c-api-extend into .gemini/skills/c-api-extend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-api-extend", 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 yvanvds/yse-soundengine c-api-extendInstalls 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 yvanvds/yse-soundengine --skill c-api-extend -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/yvanvds/yse-soundengine.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/c-api-extend .github/skills/c-api-extend && 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 "c-api-extend" agent skill from https://github.com/yvanvds/yse-soundengine/tree/dev/.claude/skills/c-api-extend into .github/skills/c-api-extend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-api-extend", 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 yvanvds/yse-soundengine --skill c-api-extend -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install yvanvds/yse-soundengine c-api-extend --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yvanvds/yse-soundengine.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/c-api-extend .opencode/skills/c-api-extend && 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 "c-api-extend" agent skill from https://github.com/yvanvds/yse-soundengine/tree/dev/.claude/skills/c-api-extend into .opencode/skills/c-api-extend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-api-extend", 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.
c-api-extendA skill your agent uses when extending the C API at YseEngine/capi/ — wrapping a new engine class, method, enum, or callback — or when auditing the C API for drift from the engine's public surface.
C API Extend is an agent skill from yvanvds/yse-soundengine. Use when extending the C API at YseEngine/capi/ — wrapping a new engine class, method, enum, or callback — or when auditing the C API for drift from the engine's public surface. Applies the project's RT-safety, ownership, and ABI conventions established in PRs
Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with C++. The repository describes itself as: advanced 3D sound engine. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 911ea2d. 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:
pythonghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, 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.
C API Extend loads about 4.4k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 1,920 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 yvanvds/yse-soundengine at commit 911ea2d, republished under its MIT licence (© yvanvds). 1,920 words, ~4,378 tokens.
.claude/skills/c-api-extend/SKILL.md (or your agent's skills folder).YseEngine/c_api/ is the only entry point for FFI consumers (Dart, Python, …).
The C API has explicit rules — RT-safe callback bridges, opaque-handle
ownership, null-safe no-op semantics, YSE_C_CALLBACK ABI defence,
exception-to-YseStatus translation, enum drift guard — that the engine's
own public C++ API does not enforce. New wrapping must follow all of them; a
careless callback bridge can stall the audio thread.
This skill governs how to wrap new engine surface in the C API. Read it
fully before editing any file under YseEngine/c_api/.
CLAUDE.md mandates an issue before code. For this skill:
gh issue create --title "c-api: ...". Use
the enhancement or task template; tag the layer as c-api.dev as <issue-number>-c-api-<short-slug> and PR back
to dev. Not master — see CLAUDE.md §1.gh issue view <n> before starting if the
request mentions an existing issue number.The gh CLI is authenticated in the project environment.
Yes:
No:
dspSourceObject user
callback, customFileReader) on a casual
wrapping pass. Those need design work — see the "Callback bridge
rules" block in yse_c_internal.hpp.Every new C-API entry point must respect all six.
Each engine type that gets a C handle is declared with typedef struct YseFoo YseFoo; and accessed only via YseFoo* pointers. The .cpp file
does reinterpret_cast<YSE::foo*>(handle). Never expose any C++ type,
class, namespace, reference, or template across the C ABI.
Every typedef in its home header carries a one-line ownership comment:
/* Owned — release with yse_foo_destroy. */
typedef struct YseFoo YseFoo;/* Borrowed singleton — owned by the engine, never destroy.
Obtain via yse_foo_get(). */
typedef struct YseFoo YseFoo;/* Borrowed — owned by parent YsePatcher. Release with
yse_patcher_delete_object(patcher, handle); never call a destroy on
the handle directly. */
typedef struct YsePHandle YsePHandle;Dual-shape types (e.g. YseChannel is owned via yse_channel_create but
borrowed via the pre-built accessors) get both lines.
Forward-declaration typedefs (in headers that don't own the type) point the reader at the home header rather than duplicating the ownership note:
/* Forward declarations — see yse_channel.h / yse_dsp.h for ownership. */
typedef struct YseChannel YseChannel;
typedef struct YseDspBuffer YseDspBuffer;Every handle typedef — home header and forward declaration alike — sits
behind its own YSE_C_HANDLE_<Type> guard (#976), because repeating a
typedef is a C11 feature and the headers must stay C99-clean:
#ifndef YSE_C_HANDLE_YseFoo
#define YSE_C_HANDLE_YseFoo
/** Owned — release with yse_foo_destroy. */
typedef struct YseFoo YseFoo;
#endifKeep the comment inside the guard, directly above the typedef: placed
above the #ifndef, Doxygen attaches it to the #define instead, and the
Sphinx build fails on the duplicated macro.
The yse_c99_header_check object library in Tests/CMakeLists.txt compiles
every public header as -std=c99 -pedantic-errors, so an unguarded typedef
fails the test build.
Canonical examples: yse_patcher.h (owned + borrowed pair), yse_reverb.h (dual-shape).
Every include/yse_c/yse_<module>.h:
#ifndef / #define / #endif include guards. No #pragma once.#include "yse_common.h" (and yse_enums.h if needed) — never an
engine C++ header.#ifdef __cplusplus / extern "C" { ... } / #endif wraps the body.YSE_C_API on every exported function declaration.YSE_C_CALLBACK on every callback typedef, named
Yse<Module><What>Callback in PascalCase (YseBusTapCallback,
YseScriptErrorCallback, YsePatcherSendCallback) — never a
lowercase yse_*_cb (#911 renamed the last of those).yse_<module>_...
(yse_python_run_script, not yse_run_script).yse_common.h (yse_last_error,
yse_free_string for library-allocated strings), not in whichever
module first needed them.int (0/1), never bool. All sizes as size_t or
unsigned int. Strings as const char* (in) or char* + size_t
(snprintf-style out).Canonical example: yse_sound.h.
| Engine signature | C API shape |
|---|---|
void play() — can't fail | void yse_x_play(YseX* h) — null-safe no-op |
void setFoo(T v) | void yse_x_set_foo(YseX* h, T v) — null-safe no-op |
T getFoo() const | T yse_x_get_foo(YseX* h) — return 0 / false / NULL on null |
bool create(...) — can fail | YseStatus yse_x_load_...(...) — set_last_error on failure |
const char* getName() const | size_t yse_x_get_name(YseX* h, char* buf, size_t cap) — snprintf style |
std::string getBlob() const (engine-internal) | Same as above; never return const char* to engine-owned storage that can free |
The header-top convention paragraph captures the void-no-op rule once for the whole header. Per-function comments are reserved for genuinely surprising behaviour.
Body pattern for fallible operations (lift from yse_sound.cpp):
YSE_C_API YseStatus yse_x_load(YseX* h, const char* arg) {
if (!h) return YSE_ERR_INVALID_HANDLE;
if (!arg) return YSE_ERR_INVALID_ARGUMENT;
try {
if (!to_cpp(h)->load(arg)) {
yse_c::set_last_error(std::string("x load failed for: ") + arg);
return YSE_ERR_<specific>;
}
return YSE_OK;
} catch (const std::exception& e) {
yse_c::set_last_error(e.what());
return YSE_ERR_EXCEPTION;
} catch (...) {
yse_c::set_last_error("yse_x_load: unknown C++ exception");
return YSE_ERR_EXCEPTION;
}
}Body pattern for void state-change:
YSE_C_API void yse_x_play(YseX* h) { if (h) to_cpp(h)->play(); }Body pattern for string-out:
YSE_C_API size_t yse_x_get_name(YseX* h, char* buf, size_t cap) {
if (!h) { if (buf && cap > 0) buf[0] = '\0'; return 0; }
return copy_string(to_cpp(h)->getName(), buf, cap);
}Canonical example for the snprintf pattern: yse_device.cpp.
When the engine invokes a user-provided callback on a non-host thread
(audio callback, RtMidi input thread, file streaming worker, the
control-thread occlusion driver, future dspSourceObject /
customFileReader paths), the bridge:
std::atomic<Pair*> — never two separate atomics, which let a
dispatch between the two stores of a re-install pair one install's cb
with another's user_data (#902, #916). Never std::mutex or
std::lock_guard on the dispatch path.exchange.YSE::midiIn's raw / parsed setters do since
#917); still wrap the install in the exception barrier.malloc / new / construct std::string on dispatch when
the bridge can fire from the audio callback. For raw byte buffers
needed by an async-Dart host, preallocate a per-handle pool keyed by
the handle.YSE_C_CALLBACK on the typedef.NativeCallable.listener requires this), pair the callback with a
yse_<module>_free_message function and document the contract beside
the typedef.Canonical examples:
c_raw_bridge,
pair-pointer swap reclaimed by a reader-count handshake; malloc per call
is acceptable because the RtMidi input thread is not the audio callback.CallbackBridge,
same pair-pointer swap reclaimed behind the log sink mutex, same
Dart-ownership malloc.The "Callback bridge rules" block at the head of yse_c_internal.hpp restates these rules in detail. Read it before designing any new bridge.
When the engine adds an enum value that should be visible from the C API:
Yse<Name>_<VALUE> entry to
yse_enums.h.
Mirror the integer value exactly. Use C-compatible typedef enum {...} Yse<Name>; syntax (not enum class).YSE_ASSERT_ENUM(YSE_..., YSE::...); line to
yse_enums_check.cpp.
The build fails loudly if the values drift.If the engine adds a brand-new enum, add the full mirror block + a full
set of YSE_ASSERT_ENUM lines. The drift guard is the only safety net
for the hand-mirrored file.
.cpp file → append to YSE_C_API_SRCS in
c_api/CMakeLists.txt.Tests/<module>/. The doctest harness picks up TEST_CASE without
further wiring; see existing tests for patterns. Tests that need a
null device use TestHelpers::engineInit().python yse.py build && python yse.py test. CTest must stay green
across all 44 entries (count them with
ctest --test-dir build-tests -N; the number grows as suites are
isolated).yse_unit_tests binary. When touching the registry,
metadata, protocols or lifecycle, run the relevant entries
individually (ctest --test-dir build-tests -R <name>), not just the
monolithic binary.yse_python.h, yse_module) only builds
its live half under python yse.py build --python /
python yse.py test --python — run those when touching it.YseEngine/sound/soundInterface.hpp); list every public method,
enum, and callback. Skip private helpers and the implementation
pimpls.yse_<module>.h +
yse_<module>.cpp pair + CMakeLists entry. Extending an existing
subsystem → add to the existing pair.Tests/<module>/. At minimum: a
TEST_CASE that exercises create/destroy and one method.python yse.py build && python yse.py test. Must
be green.dev with a body that references the closing issue and
lists every new public function in the summary.Stop and surface a design note rather than emit code that:
std::mutex or std::lock_guard in any callback bridge body.
(PR #63 had to remove these from yse_log.cpp; do not put them back.)
The rule is about bridge dispatch paths and anything the audio thread
can reach. The one allowed exception today is the live-handle registry
in yse_instrument.cpp
(registryMutex()): SFZ-instrument / DX7-bank handles are validated
against it to turn double-free and use-after-destroy into logged
no-ops (#178), and every caller is a control / setup-thread entry
point that already allocates and reads files. Nothing on the audio
thread or in a callback touches it. A new mutex needs the same
argument, written beside it in a comment, or it is refused.malloc, new, std::string construction) in a
callback that fires on the audio thread. If the host genuinely needs
byte ownership, design a preallocated pool.yse_c/*.h header.std::exception and rethrows, swallows, or returns 0/NULL
without first calling yse_c::set_last_error.YSE_C_CALLBACK.yse_enums.h without a matching YSE_ASSERT_ENUM in
yse_enums_check.cpp.If the engine's design genuinely requires one of these (rare), file an issue describing the conflict and wait for a decision before proceeding.
dependencies/ or build*/_deps/.dspSourceObject,
customFileReader) — those need additional design
work (preallocated pools, stack-only return paths) per
yse_c_internal.hpp's
rules block. Surface a design proposal first. (Occlusion is no longer
deferred: since #209 it runs on the control thread inside
System().update(), and #906 bridged it as
yse_system_set_occlusion_callback in yse_system.cpp.)Before reporting the wrapping task complete:
python yse.py build succeeds with no new warnings.python yse.py test passes all 44 CTest entries (the
project's full suite, not just the new test), plus the per-process
C-API entries you touched run individually.grep "std::mutex\|std::lock_guard" YseEngine/c_api/ returns
nothing beyond the documented yse_instrument.cpp handle-registry
exception (see Hard refusals).include/yse_c/*.h is either covered by
the header-top void-no-op convention or carries its own explanatory
comment.YSE_C_CALLBACK.YSE_ASSERT_ENUM line.If any of these fail, the wrapping is incomplete — keep iterating rather than reporting done.
© yvanvds, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/c-api-extend of yvanvds/yse-soundengine.
Open the folder on GitHubat commit 911ea2d
C API Extend 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 |
|---|---|---|---|---|---|---|
| C API Extend this skillyvanvds/yse-soundengine | 238 | — | ~4.4k | Automated safety check: Pass | MIT | |
| Paddle BuildPaddlePaddle/Paddle | 24k | — | ~1k | Automated safety check: Pass | Apache-2.0 | |
| Fory Releaseapache/fory | 4.6k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| ONNX Runtime Shape Inference Safety Auditmicrosoft/onnxruntime | 22k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Code Audit3stoneBrother/code-audit | 893 | 1 repos | ~2.7k | Automated safety check: Pass | None | |
| Qt C++ Code Reviewx-tools-author/x-tools | 1.1k | 2 repos | ~4.3k | Automated safety check: Pass | BSD-3-Clause |
PaddlePaddle/Paddle
A skill your agent uses when needing to compile, rebuild, or install Paddle from source after code changes.
apache/fory
Prepare an Apache Fory release candidate from a clean release branch, including the version bump, RC tag, JVM staging, ASF source artifacts, SVN upload, and vote email.
microsoft/onnxruntime
Finds and fixes out-of-range output writes in ONNX Runtime operator shape-inference functions where a getNumOutputs guard admits too few outputs.
3stoneBrother/code-audit
Professional code security audit skill covering 55+ vulnerability types.
x-tools-author/x-tools
Read-only review of Qt6 C++ code that combines a deterministic lint script with six parallel analysis agents and reports only high-confidence issues.
doxygen/doxygen
Keeps all Doxygen and Doxywizard translations up to date across three mechanisms: translator C++ classes (src/translatorxx.h), Qt .ts locale files for the Doxywizard GUI (addon/doxywizard/i18n/)…
yvanvds/yse-soundengine
Use after an issue's PR has been merged to wrap up the issue branch — close the issue, switch back to dev, fast-forward, and delete the local and remote feature branches.
yvanvds/yse-soundengine
A skill your agent uses when fixing compiler warnings, static analyzer findings (clang-tidy, etc.), or runtime errors/crashes in the libYSE codebase.
yvanvds/yse-soundengine
A skill your agent uses when the user asks to cut a new release of libYSE — phrases like "release a new version", "cut a patch/minor/major release", "publish a new release", "ship X.Y.Z".
Works with
A skill your agent uses when extending the C API at YseEngine/capi/ — wrapping a new engine class, method, enum, or callback — or when auditing the C API for drift from the engine's public surface. C API Extend is an agent skill from yvanvds/yse-soundengine. Use when extending the C API at YseEngine/capi/ — wrapping a new engine class, method, enum, or callback — or when auditing the C API for drift from the engine's public surface.
C API Extend fits situations like: extending the C API at YseEngine/capi/ — wrapping a new engine class; auditing the C API for drift from the engines public surface.
Run `npx skills add yvanvds/yse-soundengine --skill c-api-extend -a claude-code`. Or copy the skill folder (.claude/skills/c-api-extend in yvanvds/yse-soundengine) into .claude/skills/c-api-extend in your project. Claude Code loads it when a task matches its description.
Run `npx skills add yvanvds/yse-soundengine --skill c-api-extend -a codex`. Or copy the skill folder (.claude/skills/c-api-extend in yvanvds/yse-soundengine) into .agents/skills/c-api-extend 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 yvanvds/yse-soundengine --skill c-api-extend -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/c-api-extend, .gemini/skills/c-api-extend, .github/skills/c-api-extend and .opencode/skills/c-api-extend in your project.
Going by SKILL.md and its folder, C API Extend needs the command-line tools its instructions call (python and gh).
SKILL.md contains no URLs. Its commands use gh, 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.
C API Extend is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.4k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with C API Extend: Paddle Build (PaddlePaddle/Paddle, 24k stars), Fory Release (apache/fory, 4.6k stars), ONNX Runtime Shape Inference Safety Audit (microsoft/onnxruntime, 22k stars) and Code Audit (3stoneBrother/code-audit, 893 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
yvanvds (a GitHub user) maintains it in yvanvds/yse-soundengine, which has 238 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on September 29, 2026.
Source: yvanvds/yse-soundengine on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.