Join the meeting-ASR team

Handoff URL: https://capital-region-meeting-asr.canalandcountry.workers.dev/join · Markdown: https://capital-region-meeting-asr.canalandcountry.workers.dev/join.md · Status: https://capital-region-meeting-asr.canalandcountry.workers.dev/status · System map (live): https://capital-region-meeting-asr.canalandcountry.workers.dev/architecture

Telemetry model

Telemetry is Mac-pushed on events: each Mac POSTs /telemetry/event at every lane transition, plus per-meeting /telemetry and a 10-minute heartbeat.

The Worker only renders what the Macs pushed; the status and system-map pages refresh by client-side fetch. No bot, routine or poller is involved.

What this is

A small distributed team of Apple Silicon Macs that transcribes public municipal meeting videos (town, village, city,

county, school, planning and zoning boards) across the Capital Region, Rochester and Mid-Hudson regions of New York.

The Worker at https://capital-region-meeting-asr.canalandcountry.workers.dev holds the gap manifest (6,753 meetings), hands out work with leases, and stores

timestamped transcripts. Each Mac downloads audio, transcribes locally with mlx-whisper, and uploads JSON.

As of 2026-10-11T20:51:37.814Z: 1028 completed, 3 in progress, 105 failed, 5617 not started.

Current team (from heartbeats)

HostLast heartbeat (UTC)AgeQueue depthActive leases
m1-mini2026-10-11T20:50:58Z1 min420
m1-mbp2026-10-11T20:48:13Z3 min00
a18-neo2026-10-10T22:46:12Z1325 min (stale)3400

Lane recipe

Hardware guidance

YouTube policy

All hosts share one home IP. Only hosts the operator started with --allow-youtube download YouTube (see each host's role on /architecture). New hosts default to

non-YouTube venues (exclude_venues: ["youtube"]). Do not enable YouTube unless the operator says so on the log.

Getting the telemetry token

The token is never published here. Copy ~/.secrets/capreg-telemetry-token from the existing team Mac to the same path

on the new Mac (AirDrop, or scp over the local network), then chmod 600 ~/.secrets/capreg-telemetry-token. Never print, paste or log it.

Bootstrap (one line)

curl -fsSL https://capital-region-meeting-asr.canalandcountry.workers.dev/join/bootstrap.sh | bash

Installs Homebrew packages (ffmpeg, yt-dlp, python@3.11) if missing, creates ~/capital-region-asr/joiner with a venv and

mlx-whisper, downloads https://capital-region-meeting-asr.canalandcountry.workers.dev/join/agent.py, checks the token file, and runs a self-test (dry-run claim that takes no lease,

plus a 60 s download and decode that is not uploaded). Set CAPREG_HOST_LABEL to change the label (default m1-mbp).

Start:

cd ~/capital-region-asr/joiner && caffeinate -dimsu ./venv/bin/python agent.py --host-label m1-mbp

API contract (Bearer token = telemetry token)

→ {row: {municipality_id, meeting_id, meeting_date, region, venue, body_type, source_url, fetch, telemetry_source, transcript_put_path} | null, lease: {lease_id, host_label, expires_at} | null, remaining_eligible}.

Returns the next not-started, unleased row (governing bodies first) and leases it for 3 h. dry_run: true (or ?dry_run=1) previews without leasing.

lane is a short id: decode lanes 1, 2; download slots dl1..dl4. municipality_id/meeting_id may be omitted only for idle. This drives the live system map and the per-host rates.

Order per meeting: claim (event claimed) → download (download_start, download_done) → telemetry transcribing + event transcribe_start → decode (transcribe_done) → PUT transcript → telemetry transcribed + event upload_done. Lane goes idle when it has nothing.

Download wall / 403 / login → release blocked with the reason; do not mark the row failed.

Feedback and questions

POST /log with the Bearer token: {kind: "note"|"question"|"blocker", message: "[m1-mbp] ...", municipality_id?, meeting_id?}.

Always start the message with your host label. The log is public: no tokens, secrets or personal names.

Etiquette

Stop and leave cleanly

Press Ctrl-C once: the agent releases its leases (status: "retry") and deletes partial audio. If a host dies, its leases expire after 3 h.

To leave the team for good, stop the agent and post a note on the log saying so.

Generated 2026-10-11T20:51:37.814Z from live Worker data. No secrets on this page.