Asi live-recording
Always-on audio capture via whisper-cpp to org file with Emacs live display
install
source · Clone the upstream repo
git clone https://github.com/plurigrid/asi
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/live-recording" ~/.claude/skills/plurigrid-asi-live-recording && rm -rf "$T"
manifest:
skills/live-recording/SKILL.mdsource content
Live Recording
Always-on environmental audio capture. Records continuously, transcribes with whisper-cpp (Metal-accelerated), appends timestamped entries to an org file viewable live in Emacs.
Activation
1. Start tmux capture session
tmux new-session -d -s capture \ 'while true; do bash ~/v/scripts/always-on-capture.sh; echo "[restart] $(date)"; sleep 2; done'
The auto-restart loop ensures crash resilience. The script records 6s WAV chunks via ffmpeg avfoundation device
:1, silence-detects via sox RMS (< 0.005), transcribes non-silent chunks with whisper-cli --model ~/v/ggml-base.en.bin, and appends ** [timestamp]\ntext\n entries to ~/v/audio-capture.org.
2. Open in Emacs with live updates
M-x server-start ;; required for emacsclient C-x C-f ~/v/audio-capture.org ;; open the file M-x auto-revert-tail-mode ;; live tail as entries append
auto-revert-tail-mode (not auto-revert-mode) tails the end of the buffer as new entries arrive, keeping your cursor at the latest transcription.
3. Monitor (optional)
tmux attach -t capture # watch capture output tail -f ~/v/audio-capture.org # terminal tail
Stopping
tmux kill-session -t capture
Configuration (in always-on-capture.sh)
| Variable | Default | Purpose |
|---|---|---|
| | avfoundation device ( = screen, = mic) |
| | Recording window per chunk |
| | RMS below this = silence (suppressed) |
| | Discard transcriptions shorter than this |
| | Whisper GGML model path |
| | Output org file |
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| All chunks "no audio" | Wrong device index | to find mic |
| All chunks "silence" | Threshold too high | Lower in script (default 0.005) |
| Emacs not updating | No server-start | then reopen file |
| Emacs not tailing | Wrong mode | Use not |
| Script exits immediately | + non-fatal error | Script uses (no ) |
Related Files
-- live output file~/v/audio-capture.org
-- capture script~/v/scripts/always-on-capture.sh
-- structured audio database (ACSets schema)~/v/audio_acset.duckdb
-- Python/mlx-whisper alternative~/v/scripts/audio-capture-org.py