Skills¶
Skills are Markdown playbooks that teach an AI coding agent how to work
on a specific part of Pulp — the conventions, the gotchas, and the exact
commands for a subsystem. They live in .agents/skills/<name>/SKILL.md,
ship with the Pulp Claude Code plugin (plugin.json points at that
directory), and are read by both Claude Code and Codex from the same
source of truth — there is no separate per-agent copy.
You rarely invoke a skill by name. Each one activates automatically when
your request matches what it covers (its description lists the triggers),
and many also have a matching /slash-command. The table below is the full
catalog of the 55 skills Pulp ships; open a skill's SKILL.md
for its complete, authoritative guidance.
| Skill | What it does |
|---|---|
aax |
Optional AAX support for Pulp, including developer-supplied Avid SDK setup, CMake enablement, DigiShell/AAX Validator workflows, and local AAX builds on macOS or Windows. |
android |
Android platform development for Pulp — NDK cross-compilation, Oboe audio, Dawn/Skia GPU rendering, JNI bridge, touch interaction, emulator workflows, and end-to-end smoke validation. |
ara |
Optional ARA support for Pulp, including developer-supplied ARA SDK setup, CMake enablement, adapter companion APIs, validation, and ARA-aware plugin implementation guidance. |
audio-harness |
The measurement surface for ALL Pulp DSP and audio-pipeline work — read it BEFORE writing or gating DSP, not only when something already sounds wrong. |
audio-headless-debug |
Reproduce and debug "only happens in a DAW" audio plugin bugs (cutouts, glitches, parameter-change failures) entirely offline — headless Processor scenes for DSP bugs and a standalone AudioUnit host probe for adapter/host-interaction bugs. |
auv2 |
Audio Unit v2 adapter work for Pulp — picking the right AU component type (aufx/aumf/aumi/aumu) and its matching entry macro, wiring MIDI input and output (including the aumi MIDI-processor adapter), sharing the base-class-free adapter surface, and avoiding the DAW-side component cache that silently masks repackaging. |
auv3 |
Audio Unit v3 (AUAudioUnit) format adapter for Pulp — render-block wiring, parameter tree bridging, MIDI / sysex via AURenderEvent, sidechain pulls, state persistence, iOS extension surface, and the pitfalls discovered while wiring the adapter. |
ci |
Local and cloud CI for Pulp — validate branches, create PRs, merge on green. |
clap |
CLAP format adapter for Pulp — how Processor bridges to clap_plugin_t, how parameters / modulation / sidechain / MPE / UMP / sysex flow, and the pitfalls discovered while wiring the adapter. |
cli-maintenance |
Checklist and decision tree for adding, modifying, or removing CLI commands. |
cmajor-external |
Use Pulp's MIT-safe Cmajor support lane via source-owned patches, an external cmaj toolchain, and explicit generated-artifact workflows. |
code-comments |
How to write source comments, doc comments, and test names/tags that have lasting value — and what to never write. |
content |
Validate, install, update, list, rescan, remove, and reveal data-only Pulp content packs for installed plugins. |
daw-smoke |
Real-DAW (REAPER) functional smoke for reload/editor/format-adapter changes — opt-in, scoped, headless-safe, zero-pollution |
engine |
Query, recommend, and switch the Pulp JS engine backend (QuickJS, JavaScriptCore, V8). |
faust |
Create FAUST DSP plugins in Pulp using offline codegen, pre-generated C++ headers, and the FaustProcessor template wrapper. |
friction-report |
Turn a moment of friction — a conflicting PR, a wedged runner, a mysterious red check, a repeated manual chore — into a durable, actionable report. |
handoff |
Coordinate a cross-session or cross-machine handoff — snapshot the open work, write a status doc to the pulp-planning repo on main, and emit a ready-to-paste goal prompt that links it, so a fresh session (often on another machine) can pick up and finish. |
heritage-profile |
Research, author, validate, render, and archive data-only Pulp Sample Heritage profiles. |
hosting |
Load, run, and test VST3 / AU / CLAP / LV2 plugins from Pulp code. |
import-design |
Import designs from Figma, Stitch, v0, Pencil, React Native, or Claude Design into Pulp web-compat JS with automated visual validation. |
installable-tools |
The acceptance bar for anything Pulp can install (a pulp tool registry entry, pulp add package, or any downloadable). |
intel-canary |
Maintain Pulp's macOS Intel (x86_64) portability lint and CI tiering — the PULP_INTEL_CANARY configure gate, intel_canary_lint.py + its allowlist, and the Tier 0-3 workflows (build.yml canary step, intel-portability.yml, nightly-intel.yml, release-cli.yml universal gate). |
ios |
iOS platform development for Pulp — iPhone/iPad AUv3 app extensions, iOS Simulator builds, UIKit window host, CoreAudio IO audio, touch & Apple Pencil input, XcodeBuildMCP automation. |
jsfx-subset |
Work in Pulp's bounded JSFX lane using source-only examples, subset validation, and explicit exclusions like no @gfx. |
kits |
Search, inspect, plan, apply, remove, pack, and scaffold local Pulp package manifests. |
moonbase |
Optional Moonbase license-activation integration for Pulp — load-bearing compile settings, OpenSSL-at-configure caveat, the moonbase-pulp User-Agent contract, audio-thread gating + click-free fade, async start/pump, the interactive native (no-WebView) activation editor (frame-tick polling + the don't-rebuild-mid-event trap), loadable plugin/standalone formats, and headless screenshots. |
motion |
Debug or validate Pulp animations / transitions / scroll behavior using the runtime motion-trace system. |
mpe |
Build an MPE-aware Pulp synth — opt into MPE via PluginDescriptor, consume per-note pitch bend / pressure / timbre from MpeBuffer, and route voices through MpeVoiceAllocator without reinventing channel tracking. |
packages |
Search, suggest, add, and browse third-party audio packages. |
playback |
Pulp timeline transport, immutable compiled playback programs, bounded arrangement audio rendering, block-level publication latches, stable shells, and ProcessContext projection. |
pr-batching |
Decide whether several finished branches ship as ONE PR or stay separate. |
pr-review-sweep |
Sweep a PR's automated + human review comments and act on them — especially for material (large / logic-bearing) PRs. |
prototype-loop |
Leveraged-prototype dev loop (pulp loop) — focus marker plus normal watch/rebuild loop, with AOT analyzer guidance and deferred ar-swap/PR-monitor playbook. |
pulp-web-demo |
Generate and maintain browser demos of Pulp audio plugins (both web ABIs — WAM and WCLAP) from one declarative config, so every demo mounts the SAME shared player and the two ABIs stay in lockstep. |
screenshot |
Capture faithful PNGs of Pulp view trees / imported UIs headlessly. |
screenshot-sync |
Keep a plugin/demo repo's screenshots in sync with its UX. |
sdf-text |
Work with Pulp's SDF / MSDF / PSDF glyph atlases — building, sampling via SkSL, and the shared text-layout helpers. |
ship |
Sign, notarize, package, and distribute Pulp plugins and apps across macOS, Windows, and Android |
skia-gpu-build |
Enable a Skia + Dawn GPU build of Pulp (MacGpuWindowHost, Skia Graphite). |
streams |
Pick the right Pulp Stream for a given I/O task, wire async callbacks correctly without deadlocking the worker, and avoid the backpressure / cancellation footguns in pulp::runtime::AsyncStream. |
stretch |
Offline time-stretch / pitch / varispeed — character modes, fine-tune presets, A/B toolkit, and the honest quality state, so an agent can pick a mode, dial it in, and ship a plugin with it. |
tart-ci |
Stand up a fast, cached, isolated, disposable macOS CI lane on Tart — layered golden VM images, ephemeral per-job GitHub Actions runners, host-mounted caches, and a reusable per-repo vm-image manifest. |
threejs-bridge |
Build or iterate on Pulp's native Dawn-backed Three.js workflow using the real three.webgpu.js renderer, focused bridge tests, and native demo capture. |
timebase |
Pulp musical/media time primitives, editable tempo and meter maps, immutable compiled lookup, streaming cursors, exact sample anchors, and shared transport quantization arithmetic. |
timeline |
Build, edit, validate, explain, render, import, or integrate Pulp timeline projects through the CLI, MCP tools, or C++ SDK. |
trace-analysis |
The investigation harness for "why is this slow?" over a Pulp Perfetto trace (.pftrace). |
trace-sql |
SQL discipline for querying Pulp Perfetto traces (.pftrace) with trace_processor — idempotent CREATE OR REPLACE PERFETTO views, GLOB not LIKE, dur = -1 incomplete-slice handling, EXTRACT_ARG for span args, joining on stable utid/upid, SPAN_JOIN PARTITIONED, and the draft→validate→execute loop. |
update-demos |
Rebuild, re-pin, and republish Pulp's downstream demo/example repos against a new or the latest SDK. |
upgrade |
Guide users through pulp upgrade — discover new CLI releases, interpret migration notes for the hop they're performing, and apply breaking-change fixes (CMake macro renames, API surface changes, config file moves). |
video-proof |
Record, compose, publish, serve, and review short desktop validation video proofs for Pulp UX/test-harness work. |
view-bridge |
Editor lifecycle and multi-view attach for Pulp plugins — when to override Processor::create_view(), the open → notify_attached → resize → close protocol, release_view() ownership rules, and secondary-view roles. |
vst3 |
VST3 format adapter for Pulp — SingleComponentEffect wiring, bus arrangement negotiation, parameter / MIDI event routing, state round-trip, and the pitfalls discovered while wiring the adapter against Steinberg's SDK. |
web-plugins |
Pulp in the browser — the WAM v2 and WebCLAP adapters, the wasm runtime, the Skia/WebGL2 browser window host, and the WebGPU (emdawnwebgpu) GPU-audio lane. |
webview-ui |
Build or iterate on a Pulp WebView UI using the native WebView bridge, embedded assets, directory-backed dev resources, and focused WebView validation. |
This catalog is generated from each skill's SKILL.md frontmatter by
tools/scripts/skills_doc_check.py. Do not edit it by hand — after adding
or changing a skill, regenerate it with: