livepilot-core — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited livepilot-core (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Agentic production system for Ableton Live 12. 467 tools across 56 domains, three layers:
atlas_search or atlas_suggest before loading any device. Never guess a device name.memory_recall before creative tasks to understand user taste.atlas_search or atlas_suggest first, then use search_browser and load the exact uri from results. Exception: find_and_load_device for built-in effects only ("Reverb", "Delay", "Compressor", "EQ Eight", "Saturator", "Utility")health_flags, mcp_sound_design_ready, plugin_host_status. If parameter_count <= 1 on AU/VST → dead plugin, delete and replaceset_device_parameter or batch_set_parameters: read value_string in the response to confirm the actual Hz/dB/% value makes senseget_track_meters(include_stereo=true) and verify the target track has non-zero left AND right levelsapply_automation_recipe: check that the recipe didn't push the parameter to an extreme that kills audioparameters argumentis a dict of {"ParamName": {"value": v}}, NOT {"ParamName": v}. The bare-value shape raises Each parameter entry must include 'value'. Live-verified v1.18.0 — example:
batch_set_parameters(
track_index=-1, device_index=0,
parameters={"Feedback": {"value": 0.45}, "Channel Mode": {"value": 1}}
)(For single params, set_device_parameter takes the value directly — only batch_set_parameters wraps it in a dict.)
get_device_parameters for value_string, fix, re-verifyvalue_string to see actual units.remote_script/LivePilot/*.py: run npx livepilot --install (NOT node installer/install.js — that raw file only module-exports the install function and silently no-ops as a script), then call reload_handlers (MCP tool, domain: diagnostics). NEVER instruct the user to toggle the Control Surface in Live Preferences. The tool uses pkgutil + importlib to re-fire @register decorators in-place in <1s while the TCP connection stays open. Standard procedure for every handler change — not just releasesAll 467 tools plus M4L perception tools.
analyze_loudness · analyze_mix · analyze_sound_design
compare_to_reference · analyze_spectrum_offline · read_audio_metadata
Escalation pattern: Start fast, escalate only with consent:
Level 1 (instant): get_master_spectrum + get_track_meters
Level 2 (fast): analyze_loudness + analyze_mix
Level 3 (slow): compare_to_reference + analyze_spectrum_offlineReport ALL errors to the user immediately. Common failure modes:
parameter_count <= 1 → delete, replace with nativeset_track_volume/set_track_pan after fire_scene if your mix settings differ from what was stored in the clipsget_master_spectrum errors with "Analyzer not detected", call ensure_analyzer_on_master. If it returns install_required, call install_m4l_device(source_path="<repo>/m4l_device/LivePilot_Analyzer.amxd") and retry. If it errors with "UDP bridge not connected", try reconnect_bridge firstThree modes:
memory_recall before creative tasks, let past decisions influence new onesmemory_recall → memory_get → memory_replay when user references a saved techniqueenter_wonder_mode) for creative ambiguity and session rescuecompiled_plandetect_stuckness confidence > 0.5livepilot-wonder skill for full workflow guidanceBefore setting device parameters, consult the knowledge corpus for informed creative choices. Read the relevant file BEFORE making changes:
| User says | Read this file |
|---|---|
| "make it breathe" / "organic" / "alive" / "warm" / "cold" / "anxious" / "nostalgic" | references/device-knowledge/creative-thinking.md — emotional-to-technical mapping, physical world modeling |
| "what effect chain for [genre]" / "dub techno" / "trap" / "SOPHIE" / "Arca" / "ambient" | references/device-knowledge/chains-genre.md — complete chains per genre |
| "how to use Wavetable/Drift/Analog/Operator/Meld" | references/device-knowledge/instruments-synths.md — parameter-level recipes |
| "distortion" / "saturation" / "Roar" / "Saturator" / "Redux" | references/device-knowledge/effects-distortion.md — every curve type, creative applications |
| "reverb" / "delay" / "echo" / "space" / "dub" | references/device-knowledge/effects-space.md — dub recipes, shimmer chains |
| "spectral" / "Resonators" / "Corpus" / "Vocoder" / "weird" / "experimental" | references/device-knowledge/effects-spectral.md — drum-to-melody, cross-synthesis |
| "automate" / "evolve" / "arc" / "movement" / "filter sweep" | references/device-knowledge/automation-as-music.md — shapes, macro gestures, density mapping |
| "sound design" / "make it interesting" / "more complex" | references/sound-design-deep.md — minimal-techno, SOPHIE, Basic Channel master techniques |
Rule: Never set effect parameters from memory alone when the corpus has specific guidance. Read the file first, then apply the technique.
For domain-specific workflows, load the appropriate skill:
| Skill | When to use |
|---|---|
livepilot-devices | Loading, browsing, configuring devices and presets |
livepilot-notes | Writing notes, theory, generative algorithms, MIDI I/O |
livepilot-mixing | Volume, pan, sends, routing, automation |
livepilot-arrangement | Song structure, scenes, arrangement view |
For agentic evaluation loops, load the appropriate engine skill:
| Skill | When to use |
|---|---|
livepilot-creative-director | Load FIRST on any open-ended creative request — "like X", "develop", "mutate", "more interesting", reference/style asks. Compiles a Creative Brief and enforces 3-plan divergence across move.family before any commit. Routes to the skills below. |
livepilot-mix-engine | Critic-driven mix analysis and iterative improvement |
livepilot-sound-design-engine | Critic-driven patch analysis and refinement |
livepilot-composition-engine | Section analysis, transitions, motifs, form |
livepilot-performance-engine | Live performance with safety constraints |
livepilot-evaluation | Universal before/after evaluation loop |
Deep production knowledge in references/:
| File | Content |
|---|---|
references/overview.md | All 467 tools with params and ranges |
references/device-atlas/ | 280+ device corpus with URIs and presets |
references/device-knowledge/ | Per-device parameter + technique knowledge |
references/pack-knowledge.md | All 44 installed packs scored for aesthetic fit (Tier S / A / B / C), with Top / Use-when guidance |
references/artist-vocabularies.md | v1.17+ — ~25 producers (Villalobos, Hawtin, Basic Channel, Gas, Basinski, Hecker, Aphex, Dilla, Burial, Henke, Daft Punk, …) mapped to reach_for LivePilot devices + avoid anti-patterns + key_techniques cross-refs. The LLM's bridge from "sound like X" to concrete tool calls. |
references/genre-vocabularies.md | v1.17+ — 15 genres (microhouse, dub_techno, deep_minimal, minimal_techno, ambient, idm, modern_classical, hip_hop, trap, dubstep, house, dnb, garage, experimental, synthwave) with tempo / kick / bass / percussion / harmonic / texture / reach-for / avoid structure |
references/sound-design-deep.md | Masters-level sound design principles (Basic Channel space-as-composition, Hawtin subtraction-over-addition, micro-modulation, space as composition) — explicitly "not a recipe book" |
references/sample-manipulation.md | 29 sample techniques (slice_and_sequence, micro_chop, vocal_chop_rhythm, extreme_stretch, dub_throw, tail_harvest, granular_scatter, …) with producer references (Burial, Dilla, Amon Tobin, Stars of the Lid) |
references/midi-recipes.md | Drum patterns, chord voicings, humanization |
references/sound-design.md | Synth recipes, device chain patterns |
references/mixing-patterns.md | Gain staging, compression, EQ, stereo |
references/automation-atlas.md | 16 curve types, 15 recipes, spectral mapping |
references/ableton-workflow-patterns.md | Session/arrangement workflows |
references/memory-guide.md | Technique memory usage and quality templates |
references/m4l-devices.md | M4L bridge command reference |
For aesthetic queries ("sound like X", "make me a <genre> track"), read `artist-vocabularies.md` + `genre-vocabularies.md` BEFORE selecting devices. They're structured translation layers between the LLM's training and LivePilot's atlas — not recipe scripts.
For complex requests, use the V2 orchestration flow instead of ad-hoc tool calls. There are two peer flows — choose based on intent.
For creative intent (reference / style / "more interesting" / open-ended): load livepilot-creative-director BEFORE choosing a flow. It compiles a Creative Brief, enforces 3-plan divergence across move.family, and routes through Flow B with the right seeds.
Use when the user has a concrete, specific request ("tighten the low end", "make the drums punchier", "fix the masking").
Use when the user wants options, variants, or is stuck ("surprise me", "try some things", "I don't know what I want", "make it more like X"). Flow B is also correct when `route_request` returns `workflow_mode="creative_search"`.
freshness=0.8 to bias toward surprise (default 0.5)creativity_profile="alchemist" / "surgeon" / "sculptor" to set producer philosophysacred_elements=[...] if the user named protected partssynth_hints={"track_indices": [...], "preferred_devices": [...]} for synth workBranchSeed dict (or let Wonder emit them for you)"semantic_move" compile via the registry at run time"freeform" / "synthesis" / "composer" / "technique" must arrive with a pre-compiled plan attached via the parallel compiled_plans=[...] listdiscard_experiment to throw everything awayRule of thumb: if the user asked for a specific fix, Flow A. If they asked "what would you do?" or mentioned feel/vibe without parameters, Flow B.
High-level musical intents that compile to deterministic tool sequences. 7 families (44 moves as of v1.27.1):
tighten_low_end, widen_stereo, make_punchier, darken_without_losing_width, reduce_repetition_fatigue, make_kick_bass_lock, set_track_routing, set_track_metadata, configure_send_architecturecreate_chaos_modulator, create_feedback_resonator, create_wavefolder_effect, create_bitcrusher_effect, create_karplus_string, create_stochastic_texture, create_fdn_reverb, create_drum_rack_pad, build_send_chain (procedural M4L device generation)add_warmth, add_texture, shape_transients, add_space, configure_device, remove_device, load_chord_sourcesample_chop_rhythm, sample_texture_layer, sample_vocal_ghost, sample_break_layer, sample_resample_destroy, sample_one_shot_accent (registered from sample_engine/moves.py)recover_energy, decompress_tension, safe_spotlight, emergency_simplify, configure_record_readinesscreate_buildup_tension, smooth_scene_handoff, configure_groove, set_scene_metadatabridge_sections, increase_forward_motion, open_chorus, create_breakdownUse list_semantic_moves(domain="mix") to discover available moves.
Experiments support both the legacy move_ids path and the new seeds path. Prefer seeds for anything exploratory:
# Legacy / targeted — one semantic_move per branch:
create_experiment(request_text="make it punchier", move_ids=["make_punchier", "widen_stereo"])
# Branch-native / exploratory — mixed sources, pre-compiled plans allowed:
create_experiment(
request_text="surprise me",
seeds=[
{"seed_id": "a", "source": "semantic_move", "move_id": "make_punchier",
"novelty_label": "safe", "risk_label": "low"},
{"seed_id": "b", "source": "freeform", "hypothesis": "Audio-rate LFO into filter cutoff",
"novelty_label": "unexpected", "risk_label": "medium"},
{"seed_id": "c", "source": "synthesis", "hypothesis": "Wavetable morph across positions",
"novelty_label": "strong"},
],
compiled_plans=[None, {"steps": [...], "step_count": N}, {"steps": [...], "step_count": M}],
)Never claim a branch is previewable unless it has a valid `compiled_plan`. Analytical-only branches (no plan, or seed marked analytical_only=true) short-circuit to a neutral evaluation — they're directional suggestions, not executable paths.
Branches carry a status string that governs lifecycle:
pending — created, not yet runrunning — apply pass in progressevaluated — ran and was scored; may be kept or discardedcommitted / committed_with_errors — winner was applied permanentlydiscarded — rolled back or abandonedinteresting_but_failed — (PR7+) failed hard technical gates but surfaced novel ideas; kept for audit, not re-appliedfailed — couldn't apply any steps; do not claim successThe system learns user preferences from kept/undone moves:
get_taste_graph() — current taste modelexplain_taste_inference() — human-readable explanationrank_moves_by_taste(move_specs) — sort options by preference fitpropose_next_best_move automatically applies taste ranking when evidence existsSong-level analysis beyond parameters:
detect_repetition_fatigue() — clip overuse, section stalenessdetect_role_conflicts() — tracks fighting for the same spaceinfer_section_purposes() — label sections as setup/tension/payoff/contrast/releasescore_emotional_arc() — does the song have a satisfying build→climax→resolve?analyze_phrase_arc() — capture and evaluate musical phrasescompare_phrase_renders() — compare phrase variants side by side~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.