Mp3 Agentabrams
repo: ~/Projects/mp3-agentabrams · 8 commits · 0 in last 24h, 0 in last 7d ·
Skills used
- /com4
- /npm1
- /npx1
- /homebrew1
- /favicon1
- /backup1
- /editor1
- /skills1
- /manifest1
- /refresh1
- /audio1
- /healthz1
Creative ideas + design notes
Commits with substantial prose (≥120 chars) — the rationale behind each move.
066f365 · 2026-05-13 · launchd: two opt-in plists for reboot-survival + tailscale access
Mirrors the ollama-tailscale-bridge pattern:
com.steve.mp3-agentabrams-server → node server.js on 127.0.0.1:9696
com.steve.mp3-agentabrams-tailscale-bridge → socat 100.65.187.120:9696 -> 127.0.0.1:9696
Both: RunAtLoad=true, KeepAlive=true, plutil-lint clean. Logs land in
project logs/. Server plist deliberately omits MP3_HOST so server.js
keeps defaulting to loopback — Tailscale access is layered on top via
the separate bridge plist, never by exposing the server directly.
To enable on Mac2:
cp launchd/com.steve.mp3-agentabrams-server.plist ~/Library/LaunchAgents/
cp launchd/com.steve.mp3-agentabrams-tailscale-bridge.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/com.steve.mp3-agentabrams-server.plist
launchctl load -w ~/Library/LaunchAgents/com.steve.mp3-agentabrams-tailscale-bridge.plist
Verified post-load:
loopback 127.0.0.1:9696 = 200
tailscale 100.65.187.120:9696 = 200
home LAN 192.168.1.53:9696 = refused
If Tailscale IP ever changes (tailscale ip -4), update bind= in the
tailscale-bridge plist and launchctl unload+load.
adfdb26 · 2026-05-13 · server: lock to loopback (127.0.0.1) — was silently bound to 0.0.0.0 via global $HOST
Initial app.listen(PORT, cb) defaulted to all interfaces; Steve caught
it on first review. The fix has two parts:
1. Pass explicit HOST to app.listen.
2. Use MP3_HOST (project-specific) instead of HOST. Steve's shell sets
HOST=0.0.0.0 globally for other projects, which would have silently
undone any 'default to 127.0.0.1' fix.
Override path preserved: MP3_HOST=0.0.0.0 npm start exposes on LAN.
Verified post-fix: netstat shows 127.0.0.1.9696 LISTEN only;
curl http://192.168.1.53:9696/ -> connection refused;
curl http://127.0.0.1:9696/ -> 200.
6a16909 · 2026-05-13 · initial: mp3-agentabrams — grid+list of every MP3 on Mac2
358 tracks indexed across ~/Projects/, ~/Videos/, ~/Desktop/, ~/.claude/skills/.
154MB total. Express on port 9696 (override MP3_PORT).
Stack:
scan-mp3s.js walks SCAN_ROOTS, writes manifest.json (gitignored)
server.js /api/manifest, /api/refresh (re-scan), /audio?id=<id> with
Range support, /healthz, static public/.
index.html grid + list toggle, density slider (2-10 cols), sort
(Newest/Oldest/Title/Size/Duration/Source), text + source
filter, pseudo-waveform card art, inline range-aware player
bar at bottom. All controls persist via localStorage mp3aa.*
and hydrate BEFORE first render per Steve's standing rule.
Paths never appear in URLs — every track is referenced by stable sha1-12
id, so the filesystem layout is hidden from the frontend.
ffprobe duration probe gated by PROBE_DURATIONS=1 (first scan ran with
=0 for speed; durations show as -- in the UI until re-scan with
ffprobe enabled).
Next: DNS hookup at mp3.agentabrams.com (same pattern as
videos.agentabrams.com), optional auth gate if exposed publicly.
File tree
11 files tracked. Click any to browse the source at HEAD.
rendered in 0ms