Files
TheMajesticMagicianandClaude Code 751d1c8b69 Add heartbeat: reminders and delivered files reach Bolt Assistant
The client never called /desk/report_status, so Bolt's reminders and any
files he delivered to this session sat in the server's outbox forever -
the same dead-air failure the pet client showed when its heartbeat stopped.
Now a heartbeat thread (HEARTBEAT_SECONDS, default 60; 0 disables) reports
in, speaks announcements through the assistant's queue when the mic is
idle, and downloads the outbox to BOLT_DOWNLOAD_DIR (default
~/Downloads/Bolt) via .part-then-rename, never overwriting. A startup
health probe warns loudly when the server refuses the DESK_API_KEY.

Also: add the .env.example the README's setup step references (it was
missing, so `cp .env.example .env` failed for everyone), and gitignore
.claude/ so Claude Code's worktree directory stays out of the repo.

Tests: tests/test_heartbeat.py (12) plus announcement tests in
tests/test_assistant.py (6); full suite 135 passed.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-11-05 22:43:59 -07:00

69 lines
4.0 KiB
Bash

# Bolt Assistant settings.
#
# Copy this file to .env and fill in the three required values:
#
# cp .env.example .env (bash) copy .env.example .env (cmd/PowerShell)
#
# Lines that carry a value below are working defaults; remove the leading #
# only to change one. Blank means "not set".
# ── server ───────────────────────────────────────────────────────────────────
# Where your Bolt server's desk API listens (port 5002 in the default setup).
BOLT_SERVER_URL=
# A desk API key for this device (ask Bolt to "create an api key for Bolt
# Assistant" — it arrives as a file through the heartbeat).
DESK_API_KEY=
# Its own conversation on the server. Defaults to pet-assistant-<computer>;
# the "pet-" prefix gives it voice-client behaviour (short, speakable replies).
# DESK_SESSION_ID=
# The ElevenLabs voice the server's /desk/tts speaks in (a voice id).
ELEVENLABS_VOICE_ID=
# TTS_SAMPLE_RATE=16000
# STREAMING_REPLIES=true # speak sentences as they form; false waits for the whole reply
# ── audio devices ────────────────────────────────────────────────────────────
# Blank = the system default; a number = the device index; anything else is a
# name substring (sounddevice's rules). `run.bat --devices` lists them.
# MIC_DEVICE=
# SPEAKER_DEVICE=
# ── wake phrases ─────────────────────────────────────────────────────────────
# With REQUIRE_WAKE_WORD off (the default) the open mic itself is the
# activation: anything that sounds like speech is sent and answered. Set it to
# true to need a phrase first ("Hey Bolt", "Thunderbolt", "Hey Assistant"...).
# REQUIRE_WAKE_WORD=false
# WAKE_WORDS=hey bolt,bolt,thunderbolt,hey thunderbolt,ok bolt,okay bolt,yo bolt,hi bolt,hey assistant,ok assistant,okay assistant,hey bolts,hey volt,hey bold,hey boat,okay volt,hey thunder bolt,thunder bolt
# These count anywhere in what was said ("what's the weather, assistant?").
# ANYWHERE_WAKE_WORDS=assistant
# ── listening (local voice-activity detection) ───────────────────────────────
# Nothing leaves the machine until the detector hears speech. Raise
# VAD_RMS_THRESHOLD if background noise keeps getting transcribed; lower it if
# you have to shout.
# VAD_RMS_THRESHOLD=500
# VAD_START_FRAMES=3 # loud 80 ms frames in a row before speech starts
# VAD_SILENCE_END_SEC=0.8 # quiet seconds that end an utterance
# MIN_UTTERANCE_SEC=0.35 # shorter bursts are never sent
# MAX_UTTERANCE_SEC=12 # the longest utterance sent
# COMMAND_WAIT_SEC=8 # after a bare "Hey Bolt", how long for the request
# FOLLOW_UP_SEC=8 # when the reply ends on a question, keep listening
# FOLLOW_UP_MAX_TURNS=5
# CHIMES=true
# ── what Bolt may do on this machine ─────────────────────────────────────────
# There's no screen to approve things on, so ASSISTANT_COMMANDS decides:
# off nothing runs
# read (default) filectl list/read only
# all everything, shell commands and file writes included, like Bolt-Pet
ASSISTANT_COMMANDS=read
# COMMAND_TIMEOUT_SECONDS=60
# ── heartbeat: reminders and delivered files ─────────────────────────────────
# Every HEARTBEAT_SECONDS the assistant reports in to the server — the channel
# Bolt's reminders and any files he delivers to this client arrive on.
# Announcements are spoken when the mic is idle, and files land in
# BOLT_DOWNLOAD_DIR (default ~/Downloads/Bolt) without overwriting what is
# already there. Set to 0 to turn the heartbeat off.
HEARTBEAT_SECONDS=60
# BOLT_DOWNLOAD_DIR=