Skills
Give your coding agent a focused workflow for integrating raavl into your app.
An agent skill is a reusable set of instructions for a specific task. raavl ships one shared integration skill for Codex, Cursor, and Claude Code. Its workflow adapts to your app's framework and design.
raavl-integrate
Add a working audio waveform player with accessible controls, real playback, error handling, and resource cleanup. The skill helps your agent choose the React or DOM API, preserve your existing styles, and add optional capabilities when your task needs them.
The skill installs instructions for your agent. Follow the quickstart to install the raavl library in your application.
Use it for one task
Copy this prompt into your coding agent from the application you want to change:
Add a raavl audio waveform player to this app. Read https://raavl.dev/skill.md and follow its integration workflow. Use https://raavl.dev/llms.txt to find the relevant API documentation. Match this app's framework, preserve its existing styles, and verify playback, accessible seeking, errors, and resource cleanup.
The agent reads the skill for this task. This does not permanently install it in your agent. The copied URLs point to the public documentation, so your agent can read them from any environment.
Install for repeated use
Run the command for your agent inside your application. It installs the same skill content in the appropriate project directory:
npx skills add raptisj/raavl --skill raavl-integrate --agent codexInstalls into .agents/skills/raavl-integrate/ in your project.
Then ask your agent to add raavl to this project. In Codex you can explicitly
mention $raavl-integrate; Claude Code exposes /raavl-integrate. Discovery and
invocation depend on your installed agent version. Local installation also does
not automatically make a skill available in every cloud environment.
Codex's optional agents/openai.yaml supplies its display name and a suggested
prompt. Integration instructions stay in the shared SKILL.md; the workflow
does not depend on an agent-specific tool API or execution mode.
See the official Codex, Cursor, and Claude Code guides, or the skills CLI documentation.
Read the instructions
This preview and the downloadable Markdown are generated from the maintained
skill file in skills/raavl-integrate/SKILL.md:
raavl-integrate/SKILL.mdRead the full skill instructions
---
name: raavl-integrate
description: "Integrate a raavl audio waveform player into an existing JavaScript or TypeScript app. Use when asked to add raavl, wire its playback controls, or extend an existing raavl integration with themes, supplied peaks, annotations, or optional modules."
---
# Integrate raavl
Add a working audio waveform player using the application's existing framework,
design, and controls. Keep additions within the requested audio experience.
## Read the current contract
When the user provides a raavl documentation URL, read its `/llms.txt` index and
fetch only the relevant Markdown pages. The full reference is `/llms-full.txt`.
When a raavl checkout is available, read the matching files in
`docs/content/docs/` and inspect the exported types in `src/` as needed.
If neither is available, the maintained guides are in the raavl repository:
- [Quickstart](https://github.com/raptisj/raavl/blob/main/docs/content/docs/quickstart.mdx): installation and a first JavaScript or React player.
- [Sources](https://github.com/raptisj/raavl/blob/main/docs/content/docs/sources.mdx): URL, File/Blob, borrowed media, and supplied peaks.
- [Player](https://github.com/raptisj/raavl/blob/main/docs/content/docs/player.mdx), [waveform](https://github.com/raptisj/raavl/blob/main/docs/content/docs/waveform.mdx), and [React](https://github.com/raptisj/raavl/blob/main/docs/content/docs/react.mdx): use the reference matching the selected API.
- [Styling](https://github.com/raptisj/raavl/blob/main/docs/content/docs/styling.mdx): CSS tokens and validated JSON themes.
- [Annotations](https://github.com/raptisj/raavl/blob/main/docs/content/docs/annotations.mdx) and [optional modules](https://github.com/raptisj/raavl/blob/main/docs/content/docs/modules.mdx): read when the requested task needs them.
- [State and errors](https://github.com/raptisj/raavl/blob/main/docs/content/docs/errors.mdx): separate playback and visualization failures.
Match documentation to the installed version. If documentation cannot be fetched,
use the available checkout or installed declarations; report missing information
instead of inventing APIs. Historical proposals under `docs/design/` may describe
unimplemented features.
## Choose an integration
Inspect the consuming app's package manager, package boundaries, framework,
React version, asset serving, existing player code, and design conventions.
- For React with React DOM, use `Waveform` and hooks from `raavl/react`.
In Next.js App Router, place the interactive integration in a client component.
- For vanilla JavaScript or other frameworks, use `createPlayer` and
`mountWaveform` through browser lifecycle hooks.
Preserve the app's framework version unless upgrading it is part of the task.
- Reuse an application-owned media element when the app already owns playback.
That source requires supplied peaks or `waveform: { kind: 'none' }`.
Follow the quickstart's installation command using the consuming application's
package manager. Match the installed package version to the documentation and
reuse an existing compatible dependency when present.
## Build the requested experience
Use the quickstart and API references for code. Add a waveform and the controls
the user needs, using the app's existing components, colors, and spacing.
- Supply a real audio URL, File/Blob, or borrowed media source with a stable ID.
Demo recordings from the documentation site are not installed package assets.
- Handle source loading, waveform preparation, buffering, and playback errors
separately. Metadata readiness does not guarantee a waveform or buffered audio.
- Start playback from a user gesture and handle rejected `play()` promises.
- Keep accessible names, real buttons, and keyboard/touch seeking available.
- Prefer supplied peaks for long recordings instead of decoding the entire audio
solely for visualization. Verify source ID, revision, and duration match.
- Add a theme, annotations, timeline, minimap, history, or snapping only when the
requested experience calls for it. Application code owns persistence.
## Preserve ownership
In React, choose an owned `source` or a borrowed `player`, never both. An owned
`Waveform` cleans up its own resources; a supplied player or annotation store
remains application-owned. Keep large peak buffers, Files, and request objects
stable; update source revisions when asset data changes.
With the DOM API, unsubscribe listeners and dispose mounted accessories and
views before the owned player/store during teardown. Disposing a view does not
dispose its borrowed player. Borrowed media must remain application-owned.
All time commands use seconds except `seekFraction()`, which takes a fraction
in `[0, 1]`. After external CSS color changes, call `view.refreshTheme()` or
change React's `themeVersion`; Canvas needs a redraw to reflect computed colors.
## Verify and report
Run checks appropriate to the consuming app and exercise real playback,
pause/resume, pointer and keyboard seeking, source replacement, visible errors,
and component cleanup. Verify waveform CORS separately from native playback for
cross-origin audio. When a browser, agent environment, or audio source is
unavailable, identify the unverified behavior explicitly.
Report the integration chosen, changed files, commands to run, and verification
results. Keep browser-dependent timing claims accurate: range playback uses
best-effort media timing. Recording, spectrograms, sample-accurate playback, and
automatic backend storage are not implemented.
Read it before use. Your agent's normal permissions and tool availability still apply. Installation compatibility and a successful integration are separate checks: verify playback in your app and report any behavior you could not test.
Documentation and examples
The skill links to the existing documentation for API details:
- Quickstart, React API, and DOM waveform API.
- Sources and peaks, styling, and state and errors.
- Annotations, optional modules, and live examples.
| Endpoint | Purpose |
|---|---|
/skill.md | The integration skill, ready to read or download |
/skills/raavl-integrate/SKILL.md | The same skill under its folder path |
/skills/raavl-integrate/agents/openai.yaml | Optional Codex metadata |
/llms.txt | Documentation index with links to every Markdown page |
/llms-full.txt | Complete documentation in one text response |
/markdown/skills/content.md | Markdown version of this page |
Every documentation page has Copy Markdown and an Open menu with GitHub,
Markdown, ChatGPT, Claude, and Cursor options.
The old /docs/agents and /markdown/agents/content.md URLs resolve to this
maintained page as compatibility aliases.