Self-Improving Agent
一个面向 Automation 场景的 Agent 技能。原始说明:Captures learnings, errors, and corrections to enable continuous improvement. Use when: (1) A command or operation fails unexpectedly, (2) User corrects Clau...
一个面向 Automation 场景的 Agent 技能。原始说明:galdr analyzes music from YouTube or local audio files into structured listener-state traces for AI agents: pulse, pattern, momentum, breath, texture, harmon...
name: galdr
description: Use galdr's default ARC workflow to turn YouTube URLs or local audio files into grounded, time-ordered listening-experience prompts backed by listener-state traces: pattern, attention, pulse, heard pressure, texture, harmony, melody, overtones, and silence/re-entry structure. Use when asked to analyze a song, explain what makes a track work structurally, generate a listening experience, compare tracks, or extract video frames from a music video.
version: 0.4.0
author: Sellemain
license: MIT
platforms: [linux, macos]
Deterministic ears for AI agents. Audio in, listener-state traces out. Acoustic signal becomes structured evidence an LLM can encounter.
galdr is a music perception CLI for AI agents. Its default experience is ARC: analyze a track into time-ordered listener-state traces, then assemble those traces into a grounded listening-experience prompt. The metrics are evidence. The ARC prompt is the main user-facing output.
Preferred trusted sources:
pip install galdr
# or from source:
git clone https://github.com/sellemain/galdr.git
cd galdr
pip install -e .
This skill teaches an agent how to use galdr; it does not install the galdr command itself. Check: galdr --version. If missing, install the CLI before proceeding. If provenance matters, verify the PyPI metadata or install from the source repository above before running it.
Use this path unless the user explicitly asks for raw metrics, comparison, debugging, or agent-internal traces. ARC turns galdr's evidence into a prose prompt for a grounded, time-ordered listening experience.
The shape is:
--template arc --mode full.# Step 1: fetch audio + context (slug auto-derived from title)
galdr fetch "https://youtu.be/..." --analyze
# galdr prints the slug at the end:
# Slug : artist-song-title
# Next : galdr assemble artist-song-title --template arc --mode full
# Step 2: assemble the prompt locally
galdr assemble artist-song-title --template arc --mode full > prompt.txt
Override auto-derived metadata if needed:
galdr fetch "https://youtu.be/..." --artist "Oliver Anthony" --title "Rich Men North of Richmond" --analyze
If YouTube download behavior is flaky:
galdr doctor
galdr update-deps
galdr doctor reports the active Python executable, yt-dlp command/version, ffmpeg/ffprobe, JavaScript runtimes, and impersonation support. galdr update-deps upgrades yt-dlp[default,curl-cffi] in the same Python environment galdr is using.
The analysis command is
galdr listen, notgaldr analyze.
galdr listen track.wav --name my-track
galdr assemble my-track --template arc --mode full > prompt.txt
Galdr is strongest when read as a time-ordered listener-state trace. The stream is the primary evidence. Whole-track interpretation comes after walking the track through time.
Start with:
analysis/<slug>/<slug>_stream.jsonanalysis/<slug>/<slug>_perception.jsondocs/PERCEPTION-MODEL.mdUseful extras:
*_harmony_stream.json*_melody_stream.json*_overtone_stream.json*_report.jsongaldr assemble <slug> --mode blindReading order:
PERCEPTION-MODEL.md first.*_stream.json as the main evidence surface.Do not:
Minimal recipe:
galdr listen track.wav --name my-track
jq '.[0:12]' analysis/my-track/my-track_stream.json
jq '.summary' analysis/my-track/my-track_perception.json
galdr assemble my-track --mode blind > prompt.txt
Only do this if the operator explicitly wants model-written prose. Review the assembled ARC prompt before piping it to claude, llm, or any other external model endpoint.
galdr assemble my-track --template arc --mode full | claude
galdr assemble my-track --template arc --mode full | llm
import subprocess, re
fetch = subprocess.run(
["galdr", "fetch", url, "--analyze"],
capture_output=True, text=True, check=True
)
slug = re.search(r"Slug\s*:\s*(\S+)", fetch.stdout).group(1)
prompt = subprocess.run(
["galdr", "assemble", slug, "--template", "arc", "--mode", "full"],
capture_output=True, text=True, check=True
).stdout
# Review prompt before sending it to any external model endpoint.
| Mode | What's included |
|------|----------------|
| full (default) | metrics + lyrics + background + frames |
| lyrics | metrics + lyrics |
| context | metrics + background |
| blind | metrics only (structural, no cultural context) |
--template arc prepends the default listening-experience rules: tone, format, interpretation bounds, and the instruction to walk the track through time. Omit it only when you want a raw data block.
ARC is the default output path. The metrics exist to keep that prose grounded: use them as evidence for what changes, returns, releases, locks, or breaks over time.
See references/metrics.md for full metric reference.
Quick read:
pattern near 1.0 → listener is locked; near 0 → constant disruptiontexture negative → harmonic dominant (warm, tonal); positive → percussive dominantpressure_balance building/releasing/sustaining → heard-pressure shape across the trackpattern_breaks at the end → planned release; distributed → varied structuresilence depth below -60dB with re-lock above 0.93 attention → structured withdrawal/returnWhen writing experience prose yourself from galdr evidence, prefer galdr assemble <slug> --template arc --mode full. If you are writing from raw assembled output without the template:
galdr compare track-a track-b # side-by-side structural comparison
galdr frames slug # extract + describe video frames at structural moments
galdr fetch "url" --no-download # context only (Wikipedia + lyrics), no audio
galdr fetch "url" --censor # sanitize explicit lyrics before saving
galdr doctor # inspect yt-dlp/media runtime health
galdr update-deps # upgrade yt-dlp reliability extras
galdr catalog # list all indexed tracks
galdr catalog --track NAME # summary card for one track