WhatsApp

Configuration reference

Look up WhatsApp CLI settings, defaults, scopes and environment overrides.

Use this page when you need the exact name, default or scope of a setting, or the name of an environment variable. It lists every setting wa reads and which value wins.

No setting can hold a secret: the file has no field for the device keys, a phone number or a chat id.

Which value wins

For each setting, the first of these that is set:

  1. an option on the command line (--limit 50, --record, --timeout 30s)
  2. an environment variable (WA_PROFILE, WA_TIMEOUT)
  3. the profile's own entry in the config file
  4. defaults in the config file, shared by every profile
  5. the built-in default

wa <profile> config show prints each setting in force and where it came from.

The file

~/.config/whatsapp-cli/config.json. No setting picks a profile: the first word (wa work …) or WA_PROFILE names it. Without either, a command that uses an account stops with exit code 2 and lists the profiles on this computer. A file that still has default_profile from an older wa stops that command too; wa config unset default_profile removes it.

SettingDefaultWhat it doesOverridden for one run by
limit20rows per page of a list--limit
timeout_msnonehow long one request may wait, in milliseconds; for the whole command use --timeoutnone
colorfrom the terminalcolour in the table viewnone; with no setting, NO_COLOR turns it off
sender_colorsfalsea colour per sender in the table view of messagesnone
search_catch_upfalseprepare newly stored chats for local search: their graph and, where installed, their vectors--catch-up, --no-catch-up
picture_searchfalsesearch stored pictures by what they show, once the model is downloadednone
recordfalsekeep every run--record, --no-record
keep_runs_for_days30recorded runs older than this are removed when the next one is keptnone
permissionseverything allowed, except deleting and a few other changes askwhat the profile may do, per commandnone; --yes only answers ask, it never lifts deny
sends_per_hour30the most sends in any hournone
requests_per_minutethe CLI's pacerequests a minute, shared by every process of the profile; 0 turns it offWA_REQUESTS_PER_MINUTE
transcribe_withautowho turns voice into text: auto, messenger or local--local, or --model
speech_modelnonewhich downloaded speech model --local uses--model
read_other_botsfalseaccept messages identified as coming from other bots; bot profiles onlynone
update_checktruethe daily "a newer version exists" line; only under defaultsnone; WA_NO_UPDATE_CHECK, NO_UPDATE_NOTIFIER or CI turn it off
skill_hinttruea line, at most once a day, for an agent whose copy of the skill is missing or older; only under defaultsnone
embedding_providerlocallocal model or openai--embedding-provider
embedding_modelprovider defaultembedding model--model
embedding_base_urlprovider defaultembedding API endpoint--base-url
embedding_dimsmodel defaultinteger 1–65,536--dims
analysis_provideragentagent, openai or anthropicbuild --analysis-provider
analysis_modelnoneanalysis modelbuild --model
analysis_base_urlprovider defaultanalysis API endpointbuild --base-url
modelsnoneexternal models by purposeWA_MODELS_* variables

The settings for search stemming, phone countries, tasks and account groups (search_stemmers.*, phone_countries, task_*, account_groups.*) are listed under wa config set.

The file is written 0600 when first created. It holds no secret.

A bot profile

A WhatsApp Business number on Meta's Cloud API (wa <profile> bot …) keeps its settings under bot in the file: wa <profile> config set --bot <setting> <value>. They are ids from the App Dashboard's API setup page, not secrets; the access token lives in the system keychain (a WhatsApp Business number as a bot).

SettingDefaultWhat it doesOverridden for one run by
phone_number_idnonethe business number every bot command speaks for--phone-number-id on bot api commands
waba_idnonethe WhatsApp Business Account that holds the number's templates--waba-id on bot api commands
graph_versionv23.0the Graph API version in every requestnone

Environment variables

VariableWhat it does
WA_PROFILEthe profile, when the first word does not name one
WA_PROFILE_LOCKpins the process to one profile; any other is refused
WA_TIMEOUTthe same as --timeout: 500ms, 30s or 2m for the whole command
WA_REQUESTS_PER_MINUTEthe same as requests_per_minute, and wins over it
WA_CONFIG_DIR, WA_STATE_DIR, WA_CACHE_DIRmove the three directories
MESSAGING_STOREthe path of the local store file
WIRECAT_STATE_DIRthe WireCat folder every CLI shares: the local store and the speech models
WA_READ_ONLY1 makes this process read-only: every change, linking and unlinking the device included, is refused
WA_ENGINEthe path of an engine program to run instead of the installed one
WA_ENGINE_LOGa file the engine appends its warnings to, phone numbers masked; unset, it logs nothing
WA_NO_UPDATE_CHECK1 turns off the daily "a newer version exists" line
NO_COLORno colour in the table view
WA_EMBEDDING_*, WA_ANALYSIS_*, WA_MODELS_*model settings