Build
Configuration
Runtime behaviour is driven by config.yaml; secrets and machine overrides live in .env (copied from .env.example at setup). Here are the keys you'll touch most.
Highlights
config.yaml
conversation:
listening_mode: manual # or wake-word driven
online_permission_mode: ask_first
models:
chat: { path: models/Qwen3.5-0.8B-Q4_K_M.gguf }
tool: { path: models/Qwen3.5-4B-Q4_K_M.gguf }
routing:
execution_engine: parallel # ordered | parallel | graph (LangGraph)
use_replanning: trueRouting thresholds
These tune the confidence bands described in How routing works. Lower them to dispatch more eagerly; raise them to ask more often.
config.yaml · routing
routing:
dispatch_threshold: 0.62 # cosine ≥ this → auto-dispatch
confirm_low: 0.50 # below dispatch but here → "did you mean…?"
tie_epsilon: 0.05 # candidates this close → disambiguate
lexical_threshold: 88 # rapidfuzz score floor
lexical_margin: 6 # …and must beat runner-up by this
promote_after: 3 # confirmed this many times → deterministic
confirm_destructive: true # guard destructive actions
disambiguate: true # ask which one when ambiguousVoice
config.yaml · voice
voice:
stt_model: base.en
stt_compute_type: int8
stt_cpu_threads: 8
conversation:
wake_session_timeout_s: 12Online consent
Local-first means the network is opt-in. online_permission_mode governs how FRIDAY asks before any capability reaches the internet.
ask_first— prompt for consent before each online action (default).always— allow online capabilities without prompting.never— block online capabilities entirely.
Useful env vars
.env
FRIDAY_PORCUPINE_KEY=... # wake word access key (required both OSes)
FRIDAY_CHAT_MODEL_URL=... # override chat model download
FRIDAY_TOOL_MODEL_URL=... # override tool/planner model download
FRIDAY_DISABLE_EMBED_ROUTER=1 # skip the embedding layer (faster cold start)Full reference
Every key is documented in
docs/config_reference.md in the repository. Edits to config.yaml take effect on next launch.