WhatsAppCommands

Setup and maintenance

Login, profiles, configuration, the background server, the local store, diagnostics, agent connection and updates.

Login, profiles, configuration, the background server, the local store, diagnostics, agent connection and updates.

Options for every command

OptionWhat it does
-V, --versionoutput the version number.
-v, --verbosemore detail in what is shown: -v ids, -vv everything we know. Default: 0.
--jsonmachine-readable output: one JSON value on stdout; --json=id,text keeps only those fields.
--jsonlmachine-readable output: one JSON object per line, for streaming and jq.
--quietdiagnostics off; a failure is still said.
--tracethe connection's own log lines on stderr — never message content.
--debugon a failure, its whole record — cause and stack — in place of the short line.
--timeout <duration>give up on the whole command after this — 30s, 2m, 500ms.
--offlineanswer from what was recorded and never connect; fails if nothing was.
--no-inputnever prompt or open interactive login; piped input remains available.
--max-input-bytes <bytes>maximum buffered input bytes (default: 16777216).
--max-output-bytes <bytes>maximum machine output bytes (default: 4194304; 0 disables).
--brieffound messages as reference, title, time, sender and excerpt only.
--fullfound messages with their whole text and every provider field.
--dry-runpreview parsed arguments and permissions before running the action.
--yesgo ahead without the question an ask level puts before a write.
--recordkeep this run — ids and timings, never message content.
--no-recorddo not keep it, whatever the configuration says.

Commands

wa session

link this profile to WhatsApp as a device, or unlink it

wa session start

link by QR code (default) or a pairing code, then keep the pushed history

Changes something in WhatsApp.

wa session start [method]
ArgumentRequirementWhat it is
methodoptionalhow to link. One of: qr, phone. Default: qr.

wa session end

unlink this device on WhatsApp's side and delete its keys here

Changes something in WhatsApp.

wa session end

wa setup

set up WhatsApp and connect your agent

Changes something in WhatsApp.

wa setup [options]
OptionWhat it does
--agent <agent>install the skill for this agent; asks at a terminal, otherwise none. One of: none, codex, cursor, claude, gemini, all.
--method <method>how to log in when there is no session. One of: qr, phone. Default: qr.

wa account

the logged-in account

wa account list

every profile on this computer, and the account each is logged in as; asks the messenger nothing

wa account list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.

wa account show

who this profile is logged in as; the phone number shows its last four digits

wa account show [options]
OptionWhat it does
--show-phoneprint the whole phone number.

wa account update

change the name, the description or the photo everyone sees on your profile

Changes something in WhatsApp.

wa account update [options]
OptionWhat it does
--first-name <name>your first name.
--last-name <name>your last name.
--description <text>about you.
--photo <file>a new profile photo — a .jpg or .jpeg file.

wa account sessions

where else this account is logged in — not wa session, which is this tool's own login

wa account sessions list

every device and app logged in to this account; nothing is ended

wa account sessions list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms; this list filters by none yet.

wa account privacy

who may find, call or add the account

wa account privacy show

the account's privacy settings; reading changes nothing

wa account privacy show

wa account privacy set

change who may find, call or add the account; the settings not named stay

Changes something in WhatsApp.

wa account privacy set [options]
OptionWhat it does
--last-seen <who>who sees when the account was last online: everyone, contacts or nobody.
--hide-online <on|off>hide online status and last seen.
--profile-photo <who>who sees the profile photo: everyone, contacts or nobody.
--about-text <who>who sees the about text: everyone, contacts or nobody.
--read-receipts <on|off>send read receipts.
--chat-invites <who>who may add the account to groups and channels: everyone, contacts or nobody.
--calls <who>whose calls ring: everyone, contacts or nobody.

wa models

models that run on this machine

wa models keys

API keys for embedding and analysis providers

wa models keys set

store a key, typed at a hidden prompt or piped on stdin — never as an argument

Changes something on this computer only.

wa models keys set <provider>
ArgumentRequirementWhat it is
providerrequiredopenai, anthropic, or the host of a --base-url server that wants a key.

wa models keys remove

forget a stored key

Changes something on this computer only.

wa models keys remove <provider>
ArgumentRequirementWhat it is
providerrequiredopenai, anthropic, or a server's host.

wa models list

speech and embedding models, their download status and the default of each kind

wa models list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.

wa models download

download and verify one speech or embedding model

Reads from an outside service.

wa models download <model> [options]
ArgumentRequirementWhat it is
modelrequireda model id from models list.
OptionWhat it does
--accept-termsaccept the model's licence terms, for a model that has its own.

wa watch

print new messages as they arrive, until Ctrl-C or --timeout (either ends it normally)

wa watch [options]
OptionWhat it does
--eventsinclude changes and receipts; each item names its event.

wa serve

keep the local store current until stopped — what a systemd or launchd unit runs

Changes something in WhatsApp.

wa serve

wa server

wa serve in the background: start, stop, restart, status, logs; install adds a systemd or launchd unit

wa server start

start serve in the background — through the unit if one is installed — and answer once it connects

Changes something on this computer only.

wa server start

wa server stop

stop this profile's serve — through the unit if it runs under one

Changes something on this computer only.

wa server stop

wa server restart

stop it and start it again

Changes something on this computer only.

wa server restart

wa server status

whether serve runs for this profile, since when, who started it, and the unit if there is one

wa server status

wa server logs

serve's latest log lines — from the journal under systemd, else its log file

wa server logs [options]
OptionWhat it does
-n, --limit <n>how many lines. Default: 50.

wa server install

write a systemd user unit or a launchd agent for this profile; starts nothing

Changes something on this computer only.

wa server install

wa server uninstall

remove this profile's unit; stop it first

Changes something on this computer only.

wa server uninstall

wa store

the local store of messages

wa store status

per chat: messages stored, the oldest and newest, and the stretches held completely

wa store status [chat]
ArgumentRequirementWhat it is
chatoptionala chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa store gaps

inspect recorded interior coverage gaps and explicitly fetch them

wa store gaps show

local coverage plan; missing message ids alone do not imply missing history

wa store gaps show <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa store gaps repair

fetch bounded interior gaps and recheck coverage; never delete unseen messages

Changes something on this computer only.

wa store gaps repair <chat> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
OptionWhat it does
--limit <n>total messages in this repair, 500 by default.
--max-gaps <n>at most this many gaps, 5 by default.
--repair-time <duration>time budget for the repair, 30s by default. Default: 30s.
--page-size <n>messages per provider page.
--pause <duration>provider pause between pages. Default: 2s.
--fingerprint <hash>refuse if this previously inspected coverage plan changed.
--catch-upprepare local search after repair; overrides search_catch_up.
--no-catch-upskip local search preparation after repair.
--catch-up-chunks <n>maximum local chunks prepared.
--catch-up-messages <n>maximum stored messages read for preparation.
--catch-up-time <duration>preparation time within the repair's remaining budget.
--backgroundrepair as an existing store job; inspect store jobs show.

wa store jobs

background sync jobs

wa store jobs list

background sync jobs, newest first

wa store jobs list [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.
--allevery row, no paging.

wa store jobs show

one background job — the newest when none is named — and what the store now holds of its chat

wa store jobs show [job]
ArgumentRequirementWhat it is
joboptionalthe job id messages sync --background printed.

wa store jobs cancel

stop a running background job after its current page; a later sync resumes where it stopped

Changes something on this computer only.

wa store jobs cancel <job>
ArgumentRequirementWhat it is
jobrequiredthe job id.

wa store jobs retry

start a partial, failed or died job again, as a new job; the sync resumes where the store stopped

Changes something on this computer only.

wa store jobs retry [job] [options]
ArgumentRequirementWhat it is
joboptionalthe job id.
OptionWhat it does
--failedevery chat whose newest job partial, failed or died.

wa store jobs clear

forget finished jobs and remove their logs; a running job is kept

Changes something on this computer only.

wa store jobs clear

wa store export

a chat's stored messages, oldest first: --jsonl one message per line, --json the list envelope of messages; never asks the messenger

Changes something on this computer only.

wa store export [chat] [options]
ArgumentRequirementWhat it is
chatoptionala chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter); several with --output-dir.
OptionWhat it does
--format <format>jsonl: one message per line, the default with --output; markdown: a transcript with a heading per day, replies and forwards quoted.
--since-time <time>only from this ISO 8601 time, or 30m / 2h / 1d ago, on.
--output <file>write JSON lines, or the transcript, to this new file, readable only by you.
--output-dir <dir>write into this folder, a file per chat and a manifest; run again on it for only what changed since.
--include <kinds>with --output-dir: every stored chat of these kinds, comma-separated: dialog, group, channel, saved.
--allwith --output-dir: every stored chat of this account.
--encryptcompress and encrypt with a password, typed at a hidden prompt or piped on stdin; it is never kept — lose it and the file cannot be opened.

wa store clear

delete from the store the chats this account has left, with their messages

Changes something on this computer only.

wa store clear [options]
OptionWhat it does
--leftthe chats this account has left — the only thing this clears.
--allow-dangerousyes, delete — it cannot be undone, and a chat you left cannot be fetched again.
--dry-runlist the chats it would delete, and delete nothing.

wa store info

the store file: where it is, its size, its schema and how many rows it holds; changes nothing

wa store info

wa store check

whether the store is healthy — integrity, search indexes, disk, and which chats are behind

wa store check

wa store migrate

bring the store up to this build's schema, then normalize, index and stem the messages and notes stored before it

Changes something on this computer only.

wa store migrate

wa store rebuild

rebuild the word index, its typo vocabulary, the stems, the files' word index, the notes' indexes and who took part in what, from what is stored; loses nothing

Changes something on this computer only.

wa store rebuild

wa store backup

copy the store into a new file, while it is in use; never overwrites a file

Changes something on this computer only.

wa store backup <file> [options]
ArgumentRequirementWhat it is
filerequiredthe new file.
OptionWhat it does
--encryptcompress and encrypt with a password, typed at a hidden prompt or piped on stdin; it is never kept — lose it and the file cannot be opened.

wa store restore

put a backup in place of the store; the store it replaces is kept beside it, never deleted

Changes something on this computer only.

wa store restore <file>
ArgumentRequirementWhat it is
filerequireda file store backup wrote; one written with --encrypt asks for its password.

wa store decrypt

open a file written with --encrypt into a new file; asks for its password

Changes something on this computer only.

wa store decrypt <file> [options]
ArgumentRequirementWhat it is
filerequireda file store backup --encrypt or store export --encrypt wrote.
OptionWhat it does
--output <file>the new file, readable only by you.

wa store repair

bring every table to this build's shape, deleting nothing: a table of the wrong shape is kept as a copy beside a new one

Changes something on this computer only.

wa store repair [options]
OptionWhat it does
--dry-runsay what it would do, and change nothing.

wa store reset

back the store up beside itself, then delete it and start an empty one at this build's schema; asks first, or --yes

Changes something on this computer only.

wa store reset [options]
OptionWhat it does
--no-backupdelete the store without backing it up first.

wa store copies

the tables store repair kept as copies

wa store copies delete

delete one copy store repair kept, named exactly; refuses any other table

Changes something on this computer only.

wa store copies delete <name>
ArgumentRequirementWhat it is
namerequiredthe copy's name, as store repair printed it.

wa search runs

search recorded diagnostic metadata and events; literal words and field:value terms joined by AND; no message contents

wa search runs [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>matches per page, at most 100. Default: 20.
--page <n>result page. Default: 1.

wa flood

the waits WhatsApp asked this profile to keep, and a hold on its writes

wa flood clear

forget them, lift the hold and the profile's pace, once WhatsApp no longer limits the account; changes nothing there

Changes something on this computer only.

wa flood clear

wa runs

recorded runs — what this tool did, and when

wa runs list

recorded runs, newest first

wa runs list [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many to show. Default: 20.
--page <n>which page, starting at 1. Default: 1.

wa runs show

one run: what it was, how it ended, and every event it logged

wa runs show <run-id> [options]
ArgumentRequirementWhat it is
run-idrequiredan id from wa runs list.
OptionWhat it does
--problemsonly failed responses, warnings and crashes.

wa runs path

the directory holding one run

wa runs path <run-id>
ArgumentRequirementWhat it is
run-idrequiredan id from wa runs list.

wa config

the settings in force, and where each one came from

wa config show

the profile, the profiles that exist, and each setting with where it came from

wa config show [options]
OptionWhat it does
--botthe settings a bot command on this profile gets, rather than the personal account's.

wa config set

save a setting to the configuration file

Changes something on this computer only.

wa config set <setting> <value> [options]
ArgumentRequirementWhat it is
settingrequiredone of: limit, timeout_ms, color, sender_colors, record, keep_runs_for_days, permissions, sends_per_hour, requests_per_minute, transcribe_with, speech_model, search_catch_up, picture_search, embedding_provider, embedding_model, embedding_base_url, embedding_dims, analysis_provider, analysis_model, analysis_base_url, models, phone_number_id, waba_id, graph_version, read_other_bots, update_check, skill_hint, search_stemmers.cyrillic, search_stemmers.latin, phone_countries, task_categories., task_agent_close, task_agent_close_min, task_first_pass_per_chat, account_groups..
valuerequireda number, true or false, or for allow a list like send,reaction; for a group tg:work,max:Alice,email:me@x.
OptionWhat it does
--defaultschange what every profile gets, rather than this profile.
--personalonly for personal accounts — the personal section of the file.
--botonly for bots — the bot section of the file.

wa config unset

remove a setting from the configuration file

Changes something on this computer only.

wa config unset <setting> [options]
ArgumentRequirementWhat it is
settingrequiredone of: limit, timeout_ms, color, sender_colors, record, keep_runs_for_days, permissions, sends_per_hour, requests_per_minute, transcribe_with, speech_model, search_catch_up, picture_search, embedding_provider, embedding_model, embedding_base_url, embedding_dims, analysis_provider, analysis_model, analysis_base_url, models, phone_number_id, waba_id, graph_version, read_other_bots, update_check, skill_hint, default_profile, search_stemmers.cyrillic, search_stemmers.latin, phone_countries, task_categories., task_agent_close, task_agent_close_min, task_first_pass_per_chat, account_groups..
OptionWhat it does
--defaultschange what every profile gets, rather than this profile.
--personalonly for personal accounts — the personal section of the file.
--botonly for bots — the bot section of the file.

wa doctor

the state this installation is in, without connecting unless --online

wa doctor [options]
OptionWhat it does
--onlinealso connect once and read the account; sends nothing.

wa doctor reports

problem reports

wa doctor reports show

what a problem report holds; writes nothing

wa doctor reports show

wa doctor reports create

write a problem report to a file, and say where to send it

Changes something on this computer only.

wa doctor reports create [options]
OptionWhat it does
--run <id>the run the report is about; the newest failed one if not given.
--output <file>where to write it; a new file in this directory if not given.

wa commands

every command by section; --json prints its contract, one path per call

wa commands info

one command contract, or all schemas, error reasons and explicit overrides

wa commands info [path]
ArgumentRequirementWhat it is
pathoptionalone command path; without one, export schemas, error reasons and explicit overrides.

wa complete

shell completion: wa complete zsh prints the script to source

wa complete [words]
ArgumentRequirementWhat it is
wordsoptionalzsh for the shell script, or command words to complete.

wa upgrade

upgrade wa with the package manager that installed it; --check only looks

Changes something on this computer only.

wa upgrade [options]
OptionWhat it does
--checksay whether a newer version exists, and install nothing.

wa mcp

serve this profile to an agent over MCP, on stdin and stdout — claude mcp add wa -- wa <profile> mcp

Changes something in WhatsApp.

wa mcp [options]
OptionWhat it does
--permission <key=level>make a permission stricter for this server only, like messages.send=deny; it never loosens the profile; repeat for more keys.
--httpserve over HTTP on 127.0.0.1 for ChatGPT and Claude in the browser, behind your tunnel; the profile's permissions decide.
--port <port>the local port for --http (default 8765).
--public-url <url>the tunnel's https address the browser apps use, e.g. https://.ts.net.
--revokeforget every login given to a browser app; each must log in again.

wa mcp config

print the mcpServers entry for Claude Desktop, Cursor and others, with full paths; writes nothing

wa mcp config [options]
OptionWhat it does
--permission <key=level>make a permission stricter for this server only, like messages.send=deny; it never loosens the profile; repeat for more keys.

wa mcp add

add this profile's local MCP server to Codex or Claude Code

Changes something on this computer only.

wa mcp add <client> [options]
ArgumentRequirementWhat it is
clientrequiredcodex or claude-code.
OptionWhat it does
--allow-writesacknowledge that this profile offers writing tools.
--permission <key=level>make a permission stricter for this server only, like messages.send=deny; it never loosens the profile; repeat for more keys.

wa mcp check

check this profile's local MCP handshake and tool list

wa mcp check [options]
OptionWhat it does
--permission <key=level>make a permission stricter for this server only, like messages.send=deny; it never loosens the profile; repeat for more keys.

wa skill

the instructions an agent is given for this tool

wa skill show

print SKILL.md — wa skill install puts it where Claude Code, Codex and Gemini CLI look for it

wa skill show [name]
ArgumentRequirementWhat it is
nameoptionalone of the skills shipped for a task: follow-ups, link-conversations.

wa skill install

write SKILL.md to ~/.claude/skills/whatsapp-cli/ (Claude Code) and ~/.agents/skills/whatsapp-cli/ (Codex, Gemini CLI)

Changes something on this computer only.

wa skill install [options]
OptionWhat it does
--for <agents>which agents to install for. One of: claude, agents, all. Default: all.

Exit codes

Branch on the code, not on the text: the text can change, the code does not.

CodeWhen
0it worked
2validation_error
3configuration_error
4authentication_error
5permission_error
6not_found
7confirmation_required
8rate_limited
9timeout
10network_error
11provider_error
12provider_unavailable
13invalid_response
14outcome_unknown
130cancelled
1anything else

0 and only 0 means the operation was done. 14 (outcome_unknown) means a message may have gone: repeat it only with the same --operation-id, which WhatsApp uses to drop a second copy.