ableton-link

ableton-link is a skill for Claude Code, Codex from Generous-Corp/pulp. It costs 43 tokens per session (1,427 once invoked), scanned A, original, MIT.

A guide for adding optional Ableton Link tempo synchronisation to a desktop C++ audio application. Ableton Link is a software system that keeps musical timing aligned between compatible apps and devices.

In plain words
What is it for?
Use it to configure, implement, and test the desktop Link adapter and its connection to the application's playback code.
Why use it?
It clarifies SDK licensing, ownership, build boundaries, and installation rules so the application does not accidentally bundle or redistribute developer-supplied software.

Skill for Claude CodeCodex

Part of the pulp plugin — 63 skills, 30 commands, 3 hooks, 1 MCP server shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/generous-corp/pulp/ableton-link
Any agent
npx skills add Generous-Corp/pulp --skill ableton-link
Clone the repo
git clone --depth 1 https://github.com/Generous-Corp/pulp

Made for: Claude Code, Codex.

Or install pulp, the plugin that ships this one along with the rest of its 63 skills, 30 commands, 3 hooks, 1 MCP server.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for ableton-link

README.md
[![agentmods](https://agentmods.dev/badge/skills/generous-corp/pulp/ableton-link.svg)](https://agentmods.dev/skills/generous-corp/pulp/ableton-link)
Your own site
<a href="https://agentmods.dev/skills/generous-corp/pulp/ableton-link"><img src="https://agentmods.dev/badge/skills/generous-corp/pulp/ableton-link.svg" alt="Measured on agentmods" height="20"></a>
Per session 43 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,427 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00043 $0.01427
Opus 5 $0.00022 $0.00714
Sonnet 5 $0.00009 $0.00285
Haiku 4.5 $0.00004 $0.00143

Measured today against content hash c1403ce85ee1, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

ableton-link scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.agents/skills/ableton-link/SKILL.md · 117 lines

How it starts

The opening of the file, as written. The whole thing — 117 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Use this skill for Pulp's desktop Ableton/link integration, its CMake opt-in, or the backend-neutral tempo-sync seam in core/playback.

Scope and licensing boundary

  • This is the desktop C++ Ableton/link SDK. It is not iOS LinkKit and not m4l-connection-kit. LinkKit needs a separate licensing decision, option, SDK path, and implementation.
  • Link is available under GPLv2+ or a proprietary arrangement with Ableton. Pulp's MIT license grants no Link rights. The developer enabling the adapter is responsible for having suitable rights.
  • Pulp never fetches, bundles, installs, exports, or redistributes Link. Keep the SDK outside the Pulp source tree. Do not add it to DEPENDENCIES.md or NOTICE.md because Pulp ships none of it.
  • The portable pulp::playback target owns only Pulp code. The optional pulp::ableton-link target exists only in a source build with the SDK enabled and must never enter cmake --install or Pulp's exported target closure. Its adapter declaration lives under core/playback/adapters/include, exposed only through that target's BUILD_INTERFACE; do not place it under the installed core/playback/include tree.

Obtain and enable the desktop SDK

Clone recursively to an absolute path outside the checkout; Link requires its ASIO submodule even on platforms that do not use an ASIO audio device:

git clone --recurse-submodules https://github.com/Ableton/link.git /absolute/path/to/link

cmake -S . -B build-link -DCMAKE_BUILD_TYPE=Release \
  -DPULP_ENABLE_ABLETON_LINK=ON \
  -DPULP_ABLETON_LINK_SDK_DIR=/absolute/path/to/link

PULP_ENABLE_ABLETON_LINK defaults to OFF. When enabled, a missing, partial, in-tree, or non-desktop SDK path is a configure error. The SDK path can also come from the PULP_ABLETON_LINK_SDK_DIR environment variable, but an explicit CMake cache value is easier to audit.

Runtime contract

  • TempoSyncSource is Pulp's backend-neutral, audio-thread interface. Keep Link types and Link-specific peer/enable/start-stop controls out of it.
  • AbletonLinkTempoSync owns those Link-specific controls. Call set_enabled and set_start_stop_sync_enabled from a control thread, never from the audio callback. output_host_time and capture_audio_block are realtime-safe.
  • Call output_host_time(output_latency_frames, sample_rate, time) in the audio callback, then pass its opaque TempoSyncHostTime to MasterTransport. The adapter reads Link's realtime clock and adds device/output latency so the timestamp names the first sample at the output boundary. A callback timestamp without compensation produces a stable audible offset.
  • TempoSyncHostTime is tagged with its producing source. A transport rejects a default token or one from another source before asking its backend to capture a block, preventing Link, device, and wall-clock epochs from mixing.
  • The public desktop adapter models APIs that report output latency from the callback. It does not accept an arbitrary device-host timestamp. A platform integration whose audio API exposes a calibrated future device timestamp needs an explicit Link-clock conversion boundary; do not forward that raw timestamp or a jittery wall-clock read as though it were Link time.
  • A configured TempoSyncSource must outlive MasterTransport. Use the host-time begin_block(frame_count, output_host_time, snapshot) overload. The ordinary overload returns TempoSyncHostTimeRequired.
  • The session mapping is authoritative. Disabled, failed, or invalid sources fail the block; they never fall back to the document tempo clock.
  • Joining does not send the config's initial tempo, position, or play state. Only explicit set_tempo_sync_tempo, seek, and set_playing calls publish session commands, which avoids hijacking an existing jam on attach.
  • A Link-projected block retains Pulp's fixed one-or-two-range transport contract and precise fractional host ticks. begin_scrub() rejects an active shared tempo source because scrubbing needs a private repositioning clock; use an unsynchronized transport for scrub playback.
  • Preserve SessionState::timeForIsPlaying() in TempoSyncBlockState::is_playing_at_host_time_micros. A TransportSnapshot has one playing state for its whole half-open block: a start/stop effective at or before the first sample applies immediately, while one inside or at/after the block end is deterministically deferred until a later block starts at or beyond that timestamp. Do not flatten the timestamp into SessionState::isPlaying() or claim sample-accurate start/stop splitting that the snapshot contract cannot represent.

Read the full file on GitHub · 117 lines

Files

What ships with it

1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today First seen · 117 lines · 43 tokens per session scan A c1403ce85ee1

Subscribe to this mod's changes

ableton-link is a skill published in the GitHub repository Generous-Corp/pulp (16 stars, last pushed today), licensed MIT. It adds 43 tokens to every session and 1,427 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-04.

Related

Other skills, from other repositories

zoom-meeting-sdk-unreal

Zoom Meeting SDK for Unreal Engine wrapper integrations. Use when building Unreal projects that embed Zoom meetings with C++ and Blueprint wrappers, including wrapper-to-SDK mapping concerns.

anthropics/knowledge-work-plugins · 41 tokens

new-cpp-lint

Create a new C++ lint rule, test it, run it across the codebase, and selectively apply fixes. Usage - /new-cpp-lint.

FastLED/FastLED · 41 tokens

doca-argp

Use this skill for hands-on DOCA Arg Parser CLI work on a shipped sample or new DOCA-using app — adding / removing / renaming flags; wiring docaargpinit → register params → docaargpstart → docaargpdestroy in order; picking a parameter type from the full public enum (DOCAARGPTYPESTRING, INT, BOOLEAN, DEVICE, DEVICEREP…

NVIDIA/skills · 267 tokens

ax-cpp-gen

Use when writing C++ code with axllm for AxGen programs, forward calls, indexed multi-sampling, result pickers, streaming, tools, assertions, traces, usage, and output parsing.

ax-llm/ax · 48 tokens

add-uint-support

Add unsigned integer (uint) type support to PyTorch operators by updating ATDISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.

pytorch/pytorch · 60 tokens

cuda-index-width

Choose 32-bit vs 64-bit index math in PyTorch CUDA kernels. Use when fixing large-tensor indexing overflows, deciding whether to use int64t, canUse32BitIndexMath, CUDAKERNELLOOPTYPE, or ATDISPATCHINDEXTYPES, and when considering binary-size or performance impact of index-type templating.

pytorch/pytorch · 71 tokens